PDF rausgenommen

This commit is contained in:
aschwarz
2023-01-23 11:03:31 +01:00
parent 82d562a322
commit a6523903eb
28078 changed files with 4247552 additions and 2 deletions

View File

@@ -0,0 +1,245 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Dashboard;
use Piwik\API\Request;
use Piwik\Piwik;
/**
* This API is the <a href='http://matomo.org/docs/analytics-api/reference/' rel='noreferrer' target='_blank'>Dashboard API</a>: it gives information about dashboards.
*
* @method static \Piwik\Plugins\Dashboard\API getInstance()
*/
class API extends \Piwik\Plugin\API
{
private $dashboard = null;
private $model = null;
public function __construct(Dashboard $dashboard, Model $model)
{
$this->dashboard = $dashboard;
$this->model = $model;
}
/**
* Get each dashboard that belongs to a user including the containing widgets that are placed within each dashboard.
* If the user has not created any dashboard yet, the default dashboard will be returned unless
* $returnDefaultIfEmpty is set to `false`
*
* @param string $login Login of the user [defaults to current user]
* @param bool $returnDefaultIfEmpty disable return of default dashboard
*
* @return array[]
*/
public function getDashboards($login = '', $returnDefaultIfEmpty = true)
{
$login = $login ? $login : Piwik::getCurrentUserLogin();
$dashboards = [];
if (!Piwik::isUserIsAnonymous()) {
Piwik::checkUserHasSuperUserAccessOrIsTheUser($login);
$dashboards = $this->getUserDashboards($login);
}
if (empty($dashboards) && $returnDefaultIfEmpty) {
$dashboards = array($this->getDefaultDashboard());
}
return $dashboards;
}
/**
* Creates a new dashboard for the given login
*
* Note: Only a super user is able to create dashboards for other users
*
* @param string $login login of the user that dashboard should be created for
* @param string $dashboardName name of the new dashboard
* @param bool $addDefaultWidgets whether to add the current default widget collection or not
* @return int|string
*/
public function createNewDashboardForUser($login, $dashboardName = '', $addDefaultWidgets = true)
{
Piwik::checkUserHasSuperUserAccessOrIsTheUser($login);
$layout = '{}';
if ($addDefaultWidgets) {
$layout = $this->dashboard->getDefaultLayout();
}
return $this->model->createNewDashboardForUser($login, $dashboardName, $layout);
}
/**
* Removes a dashboard according to given dashboard id and login
*
* Note: Only a super user is able to remove dashboards for other users
*
* Also note: It is allowed to delete the first dashboard for a user, BUT
* that will cause buggy behavior if a new dashboard is not immediately added.
* Deleting the first dashboard (with ID = 1) should only be done for automation
* purposes.
*
* @param int $idDashboard id of the dashboard to be removed
* @param string $login Login of the dashboard user [defaults to current user]
*/
public function removeDashboard($idDashboard, $login='')
{
$login = $login ? $login : Piwik::getCurrentUserLogin();
Piwik::checkUserHasSuperUserAccessOrIsTheUser($login);
$this->model->deleteDashboardForUser($idDashboard, $login);
}
/**
* Copy a dashboard of current user to another user
*
* Note: current user needs super user access
*
* @param int $idDashboard Id of the dashboard that should be copied
* @param string $copyToUser User the dashboard should be copied to
* @param string $dashboardName Name of the new dashboard (defaults to 'Dashboard of {user}')
* @return int id of the new dashboard
* @throws \Exception if an error occurs, or dashboard can't be found
*/
public function copyDashboardToUser($idDashboard, $copyToUser, $dashboardName = '')
{
Piwik::checkUserHasSomeAdminAccess();
// get users only returns users of sites the current user has at least admin access to
$users = Request::processRequest('UsersManager.getUsers');
$userFound = false;
foreach ($users as $user) {
if ($user['login'] === $copyToUser) {
$userFound = true;
break;
}
}
if (!$userFound) {
throw new \Exception(sprintf('Cannot copy dashboard to user %s, user not found or user does not have access to same site.', $copyToUser));
}
$login = Piwik::getCurrentUserLogin();
$layout = $this->dashboard->getLayoutForUser($login, $idDashboard);
if ($layout !== false) {
return $this->model->createNewDashboardForUser($copyToUser, $dashboardName, $layout);
}
throw new \Exception('Dashboard not found');
}
/**
* Resets a dashboard to the default widget configuration
*
* Note: Only a super user is able to reset dashboards for other users
* @param int $idDashboard dashboard id
* @param string $login user the dashboard belongs
*
*/
public function resetDashboardLayout($idDashboard, $login='')
{
$login = $login ? $login : Piwik::getCurrentUserLogin();
Piwik::checkUserHasSuperUserAccessOrIsTheUser($login);
$layout = $this->dashboard->getDefaultLayout();
$this->model->updateLayoutForUser($login, $idDashboard, $layout);
}
/**
* Get the default dashboard.
* @return \array[]
*/
private function getDefaultDashboard()
{
$defaultLayout = $this->dashboard->getDefaultLayout();
$defaultLayout = $this->dashboard->decodeLayout($defaultLayout);
$defaultDashboard = array('name' => Piwik::translate('Dashboard_Dashboard'), 'layout' => $defaultLayout, 'iddashboard' => 1);
$widgets = $this->getVisibleWidgetsWithinDashboard($defaultDashboard);
return $this->buildDashboard($defaultDashboard, $widgets);
}
/**
* Get all dashboards which a user has created.
*
* @param string $userLogin login of the user
* @return \array[]
*/
private function getUserDashboards($userLogin)
{
$userDashboards = $this->dashboard->getAllDashboards($userLogin);
$dashboards = array();
foreach ($userDashboards as $userDashboard) {
$widgets = $this->getVisibleWidgetsWithinDashboard($userDashboard);
$dashboards[] = $this->buildDashboard($userDashboard, $widgets);
}
return $dashboards;
}
private function getVisibleWidgetsWithinDashboard($dashboard)
{
$columns = $this->getColumnsFromDashboard($dashboard);
$widgets = array();
$columns = array_filter($columns);
foreach ($columns as $column) {
foreach ($column as $widget) {
if ($this->widgetIsNotHidden($widget) && !empty($widget->parameters->module)) {
$module = $widget->parameters->module;
$action = $widget->parameters->action;
$widgets[] = array('module' => $module, 'action' => $action);
}
}
}
return $widgets;
}
private function getColumnsFromDashboard($dashboard)
{
if (empty($dashboard['layout'])) {
return array();
}
if (is_array($dashboard['layout'])) {
return $dashboard['layout'];
}
if (!empty($dashboard['layout']->columns)) {
return $dashboard['layout']->columns;
}
return array();
}
private function buildDashboard($dashboard, $widgets)
{
return array('name' => $dashboard['name'], 'id' => $dashboard['iddashboard'], 'widgets' => $widgets);
}
private function widgetIsNotHidden($widget)
{
return empty($widget->isHidden);
}
}

View File

@@ -0,0 +1,18 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Dashboard\Categories;
use Piwik\Category\Category;
class DashboardCategory extends Category
{
protected $id = 'Dashboard_Dashboard';
protected $order = 0;
protected $icon = 'icon-reporting-dashboard';
}

View File

@@ -0,0 +1,212 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Dashboard;
use Piwik\API\Request;
use Piwik\Common;
use Piwik\DataTable\Renderer\Json;
use Piwik\Db;
use Piwik\Piwik;
use Piwik\Session\SessionNamespace;
use Piwik\View;
/**
* Dashboard Controller
*
*/
class Controller extends \Piwik\Plugin\Controller
{
/**
* @var Dashboard
*/
private $dashboard;
protected function init()
{
parent::init();
$this->dashboard = new Dashboard();
}
protected function _getDashboardView($template)
{
$view = new View($template);
$this->setGeneralVariablesView($view);
$view->availableLayouts = $this->getAvailableLayouts();
$view->hasSomeAdminAccess = Piwik::isUserHasSomeAdminAccess();
$view->dashboardId = Common::getRequestVar('idDashboard', 1, 'int');
return $view;
}
// this
public function embeddedIndex()
{
$view = $this->_getDashboardView('@Dashboard/embeddedIndex');
return $view->render();
}
// this is the exported widget
public function index()
{
$view = $this->_getDashboardView('@Dashboard/index');
$view->dashboardSettingsControl = new DashboardManagerControl();
$view->hasSomeAdminAccess = Piwik::isUserHasSomeAdminAccess();
$view->dashboards = array();
if (!Piwik::isUserIsAnonymous()) {
$login = Piwik::getCurrentUserLogin();
$view->dashboards = $this->dashboard->getAllDashboards($login);
}
return $view->render();
}
public function getDashboardLayout($checkToken = true)
{
if ($checkToken) {
$this->checkTokenInUrl();
}
$idDashboard = Common::getRequestVar('idDashboard', 1, 'int');
$layout = $this->getLayout($idDashboard);
Json::sendHeaderJSON();
return $layout;
}
/**
* Resets the dashboard to the default widget configuration
*/
public function resetLayout()
{
$this->checkTokenInUrl();
if (Piwik::isUserIsAnonymous()) {
$session = new SessionNamespace("Dashboard");
$session->dashboardLayout = $this->dashboard->getDefaultLayout();
$session->setExpirationSeconds(1800);
} else {
Request::processRequest('Dashboard.resetDashboardLayout');
}
}
private function getModel()
{
return new Model();
}
/**
* Outputs all available dashboards for the current user as a JSON string
*/
public function getAllDashboards()
{
$this->checkTokenInUrl();
if (Piwik::isUserIsAnonymous()) {
Json::sendHeaderJSON();
return '[]';
}
$login = Piwik::getCurrentUserLogin();
$dashboards = $this->dashboard->getAllDashboards($login);
Json::sendHeaderJSON();
return json_encode($dashboards);
}
/**
* Saves the layout for the current user
* anonymous = in the session
* authenticated user = in the DB
*/
public function saveLayout()
{
$this->checkTokenInUrl();
$layout = Common::unsanitizeInputValue(Common::getRequestVar('layout'));
$layout = strip_tags($layout);
$idDashboard = Common::getRequestVar('idDashboard', 1, 'int');
$name = Common::getRequestVar('name', '', 'string');
if (Piwik::isUserIsAnonymous()) {
$session = new SessionNamespace("Dashboard");
$session->dashboardLayout = $layout;
$session->setExpirationSeconds(1800);
} else {
$this->getModel()->createOrUpdateDashboard(Piwik::getCurrentUserLogin(), $idDashboard, $layout);
if (!empty($name)) {
$this->getModel()->updateDashboardName(Piwik::getCurrentUserLogin(), $idDashboard, $name);
}
}
}
/**
* Saves the layout as default
*/
public function saveLayoutAsDefault()
{
$this->checkTokenInUrl();
if (Piwik::hasUserSuperUserAccess()) {
$layout = Common::unsanitizeInputValue(Common::getRequestVar('layout'));
$layout = strip_tags($layout);
$this->getModel()->createOrUpdateDashboard('', '1', $layout);
}
}
/**
* Get the dashboard layout for the current user (anonymous or logged user)
*
* @param int $idDashboard
*
* @return string $layout
*/
protected function getLayout($idDashboard)
{
if (Piwik::isUserIsAnonymous()) {
$session = new SessionNamespace("Dashboard");
if (!isset($session->dashboardLayout)) {
return $this->dashboard->getDefaultLayout();
}
$layout = $session->dashboardLayout;
} else {
$layout = $this->dashboard->getLayoutForUser(Piwik::getCurrentUserLogin(), $idDashboard);
}
if (empty($layout)) {
$layout = $this->dashboard->getDefaultLayout();
}
if (!empty($layout)) {
$layout = $this->dashboard->removeDisabledPluginFromLayout($layout);
}
return $layout;
}
/**
* Returns all available column layouts for the dashboard
*
* @return array
*/
protected function getAvailableLayouts()
{
return array(
array(100),
array(50, 50), array(67, 33), array(33, 67),
array(33, 33, 33), array(40, 30, 30), array(30, 40, 30), array(30, 30, 40),
array(25, 25, 25, 25)
);
}
}

View File

@@ -0,0 +1,322 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Dashboard;
use Piwik\API\Request;
use Piwik\Common;
use Piwik\Container\StaticContainer;
use Piwik\Piwik;
use Piwik\Category\Subcategory;
use Piwik\Widget\WidgetConfig;
use Piwik\Plugin;
/**
*/
class Dashboard extends \Piwik\Plugin
{
/**
* @see \Piwik\Plugin::registerEvents
*/
public function registerEvents()
{
return array(
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'UsersManager.deleteUser' => 'deleteDashboardLayout',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
'Widget.addWidgetConfigs' => 'addWidgetConfigs',
'Category.addSubcategories' => 'addSubcategories',
'Widgetize.shouldEmbedIframeEmpty' => 'shouldEmbedIframeEmpty'
);
}
public function shouldEmbedIframeEmpty(&$shouldEmbedEmpty, $controllerName, $actionName)
{
if ($controllerName == 'Dashboard' && $actionName == 'index') {
$shouldEmbedEmpty = true;
}
}
public function addWidgetConfigs(&$widgets)
{
if (Piwik::isUserIsAnonymous()) {
$this->addDefaultDashboard($widgets);
} else {
$dashboards = $this->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 getDashboards()
{
return Request::processRequest('Dashboard.getDashboards',
['filter_limit' => '-1', 'filter_offset' => 0],
[]
);
}
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)
{
if (Piwik::isUserIsAnonymous()) {
$this->addDefaultSubcategory($subcategories);
} else {
$dashboards = $this->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
*
* @param string $login
* @param int $idDashboard
*
* @return bool|string
*/
public function getLayoutForUser($login, $idDashboard)
{
$return = $this->getModel()->getLayoutForUser($login, $idDashboard);
if (count($return) == 0) {
return false;
}
return $return[0]['layout'];
}
private function getModel()
{
return new Model();
}
public function getDefaultLayout()
{
$defaultLayout = $this->getLayoutForUser('', 1);
if (empty($defaultLayout)) {
$advertisingWidget = '';
$advertising = StaticContainer::get('Piwik\ProfessionalServices\Advertising');
if ($advertising->areAdsForProfessionalServicesEnabled() && Plugin\Manager::getInstance()->isPluginActivated('ProfessionalServices')) {
$advertisingWidget = '{"uniqueId":"widgetProfessionalServicespromoServices","parameters":{"module":"ProfessionalServices","action":"promoServices"}},';
}
if (Piwik::hasUserSuperUserAccess()) {
$piwikPromoWidget = '{"uniqueId":"widgetCoreHomegetDonateForm","parameters":{"module":"CoreHome","action":"getDonateForm"}}';
} else {
$piwikPromoWidget = '{"uniqueId":"widgetCoreHomegetPromoVideo","parameters":{"module":"CoreHome","action":"getPromoVideo"}}';
}
$defaultLayout = '[
[
{"uniqueId":"widgetLivewidget","parameters":{"module":"Live","action":"widget"}},
' . $piwikPromoWidget . '
],
[
{"uniqueId":"widgetVisitsSummarygetEvolutionGraphforceView1viewDataTablegraphEvolution","parameters":{"forceView":"1","viewDataTable":"graphEvolution","module":"VisitsSummary","action":"getEvolutionGraph"}},
' . $advertisingWidget . '
{"uniqueId":"widgetVisitsSummarygetforceView1viewDataTablesparklines","parameters":{"forceView":"1","viewDataTable":"sparklines","module":"VisitsSummary","action":"get"}}
],
[
{"uniqueId":"widgetUserCountryMapvisitorMap","parameters":{"module":"UserCountryMap","action":"visitorMap"}},
{"uniqueId":"widgetReferrersgetReferrerType","parameters":{"module":"Referrers","action":"getReferrerType"}},
{"uniqueId":"widgetRssWidgetrssPiwik","parameters":{"module":"RssWidget","action":"rssPiwik"}}
]
]';
}
/**
* Allows other plugins to modify the default dashboard layout.
*
* @param string &$defaultLayout JSON encoded string of the default dashboard layout. Contains an
* array of columns where each column is an array of widgets. Each
* widget is an associative array w/ the following elements:
*
* * **uniqueId**: The widget's unique ID.
* * **parameters**: The array of query parameters that should be used to get this widget's report.
*/
Piwik::postEvent("Dashboard.changeDefaultDashboardLayout", array(&$defaultLayout));
$defaultLayout = $this->removeDisabledPluginFromLayout($defaultLayout);
return $defaultLayout;
}
public function getAllDashboards($login)
{
$dashboards = $this->getModel()->getAllDashboardsForUser($login);
$nameless = 1;
foreach ($dashboards as &$dashboard) {
if (empty($dashboard['name'])) {
$dashboard['name'] = Piwik::translate('Dashboard_DashboardOf', $login);
if ($nameless > 1) {
$dashboard['name'] .= " ($nameless)";
}
$nameless++;
}
$dashboard['name'] = Common::unsanitizeInputValue($dashboard['name']);
$layout = '[]';
if (!empty($dashboard['layout'])) {
$layout = $dashboard['layout'];
}
$dashboard['layout'] = $this->decodeLayout($layout);
}
return $dashboards;
}
private function isAlreadyDecodedLayout($layout)
{
return !is_string($layout);
}
public function removeDisabledPluginFromLayout($layout)
{
$layoutObject = $this->decodeLayout($layout);
// if the json decoding works (ie. new Json format)
// we will only return the widgets that are from enabled plugins
if (is_array($layoutObject)) {
$layoutObject = (object)array(
'config' => array('layout' => '33-33-33'),
'columns' => $layoutObject
);
}
if (empty($layoutObject) || empty($layoutObject->columns)) {
$layoutObject = (object)array(
'config' => array('layout' => '33-33-33'),
'columns' => array()
);
}
$layout = $this->encodeLayout($layoutObject);
return $layout;
}
public function decodeLayout($layout)
{
if ($this->isAlreadyDecodedLayout($layout)) {
return $layout;
}
$layout = html_entity_decode($layout, ENT_COMPAT | ENT_HTML401, 'UTF-8');
$layout = str_replace("\\\"", "\"", $layout);
$layout = str_replace("\n", "", $layout);
return json_decode($layout, $assoc = false);
}
public function encodeLayout($layout)
{
return json_encode($layout);
}
public function getJsFiles(&$jsFiles)
{
$jsFiles[] = "plugins/Dashboard/angularjs/common/services/dashboards-model.js";
$jsFiles[] = "plugins/Dashboard/javascripts/widgetMenu.js";
$jsFiles[] = "libs/javascript/json2.js";
$jsFiles[] = "plugins/Dashboard/javascripts/dashboardObject.js";
$jsFiles[] = "plugins/Dashboard/javascripts/dashboardWidget.js";
$jsFiles[] = "plugins/Dashboard/javascripts/dashboard.js";
$jsFiles[] = "plugins/Dashboard/angularjs/dashboard/dashboard.directive.js";
}
public function getStylesheetFiles(&$stylesheets)
{
$stylesheets[] = "plugins/CoreHome/stylesheets/dataTable.less";
$stylesheets[] = "plugins/Dashboard/stylesheets/dashboard.less";
$stylesheets[] = "plugins/Dashboard/stylesheets/widget.less";
}
public function deleteDashboardLayout($userLogin)
{
$this->getModel()->deleteAllLayoutsForUser($userLogin);
}
public function install()
{
Model::install();
}
public function uninstall()
{
Model::uninstall();
}
public function getClientSideTranslationKeys(&$translationKeys)
{
$translationKeys[] = 'Dashboard_AddPreviewedWidget';
$translationKeys[] = 'Dashboard_WidgetPreview';
$translationKeys[] = 'Dashboard_Maximise';
$translationKeys[] = 'Dashboard_Minimise';
$translationKeys[] = 'Dashboard_LoadingWidget';
$translationKeys[] = 'Dashboard_WidgetNotFound';
$translationKeys[] = 'Dashboard_DashboardCopied';
$translationKeys[] = 'Dashboard_Dashboard';
$translationKeys[] = 'Dashboard_RemoveDefaultDashboardNotPossible';
$translationKeys[] = 'General_Close';
$translationKeys[] = 'General_Refresh';
}
}

View File

@@ -0,0 +1,55 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Dashboard;
use Piwik\Piwik;
/**
* Generates the HTML for the dashboard manager control.
*/
class DashboardManagerControl extends DashboardSettingsControlBase
{
/**
* Constructor.
*/
public function __construct()
{
parent::__construct();
$this->jsClass = "DashboardManagerControl";
$this->cssIdentifier = "dashboard-manager piwikSelector";
$this->addDashboardActions();
$this->addGeneralActions();
}
private function addDashboardActions()
{
$this->dashboardActions['resetDashboard'] = 'Dashboard_ResetDashboard';
$this->dashboardActions['showChangeDashboardLayoutDialog'] = 'Dashboard_ChangeDashboardLayout';
if ($this->userLogin && $this->userLogin != 'anonymous') {
$this->dashboardActions['renameDashboard'] = 'Dashboard_RenameDashboard';
$this->dashboardActions['removeDashboard'] = 'Dashboard_RemoveDashboard';
if ($this->isSuperUser) {
$this->dashboardActions['setAsDefaultWidgets'] = 'Dashboard_SetAsDefaultWidgets';
}
if (Piwik::isUserHasSomeAdminAccess()) {
$this->dashboardActions['copyDashboardToUser'] = 'Dashboard_CopyDashboardToUser';
}
}
}
private function addGeneralActions()
{
if ($this->userLogin && $this->userLogin != 'anonymous') {
$this->generalActions['createDashboard'] = 'Dashboard_CreateNewDashboard';
}
}
}

View File

@@ -0,0 +1,31 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Dashboard;
use Piwik\View\UIControl;
/**
* Generates the HTML for the dashboard manager control.
*/
abstract class DashboardSettingsControlBase extends UIControl
{
const TEMPLATE = "@Dashboard/_dashboardSettings";
/**
* Constructor.
*/
public function __construct()
{
parent::__construct();
$this->cssClass = "borderedControl piwikTopControl dashboardSettings";
$this->htmlAttributes = array('piwik-expand-on-click' => '');
$this->dashboardActions = array();
$this->generalActions = array();
}
}

View File

@@ -0,0 +1,31 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*
*/
namespace Piwik\Plugins\Dashboard;
use Piwik\Db;
use Piwik\Menu\MenuTop;
use Piwik\Piwik;
use Piwik\Plugins\UsersManager\UserPreferences;
use Piwik\Site;
/**
*/
class Menu extends \Piwik\Plugin\Menu
{
public function configureTopMenu(MenuTop $menu)
{
$userPreferences = new UserPreferences();
$idSite = $userPreferences->getDefaultWebsiteId();
$tooltip = Piwik::translate('Dashboard_TopLinkTooltip', Site::getNameFor($idSite));
$urlParams = $this->urlForModuleActionWithDefaultUserParams('CoreHome', 'index') ;
$menu->addItem('Dashboard_Dashboard', null, $urlParams, 1, $tooltip);
}
}

View File

@@ -0,0 +1,249 @@
<?php
/**
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
namespace Piwik\Plugins\Dashboard;
use Piwik\Common;
use Piwik\Db;
use Piwik\DbHelper;
use Piwik\Widget\WidgetsList;
class Model
{
private static $rawPrefix = 'user_dashboard';
private $table;
public function __construct()
{
$this->table = Common::prefixTable(self::$rawPrefix);
}
/**
* 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
*
* @param string $login
* @param int $idDashboard
*
* @return bool|string
*/
public function getLayoutForUser($login, $idDashboard)
{
$query = sprintf('SELECT layout FROM %s WHERE login = ? AND iddashboard = ?',
$this->table);
$bind = array($login, $idDashboard);
$layouts = Db::fetchAll($query, $bind);
return $layouts;
}
public function getAllDashboardsForUser($login)
{
$dashboards = Db::fetchAll('SELECT iddashboard, name, layout FROM ' . $this->table .
' WHERE login = ? ORDER BY iddashboard', array($login));
return $dashboards;
}
public function deleteAllLayoutsForUser($userLogin)
{
Db::query('DELETE FROM ' . $this->table . ' WHERE login = ?', array($userLogin));
}
/**
* Updates the name of a dashboard
*
* @param string $login
* @param int $idDashboard
* @param string $name
*/
public function updateDashboardName($login, $idDashboard, $name)
{
$bind = array($name, $login, $idDashboard);
$query = sprintf('UPDATE %s SET name = ? WHERE login = ? AND iddashboard = ?', $this->table);
Db::query($query, $bind);
}
/**
* Removes the dashboard with the given id
*/
public function deleteDashboardForUser($idDashboard, $login)
{
$query = sprintf('DELETE FROM %s WHERE iddashboard = ? AND login = ?', $this->table);
Db::query($query, array($idDashboard, $login));
}
/**
* Creates a new dashboard for the current user
* User needs to be logged in
*/
public function createNewDashboardForUser($login, $name, $layout)
{
$nextId = $this->getNextIdDashboard($login);
$query = sprintf('INSERT INTO %s (login, iddashboard, name, layout) VALUES (?, ?, ?, ?)', $this->table);
$bind = array($login, $nextId, $name, $layout);
Db::query($query, $bind);
return $nextId;
}
/**
* Saves the layout as default
*/
public function createOrUpdateDashboard($login, $idDashboard, $layout)
{
$bind = array($login, $idDashboard, $layout, $layout);
$query = sprintf('INSERT INTO %s (login, iddashboard, layout) VALUES (?,?,?) ON DUPLICATE KEY UPDATE layout=?',
$this->table);
Db::query($query, $bind);
}
private function getNextIdDashboard($login)
{
$nextIdQuery = sprintf('SELECT MAX(iddashboard)+1 FROM %s WHERE login = ?', $this->table);
$nextId = Db::fetchOne($nextIdQuery, array($login));
if (empty($nextId)) {
$nextId = 1;
}
return $nextId;
}
/**
* Records the layout in the DB for the given user.
*
* @param string $login
* @param int $idDashboard
* @param string $layout
*/
public function updateLayoutForUser($login, $idDashboard, $layout)
{
$bind = array($login, $idDashboard, $layout, $layout);
$query = sprintf('INSERT INTO %s (login, iddashboard, layout) VALUES (?,?,?) ON DUPLICATE KEY UPDATE layout=?',
$this->table);
Db::query($query, $bind);
}
public static function install()
{
$dashboard = "login VARCHAR( 100 ) NOT NULL ,
iddashboard INT NOT NULL ,
name VARCHAR( 100 ) NULL DEFAULT NULL ,
layout TEXT NOT NULL,
PRIMARY KEY ( login , iddashboard )";
DbHelper::createTable(self::$rawPrefix, $dashboard);
}
public static function uninstall()
{
Db::dropTables(Common::prefixTable(self::$rawPrefix));
}
/**
* Replaces widgets on the given dashboard layout with other ones
*
* It uses the given widget definitions to find the old and to create the new widgets
* Each widget is defined with an array containing the following information
* array (
* 'module' => string
* 'action' => string
* 'params' => array()
* )
*
* if $newWidget does not contain a widget definition at the current position,
* the old widget will simply be removed
*
* @param array $oldWidgets array containing widget definitions
* @param array $newWidgets array containing widget definitions
*/
public static function replaceDashboardWidgets($dashboardLayout, $oldWidgets, $newWidgets)
{
if (empty($dashboardLayout) || !isset($dashboardLayout->columns)) {
return $dashboardLayout;
}
$newColumns = array();
foreach ($dashboardLayout->columns as $id => $column) {
$newColumn = array();
foreach ($column as $widget) {
foreach ($oldWidgets AS $pos => $oldWidgetData) {
$oldWidgetId = WidgetsList::getWidgetUniqueId($oldWidgetData['module'], $oldWidgetData['action'], $oldWidgetData['params']);
if (empty($newWidgets[$pos])) {
continue 2;
}
$newWidget = $newWidgets[$pos];
if ($widget->uniqueId == $oldWidgetId) {
if (!empty($newWidget['uniqueId'])) {
$newWidgetId = $newWidget['uniqueId'];
} else {
$newWidgetId = WidgetsList::getWidgetUniqueId($newWidget['module'], $newWidget['action'], $newWidget['params']);
}
// is new widget already is on dashboard just remove the old one
if (self::layoutContainsWidget($dashboardLayout, $newWidgetId)) {
continue 2;
}
$widget->uniqueId = $newWidgetId;
$widget->parameters->module = $newWidget['module'];
$widget->parameters->action = $newWidget['action'];
foreach ($newWidget['params'] as $key => $value) {
$widget->parameters->{$key} = $value;
}
}
}
$newColumn[] = $widget;
}
$newColumns[] = $newColumn;
}
$dashboardLayout->columns = $newColumns;
return $dashboardLayout;
}
/**
* Checks if a given dashboard layout contains a given widget
*
* @param $dashboardLayout
* @param $widgetId
* @return bool
*/
protected static function layoutContainsWidget($dashboardLayout, $widgetId)
{
if (!isset($dashboardLayout->columns)) {
return false;
}
foreach ($dashboardLayout->columns as $id => $column) {
foreach ($column as $widget) {
if ($widget->uniqueId == $widgetId) {
return true;
}
}
}
return false;
}
}

View File

@@ -0,0 +1,70 @@
/*!
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
(function () {
angular.module('piwikApp.service').factory('dashboardsModel', dashboardsModel);
dashboardsModel.$inject = ['piwikApi'];
function dashboardsModel (piwikApi) {
var dashboardsPromise = null;
var model = {
dashboards: [],
getAllDashboards: getAllDashboards,
reloadAllDashboards: reloadAllDashboards,
getDashboard: getDashboard,
getDashboardLayout: getDashboardLayout
};
return model;
function getDashboard(dashboardId)
{
return getAllDashboards().then(function (dashboards) {
var dashboard = null;
angular.forEach(dashboards, function (board) {
if (parseInt(board.id, 10) === parseInt(dashboardId, 10)) {
dashboard = board;
}
});
return dashboard;
});
}
function getDashboardLayout(dashboardId)
{
piwikApi.withTokenInUrl();
return piwikApi.fetch({module: 'Dashboard', action: 'getDashboardLayout', idDashboard: dashboardId});
}
function reloadAllDashboards()
{
if (dashboardsPromise) {
dashboardsPromise = null;
}
return getAllDashboards();
}
function getAllDashboards()
{
if (!dashboardsPromise) {
dashboardsPromise = piwikApi.fetch({method: 'Dashboard.getDashboards', filter_limit: '-1'}).then(function (response) {
if (response) {
model.dashboards = response;
}
return response;
});
}
return dashboardsPromise;
}
}
})();

View File

@@ -0,0 +1,113 @@
/*!
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
/**
* <div piwik-dashboard dashboard-id="5"></div>
*/
(function () {
angular.module('piwikApp').directive('piwikDashboard', piwikDashboard);
piwikDashboard.$inject = ['dashboardsModel', '$rootScope', '$q'];
function piwikDashboard(dashboardsModel, $rootScope, $q) {
function renderDashboard(dashboardId, dashboard, layout)
{
$('.dashboardSettings').show();
initTopControls();
// Embed dashboard / exported as widget
if (!$('#topBars').length) {
$('.dashboardSettings').after($('#Dashboard'));
$('#Dashboard ul li').removeClass('active');
$('#Dashboard_embeddedIndex_' + dashboardId).addClass('active');
}
widgetsHelper.getAvailableWidgets();
$('#dashboardWidgetsArea').off('dashboardempty', showEmptyDashboardNotification);
$('#dashboardWidgetsArea')
.on('dashboardempty', showEmptyDashboardNotification)
.dashboard({
idDashboard: dashboardId,
layout: layout,
name: dashboard ? dashboard.name : ''
});
var divElements = $('#columnPreview').find('>div');
divElements.each(function () {
var width = [];
$('div', this).each(function () {
width.push(this.className.replace(/width-/, ''));
});
$(this).attr('layout', width.join('-'));
});
divElements.off('click.renderDashboard');
divElements.on('click.renderDashboard', function () {
divElements.removeClass('choosen');
$(this).addClass('choosen');
});
}
function fetchDashboard(dashboardId) {
var dashboardElement = $('#dashboardWidgetsArea');
dashboardElement.dashboard('destroyWidgets');
dashboardElement.empty();
globalAjaxQueue.abort();
var getDashboard = dashboardsModel.getDashboard(dashboardId);
var getLayout = dashboardsModel.getDashboardLayout(dashboardId);
return $q.all([getDashboard, getLayout]).then(function (response) {
var dashboard = response[0];
var layout = response[1];
$(function() {
renderDashboard(dashboardId, dashboard, layout);
});
});
}
function clearDashboard () {
$('.top_controls .dashboard-manager').hide();
$('#dashboardWidgetsArea').dashboard('destroy');
}
return {
restrict: 'A',
scope: {
dashboardid: '=',
layout: '='
},
link: function (scope, element, attrs) {
scope.$parent.fetchDashboard = function (dashboardId) {
scope.dashboardId = dashboardId;
return fetchDashboard(dashboardId)
};
fetchDashboard(scope.dashboardid);
function onLocationChange(event, newUrl, oldUrl)
{
if (broadcast.getValueFromUrl('module') != 'Widgetize' && newUrl !== oldUrl &&
newUrl.indexOf('category=Dashboard_Dashboard') === -1) {
// we remove the dashboard only if we no longer show a dashboard.
clearDashboard();
}
}
// should be rather handled in route or so.
var unbind = $rootScope.$on('$locationChangeSuccess', onLocationChange);
scope.$on('$destroy', onLocationChange);
scope.$on('$destroy', unbind);
}
};
}
})();

View File

@@ -0,0 +1,317 @@
/*!
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
function createDashboard() {
$(makeSelectorLastId('createDashboardName')).val('');
piwikHelper.modalConfirm(makeSelectorLastId('createDashboardConfirm'), {yes: function () {
var dashboardName = $(makeSelectorLastId('createDashboardName')).val();
var addDefaultWidgets = ($('[id=dashboard_type_empty]:last:checked').length > 0) ? 0 : 1;
var ajaxRequest = new ajaxHelper();
ajaxRequest.setLoadingElement();
ajaxRequest.withTokenInUrl();
ajaxRequest.addParams({
module: 'API',
method: 'Dashboard.createNewDashboardForUser',
format: 'json'
}, 'get');
ajaxRequest.addParams({
dashboardName: encodeURIComponent(dashboardName),
addDefaultWidgets: addDefaultWidgets,
login: piwik.userLogin
}, 'post');
ajaxRequest.setCallback(
function (response) {
var id = response.value;
angular.element(document).injector().invoke(function ($location, reportingMenuModel, dashboardsModel) {
dashboardsModel.reloadAllDashboards().then(function () {
$('#dashboardWidgetsArea').dashboard('loadDashboard', id);
$('#dashboardWidgetsArea').dashboard('rebuildMenu');
});
});
}
);
ajaxRequest.send();
}});
}
function makeSelectorLastId(domElementId)
{
// there can be many elements with this id, we prefer the last one
return '[id=' + domElementId + ']:last';
}
function resetDashboard() {
piwikHelper.modalConfirm(makeSelectorLastId('resetDashboardConfirm'), {yes:
function () { $('#dashboardWidgetsArea').dashboard('resetLayout');
}});
}
function renameDashboard() {
$(makeSelectorLastId('newDashboardName')).val($('#dashboardWidgetsArea').dashboard('getDashboardName'));
piwikHelper.modalConfirm(makeSelectorLastId('renameDashboardConfirm'), {yes: function () {
var newDashboardName = $(makeSelectorLastId('newDashboardName')).val();
$('#dashboardWidgetsArea').dashboard('setDashboardName', newDashboardName);
}});
}
function removeDashboard() {
$(makeSelectorLastId('removeDashboardConfirm')).find('h2 span').text($('#dashboardWidgetsArea').dashboard('getDashboardName'));
piwikHelper.modalConfirm(makeSelectorLastId('removeDashboardConfirm'), {yes: function () {
$('#dashboardWidgetsArea').dashboard('removeDashboard');
}});
}
function showChangeDashboardLayoutDialog() {
$('#columnPreview').find('>div').removeClass('choosen');
$('#columnPreview').find('>div[layout=' + $('#dashboardWidgetsArea').dashboard('getColumnLayout') + ']').addClass('choosen');
var id = makeSelectorLastId('changeDashboardLayout');
piwikHelper.modalConfirm(id, {yes: function () {
var layout = $(id).find('.choosen').attr('layout');
$('#dashboardWidgetsArea').dashboard('setColumnLayout', layout);
}}, {fixedFooter: true});
}
function showEmptyDashboardNotification() {
piwikHelper.modalConfirm(makeSelectorLastId('dashboardEmptyNotification'), {
resetDashboard: function () { $('#dashboardWidgetsArea').dashboard('resetLayout'); },
addWidget: function () { $('.dashboardSettings > a').trigger('click'); }
});
}
function setAsDefaultWidgets() {
piwikHelper.modalConfirm(makeSelectorLastId('setAsDefaultWidgetsConfirm'), {
yes: function () {
$('#dashboardWidgetsArea').dashboard('saveLayoutAsDefaultWidgetLayout');
}
});
}
function copyDashboardToUser() {
$(makeSelectorLastId('copyDashboardName')).val($('#dashboardWidgetsArea').dashboard('getDashboardName'));
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams({
module: 'API',
method: 'UsersManager.getUsers',
format: 'json',
filter_limit: '-1'
}, 'get');
ajaxRequest.setCallback(
function (availableUsers) {
$(makeSelectorLastId('copyDashboardUser')).empty();
$(makeSelectorLastId('copyDashboardUser')).append(
$('<option></option>').val(piwik.userLogin).text(piwik.userLogin)
);
$.each(availableUsers, function (index, user) {
if (user.login != 'anonymous' && user.login != piwik.userLogin) {
$(makeSelectorLastId('copyDashboardUser')).append(
$('<option></option>').val(user.login).text(user.login + ' (' + user.alias + ')')
);
}
});
}
);
ajaxRequest.send();
piwikHelper.modalConfirm(makeSelectorLastId('copyDashboardToUserConfirm'), {
yes: function () {
var copyDashboardName = $(makeSelectorLastId('copyDashboardName')).val();
var copyDashboardUser = $(makeSelectorLastId('copyDashboardUser')).val();
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams({
module: 'API',
method: 'Dashboard.copyDashboardToUser',
format: 'json'
}, 'get');
ajaxRequest.addParams({
dashboardName: encodeURIComponent(copyDashboardName),
idDashboard: $('#dashboardWidgetsArea').dashboard('getDashboardId'),
copyToUser: encodeURIComponent(copyDashboardUser)
}, 'post');
ajaxRequest.setCallback(
function (response) {
$('#alert').find('h2').text(_pk_translate('Dashboard_DashboardCopied'));
piwikHelper.modalConfirm('#alert', {});
}
);
ajaxRequest.withTokenInUrl();
ajaxRequest.send();
}
});
}
(function () {
var exports = window.require('piwik/UI');
var UIControl = exports.UIControl;
/**
* Contains logic common to all dashboard management controls. This is the JavaScript analog of
* the DashboardSettingsControlBase PHP class.
*
* @param {Element} element The HTML element generated by the SegmentSelectorControl PHP class. Should
* have the CSS class 'segmentEditorPanel'.
* @constructor
*/
var DashboardSettingsControlBase = function (element) {
UIControl.call(this, element);
// on menu item click, trigger action event on this
var self = this;
this.$element.on('click', 'ul.submenu li[data-action]', function (e) {
if (!$(this).attr('disabled')) {
self.$element.removeClass('expanded');
$(self).trigger($(this).attr('data-action'));
}
});
// open manager on open
this.$element.on('click', function (e) {
if ($(e.target).is('.dashboardSettings') || $(e.target).closest('.dashboardSettings').length) {
self.onOpen();
}
});
// handle manager close
this.onBodyMouseUp = function (e) {
if (!$(e.target).closest('.dashboardSettings').length
&& !$(e.target).is('.dashboardSettings')
) {
self.$element.widgetPreview('reset');
self.$element.removeClass('expanded');
}
};
$('body').on('mouseup', this.onBodyMouseUp);
// setup widgetPreview
this.$element.widgetPreview({
isWidgetAvailable: function (widgetUniqueId) {
return self.isWidgetAvailable(widgetUniqueId);
},
onSelect: function (widgetUniqueId) {
widgetsHelper.getWidgetObjectFromUniqueId(widgetUniqueId, function(widget){
self.$element.removeClass('expanded');
self.widgetSelected(widget);
});
},
resetOnSelect: true
});
// on enter widget list category, reset widget preview
this.$element.on('mouseenter', '.submenu > li', function (event) {
if (!$('.widgetpreview-categorylist', event.target).length) {
self.$element.widgetPreview('reset');
}
});
};
$.extend(DashboardSettingsControlBase.prototype, UIControl.prototype, {
_destroy: function () {
UIControl.prototype._destroy.call(this);
$('body').off('mouseup', null, this.onBodyMouseUp);
}
});
exports.DashboardSettingsControlBase = DashboardSettingsControlBase;
/**
* Sets up and handles events for the dashboard manager control.
*
* @param {Element} element The HTML element generated by the SegmentSelectorControl PHP class. Should
* have the CSS class 'segmentEditorPanel'.
* @constructor
*/
var DashboardManagerControl = function (element) {
DashboardSettingsControlBase.call(this, element);
$(this).on('resetDashboard', function () {
this.hide();
resetDashboard();
});
$(this).on('showChangeDashboardLayoutDialog', function () {
this.hide();
showChangeDashboardLayoutDialog();
});
$(this).on('renameDashboard', function () {
this.hide();
renameDashboard();
});
$(this).on('removeDashboard', function () {
this.hide();
removeDashboard();
});
$(this).on('setAsDefaultWidgets', function () {
this.hide();
setAsDefaultWidgets();
});
$(this).on('copyDashboardToUser', function () {
this.hide();
copyDashboardToUser();
});
$(this).on('createDashboard', function () {
this.hide();
createDashboard();
});
};
$.extend(DashboardManagerControl.prototype, DashboardSettingsControlBase.prototype, {
onOpen: function () {
if ($('#dashboardWidgetsArea').dashboard('isDefaultDashboard')) {
$('[data-action=removeDashboard]', this.$element).attr('disabled', 'disabled');
$(this.$element).tooltip({
items: '[data-action=removeDashboard]',
show: false,
hide: false,
track: true,
content: function() {
return _pk_translate('Dashboard_RemoveDefaultDashboardNotPossible')
},
tooltipClass: 'small'
});
} else {
$('[data-action=removeDashboard]', this.$element).removeAttr('disabled');
// try to remove tooltip if any
try {
$(this.$element).tooltip('destroy');
} catch (e) { }
}
},
hide: function () {
this.$element.removeClass('expanded');
},
isWidgetAvailable: function (widgetUniqueId) {
return !$('#dashboardWidgetsArea').find('[widgetId="' + widgetUniqueId + '"]').length;
},
widgetSelected: function (widget) {
$('#dashboardWidgetsArea').dashboard('addWidget', widget.uniqueId, 1, widget.parameters, true, false);
}
});
DashboardManagerControl.initElements = function () {
UIControl.initElements(this, '.dashboard-manager');
$('.top_controls .dashboard-manager').hide(); // initially hide the manager
};
exports.DashboardManagerControl = DashboardManagerControl;
}());

View File

@@ -0,0 +1,670 @@
/*!
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
(function ($) {
var layoutColumnSelector = '#dashboardWidgetsArea > .col';
/**
* Current dashboard column layout
* @type {object}
*/
var dashboardLayout = {};
/**
* Id of current dashboard
* @type {int}
*/
var dashboardId = 1;
/**
* Name of current dashboard
* @type {string}
*/
var dashboardName = '';
/**
* Holds a reference to the dashboard element
* @type {object}
*/
var dashboardElement = null;
/**
* Boolean indicating wether the layout config has been changed or not
* @type {boolean}
*/
var dashboardChanged = false;
/**
* public methods of dashboard plugin
* all methods defined here are accessible with $(selector).dashboard('method', param, param, ...)
*/
var methods = {
/**
* creates a dashboard object
*
* @param {object} options
*/
init: function (options) {
dashboardElement = this;
if (options.idDashboard) {
dashboardId = options.idDashboard;
}
if (options.name) {
dashboardName = options.name;
}
if (options.layout) {
generateLayout(options.layout);
}
return this;
},
/**
* Destroys the dashboard object and all its childrens
*
* @return void
*/
destroy: function () {
$(dashboardElement).remove();
dashboardElement = null;
destroyWidgets();
},
destroyWidgets: destroyWidgets,
/**
* Load dashboard with the given id
*
* @param {int} dashboardIdToLoad
*/
loadDashboard: function (dashboardIdToLoad, forceReload) {
$(dashboardElement).empty();
dashboardName = '';
dashboardLayout = null;
dashboardId = dashboardIdToLoad;
if (!forceReload && piwikHelper.isAngularRenderingThePage()) {
angular.element(document).injector().invoke(function ($location) {
$location.search('subcategory', '' + dashboardIdToLoad);
});
} else {
var element = $('[piwik-dashboard]');
var scope = angular.element(element).scope();
scope.fetchDashboard(dashboardIdToLoad);
}
return this;
},
/**
* Change current column layout to the given one
*
* @param {String} newLayout
*/
setColumnLayout: function (newLayout) {
adjustDashboardColumns(newLayout);
},
/**
* Returns the current column layout
*
* @return {String}
*/
getColumnLayout: function () {
return dashboardLayout.config.layout;
},
/**
* Return the current dashboard name
*
* @return {String}
*/
getDashboardName: function () {
return dashboardName;
},
/**
* Return the current dashboard id
*
* @return {int}
*/
getDashboardId: function () {
return dashboardId;
},
/**
* Sets a new name for the current dashboard
*
* @param {String} newName
*/
setDashboardName: function (newName) {
dashboardName = newName;
dashboardChanged = true;
saveLayout();
},
/**
* Adds a new widget to the dashboard
*
* @param {String} uniqueId
* @param {int} columnNumber
* @param {object} widgetParameters
* @param {boolean} addWidgetOnTop
* @param {boolean} isHidden
*/
addWidget: function (uniqueId, columnNumber, widgetParameters, addWidgetOnTop, isHidden) {
addWidgetTemplate(uniqueId, columnNumber, widgetParameters, addWidgetOnTop, isHidden);
saveLayout();
},
/**
* Resets the current layout to the defaults
*/
resetLayout: function () {
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams({
module: 'Dashboard',
action: 'resetLayout',
idDashboard: dashboardId
}, 'get');
ajaxRequest.withTokenInUrl();
ajaxRequest.setCallback(
function () {
methods.loadDashboard.apply(this, [dashboardId, true])
}
);
ajaxRequest.setLoadingElement();
ajaxRequest.setFormat('html');
ajaxRequest.send();
},
rebuildMenu: rebuildMenu,
/**
* Removes the current dashboard
*/
removeDashboard: function () {
if (dashboardId == 1) {
return; // dashboard with id 1 should never be deleted, as it is the default
}
var ajaxRequest = new ajaxHelper();
ajaxRequest.setLoadingElement();
ajaxRequest.addParams({
module: 'API',
method: 'Dashboard.removeDashboard',
idDashboard: dashboardId,
login: piwik.userLogin,
format: 'json'
}, 'get');
ajaxRequest.setCallback(
function () {
methods.loadDashboard.apply(this, [1]);
rebuildMenu();
}
);
ajaxRequest.withTokenInUrl();
ajaxRequest.setFormat('html');
ajaxRequest.send();
},
/**
* Saves the current layout aus new default widget layout
*/
saveLayoutAsDefaultWidgetLayout: function () {
saveLayout('saveLayoutAsDefault');
},
/**
* Returns if the current loaded dashboard is the default dashboard
*/
isDefaultDashboard: function () {
return (dashboardId == 1);
}
};
function destroyWidgets()
{
var widgets = $('[widgetId]');
for (var i = 0; i < widgets.length; i++) {
$(widgets[i]).dashboardWidget('destroy');
}
}
function removeNonExistingWidgets(availableWidgets, layout)
{
var existingModuleAction = {};
$.each(availableWidgets, function (category, widgets) {
$.each(widgets, function (index, widget) {
existingModuleAction[widget.module + '.' + widget.action] = true;
});
});
var columns = [];
$.each(layout.columns, function (i, column) {
var widgets = [];
$.each(column, function (j, widget) {
if (!widget.parameters || !widget.parameters.module) {
return;
}
var method = widget.parameters.module + '.' + widget.parameters.action
if (existingModuleAction[method]) {
widgets.push(widget);
}
});
columns[i] = widgets;
});
layout.columns = columns;
return layout;
}
/**
* Generates the dashboard out of the given layout
*
* @param {object|string} layout
*/
function generateLayout(layout) {
dashboardLayout = parseLayout(layout);
widgetsHelper.getAvailableWidgets(function (availableWidgets) {
dashboardLayout = removeNonExistingWidgets(availableWidgets, dashboardLayout);
piwikHelper.hideAjaxLoading();
adjustDashboardColumns(dashboardLayout.config.layout);
var dashboardContainsWidgets = false;
for (var column = 0; column < dashboardLayout.columns.length; column++) {
for (var i in dashboardLayout.columns[column]) {
if (typeof dashboardLayout.columns[column][i] != 'object') {
// Fix IE8 bug: the "i in" loop contains i="indexOf", which would yield type function.
// If we would continue with i="indexOf", an invalid widget would be created.
continue;
}
var widget = dashboardLayout.columns[column][i];
dashboardContainsWidgets = true;
addWidgetTemplate(widget.uniqueId, column + 1, widget.parameters, false, widget.isHidden)
}
}
if (!dashboardContainsWidgets) {
$(dashboardElement).trigger('dashboardempty');
}
makeWidgetsSortable();
});
}
/**
* Adjust the dashboard columns to fit the new layout
* removes or adds new columns if needed and sets the column sizes.
*
* @param {String} layout new layout in format xx-xx-xx
* @return {void}
*/
function adjustDashboardColumns(layout) {
var columnWidth = layout.split('-');
var columnCount = columnWidth.length;
var currentCount = $('> .col', dashboardElement).length;
if (currentCount < columnCount) {
$('.menuClear', dashboardElement).remove();
for (var i = currentCount; i < columnCount; i++) {
if (dashboardLayout.columns.length < i) {
dashboardLayout.columns.push({});
}
$(dashboardElement).append('<div class="col"> </div>');
}
$(dashboardElement).append('<div class="menuClear"> </div>');
} else if (currentCount > columnCount) {
for (var i = columnCount; i < currentCount; i++) {
if (dashboardLayout.columns.length >= i) {
dashboardLayout.columns.pop();
}
// move widgets to other columns depending on columns height
$('[widgetId]', $(layoutColumnSelector + ':last')).each(function (id, elem) {
var cols = $(layoutColumnSelector).slice(0, columnCount);
var smallestColumn = $(cols[0]);
var smallestColumnHeight = null;
cols.each(function (colId, col) {
if (smallestColumnHeight == null || smallestColumnHeight > $(col).height()) {
smallestColumnHeight = $(col).height();
smallestColumn = $(col);
}
});
$(elem).appendTo(smallestColumn);
});
$(layoutColumnSelector + ':last').remove();
}
}
var $dashboardElement = $(' > .col', dashboardElement);
if (!$dashboardElement.length) {
return;
}
switch (layout) {
case '100':
$dashboardElement.removeClass().addClass('col s12');
break;
case '50-50':
$dashboardElement.removeClass().addClass('col s12 m6');
break;
case '67-33':
$dashboardElement[0].className = 'col s12 m8';
$dashboardElement[1].className = 'col s12 m4';
break;
case '33-67':
$dashboardElement[0].className = 'col s12 m4';
$dashboardElement[1].className = 'col s12 m8';
break;
case '33-33-33':
$dashboardElement[0].className = 'col s12 m4';
$dashboardElement[1].className = 'col s12 m4';
$dashboardElement[2].className = 'col s12 m4';
break;
case '40-30-30':
$dashboardElement[0].className = 'col s12 m6';
$dashboardElement[1].className = 'col s12 m3';
$dashboardElement[2].className = 'col s12 m3';
break;
case '30-40-30':
$dashboardElement[0].className = 'col s12 m3';
$dashboardElement[1].className = 'col s12 m6';
$dashboardElement[2].className = 'col s12 m3';
break;
case '30-30-40':
$dashboardElement[0].className = 'col s12 m3';
$dashboardElement[1].className = 'col s12 m3';
$dashboardElement[2].className = 'col s12 m6';
break;
case '25-25-25-25':
$dashboardElement[0].className = 'col s12 m3';
$dashboardElement[1].className = 'col s12 m3';
$dashboardElement[2].className = 'col s12 m3';
$dashboardElement[3].className = 'col s12 m3';
break;
}
makeWidgetsSortable();
// if dashboard column count is changed (not on initial load)
if (currentCount > 0 && dashboardLayout.config.layout != layout) {
dashboardChanged = true;
dashboardLayout.config.layout = layout;
saveLayout();
}
// trigger resize event on all widgets
$('.widgetContent').each(function () {
$(this).trigger('widget:resize');
});
}
/**
* Returns the given layout as an layout object
* Used to parse old layout format into the new syntax
*
* @param {object} layout layout object or string
* @return {object}
*/
function parseLayout(layout) {
// Handle layout array used in piwik before 1.7
// column count was always 3, so use layout 33-33-33 as default
if ($.isArray(layout)) {
layout = {
config: {layout: '33-33-33'},
columns: layout
};
}
if (!layout.config.layout) {
layout.config.layout = '33-33-33';
}
return layout;
}
/**
* Reloads the widget with the given uniqueId
*
* @param {String|jQuery} $widget
*/
function reloadWidget($widget) {
if (typeof widget === 'string') {
$widget = $('[widgetId="' + uniqueId + '"]', dashboardElement);
}
$widget.dashboardWidget('reload', false, true);
}
/**
* Adds an empty widget template to the dashboard in the given column
* @param {String} uniqueId
* @param {int} columnNumber
* @param {object} widgetParameters
* @param {boolean} addWidgetOnTop
* @param {boolean} isHidden
*/
function addWidgetTemplate(uniqueId, columnNumber, widgetParameters, addWidgetOnTop, isHidden) {
if (!columnNumber) {
columnNumber = 1;
}
// do not try to add widget if given column number is to high
if (columnNumber > $('> .col', dashboardElement).length) {
return;
}
var $widgetContent = $('<div class="sortable" widgetId="' + uniqueId + '"></div>');
if (addWidgetOnTop) {
$('> .col:nth-child(' + columnNumber + ')', dashboardElement).prepend($widgetContent);
} else {
$('> .col:nth-child(' + columnNumber + ')', dashboardElement).append($widgetContent);
}
return $widgetContent.dashboardWidget({
uniqueId: uniqueId,
widgetParameters: widgetParameters,
onChange: function () {
saveLayout();
},
isHidden: isHidden
});
}
/**
* Make all widgets on the dashboard sortable
*/
function makeWidgetsSortable() {
function onStart(event, ui) {
if (!jQuery.support.noCloneEvent) {
$('object', this).hide();
}
}
function onStop(event, ui) {
$('object', this).show();
$('.widgetHover', this).removeClass('widgetHover');
$('.widgetTopHover', this).removeClass('widgetTopHover');
if ($('.widget:has(".piwik-graph")', ui.item).length) {
reloadWidget($('.widget', ui.item).attr('id'));
}
saveLayout();
}
//launch 'sortable' property on every dashboard widgets
$( layoutColumnSelector + ":data('ui-sortable')", dashboardElement ).sortable('destroy');
$('> .col', dashboardElement)
.sortable({
items: 'div.sortable',
opacity: 0.6,
forceHelperSize: true,
forcePlaceholderSize: true,
placeholder: 'hover',
handle: '.widgetTop',
helper: 'clone',
start: onStart,
stop: onStop,
connectWith: layoutColumnSelector
});
}
/**
* Handle clicks for menu items for choosing between available dashboards
*/
function rebuildMenu() {
if (piwikHelper.isAngularRenderingThePage()) {
// dashboard in reporting page (regular Piwik UI)
angular.element(document).injector().invoke(function (reportingMenuModel) {
reportingMenuModel.reloadMenuItems();
});
return;
}
var _self = this;
// widgetized
var success = function (dashboards) {
var dashboardMenuList = $('#Dashboard_embeddedIndex_1').closest('ul');
var dashboardMenuListItems = dashboardMenuList.find('>li');
dashboardMenuListItems.filter(function () {
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).addClass('item');
var $li = $('<li/>').attr('id', 'Dashboard_embeddedIndex_' + dashboards[i].iddashboard).addClass('dashboardMenuItem').attr('role', 'menuitem').append($link);
items.push($li);
if (dashboards[i].iddashboard == dashboardId) {
dashboardName = dashboards[i].name;
$li.addClass('active');
}
}
dashboardMenuList.prepend(items);
}
dashboardMenuList.find('a[data-iddashboard]').click(function (e) {
e.preventDefault();
var idDashboard = $(this).attr('data-iddashboard');
$('#Dashboard ul li').removeClass('active');
methods.loadDashboard.apply(_self, [idDashboard]);
$(this).closest('li').addClass('active');
});
};
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams({
module: 'Dashboard',
action: 'getAllDashboards',
filter_limit: '-1'
}, 'get');
ajaxRequest.withTokenInUrl();
ajaxRequest.setCallback(success);
ajaxRequest.send();
}
/**
* Save the current layout in database if it has changed
* @param {string} [action] action to perform (defaults to saveLayout)
*/
function saveLayout(action) {
var columns = [];
var columnNumber = 0;
$(layoutColumnSelector).each(function () {
columns[columnNumber] = [];
var items = $('[widgetId]', this);
for (var j = 0; j < items.length; j++) {
columns[columnNumber][j] = $(items[j]).dashboardWidget('getWidgetObject');
// Do not store segment in the dashboard layout
delete columns[columnNumber][j].parameters.segment;
}
columnNumber++;
});
if (JSON.stringify(dashboardLayout.columns) != JSON.stringify(columns) || dashboardChanged || action) {
dashboardLayout.columns = JSON.parse(JSON.stringify(columns));
columns = null;
if (!action) {
action = 'saveLayout';
}
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams({
module: 'Dashboard',
action: action,
idDashboard: dashboardId
}, 'get');
ajaxRequest.addParams({
layout: JSON.stringify(dashboardLayout),
name: dashboardName
}, 'post');
ajaxRequest.setCallback(
function () {
if (dashboardChanged) {
dashboardChanged = false;
rebuildMenu();
}
}
);
ajaxRequest.withTokenInUrl();
ajaxRequest.setFormat('html');
ajaxRequest.send();
}
}
/**
* Make plugin methods available
*/
$.fn.dashboard = function (method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method) {
return methods.init.apply(this, arguments);
} else {
$.error('Method ' + method + ' does not exist on jQuery.dashboard');
}
}
})(jQuery);

View File

@@ -0,0 +1,370 @@
/*!
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
(function ($) {
$.widget('piwik.dashboardWidget', {
/**
* Boolean indicating wether the widget is currently maximised
* @type {Boolean}
*/
isMaximised: false,
/**
* Unique Id of the widget
* @type {String}
*/
uniqueId: null,
/**
* Object holding the widget parameters
* @type {Object}
*/
widgetParameters: {},
/**
* Options available for initialization
*/
options: {
uniqueId: null,
isHidden: false,
onChange: null,
widgetParameters: {},
title: null,
onRemove: null,
onRefresh: null,
onMaximise: null,
onMinimise: null,
autoMaximiseVisualizations: ['tableAllColumns', 'tableGoals']
},
/**
* creates a widget object
*/
_create: function () {
if (!this.options.uniqueId) {
piwikHelper.error('widgets can\'t be created without an uniqueId');
return;
} else {
this.uniqueId = this.options.uniqueId;
}
if (this.options.widgetParameters) {
this.widgetParameters = this.options.widgetParameters;
}
this._createDashboardWidget(this.uniqueId);
var self = this;
this.element.on('setParameters.dashboardWidget', function (e, params) { self.setParameters(params); });
this.reload(true, true);
},
/**
* Cleanup some events and dialog
* Called automatically upon removing the widgets domNode
*/
destroy: function () {
if (this.isMaximised) {
$('[widgetId="' + this.uniqueId + '"]').dialog('destroy');
}
$('*', this.element).off('.dashboardWidget'); // unbind all events
$('.widgetContent', this.element).trigger('widget:destroy');
require('piwik/UI').UIControl.cleanupUnusedControls();
return this;
},
/**
* Returns the data currently set for the widget
* @return {object}
*/
getWidgetObject: function () {
return {
uniqueId: this.uniqueId,
parameters: this.widgetParameters,
isHidden: this.options.isHidden
};
},
/**
* Show the current widget in an ui.dialog
*/
maximise: function () {
this.isMaximised = true;
if (this.options.onMaximise) {
this.options.onMaximise(this.element);
} else {
this._maximiseImpl();
}
$('.widgetContent', this.element).trigger('widget:maximise');
return this;
},
/**
* Reloads the widgets content with the currently set parameters
*/
reload: function (hideLoading, notJQueryUI, overrideParams) {
if (!notJQueryUI) {
piwikHelper.log('widget.reload() was called by jquery.ui, ignoring', arguments.callee.caller);
return;
}
var self = this, currentWidget = this.element;
$('.widgetContent', currentWidget).trigger('widget:reload');
function onWidgetLoadedReplaceElementWithContent(loadedContent) {
var $widgetContent = $('.widgetContent', currentWidget);
$widgetContent.html(loadedContent);
/* move widget icons into datatable top actions
var $buttons = currentWidget.find('.buttons .button');
var $controls = currentWidget.find('.dataTableControls .dataTableAction').first();
if ($buttons.length && $controls.length) {
$buttons.find('.button').addClass('dataTableAction');
$buttons.insertBefore($controls);
}*/
if (currentWidget.parents('body').length) {
// there might be race conditions, eg widget might be just refreshed while whole dashboard is also
// removed from DOM
piwikHelper.compileAngularComponents($widgetContent, { forceNewScope: true });
}
$widgetContent.removeClass('loading');
$widgetContent.trigger('widget:create', [self]);
angular.element(document).injector().invoke(['notifications', function (notifications) {
notifications.parseNotificationDivs();
}]);
}
// Reading segment from hash tag (standard case) or from the URL (when embedding dashboard)
var segment = broadcast.getValueFromHash('segment') || broadcast.getValueFromUrl('segment');
if (segment.length) {
this.widgetParameters.segment = segment;
}
if (!hideLoading) {
$('.widgetContent', currentWidget).addClass('loading');
}
var params = $.extend(this.widgetParameters, overrideParams || {});
widgetsHelper.loadWidgetAjax(this.uniqueId, params, onWidgetLoadedReplaceElementWithContent, function (deferred, status) {
if (status == 'abort' || !deferred || deferred.status < 400 || deferred.status >= 600) {
return;
}
$('.widgetContent', currentWidget).removeClass('loading');
var errorMessage = _pk_translate('General_ErrorRequest', ['', '']);
if ($('#loadingError').html()) {
errorMessage = $('#loadingError').html();
}
$('.widgetContent', currentWidget).html('<div class="widgetLoadingError">' + errorMessage + '</div>');
});
return this;
},
/**
* Update widget parameters
*
* @param {object} parameters
*/
setParameters: function (parameters) {
if (!this.isMaximised
&& this.options.autoMaximiseVisualizations.indexOf(parameters.viewDataTable) !== -1
) {
this.maximise();
}
for (var name in parameters) {
this.widgetParameters[name] = parameters[name];
}
if (!this.isMaximised) {
this.options.onChange();
}
return this;
},
/**
* Get widget parameters
*
* @param {object} parameters
*/
getParameters: function () {
return $.extend({}, this.widgetParameters);
},
/**
* Creaates the widget markup for the given uniqueId
*
* @param {String} uniqueId
*/
_createDashboardWidget: function (uniqueId) {
var self = this;
widgetsHelper.getWidgetNameFromUniqueId(uniqueId, function(widgetName) {
if (!widgetName) {
widgetName = _pk_translate('Dashboard_WidgetNotFound');
}
var title = self.options.title === null ? $('<span/>').text(widgetName) : self.options.title;
var emptyWidgetContent = require('piwik/UI/Dashboard').WidgetFactory.make(uniqueId, title);
self.element.html(emptyWidgetContent);
var widgetElement = $('[id="' + uniqueId + '"]', self.element);
widgetElement
.on('mouseenter.dashboardWidget', function () {
if (!self.isMaximised) {
$(this).addClass('widgetHover');
$('.widgetTop', this).addClass('widgetTopHover');
}
})
.on('mouseleave.dashboardWidget', function () {
if (!self.isMaximised) {
$(this).removeClass('widgetHover');
$('.widgetTop', this).removeClass('widgetTopHover');
}
});
if (self.options.isHidden) {
$('.widgetContent', widgetElement).toggleClass('hidden').closest('.widget').toggleClass('hiddenContent');
}
$('.button#close', widgetElement)
.on('click.dashboardWidget', function (ev) {
piwikHelper.modalConfirm('#confirm', {yes: function () {
if (self.options.onRemove) {
self.options.onRemove(self.element);
} else {
self.element.remove();
self.options.onChange();
}
}});
});
$('.button#maximise', widgetElement)
.on('click.dashboardWidget', function (ev) {
if (self.options.onMaximise) {
self.options.onMaximise(self.element);
} else {
if ($('.widgetContent', $(this).parents('.widget')).hasClass('hidden')) {
self.showContent();
} else {
self.maximise();
}
}
});
$('.button#minimise', widgetElement)
.on('click.dashboardWidget', function (ev) {
if (self.options.onMinimise) {
self.options.onMinimise(self.element);
} else {
if (!self.isMaximised) {
self.hideContent();
} else {
self.element.dialog("close");
}
}
});
$('.button#refresh', widgetElement)
.on('click.dashboardWidget', function (ev) {
if (self.options.onRefresh) {
self.options.onRefresh(self.element);
} else {
self.reload(false, true);
}
});
});
},
/**
* Hide the widget content. Triggers the onChange event.
*/
hideContent: function () {
$('.widgetContent', this.element.find('.widget').addClass('hiddenContent')).addClass('hidden');
this.options.isHidden = true;
this.options.onChange();
},
/**
* Show the widget content. Triggers the onChange event.
*/
showContent: function () {
this.isMaximised = false;
this.options.isHidden = false;
this.element.find('.widget').removeClass('hiddenContent').find('.widgetContent').removeClass('hidden');
this.element.find('.widget').find('div.piwik-graph').trigger('resizeGraph');
this.options.onChange();
$('.widgetContent', this.element).trigger('widget:minimise');
},
/**
* Default maximise behavior. Will create a dialog that is 70% of the document's width,
* displaying the widget alone.
*/
_maximiseImpl: function () {
this.detachWidget();
var width = Math.floor($('body').width() * 0.7);
var self = this;
this.element.dialog({
title: '',
dialogClass: 'widgetoverlay',
modal: true,
width: width,
position: ['center', 'center'],
resizable: true,
autoOpen: true,
close: function (event, ui) {
self.isMaximised = false;
$('body').off('.dashboardWidget');
$(this).dialog("destroy");
$('[id="' + self.uniqueId + '-placeholder"]').replaceWith(this);
$(this).removeAttr('style');
self.options.onChange();
$(this).find('div.piwik-graph').trigger('resizeGraph');
$('.widgetContent', self.element).trigger('widget:minimise');
}
});
this.element.find('div.piwik-graph').trigger('resizeGraph');
var currentWidget = this.element;
$('body').on('click.dashboardWidget', function (ev) {
if (/ui-widget-overlay/.test(ev.target.className)) {
$(currentWidget).dialog("close");
}
});
},
/**
* Detaches the widget from the DOM and replaces it with a placeholder element.
* The placeholder element will have the save dimensions as the widget and will have
* the widgetPlaceholder CSS class.
*
* @return {jQuery} the detached widget
*/
detachWidget: function () {
this.element.before('<div id="' + this.uniqueId + '-placeholder" class="widgetPlaceholder widget"> </div>');
var placeholder = $('[id="' + self.uniqueId + '-placeholder"]');
$('#' + this.uniqueId + '-placeholder').height(this.element.height());
$('#' + this.uniqueId + '-placeholder').width(this.element.width() - 16);
return this.element.detach();
}
});
})(jQuery);

View File

@@ -0,0 +1,508 @@
/*!
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
function widgetsHelper() {
}
/**
* Returns the available widgets fetched via AJAX (if not already done)
*
* @return {object} object containing available widgets
*/
widgetsHelper.getAvailableWidgets = function (callback) {
function mergeCategoriesAndSubCategories(availableWidgets)
{
var categorized = {};
$.each(availableWidgets, function (index, widget) {
var category = widget.category.name;
if (!categorized[category]) {
categorized[category] = {'-': []};
}
var subcategory = '-';
if (widget.subcategory && widget.subcategory.name) {
subcategory = widget.subcategory.name;
}
if (!categorized[category][subcategory]) {
categorized[category][subcategory] = [];
}
categorized[category][subcategory].push(widget);
});
var moved = {};
$.each(categorized, function (category, widgets) {
$.each(widgets, function (subcategory, subwidgets) {
var categoryToUse = category;
if (subwidgets.length >= 3 && subcategory !== '-') {
categoryToUse = category + ' - ' + subcategory;
}
if (!moved[categoryToUse]) {
moved[categoryToUse] = [];
}
$.each(subwidgets, function (index, widget) {
moved[categoryToUse].push(widget);
});
});
});
return moved;
}
if (!widgetsHelper.availableWidgets) {
var ajaxRequest = new ajaxHelper();
ajaxRequest._mixinDefaultGetParams = function (params) {
return params;
};
ajaxRequest.addParams({
module: 'API',
method: 'API.getWidgetMetadata',
filter_limit: '-1',
format: 'JSON',
deep: '1',
idSite: piwik.idSite || broadcast.getValueFromUrl('idSite')
}, 'get');
ajaxRequest.setCallback(
function (data) {
widgetsHelper.availableWidgets = mergeCategoriesAndSubCategories(data);
if (callback) {
callback(widgetsHelper.availableWidgets);
}
}
);
ajaxRequest.setErrorCallback(function (deferred, status) {
if (status == 'abort' || !deferred || deferred.status < 400 || deferred.status >= 600) {
return;
}
$('#loadingError').show();
});
ajaxRequest.send();
return;
}
if (callback) {
callback(widgetsHelper.availableWidgets);
}
};
/**
* Determines the complete widget object by its unique id and sends it to callback method
*
* @param {string} uniqueId
* @param {function} callback
*/
widgetsHelper.getWidgetObjectFromUniqueId = function (uniqueId, callback) {
widgetsHelper.getAvailableWidgets(function(widgets){
for (var widgetCategory in widgets) {
var widgetInCategory = widgets[widgetCategory];
for (var i in widgetInCategory) {
if (widgetInCategory[i]["uniqueId"] == uniqueId) {
callback(widgetInCategory[i]);
return;
}
}
}
callback(false);
});
};
/**
* Determines the name of a widget by its unique id and sends it to the callback
*
* @param {string} uniqueId unique id of the widget
* @param {function} callback
* @return {string}
*/
widgetsHelper.getWidgetNameFromUniqueId = function (uniqueId, callback) {
this.getWidgetObjectFromUniqueId(uniqueId, function(widget) {
if (widget == false) {
callback(false);
}
callback(widget["name"]);
});
};
/**
* Sends and ajax request to query for the widgets html
*
* @param {string} widgetUniqueId unique id of the widget
* @param {object} widgetParameters parameters to be used for loading the widget
* @param {function} onWidgetLoadedCallback callback to be executed after widget is loaded
* @return {object}
*/
widgetsHelper.loadWidgetAjax = function (widgetUniqueId, widgetParameters, onWidgetLoadedCallback, onWidgetErrorCallback) {
var disableLink = broadcast.getValueFromUrl('disableLink');
widgetParameters['disableLink'] = disableLink.length || $('body#standalone').length;
widgetParameters['widget'] = 1;
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams(widgetParameters, 'get');
ajaxRequest.setCallback(onWidgetLoadedCallback);
if (onWidgetErrorCallback) {
ajaxRequest.setErrorCallback(onWidgetErrorCallback);
}
ajaxRequest.setFormat('html');
ajaxRequest.send();
return ajaxRequest;
};
(function ($, require) {
var exports = require('piwik/UI/Dashboard');
/**
* Singleton instance that creates widget elements. Normally not needed even
* when embedding/re-using dashboard widgets, but it can be useful when creating
* elements with the same look and feel as dashboard widgets, but different
* behavior (such as the widget preview in the dashboard manager control).
*
* @constructor
*/
var WidgetFactory = function () {
// empty
};
/**
* Creates an HTML element for displaying a widget.
*
* @param {string} uniqueId unique id of the widget
* @param {string} widgetName name of the widget
* @return {Element} the empty widget
*/
WidgetFactory.prototype.make = function (uniqueId, widgetName) {
var $result = this.getWidgetTemplate().clone();
$result.attr('id', uniqueId).find('.widgetName').append(widgetName);
return $result;
};
/**
* Returns the base widget template element. The template is stored in the
* element with id == 'widgetTemplate'.
*
* @return {Element} the widget template
*/
WidgetFactory.prototype.getWidgetTemplate = function () {
if (!this.widgetTemplate) {
this.widgetTemplate = $('#widgetTemplate').find('>.widget').detach();
}
return this.widgetTemplate;
};
exports.WidgetFactory = new WidgetFactory();
})(jQuery, require);
/**
* widgetPreview jQuery Extension
*
* Converts an dom element to a widget preview
* Widget preview contains an categorylist, widgetlist and a preview
*/
(function ($) {
$.extend({
widgetPreview: new function () {
/**
* Default settings for widgetPreview
* @type {object}
*/
var defaultSettings = {
/**
* handler called after a widget preview is loaded in preview element
* @type {function}
*/
onPreviewLoaded: function () {},
/**
* handler called on click on element in widgetlist or widget header
* @type {function}
*/
onSelect: function () {},
/**
* callback used to determine if a widget is available or not
* unavailable widgets aren't chooseable in widgetlist
* @type {function}
*/
isWidgetAvailable: function (widgetUniqueId) { return true; },
/**
* should the lists and preview be reset on widget selection?
* @type {boolean}
*/
resetOnSelect: false,
/**
* css classes for various elements
* @type {string}
*/
baseClass: 'widgetpreview-base',
categorylistClass: 'widgetpreview-categorylist',
widgetlistClass: 'widgetpreview-widgetlist',
widgetpreviewClass: 'widgetpreview-preview',
choosenClass: 'widgetpreview-choosen',
unavailableClass: 'widgetpreview-unavailable'
};
/**
* Returns the div to show category list in
* - if element doesn't exist it will be created and added
* - if element already exist it's content will be removed
*
* @return {$} category list element
*/
function createWidgetCategoryList(widgetPreview, availableWidgets) {
var settings = widgetPreview.settings;
if (!$('.' + settings.categorylistClass, widgetPreview).length) {
$(widgetPreview).append('<ul class="' + settings.categorylistClass + '"></ul>');
} else {
$('.' + settings.categorylistClass, widgetPreview).empty();
}
for (var widgetCategory in availableWidgets) {
$('.' + settings.categorylistClass, widgetPreview).append($('<li>').text(widgetCategory));
}
return $('.' + settings.categorylistClass, widgetPreview);
}
/**
* Returns the div to show widget list in
* - if element doesn't exist it will be created and added
* - if element already exist it's content will be removed
*
* @return {$} widget list element
*/
function createWidgetList(widgetPreview) {
var settings = widgetPreview.settings;
if (!$('.' + settings.widgetlistClass, widgetPreview).length) {
$(widgetPreview).append('<ul class="' + settings.widgetlistClass + '"></ul>');
} else {
$('.' + settings.widgetlistClass + ' li', widgetPreview).off('mouseover');
$('.' + settings.widgetlistClass + ' li', widgetPreview).off('click');
$('.' + settings.widgetlistClass, widgetPreview).empty();
}
if ($('.' + settings.categorylistClass + ' .' + settings.choosenClass, widgetPreview).length) {
var position = $('.' + settings.categorylistClass + ' .' + settings.choosenClass, widgetPreview).position().top -
$('.' + settings.categorylistClass, widgetPreview).position().top +
$('.dashboard-manager .addWidget').outerHeight();
if (!$('#content.admin').length) {
position += 5; // + padding defined in dashboard view
}
$('.' + settings.widgetlistClass, widgetPreview).css('top', position);
$('.' + settings.widgetlistClass, widgetPreview).css('marginBottom', position);
}
return $('.' + settings.widgetlistClass, widgetPreview);
}
/**
* Display the given widgets in a widget list
*
* @param {object} widgets widgets to be displayed
* @return {void}
*/
function showWidgetList(widgets, widgetPreview) {
var settings = widgetPreview.settings;
var widgetList = createWidgetList(widgetPreview),
widgetPreviewTimer;
for (var j = 0; j < widgets.length; j++) {
var widgetName = widgets[j]["name"];
var widgetUniqueId = widgets[j]["uniqueId"];
var widgetCategoryId = widgets[j].category ? widgets[j].category.id : null;
var widgetClass = '';
if (!settings.isWidgetAvailable(widgetUniqueId) && widgetCategoryId !== 'General_Generic') {
widgetClass += ' ' + settings.unavailableClass;
}
widgetName = piwikHelper.escape(piwikHelper.htmlEntities(widgetName));
widgetList.append('<li class="' + widgetClass + '" uniqueid="' + widgetUniqueId + '">' + widgetName + '</li>');
}
// delay widget preview a few millisconds
$('li', widgetList).on('mouseenter', function () {
var that = this,
widgetUniqueId = $(this).attr('uniqueid');
clearTimeout(widgetPreview);
widgetPreviewTimer = setTimeout(function () {
$('li', widgetList).removeClass(settings.choosenClass);
$(that).addClass(settings.choosenClass);
showPreview(widgetUniqueId, widgetPreview);
}, 400);
});
// clear timeout after mouse has left
$('li:not(.' + settings.unavailableClass + ')', widgetList).on('mouseleave', function () {
clearTimeout(widgetPreview);
});
$('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);
}
}
return false;
});
}
/**
* Returns the div to show widget preview in
* - if element doesn't exist it will be created and added
* - if element already exist it's content will be removed
*
* @return {$} preview element
*/
function createPreviewElement(widgetPreview) {
var settings = widgetPreview.settings;
if (!$('.' + settings.widgetpreviewClass, widgetPreview).length) {
$(widgetPreview).append('<div class="' + settings.widgetpreviewClass + '"></div>');
} else {
$('.' + settings.widgetpreviewClass + ' .widgetTop', widgetPreview).off('click');
$('.' + settings.widgetpreviewClass, widgetPreview).empty();
}
return $('.' + settings.widgetpreviewClass, widgetPreview);
}
/**
* Show widget with the given uniqueId in preview
*
* @param {string} widgetUniqueId unique id of widget to display
* @param widgetPreview
* @return {void}
*/
function showPreview(widgetUniqueId, widgetPreview) {
// do not reload id widget already displayed
if ($('[id="' + widgetUniqueId + '"]', widgetPreview).length) return;
var settings = widgetPreview.settings;
var previewElement = createPreviewElement(widgetPreview);
widgetsHelper.getWidgetObjectFromUniqueId(widgetUniqueId, function(widget) {
var widgetParameters = widget['parameters'];
var emptyWidgetHtml = require('piwik/UI/Dashboard').WidgetFactory.make(
widgetUniqueId,
$('<span/>')
.attr('title', _pk_translate("Dashboard_AddPreviewedWidget"))
.text(_pk_translate('Dashboard_WidgetPreview'))
);
previewElement.html(emptyWidgetHtml);
var onWidgetLoadedCallback = function (response) {
var widgetElement = $(document.getElementById(widgetUniqueId));
// document.getElementById needed for widgets with uniqueid like widgetOpens+Contact+Form
$('.widgetContent', widgetElement).html($(response));
piwikHelper.compileAngularComponents($('.widgetContent', widgetElement), { forceNewScope: true });
$('.widgetContent', widgetElement).trigger('widget:create');
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);
}
return false;
});
};
// abort previous sent request
if (widgetPreview.widgetAjaxRequest) {
widgetPreview.widgetAjaxRequest.abort();
}
widgetPreview.widgetAjaxRequest = widgetsHelper.loadWidgetAjax(widgetUniqueId, widgetParameters, onWidgetLoadedCallback);
});
}
/**
* Reset function
*
* @return {void}
*/
function resetWidgetPreview(widgetPreview) {
var settings = widgetPreview.settings;
$('.' + settings.categorylistClass + ' li', widgetPreview).removeClass(settings.choosenClass);
createWidgetList(widgetPreview);
createPreviewElement(widgetPreview);
}
/**
* Constructor
*
* @param {object} userSettings Settings to be used
* @return {void}
*/
this.construct = function (userSettings) {
if (userSettings == 'reset') {
resetWidgetPreview(this);
return;
}
this.widgetAjaxRequest = null;
$(this).addClass('widgetpreview-base');
this.settings = jQuery.extend({}, defaultSettings, userSettings);
// set onSelect callback
if (typeof this.settings.onSelect == 'function') {
this.onSelect = this.settings.onSelect;
}
// set onPreviewLoaded callback
if (typeof this.settings.onPreviewLoaded == 'function') {
this.onPreviewLoaded = this.settings.onPreviewLoaded;
}
var self = this;
widgetsHelper.getAvailableWidgets(function (availableWidgets) {
var categoryList = createWidgetCategoryList(self, availableWidgets);
$('li', categoryList).on('mouseover', function () {
var category = $(this).text();
var widgets = availableWidgets[category];
$('li', categoryList).removeClass(self.settings.choosenClass);
$(this).addClass(self.settings.choosenClass);
showWidgetList(widgets, self);
createPreviewElement(self); // empty preview
});
});
};
}
});
/**
* Makes widgetPreview available with $().widgetPreview()
*/
$.fn.extend({
widgetPreview: $.widgetPreview.construct
})
})(jQuery);

View File

@@ -0,0 +1,11 @@
{
"Dashboard": {
"AddPreviewedWidget": "ቅድመ እይታ የተሰጠውን widget ወደ ዳሽቦርዱ ጨምር",
"Dashboard": "ዳሽቦርድ",
"DeleteWidgetConfirm": "እርግጠኛ ነህ ይህ widget ከዳሽቦርድ ይሰረዝ?",
"LoadingWidget": "widget በመጫን ላይ, እባክዎ ይጠበቁ...",
"SelectWidget": "ወደ ዳሽቦርድ የሚጨመረውን widget ምረጥ",
"WidgetNotFound": "Widget አልተገኘም",
"WidgetPreview": "የWidget ቅድመእይታ"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "أضف عنصر واجهة",
"AddPreviewedWidget": "إضغط لتضيف عنصر واجهة إلى لوحة المعلومات",
"ChangeDashboardLayout": "تغيير تخطيط لوحة المعلومات",
"CopyDashboardToUser": "إنسخ لوحة المعلومات إلى مستخدِم",
"CreateNewDashboard": "إنشاء لوحة معلومات جديدة",
"Dashboard": "لوحة المعلومات",
"DashboardCopied": "تم نسخ لوحة المعلومات الحالية إلى المستخدم المحدَّد بنجاح.",
"DashboardEmptyNotification": "اللوحة الرئيسية فارغة تماماً. ابدأ بإضافة بعد التطبيقات أو قم بتنضيد اللوحة الرئيسية إلى الإعدادات الافتراضية.",
"DashboardName": "اسم اللوحة:",
"DashboardOf": "لوحة معلومات %s",
"DefaultDashboard": "اللوحة الافتراضية - تستخدم المجموعة الافتراضية من التطبيقات وتخطيط الأعمدة.",
"DeleteWidgetConfirm": "هل ترغب حقاً في حذف لوحة الأداة هذه من لوحة التحكم.",
"EmptyDashboard": "لوحة المعلومات فارغة - إختر عناصر التحكم التي تفضّلها",
"LoadingWidget": "جاري تحميل الأداة، الرجاء الانتظار...",
"ManageDashboard": "إدارة اللوحة",
"Maximise": "تكبير",
"Minimise": "تصغير",
"NotUndo": "لن يمكنك التراجع عن هذه العملية.",
"PluginDescription": "لوحة معلومات تحليلات الويب الخاصة بك. خصّص لوحة معلوماتك بإضافة عناصر واجهة جديدة وسحبها وإسقاطها أينما شئت ، بإمكانك أيضاً تغيير تخطيط أعمدة لوحة المعلومات. يمكن لكل مستخدم إدارة لوحة معلومات يخصصها كما يشاء.",
"RemoveDashboard": "إزالة اللوحة",
"RemoveDashboardConfirm": "هل أنت متأكد من رغبتك حذف لوحة المعلومات \"%s\" ؟",
"RemoveDefaultDashboardNotPossible": "لايمكن حذف لوحة المعلومات الافتراضية",
"RenameDashboard": "إعادة تسمية اللوحة",
"ResetDashboard": "أعد ضبط لوحة المعلومات",
"ResetDashboardConfirm": "هل ترغب حقاً في تنضيد تخطيط اللوحة الرئيسية ومجموعة التطبيقات المعروضة فيها إلى الافتراضية؟",
"SelectDashboardLayout": "فضلاً إختر التخطيط الجديد للوحة المعلومات",
"SelectWidget": "اختر لوحة الأداة لإضافتها للوحة التحكم",
"SetAsDefaultWidgets": "اضبط كمجموعة التطبيقات الافتراضية",
"SetAsDefaultWidgetsConfirm": "هل أنت متأكد أنك تريد جعل عناصر الواجهة المختارة حالياً وتخطيط لوحة المعلومات هذا القالب الافتراضي للوحة المعلومات ؟",
"SetAsDefaultWidgetsConfirmHelp": "سيتم استخدام مجموعة التطبيقات هذه ومخطط أعمدة اللوحة عند إنشاء لوحات جديدة أو عند استخدام خاصية \"%s\".",
"TopLinkTooltip": "عرض تقارير إحصاءات الويب لـ %s",
"WidgetNotFound": "لم يتم العثور على الأداة",
"WidgetPreview": "معاينة لوحة الأداة"
}
}

View File

@@ -0,0 +1,12 @@
{
"Dashboard": {
"AddPreviewedWidget": "Дадаць предпросмотренный віджэт на інформпанель",
"Dashboard": "Інфармацыйная панэль",
"DeleteWidgetConfirm": "Вы ўпэўнены, што жадаеце выдаліць гэты віджэт з інфармацыйнай панэлі?",
"LoadingWidget": "Загрузка віджэта, калі ласка пачакайце...",
"Maximise": "Максімалізаваць",
"SelectWidget": "Абярыце віджэт для дадання на інформпанель",
"WidgetNotFound": "Віджэт не знойдзены",
"WidgetPreview": "Прадпрагляд віджэта"
}
}

View File

@@ -0,0 +1,36 @@
{
"Dashboard": {
"AddAWidget": "Добави нова джаджа",
"AddPreviewedWidget": "Добави джаджата на таблото",
"ChangeDashboardLayout": "Сменете изледа на таблото",
"CopyDashboardToUser": "Копиране на табло при потребител",
"CreateNewDashboard": "Направете ново табло",
"Dashboard": "Табло",
"DashboardCopied": "Настоящото табло е успешно копирано при избрания потребител.",
"DashboardEmptyNotification": "Вашето табло не съдържа никакви джаджи. Започнете с добавяне на някои джаджи или просто нулирайте таблото, за да изберете джаджите по подразбиране.",
"DashboardName": "Име на табло:",
"DashboardOf": "Табло за %s",
"DefaultDashboard": "Табло по подразбиране - Използвайте джаджите по подразбиране и изгледа на колоните.",
"DeleteWidgetConfirm": "Наистина ли искате да изтриете тази джаджа от таблото?",
"EmptyDashboard": "Изпразнете таблото - Изберете любимите си джаджи",
"LoadingWidget": "Зарежда джаджата, почакайте...",
"ManageDashboard": "Управлявате таблото",
"Maximise": "Максимизиране",
"Minimise": "Минимизиране",
"NotUndo": "Вие няма да можете да отмените тази операция",
"PluginDescription": "Вашето табло за уеб анализи. Настройте вашия панел добавяйки нови джаджи, които можете да ги влачите, също така променяйки оформлението на колоните. Всеки потребител поотделно може да настрои своето табло.",
"RemoveDashboard": "Премахнете таблото",
"RemoveDashboardConfirm": "Сигурни ли сте че искате да премахнете таблото \"%s\"?",
"RenameDashboard": "Сменете името на таблото",
"ResetDashboard": "Зареди отново таблото",
"ResetDashboardConfirm": "Сигурен ли сте че искате да заредите отново плана на таблото с избраните по подразбиране джаджи?",
"SelectDashboardLayout": "Моля, изберете Вашият нов изглед на табло",
"SelectWidget": "Изберете джаджа, която да добавите на таблото",
"SetAsDefaultWidgets": "Поставете по подразбиране избора на джаджи",
"SetAsDefaultWidgetsConfirm": "Сигурни ли сте, че искате да настроите настоящата селекция на джаджи и оформление на таблото по подразбиране?",
"SetAsDefaultWidgetsConfirmHelp": "Селекцията на джаджи и колоните на изгледа на таблото ще бъдат използвани, когато потребителят създаде ново табло, или когато \"%s\" функция е използвана.",
"TopLinkTooltip": "Вижте доклада за уеб анализи за %s.",
"WidgetNotFound": "Несъществуваща джаджа",
"WidgetPreview": "Преглед на джаджата"
}
}

View File

@@ -0,0 +1,9 @@
{
"Dashboard": {
"CreateNewDashboard": "নতুন ড্যাশবোর্ড তৈরি করুন",
"Dashboard": "ড্যাশবোর্ড",
"DashboardName": "ড্যাশবোর্ডের নাম:",
"RemoveDashboard": "ড্যাশবোর্ড মুছে ফেলুন",
"RenameDashboard": "ড্যাশবোর্ডের নাম পরিবর্তন"
}
}

View File

@@ -0,0 +1,7 @@
{
"Dashboard": {
"Dashboard": "Kontrolna ploča",
"Maximise": "Maksimiziraj",
"Minimise": "Minimiziraj"
}
}

View File

@@ -0,0 +1,36 @@
{
"Dashboard": {
"AddAWidget": "Afegir un Giny",
"AddPreviewedWidget": "Afegeix el giny al tauler",
"ChangeDashboardLayout": "Canviar el disseny del tauler",
"CopyDashboardToUser": "Copiar tauler a l'usuari",
"CreateNewDashboard": "Crear un nou tauler",
"Dashboard": "Tauler",
"DashboardCopied": "S'ha copiat correctament el tauler a l'usuari seleccionat",
"DashboardEmptyNotification": "El vostre tauler no conté cap giny. Comenceu per afegir alguns ginys o restablieu el tauler a la selecció de ginys per defecte.",
"DashboardName": "Nom del tauler:",
"DashboardOf": "Tauler de %s",
"DefaultDashboard": "Tauler per defecte - Utilitzant la selecció de ginys i l'estructura de columnes per defecte",
"DeleteWidgetConfirm": "Realment voleu esborrar aquest giny?",
"EmptyDashboard": "Tauler buit - Seleccioneu els vostres ginys preferits",
"LoadingWidget": "S'està carregant el giny…",
"ManageDashboard": "Administrar tauler",
"Maximise": "Maximitza",
"Minimise": "Minimitza",
"NotUndo": "No podreu desfer aquesta operació",
"PluginDescription": "El teu taulell d'analítica web. Personalitza el teu taulell afegint nous ginys, arrossega i solta per a moure'ls i canvia l'estructura de columnes. Cada usuari pot tenir el seu taulell personalitzat.",
"RemoveDashboard": "Elimina el tauler",
"RemoveDashboardConfirm": "Esteu segurs que voleu eliminar el tauler \"%s\"?",
"RenameDashboard": "Reanomena el tauler",
"ResetDashboard": "Reinicialitza el tauler",
"ResetDashboardConfirm": "Esteu segurs que voleu reiniciar la disposició del vostre tauler a la selecció de ginys per defecte?",
"SelectDashboardLayout": "Seleccioneu la nova disposició del vostre tauler",
"SelectWidget": "Escolliu el giny que voleu afegir a la consola",
"SetAsDefaultWidgets": "Marca com a selecció de ginys per defecte.",
"SetAsDefaultWidgetsConfirm": "Esteu segurs que voleu definir la selecció de ginys i la disposició del tauler actuals per a la plantilla de tauler per defecte?",
"SetAsDefaultWidgetsConfirmHelp": "Aquesta selecció de ginys i la disposició de columnes del tauler es faran servir quan qualsevol usuari crei un nou tauler o quan s'utiltiza la funció \"%s\".",
"TopLinkTooltip": "Mostra els informes d'analítica web per %s.",
"WidgetNotFound": "Aquest giny no s'ha trobat",
"WidgetPreview": "Previsualitza el giny"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Přidat widget",
"AddPreviewedWidget": "Přidat widget v náhledu na nástěnku",
"ChangeDashboardLayout": "Změnit rozvržení nástěnky",
"CopyDashboardToUser": "Zkopírovat přehled uživateli",
"CreateNewDashboard": "Vytvořit novou nástěnku",
"Dashboard": "Nástěnka",
"DashboardCopied": "Přehled byl úspěšně zkopírován vybranému uživateli.",
"DashboardEmptyNotification": "Vaše nástěnka neobsahuje žádné widgety. Nějaké přidejte, nebo obnovte výchozí výběr widgetů na nástěnce.",
"DashboardName": "Jméno nástěnky:",
"DashboardOf": "Nástěnka %s",
"DefaultDashboard": "Výchozí nástěnka - používáte výchozí rozvržení nástěnky",
"DeleteWidgetConfirm": "Opravdu chcete odstranit tento widget z nástěnky?",
"EmptyDashboard": "Prázdná nástěnka - vyberte si své oblíbené widgety",
"LoadingWidget": "Načítání widgetu, chvíli strpení...",
"ManageDashboard": "Správa nástěnky",
"Maximise": "Maximalizovat",
"Minimise": "Minimalizovat",
"NotUndo": "Tuto operaci nemůžete vrátit zpět.",
"PluginDescription": "Vaše nástěnka analýzy webu. Přizpůsobte si vaši nástěnku přidáním nových widgetů, jejich přesunutím nebo změnou rozvržení sloupců. Každý uživatel může přizpůsobit svou vlastní nástěnku.",
"RemoveDashboard": "Odstranit nástěnku",
"RemoveDashboardConfirm": "Opravdu chcete odstranit nástěnku: %s?",
"RemoveDefaultDashboardNotPossible": "Výchozí nástěnka nemůže být odstraněna",
"RenameDashboard": "Přejmenovat nástěnku",
"ResetDashboard": "Obnovit nástěnku",
"ResetDashboardConfirm": "Opravdu chcete obnovit nastavení nástěnky do továrního stavu?",
"SelectDashboardLayout": "Prosím vyberte nové rozvržení nástěnky",
"SelectWidget": "Zvolte widget pro přidání na nástěnku",
"SetAsDefaultWidgets": "Nastavit výchozí výběr widgetů",
"SetAsDefaultWidgetsConfirm": "Opravdu chcete nastavit toto rozvržení widgetů jako výchozí?",
"SetAsDefaultWidgetsConfirmHelp": "Tyto widgety a jejich rozvržení budou použity vždy, když někdo vytvoří novou nástěnku nebo použije vlastnost %s.",
"TopLinkTooltip": "Zobraz analytické hlášení webu pro %s.",
"WidgetNotFound": "Widget nenalezen",
"WidgetPreview": "Náhled widgetu"
}
}

View File

@@ -0,0 +1,5 @@
{
"Dashboard": {
"Dashboard": "Dangosfwrdd"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Tilføj modul...",
"AddPreviewedWidget": "Tilføj forhåndsvist modul til kontrolpanelet.",
"ChangeDashboardLayout": "Skift udformning på kontrolpanel",
"CopyDashboardToUser": "Kopier kontrolpanel til bruger",
"CreateNewDashboard": "Opret nyt kontrolpanel",
"Dashboard": "Kontrolpanel",
"DashboardCopied": "Aktuelt kontrolpanel blev succesfuldt kopieret til den valgte bruger.",
"DashboardEmptyNotification": "Kontrolpanelet indeholder ikke nogen moduler. Start med at tilføje nogle moduler eller nulstille kontrolpanel til standard.",
"DashboardName": "Kontrolpanel navn:",
"DashboardOf": "Kontrolpanel af %s",
"DefaultDashboard": "Standard kontrolpanel - Bruger standard moduler og udformning",
"DeleteWidgetConfirm": "Bekræft fjernelse af modul fra kontrolpanelet?",
"EmptyDashboard": "Tomt kontrolpanel - Vælg favorit moduler",
"LoadingWidget": "Indlæser modul, vent...",
"ManageDashboard": "Administrer kontrolpanel",
"Maximise": "Maksimer",
"Minimise": "Minimer",
"NotUndo": "Handlingen kan ikke fortrydes.",
"PluginDescription": "Webanalyse kontrolpanel. Tilpas dit kontrolpanel ved at tilføje nye moduler, træk og slip dem rundt, og ændre kontrolpanelets kolonnelayout. Hver bruger kan styre deres eget brugerdefinerede kontrolpanel.",
"RemoveDashboard": "Fjern kontrolpanel",
"RemoveDashboardConfirm": "Bekræft fjernelse af kontrolpanel \"%s\"?",
"RemoveDefaultDashboardNotPossible": "Standard kontrolpanel kan ikke fjernes",
"RenameDashboard": "Omdøb kontrolpanel",
"ResetDashboard": "Nulstil kontrolpanel",
"ResetDashboardConfirm": "Nulstil kontrolpanel til standard?",
"SelectDashboardLayout": "Vælg ny udformning på kontrolpanel",
"SelectWidget": "Vælg modul, som skal tilføjes kontrolpanelet.",
"SetAsDefaultWidgets": "Indstil som standard modul valg",
"SetAsDefaultWidgetsConfirm": "Skal de nuværende modul udvælgelser og kontrolpanel udformning bruges som standard kontrolpanel skabelon?",
"SetAsDefaultWidgetsConfirmHelp": "Modul udvælgelse og kontrolpanelets udformning vil blive brugt når en bruger opretter et nyt kontrolpanel, eller når \"%s\" -funktionen bruges.",
"TopLinkTooltip": "Vis webanalyse-rapporter for %s.",
"WidgetNotFound": "Fandt ikke modul",
"WidgetPreview": "Forhåndsvisning af modul"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Ein Widget hinzufügen",
"AddPreviewedWidget": "Widget aus der Vorschau zum Dashboard hinzufügen",
"ChangeDashboardLayout": "Dashboardlayout verändern",
"CopyDashboardToUser": "Dashboard zu Benutzer kopieren",
"CreateNewDashboard": "Neues Dashboard erstellen",
"Dashboard": "Dashboard",
"DashboardCopied": "Aktuelles Dashboard wurde erfolgreich zum ausgewählten Benutzer kopiert.",
"DashboardEmptyNotification": "Ihr Dashboard enthält keine Widgets. Sie können jetzt Widgets hinzufügen oder das Dashboard auf die Standard Widgetauswahl zurücksetzen.",
"DashboardName": "Dashboard Name:",
"DashboardOf": "Dashboard von %s",
"DefaultDashboard": "Standard Dashboard - Verwendet Standardwidgets und Spaltenlayout",
"DeleteWidgetConfirm": "Wollen Sie wirklich dieses Widget vom Dashboard entfernen?",
"EmptyDashboard": "Leeres Dashboard - Bitte Widgets auswählen",
"LoadingWidget": "Lade Widget, bitte warten...",
"ManageDashboard": "Dashboard verwalten",
"Maximise": "Vergrößern",
"Minimise": "Minimieren",
"NotUndo": "Sie können diese Aktion nicht rückgängig machen.",
"PluginDescription": "Ihr Web Analyse Dashboard. Personalisieren Sie Ihr Dashboard, in dem Sie neue Widgets hinzufügen, per Drag und Drop herumschieben, und das Dashboard Spaltenlayout ändern. Jeder Benutzer kann sein eigenes personalisiertes Dashboard verwalten.",
"RemoveDashboard": "Dashboard entfernen",
"RemoveDashboardConfirm": "Sind Sie sicher, dass Sie das Dashboard \"%s\" löschen möchten?",
"RemoveDefaultDashboardNotPossible": "Das Standard-Dashboard kann nicht entfernt werden.",
"RenameDashboard": "Dashboard umbenennen",
"ResetDashboard": "Dashboard zurücksetzen",
"ResetDashboardConfirm": "Wollen Sie wirklich das Dashboardlayout auf die Standardeinstellungen zurücksetzen?",
"SelectDashboardLayout": "Bitte wählen Sie ein neues Dashboardlayout",
"SelectWidget": "Wählen Sie hier das Widget aus, welches zum Dashboard hinzugefügt werden soll",
"SetAsDefaultWidgets": "Als Standard Widgetauswahl speichern",
"SetAsDefaultWidgetsConfirm": "Sind Sie sicher, dass Sie die aktuelle Widgetauswahl und das Layout als das Standard Dashboardvorlage speichern möchten?",
"SetAsDefaultWidgetsConfirmHelp": "Diese Widgetauswahl und das aktuelle Spaltenlayout werden verwendet, wenn ein neues Dashboard erstellt wird oder wenn \"%s\" verwendet wird.",
"TopLinkTooltip": "Zeige Webanalytik Berichte für %s.",
"WidgetNotFound": "Widget nicht gefunden",
"WidgetPreview": "Widget-Vorschau"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Προσθήκη μικροεφαρμογής",
"AddPreviewedWidget": "Πατήστε για να προσθέσετε τη μικροεφαρμογή στον κεντρικό πίνακα",
"ChangeDashboardLayout": "Αλλαγή εμφάνισης κεντρικού πίνακα",
"CopyDashboardToUser": "Αντιγραφή κεντρικού πίνακα στο χρήστη",
"CreateNewDashboard": "Δημιουργία νέου κεντρικού πίνακα",
"Dashboard": "Κεντρικός Πίνακας",
"DashboardCopied": "Ο τρέχων κεντρικός πίνακας αντιγράφτηκε επιτυχώς στον επιλεγμένο χρήστη.",
"DashboardEmptyNotification": "Ο Κεντρικός σας Πίνακας δεν περιέχει μικροεφαρμογές. Ξεκινήστε βάζοντας ορισμένες ή απλά επαναφέρτε τον κεντρικό πίνακα στην προεπιλεγμένη διάταξη μικροεφαρμογών.",
"DashboardName": "Ονομασία κεντρικού πίνακα",
"DashboardOf": "Κεντρικός πίνακας του %s",
"DefaultDashboard": "Προεπιλεγμένος Κεντρικός Πίνακας - Χρήση επιλογής προεπιλεγμένων μικροεφαρμογών και διάταξης στηλών",
"DeleteWidgetConfirm": "Είστε σίγουρος ότι θέλετε να αφαιρέσετε αυτή τη μικροεφαρμογή από τον κεντρικό πίνακα;",
"EmptyDashboard": "Άδειασμα κεντρικού πίνακα - Επιλέξτε τις αγαπημένες μικροεφαρμογές σας",
"LoadingWidget": "Φόρτωση μικροεφαρμογής, περιμένετε...",
"ManageDashboard": "Διαχείριση Κεντρικού πίνακα",
"Maximise": "Μεγιστοποίηση",
"Minimise": "Ελαχιστοποίηση",
"NotUndo": "Αυτή η λειτουργεία δεν είναι αναστρέψιμη.",
"PluginDescription": "Ο κεντρικός πίνακας Αναλυτικών Ιστού. Προσαρμόστε τον πίνακα με την προσθήκη νέων γραφικών συστατικών, σύρτε και αφήστε τα όπου θέλετε και αλλάξτε την διάταξη στήλης του πίνακα. Κάθε χρήστης μπορεί να διαχειρίζεται τον δικό του πίνακα.",
"RemoveDashboard": "Απομάκρυνση κεντρικού πίνακα",
"RemoveDashboardConfirm": "Θέλετε, σίγουρα, να απομακρύνετε τον Κεντρικό Πίνακα «%s»;",
"RemoveDefaultDashboardNotPossible": "Ο προκαθορισμένος πίνακας εργαλείων δεν είναι δυνατό να αφαιρεθεί",
"RenameDashboard": "Μετονομασία κεντρικού πίνακα",
"ResetDashboard": "Επαναφορά κεντρικού πίνακα",
"ResetDashboardConfirm": "Θέλετε σίγουρα να επαναφέρετε τον κεντρικό σας πίνακα στις προεπιλεγμένες Μικροεφαρμογές;",
"SelectDashboardLayout": "Επιλέξτε τη νέα εμφάνιση κεντρικού πίνακα",
"SelectWidget": "Επιλέξτε τη μικροεφαρμογή για προσθήκη στον κεντρικό πίνακα",
"SetAsDefaultWidgets": "Ορισμός ως προεπιλεγμένης ομάδας μικροεφαρμογών",
"SetAsDefaultWidgetsConfirm": "Θέλετε, σίγουρα, να ορίσετε την τρέχουσα επιλογή μικροεφαρμογών και διάταξης κεντρικού πίνακα ως το προεπιλεγμένο πρότυπο κεντρικού πίνακα;",
"SetAsDefaultWidgetsConfirmHelp": "Αυτή η επιλογή μικροεφαρμογών και διάταξης στηλών κεντρικού πίνακα θα χρησιμοποιηθεί όταν κάθε χρήστης δημιουργεί έναν νέο κεντρικό πίνακα ή όταν το χαρακτηριστικό «%s» χρησιμοποιείται.",
"TopLinkTooltip": "Προβολή αναφορών Στατιστικών Ιστού για %s.",
"WidgetNotFound": "Η Μικροεφαρμογή δεν βρέθηκε",
"WidgetPreview": "Προεπισκόπηση Μικροεφαρμογής"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Add a widget",
"AddPreviewedWidget": "Click to add widget to the dashboard",
"ChangeDashboardLayout": "Change dashboard layout",
"CopyDashboardToUser": "Copy dashboard to user",
"CreateNewDashboard": "Create new dashboard",
"Dashboard": "Dashboard",
"DashboardCopied": "Current dashboard successfully copied to selected user.",
"DashboardEmptyNotification": "Your Dashboard does not contain any widgets. Start by adding some widgets or just reset the dashboard to the default widget selection.",
"DashboardName": "Dashboard name:",
"DashboardOf": "Dashboard of %s",
"DefaultDashboard": "Default dashboard - Using default widgets selection and columns layout",
"DeleteWidgetConfirm": "Are you sure you want to delete this widget from the dashboard?",
"EmptyDashboard": "Empty dashboard - Pick your favorite widgets",
"LoadingWidget": "Loading widget, please wait...",
"ManageDashboard": "Manage dashboard",
"Maximise": "Maximise",
"Minimise": "Minimise",
"NotUndo": "You will not be able to undo this operation.",
"PluginDescription": "Your Web Analytics Dashboard. Customise your dashboard by adding new widgets, drag and drop them around, and change the dashboard column layout. Each user can manage their own custom dashboard.",
"RemoveDashboard": "Remove dashboard",
"RemoveDashboardConfirm": "Are you sure you want to remove the dashboard \"%s\"?",
"RemoveDefaultDashboardNotPossible": "The default dashboard cannot be removed",
"RenameDashboard": "Rename dashboard",
"ResetDashboard": "Reset dashboard",
"ResetDashboardConfirm": "Are you sure you want to reset your dashboard layout to the default Widgets selection?",
"SelectDashboardLayout": "Please select your new dashboard layout",
"SelectWidget": "Select the widget to add in the dashboard",
"SetAsDefaultWidgets": "Set as default widgets selection",
"SetAsDefaultWidgetsConfirm": "Are you sure you want to set the current widgets selection and dashboard layout as the default dashboard template?",
"SetAsDefaultWidgetsConfirmHelp": "This widgets selection and dashboard columns layout will be used when any user creates a new dashboard, or when \"%s\" feature is used.",
"TopLinkTooltip": "View Web Analytics reports for %s.",
"WidgetNotFound": "Widget not found",
"WidgetPreview": "Widget preview"
}
}

View File

@@ -0,0 +1,5 @@
{
"Dashboard": {
"Dashboard": "Panelo"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Agregá un widget",
"AddPreviewedWidget": "Hacé clic para agregar el widget al panel",
"ChangeDashboardLayout": "Cambiar el diseño del panel",
"CopyDashboardToUser": "Copiar panel al usuario",
"CreateNewDashboard": "Crear nuevo panel",
"Dashboard": "Panel",
"DashboardCopied": "Se copió exitosamente el panel actual al usuario seleccionado.",
"DashboardEmptyNotification": "Tu panel no contiene ningún widget. Comenzá agregando alguno o simplemente reiniciá el panel a la selección predeterminada de widgets.",
"DashboardName": "Nombre del panel:",
"DashboardOf": "Panel de %s",
"DefaultDashboard": "Panel predeterminado - Usando la selección de widgets y diseño de columnas predeterminado",
"DeleteWidgetConfirm": "¿Estás seguro que querés eliminar este widget del panel?",
"EmptyDashboard": "Panel vacío - Elegí tus widgets favoritos",
"LoadingWidget": "Cargando widget. Por favor, esperá…",
"ManageDashboard": "Administrar panel",
"Maximise": "Maximizar",
"Minimise": "Minimizar",
"NotUndo": "No podrás deshacer esta operación.",
"PluginDescription": "Tu panel de análisis web. Personalizá tu panel agregando nuevos widgets, arrastrándolos y soltándolos, y cambiando el diseño de las columnas del panel. Cada usuario puede administrar su propio panel personalizado.",
"RemoveDashboard": "Quitar panel",
"RemoveDashboardConfirm": "¿Estás seguro que querés eliminar el panel \"%s\"?",
"RemoveDefaultDashboardNotPossible": "No se puede quitar el panel predeterminado",
"RenameDashboard": "Renombrar el panel",
"ResetDashboard": "Reiniciar panel",
"ResetDashboardConfirm": "¿Estás seguro que querés restablecer el diseño de tu panel a la selección predeterminada de widgets?",
"SelectDashboardLayout": "Por favor, seleccioná tu nuevo diseño de panel",
"SelectWidget": "Seleccioná el widget para agregar en el panel",
"SetAsDefaultWidgets": "Establecer como selección predeterminada de widgets",
"SetAsDefaultWidgetsConfirm": "¿Estás seguro que querés establecer la selección actual de widgets y el diseño del panel como la plantilla predeterminada?",
"SetAsDefaultWidgetsConfirmHelp": "Esta selección de widgets y diseño de columnas del panel será usada cuando un usuario cree un nuevo panel o cuando se use la función \"%s\".",
"TopLinkTooltip": "Ver informes de análisis web para %s.",
"WidgetNotFound": "Widget no encontrado",
"WidgetPreview": "Previsualización del Widget"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Añadir un módulo",
"AddPreviewedWidget": "Añade el módulo al panel de control",
"ChangeDashboardLayout": "Modificar distribución del tablero",
"CopyDashboardToUser": "Copiar tablero al usuario",
"CreateNewDashboard": "Crear nuevo tablero",
"Dashboard": "Tablero",
"DashboardCopied": "Actual tablero copiado exitosamente al usuario seleccionado.",
"DashboardEmptyNotification": "Su panel de control no contiene ningún módulo. Comience añadiendo alguno o restablezca el panel de control con la selección de módulos por defecto.",
"DashboardName": "Nombre del tablero:",
"DashboardOf": "Tablero de %s",
"DefaultDashboard": "Panel de control por defecto - Usando la selección por defecto de módulos y la disposición de columnas",
"DeleteWidgetConfirm": "¿Está seguro que desea borrar este módulo de su panel de control?",
"EmptyDashboard": "Panel de control vacío - Elija sus módulos preferidos",
"LoadingWidget": "Cargando módulo, por favor espere...",
"ManageDashboard": "Configurar el tablero",
"Maximise": "Maximizar",
"Minimise": "Minimizar",
"NotUndo": "No podrá deshacer esta operación.",
"PluginDescription": "Su panel de control. Personalice su tablero añadiendo nuevos módulos arrastrándolos y soltándolos; cambie la disposición de las columnas del panel de control. Cada usuario puede administrar su propio panel de control personalizado.",
"RemoveDashboard": "Elimina el tablero",
"RemoveDashboardConfirm": "¿Está seguro que desea eliminar el tablero \"%s\"?",
"RemoveDefaultDashboardNotPossible": "El tablero predeterminado no puede ser eliminado",
"RenameDashboard": "Renombrar el tablero",
"ResetDashboard": "Reinicia el tablero",
"ResetDashboardConfirm": "¿Realmente desea restablecer la distribución del panel de control y regresar a la selección de módulos por defecto ?",
"SelectDashboardLayout": "Por favor seleccione su nueva distribución de tablero",
"SelectWidget": "Selecciona el módulo para añadirlo al panel de control",
"SetAsDefaultWidgets": "Establecer como selección de módulos por defecto",
"SetAsDefaultWidgetsConfirm": "¿Está seguro que desea establecer esta selección y disposición de tablero como la plantilla de tablero por defecto?",
"SetAsDefaultWidgetsConfirmHelp": "Esta selección de módulos y disposición de columnas del panel de control será usada cuando un usuario cree un nuevo panel de control o cuando se use la función \"%s\".",
"TopLinkTooltip": "Ver los reportes de Análisis de internet para %s.",
"WidgetNotFound": "Reproductor no encontrado",
"WidgetPreview": "Previsualización del reproductor"
}
}

View File

@@ -0,0 +1,28 @@
{
"Dashboard": {
"AddAWidget": "Lisa vidin",
"AddPreviewedWidget": "Vali et lisada vidin töölauale",
"ChangeDashboardLayout": "Muuda töölaua paigutust",
"CopyDashboardToUser": "Kopeeri töölaud kasutajale",
"CreateNewDashboard": "Loo uus töölaud",
"Dashboard": "Töölaud",
"DashboardName": "Töölaua nimi:",
"DashboardOf": "%s töölaud",
"DefaultDashboard": "Vaikimisi töölaud - kasutab vaikimisi vidinaid ja paigutust",
"DeleteWidgetConfirm": "Oled sa kindel selle mooduli kustutamises oma töölaualt?",
"EmptyDashboard": "Tühi töölaud - vali oma lemmik vidinad",
"LoadingWidget": "Laen moodulit, palun oota...",
"ManageDashboard": "Halda töölauda",
"Maximise": "Maksimeeri",
"Minimise": "Minimeeri",
"NotUndo": "Sul ei ole võimalik antud tegevust tagasi võtta.",
"RemoveDashboard": "Eemalda töölaud",
"RenameDashboard": "Nimeta töölaud ümber",
"ResetDashboard": "Algseadista töölaud",
"SelectWidget": "Vali töölauale lisatav moodul",
"SetAsDefaultWidgets": "Määra vaikimisi valitud vidinateks",
"TopLinkTooltip": "Kuva veebianalüütika raport lehele %s.",
"WidgetNotFound": "Moodulit ei leitud",
"WidgetPreview": "Vidina eelvaade"
}
}

View File

@@ -0,0 +1,11 @@
{
"Dashboard": {
"AddPreviewedWidget": "Gehitu arbelean aurrebistako widget-a",
"Dashboard": "Arbela",
"DeleteWidgetConfirm": "Ziur zaude widget hau arbeletik ezabatu nahi duzula?",
"LoadingWidget": "Widget-a kargatzen, itxaron mesedez...",
"SelectWidget": "Hautatu arbelean gehitzeko widget-a",
"WidgetNotFound": "Ez da widget-a aurkitu",
"WidgetPreview": "Widget-aren aurrebista"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "اضافه کردن یک ابزار",
"AddPreviewedWidget": "برای اضافه کردن یک ابزار به داشبورد اینجا کلیک کنید",
"ChangeDashboardLayout": "تغییر طرح داشبورد",
"CopyDashboardToUser": "اضافه کردن داشبورد به کاربر",
"CreateNewDashboard": "ایجاد داشبورد جدید",
"Dashboard": "داشبورد",
"DashboardCopied": "همین داشبورد با موفقیت به کاربر انتخاب شده کپی شد.",
"DashboardEmptyNotification": "صفحه شما هر ویدجت نیست. شروع با اضافه کردن برخی از ویدجت و یا تنظیم مجدد داشبورد به انتخاب پیش فرض ویجت.",
"DashboardName": "نام داشبورد:",
"DashboardOf": "داشبورد %s",
"DefaultDashboard": "داشبورد پیش فرض - با استفاده از ابزارهای پیش فرض و طرح ستونی",
"DeleteWidgetConfirm": "آیا شما مطمئن هستید که می خواهید این ابزار را از داشبورد حذف کنید؟",
"EmptyDashboard": "داشبورد خالی - ویدجت های مورد علاقه خود را انتخاب کنید",
"LoadingWidget": "در حال بارگزاری ابزار، لطفا منتظر بمانید...",
"ManageDashboard": "مدیریت داشبورد",
"Maximise": "ماکسمیاز",
"Minimise": "حداقل",
"NotUndo": "شما قادر نخواهد بود برای خنثیسازی این عملیات است.",
"PluginDescription": "داشبورد داده‌های تحلیلی سایت شما. داشبورد خود را با افزودن ابزارک‌ها جدید، برداشتن و گذاشتن در مکان‌های مختلف، و تغییر چیدمان ستون‌های داشبورد سفارشی کنید. هر کاربر می‌تواند داشبورد سفارشی خود را مدیریت کند.",
"RemoveDashboard": "حذف داشبورد",
"RemoveDashboardConfirm": "آیا شما مطمئن هستید که می خواهید این داشبورد %s را پاک کنید؟",
"RemoveDefaultDashboardNotPossible": "داشبورد پیشفرض قابل حذف نیست",
"RenameDashboard": "تغییر نام داشبورد",
"ResetDashboard": "تنظیم مجدد داشبورد",
"ResetDashboardConfirm": "آیا شما واقعا طرح داشبورد خود را به تنظیم مجدد به طور پیش فرض انتخاب ابزارک می خواهم؟",
"SelectDashboardLayout": "لطفا طرح داشبورد جدید خود را انتخاب کنید",
"SelectWidget": "یک ابزار برای اضافه کردن در داشبورد انتخاب کنید",
"SetAsDefaultWidgets": "قرار دادن به عنوان پیش فرض انتخاب ویدجت",
"SetAsDefaultWidgetsConfirm": "آیا شما مطمئن هستید که می خواهید به مجموعه فعلی انتخاب ویدجت ها و طرح داشبورد به عنوان قالب پیش فرض داشبورد؟",
"SetAsDefaultWidgetsConfirmHelp": "این ابزارک‌ها و چیدمان ستون‌های داشبورد برای هر کاربر که داشبورد جدید می‌سازد و یا وقتی ویژگی \"%s\" به کار برده می‌شود، استفاده خواهد شد.",
"TopLinkTooltip": "گزارش های داده های آماری %s را ببینید.",
"WidgetNotFound": "ابزار پیدا نشد",
"WidgetPreview": "پیش نمایش ابزار"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Lisää vimpain",
"AddPreviewedWidget": "Lisää esikatseltu vimpain työpöydälle",
"ChangeDashboardLayout": "Vaihda työpöydän asettelua",
"CopyDashboardToUser": "Kopioi työpöytä käyttäjälle",
"CreateNewDashboard": "Luo uusi näkymä",
"Dashboard": "Työpöytä",
"DashboardCopied": "Nykyinen paneeli on kopioitu onnistuneesti valitulle käyttäjälle.",
"DashboardEmptyNotification": "Työpöytäsi on tyhjä. Voit aloittaa lisäämällä elementtejä tai resetoimalla työpöydän oletusasetuksiin.",
"DashboardName": "Näkymän nimi:",
"DashboardOf": "Työpöytä: %s",
"DefaultDashboard": "Oletusnäkymä - käytössä on oletusvalikoima ja -asettelu",
"DeleteWidgetConfirm": "Haluatko varmasti poistaa vimpaimen työpöydältä?",
"EmptyDashboard": "Tyhjä näkymä - valitse vimpaimia",
"LoadingWidget": "Ladataan vimpainta, odota...",
"ManageDashboard": "Muokkaa näkymää",
"Maximise": "Suurenna",
"Minimise": "Pienennä",
"NotUndo": "Et voi peruuttaa tätä operaatiota.",
"PluginDescription": "Web-analytiikkojen työpöytä. Muokkaa työpöytääsi lisäämällä uusia osia, siirtämällä osia eri kohtiin, ja vaihtamalla työpöydän sisältöä. Jokainen käyttäjä voi hallita omaa työpöytäänsä.",
"RemoveDashboard": "Poista näkymä",
"RemoveDashboardConfirm": "Haluatko varmasti poistaa työpöydän \"%s\"?",
"RemoveDefaultDashboardNotPossible": "Oletustyöpöytää ei voi poistaa",
"RenameDashboard": "Uudelleenimeä näkymä",
"ResetDashboard": "Nollaa työpöytä",
"ResetDashboardConfirm": "Haluatko varmasti nollata työpöydän asettelun takaisin oletusasetuksiin?",
"SelectDashboardLayout": "Valitse uusi työpöydän asettelu",
"SelectWidget": "Valitse työpöydälle lisättävä vimpain",
"SetAsDefaultWidgets": "Aseta oletusvalikoimaksi",
"SetAsDefaultWidgetsConfirm": "Haluatko varmasti tallentaa nykyisen työpöydän oletusasetukseksi?",
"SetAsDefaultWidgetsConfirmHelp": "Tätä työpöytää käytetään kun kuka tahansa käyttäjistä luo uuden työpöydän tai kun ominaisuutta \"%s\" käytetään.",
"TopLinkTooltip": "Katso analytiikkaa %s",
"WidgetNotFound": "Vimpainta ei löydy",
"WidgetPreview": "Vimpaimen esikatselu"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Ajouter un gadget",
"AddPreviewedWidget": "Ajouter le widget visualisé au tableau de bord",
"ChangeDashboardLayout": "Modifier la mise en page du tableau de bord",
"CopyDashboardToUser": "Copier le tableau de bord vers l'utilisateur",
"CreateNewDashboard": "Créer un nouveau tableau de bord",
"Dashboard": "Tableau de bord",
"DashboardCopied": "Tableau de bord actuel copié avec succès vers l'utilisateur sélectionné.",
"DashboardEmptyNotification": "Votre tableau de bord ne contient aucun gadget. Commencez par ajouter quelques gadgets ou réinitialisez le tableau de bord à la sélection de gadgets par défaut.",
"DashboardName": "Nom du tableau de bord :",
"DashboardOf": "Tableau de bord de %s",
"DefaultDashboard": "Tableau de bord par défaut - Utilisant la sélection de gadgets par défaut et la disposition des colonnes.",
"DeleteWidgetConfirm": "Êtes-vous sûr de vouloir supprimer ce widget du tableau de bord ?",
"EmptyDashboard": "Tableau de bord vide - Sélectionnez vos gadgets favoris",
"LoadingWidget": "Chargement du widget, patientez svp...",
"ManageDashboard": "Gérer le tableau de bord",
"Maximise": "Maximiser",
"Minimise": "Minimiser",
"NotUndo": "Vous ne pourrez pas annuler cette action.",
"PluginDescription": "Votre tableau de bord, personnalisez le en ajoutant des widgets, en les déplaçant et en modifiant la disposition des colonnes. Chaque utilisateur possède son propre tableau de bord.",
"RemoveDashboard": "Supprimer le tableau de bord",
"RemoveDashboardConfirm": "Êtes vous sûr(e) de vouloir supprimer le tableau de bord \"%s\" ?",
"RemoveDefaultDashboardNotPossible": "Le tableau de bord par défaut ne peut pas être supprimé",
"RenameDashboard": "Renommer le tableau de bord",
"ResetDashboard": "Restaurer le tableau de bord",
"ResetDashboardConfirm": "Voulez-vous vraiment restaurer votre tableau de bord avec les widgets par défaut ?",
"SelectDashboardLayout": "Veuillez sélectionner votre nouvelle mise en page pour le tableau de bord",
"SelectWidget": "Sélectionnez le widget à ajouter au tableau de bord",
"SetAsDefaultWidgets": "Définir comme sélection de gadgets par défaut",
"SetAsDefaultWidgetsConfirm": "Êtes vous sûr(e) de vouloir définir la sélection de gadgets actuelle et la disposition actuelle du tableau de bord comme modèle par défaut?",
"SetAsDefaultWidgetsConfirmHelp": "Cette sélection de gadgets et cette disposition du tableau de bord seront utilisées à chaque création de tableau de bord par n'importe quel utilisateur ou quand la fonctionnalité \"%s\" est utilisée.",
"TopLinkTooltip": "Afficher les rapport de statistiques web pour %s.",
"WidgetNotFound": "Widget introuvable",
"WidgetPreview": "Prévisualisation du Widget"
}
}

View File

@@ -0,0 +1,13 @@
{
"Dashboard": {
"AddAWidget": "Engadir un trebello",
"Dashboard": "Tableiro",
"DeleteWidgetConfirm": "¿Está seguro de que desexa borrar este widget desde el tablón?",
"LoadingWidget": "Cargando widget, agarde por favor...",
"Maximise": "Maximizar",
"Minimise": "Minimizar",
"NotUndo": "Non lle será posíbel desfacer esta operación.",
"SelectWidget": "Seleccione un widget para engadilo no tablón",
"WidgetNotFound": "Trebello non atopado"
}
}

View File

@@ -0,0 +1,17 @@
{
"Dashboard": {
"AddAWidget": "הוספת וידג'ט",
"AddPreviewedWidget": "הוספת היישומון המוצג לפאנל הסקירה",
"CreateNewDashboard": "יצירת לוח בקרה חדש",
"Dashboard": "פאנל סקירה",
"DashboardName": "שם לוח בקרה:",
"DeleteWidgetConfirm": "למחוק את היישומון מפאנל הסקירה? 100%?",
"LoadingWidget": "טוען יישומון, נא להמתין...",
"ManageDashboard": "ניהול לוח בקרה",
"Maximise": "הגדלה",
"RenameDashboard": "שינוי שם לוח בקרה",
"SelectWidget": "בחירת היישומון להוספה לפאנל הסקירה",
"WidgetNotFound": "יישומון לא נמצא",
"WidgetPreview": "הצגת יישומון"
}
}

View File

@@ -0,0 +1,35 @@
{
"Dashboard": {
"AddAWidget": "एक विजेट जोड़ें",
"AddPreviewedWidget": "डैशबोर्ड विजेट जोड़ने के लिए क्लिक करें",
"ChangeDashboardLayout": "डैशबोर्ड अभिन्यास बदलें",
"CopyDashboardToUser": "उपयोगकर्ता के लिए डैशबोर्ड कॉपी करें",
"CreateNewDashboard": "नया डैशबोर्ड बनाएँ",
"Dashboard": "डैशबोर्ड",
"DashboardCopied": "वर्तमान डैशबोर्ड सफलतापूर्वक चयनित उपयोगकर्ता के लिए नकल की.",
"DashboardEmptyNotification": "अपने डैशबोर्ड पर कोई भी विगेट्स शामिल नहीं है. कुछ विगेट्स जोड़ने से शुरू करो या बस डिफ़ॉल्ट विजेट चयन करने के लिए डैशबोर्ड रीसेट करें.",
"DashboardName": "डैशबोर्ड नाम:",
"DashboardOf": "%s से डैशबोर्ड",
"DefaultDashboard": "डिफ़ॉल्ट डैशबोर्ड - डिफ़ॉल्ट विगेट्स चयन और कॉलम लेआउट का उपयोग करना",
"DeleteWidgetConfirm": "आप सुनिश्चित कर रहे हैं आप डैशबोर्ड से इस विजेट को हटाना चाहते हैं?",
"EmptyDashboard": "खाली डैशबोर्ड - अपने पसंदीदा विगेट्स उठाओ",
"LoadingWidget": "विजेट लोड हो रहा है, कृपया प्रतीक्षा करें ...",
"ManageDashboard": "डैशबोर्ड प्रबंधन",
"Maximise": "अधिकतम",
"Minimise": "कम से कम",
"NotUndo": "आप इस कार्रवाई को पूर्ववत् करने सक्षम नहीं होंगे.",
"RemoveDashboard": "डैशबोर्ड को हटाएँ",
"RemoveDashboardConfirm": "आप सुनिश्चित कर रहे हैं, आप \"%s\" डैशबोर्ड को हटाना चाहते हैं?",
"RenameDashboard": "डैशबोर्ड का नाम बदलें",
"ResetDashboard": "डैशबोर्ड पुनःआरंभ करें",
"ResetDashboardConfirm": "आप सुनिश्चित कर रहे हैं आप डिफ़ॉल्ट विजेट चयन करने के लिए अपने डैशबोर्ड अभिन्यास पुनःआरंभ करना चाहते हैं?",
"SelectDashboardLayout": "अपना नया डैशबोर्ड अभिन्यास का चयन करें",
"SelectWidget": "डैशबोर्ड में जोड़ने के लिए विजेट का चयन करें",
"SetAsDefaultWidgets": "डिफ़ॉल्ट विगेट्स चयन के रूप में सेट करें",
"SetAsDefaultWidgetsConfirm": "आप सुनिश्चित कर रहे हैं, आप डिफ़ॉल्ट डैशबोर्ड टेम्पलेट के रूप में मौजूदा विगेट्स चयन और डैशबोर्ड अभिन्यास सेट करना चाहते हैं?",
"SetAsDefaultWidgetsConfirmHelp": "इस विगेट्स चयन और डैशबोर्ड कॉलम अभिन्यास का उपयोग किया जाएगा जब कोई उपयोगकर्ता एक नया डैशबोर्ड बनाता है, या जब \"%s\" सुविधा का उपयोग करता है.",
"TopLinkTooltip": "%s के लिए वेब विश्लेषिकी रिपोर्ट देखें",
"WidgetNotFound": "विजेट नहीं मिला",
"WidgetPreview": "विजेट पूर्वावलोकन"
}
}

View File

@@ -0,0 +1,17 @@
{
"Dashboard": {
"AddAWidget": "Dodaj novi widget",
"AddPreviewedWidget": "Klikni za dodati widget na kontrolnu ploču",
"Dashboard": "Kontrolna ploča",
"DashboardName": "Naziv kontrolne ploče:",
"DashboardOf": "Kontrolna ploča %s",
"LoadingWidget": "Učitavanje widgeta, molimo pričekajte...",
"ManageDashboard": "Manage dashboard",
"Maximise": "Uvečaj",
"Minimise": "Smanji",
"RemoveDashboard": "Ukloni kontrolnu ploču",
"RenameDashboard": "Preimenuj kontrolnu ploču",
"SelectWidget": "Odaberi widget za dodati na kontrolnu ploču",
"WidgetPreview": "Predpregled widgeta"
}
}

View File

@@ -0,0 +1,13 @@
{
"Dashboard": {
"AddPreviewedWidget": "Add hozzá a megtekintett modult a vezérlőpultodhoz",
"Dashboard": "Vezérlőpult",
"DeleteWidgetConfirm": "Biztosan törölni akarod ezt a modult a vezérlőpultról?",
"LoadingWidget": "Modul betöltése folyamatban. Kérjük, várj…",
"Maximise": "Maximalizál",
"Minimise": "Minimalizál",
"SelectWidget": "Válaszd ki melyik modult szeretnéd hozzáadni a vezérlőpulthoz!",
"WidgetNotFound": "A modul nem található",
"WidgetPreview": "Modul előnézete"
}
}

View File

@@ -0,0 +1,35 @@
{
"Dashboard": {
"AddAWidget": "Tambah sebuah gawit",
"AddPreviewedWidget": "Tambah pratinjau gawit ke Panel Kendali",
"ChangeDashboardLayout": "Ubah tata letak panel kendali",
"CopyDashboardToUser": "Salin panel kendali ke pengguna",
"CreateNewDashboard": "Buat panel kendali baru",
"Dashboard": "Panel Kendali",
"DashboardCopied": "Panel kendali berikut ini berhasil disalin ke pengguna terpilih.",
"DashboardEmptyNotification": "Panel kendali Anda tidak mengandung gawit apapun. Mulai dengan menambah beberapa gawit atau dengan mengatur ulang panel ke pengaturan asali gawit.",
"DashboardName": "Nama panel kendali:",
"DashboardOf": "Panel kendali %s",
"DefaultDashboard": "Panel kendali asali - Menggunakan pengaturan tata letak dan kolom gawit",
"DeleteWidgetConfirm": "Apakah Anda yakin ingin menghapus gawit ini dari Panel Kendali?",
"EmptyDashboard": "Panel kendali kosong - Pilih gawit pilihan Anda",
"LoadingWidget": "Memuat gawit, mohon tunggu...",
"ManageDashboard": "Atur panel kendali",
"Maximise": "Maksimalkan",
"Minimise": "Minimalkan",
"NotUndo": "Anda tak dapat mengembalikan tidakan ini.",
"RemoveDashboard": "Hapus panel kendali",
"RemoveDashboardConfirm": "Apakah Anda yakin ingin menghapus panel kendali \"%s\"?",
"RenameDashboard": "Ubah nama panel kendali",
"ResetDashboard": "Atur ulang panel kendali",
"ResetDashboardConfirm": "Apakah Anda yakin mengatur ulang tata letak panel kendali Anda ke pengaturan asali Gawit?",
"SelectDashboardLayout": "Harap memilih tat letak panel baru untuk kendali Anda",
"SelectWidget": "Pilih gawit ditambah ke Panel Kendali",
"SetAsDefaultWidgets": "Atur sebagai pengaturan asali gawit",
"SetAsDefaultWidgetsConfirm": "Apakah Anda yakin mengatur pengaturan gawit dan tata letak panel kendali saat ini sebagai templat asali panel kendali?",
"SetAsDefaultWidgetsConfirmHelp": "Pengaturan gawit dan tata letak kolom panel kendali akan digunakan saat pengguna membuat panel kendali baru, atau saat fitur \"%s\" digunakan.",
"TopLinkTooltip": "Tampilkn laporan Analitus Ramatraya untuk %s.",
"WidgetNotFound": "Gawit tak ditemukan",
"WidgetPreview": "Pratinjau Gawit"
}
}

View File

@@ -0,0 +1,12 @@
{
"Dashboard": {
"AddPreviewedWidget": "Bæta forskoðuðum aukahlut á skjáborðið",
"Dashboard": "Skjáborð",
"DeleteWidgetConfirm": "Ertu viss um að þú viljir eyða þessum aukahlut af skjáborðinu.",
"LoadingWidget": "Hleð inn aukahlut, vinsamlegast bíðið...",
"Maximise": "Hámarka",
"SelectWidget": "Veldu aukahlutinn til að bæta við skjáborðið",
"WidgetNotFound": "Aukahlutur fannst ekki",
"WidgetPreview": "Forskoðun á aukahlut"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Aggiungi un widget",
"AddPreviewedWidget": "Clicca per aggiungere un widget alla dashboard",
"ChangeDashboardLayout": "Cambia il layout della dashboard",
"CopyDashboardToUser": "Copia la dashboard a un utente",
"CreateNewDashboard": "Crea una nuova dasboard",
"Dashboard": "Dashboard",
"DashboardCopied": "La dashboard corrente è stata copiata con successo all'utente selezionato.",
"DashboardEmptyNotification": "La tua dashboard non contiene widget. Inizia con l'aggiunta di alcuni widget o semplicemente resetta il pannello alla selezione widget predefinita.",
"DashboardName": "Nome della dashboard:",
"DashboardOf": "Dashboard di %s",
"DefaultDashboard": "Dashboard predefinita - Utilizza la selezione di widget e le colonne di layout predefinite",
"DeleteWidgetConfirm": "Sei sicuro di voler eliminare il widget dalla dashboard?",
"EmptyDashboard": "Dashboard vuota - Scegli i tuoi widget preferiti",
"LoadingWidget": "Caricamento widget, attendere...",
"ManageDashboard": "Gestione dashboard",
"Maximise": "Espandi",
"Minimise": "Minimizza",
"NotUndo": "Non sarà possibile annullare questa operazione.",
"PluginDescription": "La tua Dashboard delle Statistiche Web. Personalizzala aggiungendo nuovi widgets, trascinandoli e spostandoli e cambiando l'aspetto delle colonne. Ciascun utente può gestire una propria dashboard.",
"RemoveDashboard": "Rimuovi la dashboard",
"RemoveDashboardConfirm": "Sei sicuro di voler rimuovere la dashboard \"%s\"?",
"RemoveDefaultDashboardNotPossible": "La dashboard predefinita non può essere eliminata",
"RenameDashboard": "Rinomina dashboard",
"ResetDashboard": "Reimposta la dashboard",
"ResetDashboardConfirm": "Sei sicuro di voler ripristinare il layout della dashboard alla selezione di widget predefinita?",
"SelectDashboardLayout": "Si prega di selezionare il layout della nuova dashboard",
"SelectWidget": "Seleziona il widget da aggiungere nella dashboard",
"SetAsDefaultWidgets": "Imposta come selezione predefinita di widget",
"SetAsDefaultWidgetsConfirm": "Sei sicuro di voler impostare la selezione corrente di widget e il layout del pannello come modello predefinito?",
"SetAsDefaultWidgetsConfirmHelp": "Questa selezione di widget e il layout colonne saranno utilizzate quando un utente creerà una nuova dashboard o quando verrà utilizzata la funzione \"%s\".",
"TopLinkTooltip": "Visualizza report Web Analytics per %s.",
"WidgetNotFound": "Widget non trovato",
"WidgetPreview": "Anteprima del widget"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "ウィジェットの追加",
"AddPreviewedWidget": "プレビューされたウィジェットをダッシュボードに追加します",
"ChangeDashboardLayout": "ダッシュボードのレイアウトを変更する",
"CopyDashboardToUser": "ダッシュボードをユーザーへコピーする",
"CreateNewDashboard": "新しいダッシュボードを作成する",
"Dashboard": "ダッシュボード",
"DashboardCopied": "現在のダッシュボードは選択したユーザーへコピーされました。",
"DashboardEmptyNotification": "ダッシュボードには一つもウィジェットがありません。ダッシュボードにウィジェットを追加するか、あるいはダッシュボードをデフォルトのウィジェットにリセットしてから始めてください。",
"DashboardName": "ダッシュボード名:",
"DashboardOf": "%s のダッシュボード",
"DefaultDashboard": "デフォルトのダッシュボード - デフォルトのウィジェットとカラムレイアウトを使用します",
"DeleteWidgetConfirm": "本当にこのウィジェットをダッシュボードから削除しますか?",
"EmptyDashboard": "空のダッシュボード - お好みのウィジェットを選択してください",
"LoadingWidget": "ウィジェットを読み込んでいます...",
"ManageDashboard": "ダッシュボードの管理",
"Maximise": "最大化",
"Minimise": "最小化",
"NotUndo": "この操作は取り消せません。",
"PluginDescription": "ユーザーの Web Analytics のダッシュ ボード。新しいウィジェットを追加することによって、ダッシュ ボードをカスタマイズ、ドラッグ アンドドロップしでダッシュ ボードのカラムのレイアウトを変更します。各ユーザーは、独自のカスタム ダッシュ ボードを管理できます。",
"RemoveDashboard": "ダッシュボードの削除",
"RemoveDashboardConfirm": "本当にダッシュボード \"%s\" を削除しますか?",
"RemoveDefaultDashboardNotPossible": "既定のダッシュ ボードを削除できません。",
"RenameDashboard": "ダッシュボードの名前を変更する",
"ResetDashboard": "ダッシュボードのリセット",
"ResetDashboardConfirm": "ダッシュボードのレイアウトをリセットしてデフォルトのウィジェットに戻しますか?",
"SelectDashboardLayout": "新しいダッシュボードのレイアウトを選択してください",
"SelectWidget": "ダッシュボードに追加するウィジェットの選択",
"SetAsDefaultWidgets": "デフォルトのウィジェットとして設定する",
"SetAsDefaultWidgetsConfirm": "現在のウィジェットとダッシュボードのレイアウトをデフォルトのテンプレートとして設定しますか?",
"SetAsDefaultWidgetsConfirmHelp": "これらのウィジェットとダッシュボードのレイアウトは、新規ダッシュボードの作成時か、あるいは %s 機能の使用時に使われれます。",
"TopLinkTooltip": "%s のウェブ解析レポートを表示",
"WidgetNotFound": "ウィジェットが見つかりませんでした",
"WidgetPreview": "ウィジェットのプレビュー"
}
}

View File

@@ -0,0 +1,12 @@
{
"Dashboard": {
"AddPreviewedWidget": "დაამატეთ ნანახი ვიჯეტი საინფორმაციო დაფას",
"Dashboard": "საინფორმაციო დაფა",
"DeleteWidgetConfirm": "დარწმუნებული ხართ, რომ გსურთ ვიჯეტის წაშლა ინსრუმენტთა პანელიდან?",
"LoadingWidget": "ვიჯეტი იტვირთება, გთხოვთ დაიცადოთ...",
"Maximise": "მაქსიმალურად გადიდება",
"SelectWidget": "შეარჩიეთ საინფორმაციო დაფაზე დასამატებელი ვიჯეტი",
"WidgetNotFound": "ვიჯეტი არ მოიძებნა",
"WidgetPreview": "ვიჯეტის ნახვა"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "위젯 추가",
"AddPreviewedWidget": "대시보드에 미리보기된 위젯 추가",
"ChangeDashboardLayout": "대시보드 레이아웃 변경",
"CopyDashboardToUser": "대시보드를 사용자에게 복사",
"CreateNewDashboard": "새로운 대시보드 만들기",
"Dashboard": "대시보드",
"DashboardCopied": "대시보드가 선택한 사용자에게 성공적으로 복사되었습니다.",
"DashboardEmptyNotification": "대시보드에 위젯이 하나도 없습니다. 대시 보드 위젯을 추가하거나 대시 보드를 기본 위젯으로 재설정하세요.",
"DashboardName": "대시보드 이름:",
"DashboardOf": "%s의 대시보드",
"DefaultDashboard": "기본 대시보드 - 기본 위젯으로 구성된 레이아웃을 사용합니다",
"DeleteWidgetConfirm": "대시보드에서 이 위젯을 삭제하시겠습니까?",
"EmptyDashboard": "빈 대시보드 - 원하는 위젯을 선택하세요",
"LoadingWidget": "위젯 로딩중, 잠시만 기다리세요...",
"ManageDashboard": "대시보드 관리",
"Maximise": "최대화",
"Minimise": "최소화",
"NotUndo": "이 작업은 취소할 수 없습니다.",
"PluginDescription": "당신의 사이트를 분석한 대시보드입니다. 드래그 앤 드롭으로 새로운 위젯을 추가하거나 대시보드 레이아웃을 바꾸는 기능을 통해 당신만의 대시보드를 꾸며보세요. 모든 사용자들은 자신만의 대시보드를 가질 수 있습니다.",
"RemoveDashboard": "대시보드 삭제",
"RemoveDashboardConfirm": "정말 대시보드 \"%s\"를 삭제 하시겠습니까?",
"RemoveDefaultDashboardNotPossible": "기본 대시보드는 삭제할 수 없습니다.",
"RenameDashboard": "대시보드 이름 변경",
"ResetDashboard": "대시보드 재설정",
"ResetDashboardConfirm": "대시보드의 레이아웃을 재설정하여 기본 위젯으로 복원하시겠습니까?",
"SelectDashboardLayout": "새 대시보드의 레이아웃을 선택하세요",
"SelectWidget": "대시보드에 추가할 위젯 선택",
"SetAsDefaultWidgets": "기본 위젯으로 설정",
"SetAsDefaultWidgetsConfirm": "현재 위젯과 대시보드의 레이아웃을 기본 템플릿으로 설정하시겠습니까?",
"SetAsDefaultWidgetsConfirmHelp": "위젯과 대시보드의 레이아웃은 새로운 대시보드를 만들거나 %s 기능을 사용할 때 사용됩니다.",
"TopLinkTooltip": "%s에 대한 웹 로그 분석 보고서를 볼 수 있습니다.",
"WidgetNotFound": "위젯을 찾지 못함",
"WidgetPreview": "위젯 미리보기"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Pridėti valdiklį",
"AddPreviewedWidget": "Spustelėkite, norėdami pridėti valdiklį į skydelį",
"ChangeDashboardLayout": "Pakeisti skydelio išdėstymą",
"CopyDashboardToUser": "Kopijuoti skydelį naudotojui",
"CreateNewDashboard": "Sukurti naują skydelį",
"Dashboard": "Skydelis",
"DashboardCopied": "Esamas skydelis sėkmingai nukopijuotas pasirinktam naudotojui.",
"DashboardEmptyNotification": "Jūsų skydelyje nėra jokių valdiklių. Pradėkite, pridėdami kelis valdiklius arba, tiesiog, atstatykite skydelį į numatytąjį valdiklių pasirinkimą.",
"DashboardName": "Skydelio pavadinimas:",
"DashboardOf": "%s skydelis",
"DefaultDashboard": "Numatytasis skydelis - Naudojamas numatytųjų valdiklių pasirinkimo ir stulpelių išdėstymas",
"DeleteWidgetConfirm": "Ar tikrai norite pašalinti šį valdiklį iš skydelio?",
"EmptyDashboard": "Tuščias skydelis - Pasirinkite savo mėgstamus valdiklius",
"LoadingWidget": "Įkeliamas valdiklis, palaukite...",
"ManageDashboard": "Tvarkyti skydelį",
"Maximise": "Išskleisti",
"Minimise": "Suskleisti",
"NotUndo": "Jūs negalėsite atšaukti šios operacijos.",
"PluginDescription": "Jūsų Saityno Analitikos Skydelis. Tinkinkite savo skydelį, pridėdami naujų valdiklių, vilkdami juos iš vienos vietos į kitą ir keisdami skydelio stulpelių išdėstymą. Kiekvienas naudotojas gali tvarkyti savo asmeninį pasirinktiną skydelį.",
"RemoveDashboard": "Šalinti skydelį",
"RemoveDashboardConfirm": "Ar tikrai norite pašalinti skydelį \"%s\"?",
"RemoveDefaultDashboardNotPossible": "Numatytasis skydelis negali būti pašalintas",
"RenameDashboard": "Pervadinti skydelį",
"ResetDashboard": "Atstatyti skydelį",
"ResetDashboardConfirm": "Ar tikrai norite atstatyti savo skydelio išdėstymą į numatytąjį valdiklių pasirinkimą?",
"SelectDashboardLayout": "Pasirinkite savo naujojo skydelio išdėstymą",
"SelectWidget": "Pasirinkite valdiklį, kurį norite pridėti į skydelį",
"SetAsDefaultWidgets": "Nustatyti kaip numatytąjį valdiklių pasirinkimą",
"SetAsDefaultWidgetsConfirm": "Ar tikrai norite nustatyti esamą valdiklių pasirinkimą ir skydelio išdėstymą kaip numatytąjį skydelio šabloną?",
"SetAsDefaultWidgetsConfirmHelp": "Šis valdiklių pasirinkimas ir skydelio stulpelių išdėstymas bus naudojami, kai bet kuris naudotojas sukurs naują skydelį arba kai bus naudojama \"%s\" ypatybė.",
"TopLinkTooltip": "Rodyti saityno analitikos ataskaitas, skirtas %s.",
"WidgetNotFound": "Valdiklis nerastas",
"WidgetPreview": "Valdiklio peržiūra"
}
}

View File

@@ -0,0 +1,27 @@
{
"Dashboard": {
"AddAWidget": "Pievienot logrīku",
"AddPreviewedWidget": "Pievienot apskatīto logdaļu panelim",
"ChangeDashboardLayout": "Izmainīt paneļa izkārtojumu",
"CopyDashboardToUser": "Kopēt paneli uz lietotāju",
"CreateNewDashboard": "Izveidot jaunu paneli",
"Dashboard": "Panelis",
"DashboardName": "Paneļa vārds:",
"DashboardOf": "%s panelis",
"DeleteWidgetConfirm": "Vai tiešām vēlaties dzēst šo logdaļu no paneļa?",
"LoadingWidget": "Notiek logdaļas ielāde, lūdzu uzgaidiet...",
"ManageDashboard": "Pārvaldīt paneli",
"Maximise": "Izvērst",
"Minimise": "Samazināt",
"NotUndo": "Jūs nevarēsiet atgriezt šo operāciju.",
"RemoveDashboard": "Noņemt paneli",
"RemoveDashboardConfirm": "Vai Jūs tiešām vēlaties noņemt paneli \"%s\"?",
"RemoveDefaultDashboardNotPossible": "Noklusējuma paneli nevar noņemt",
"RenameDashboard": "Pārsaukt paneli",
"ResetDashboard": "Atiestatīt paneli",
"SelectDashboardLayout": "Lūdzu izvēlieties Jūsu jaunā paneļa izkārtojumu",
"SelectWidget": "Izvēlieties to logdaļu, kuru vēlaties pievienot panelim",
"WidgetNotFound": "Logdaļa nav atrasta",
"WidgetPreview": "Logdaļas priekšstatījums"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Legg til widget",
"AddPreviewedWidget": "Klikk for å legge til widget i oversikt",
"ChangeDashboardLayout": "Tilpass oversiktspanel",
"CopyDashboardToUser": "Kopier oversiktspanel til bruker",
"CreateNewDashboard": "Ny oversikt",
"Dashboard": "Oversikt",
"DashboardCopied": "Gjeldende oversikt ble kopiert til valgt bruker.",
"DashboardEmptyNotification": "Din oversikt inneholder ikke noen widgeter. Start ved å legge til noen widgeter eller bare gjenopprett oversikten til å bruke standardwidgetene.",
"DashboardName": "Navn på oversikt:",
"DashboardOf": "Oversikt for %s",
"DefaultDashboard": "Standard oversikt  Bruker standardwidgetene og -kolonnelayout",
"DeleteWidgetConfirm": "Er du sikker på at du vil fjerne dette elementet fra din oversikt?",
"EmptyDashboard": "Tøm oversikt  Velg dine favorittwidgeter",
"LoadingWidget": "Laster element, vennligst vent ...",
"ManageDashboard": "Administrer oversikt",
"Maximise": "Maksimer",
"Minimise": "Minimer",
"NotUndo": "Du vil ikke være i stand til å angre denne handlingen.",
"PluginDescription": "Din webstatistikkoversikt. Tilpass din oversikt ved å legge til nye widgeter, dra og slipp dem der du vil ha dem, og endre oversiktens kolonnelayout. Hver bruker kan administrere sine egne tilpassede oversikter.",
"RemoveDashboard": "Fjern oversikt",
"RemoveDashboardConfirm": "Er du sikker på at du vil fjerne oversikten «%s»?",
"RemoveDefaultDashboardNotPossible": "Standardoversikten kan ikke slettes",
"RenameDashboard": "Gi nytt navn på oversiktspanelet",
"ResetDashboard": "Nullstill oversikt",
"ResetDashboardConfirm": "Er du sikker på at du vil gjenopprette oversiktlayouten til standardwidgetene?",
"SelectDashboardLayout": "Vennligst veld ny oversiktslayout",
"SelectWidget": "Velg hvilket element som du vil legge til oversiktspanelet.",
"SetAsDefaultWidgets": "Bruk som standardwidgeter",
"SetAsDefaultWidgetsConfirm": "Er du sikker på at du vil sette dette widgetutvalget og kolonnelayouten som standardmal?",
"SetAsDefaultWidgetsConfirmHelp": "Dette widgetutvalget og kolonnelayouten vil bli brukt når brukere lager nye oversikter, eller når funksjonen \"%s\" brukes.",
"TopLinkTooltip": "Vis webstatistikkrapporter for %s.",
"WidgetNotFound": "Finner ikke element",
"WidgetPreview": "Forhåndsvisning av element"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Widget toevoegen",
"AddPreviewedWidget": "Klik om widget aan het dashboard toe te voegen",
"ChangeDashboardLayout": "Wijzig dashboard lay-out",
"CopyDashboardToUser": "Dashboard naar gebruiker kopiëren",
"CreateNewDashboard": "Nieuw dashboard aanmaken",
"Dashboard": "Dashboard",
"DashboardCopied": "Huidig dashboard succesvol naar geselecteerde gebruiker gekopieerd.",
"DashboardEmptyNotification": "Je dashboard bevat geen widgets. Start met het toevoegen van nieuwe widgets of reset het dashboard naar de standaard widget selectie.",
"DashboardName": "Naam dashboard:",
"DashboardOf": "Dashboard van %s",
"DefaultDashboard": "Standaard dashboard - Gebruik de standaard widgets in een standaard layout",
"DeleteWidgetConfirm": "Weet u zeker dat u dit widget van het dashboard wilt verwijderen?",
"EmptyDashboard": "Leeg dashboard - kies uw favoriete widgets",
"LoadingWidget": "Bezig widget te laden, even geduld a.u.b…",
"ManageDashboard": "Dashboard beheren",
"Maximise": "Maximaliseren",
"Minimise": "Minimaliseren",
"NotUndo": "Je kunt deze verwijdering niet ongedaan maken.",
"PluginDescription": "Je Web Analytics Dashboard. Pas je dashboard aan door nieuwe widgets toe te voegen, sleep ze in het rond, en wijzig de dashboard kolomweergave. Elke gebruiker kan zijn eigen aangepaste dashboard beheren.",
"RemoveDashboard": "Dashboard verwijderen",
"RemoveDashboardConfirm": "Weet u zeker dat u het dashboard \"%s\" wilt verwijderen?",
"RemoveDefaultDashboardNotPossible": "Het standaard dashboard kan niet worden verwijderd",
"RenameDashboard": "Dashboard hernoemen",
"ResetDashboard": "Reset dashboard",
"ResetDashboardConfirm": "Wilt u echt uw dashboard lay-out terug te zetten naar de standaard Widgets selectie?",
"SelectDashboardLayout": "Selecteer je nieuwe dashboard lay-out",
"SelectWidget": "Selecteer een widget om toe te voegen aan het dashboard",
"SetAsDefaultWidgets": "Stel in als standaardselectie widgets",
"SetAsDefaultWidgetsConfirm": "Weet je zeker dat je de huidige selectie van widgets en dashboard lay-out wilt toepassen als de nieuwe standaard dashboard template?",
"SetAsDefaultWidgetsConfirmHelp": "Deze selectie van widgets en dashboard layout zal gebruikt worden om nieuwe dashboards te maken voor nieuwe gebruikers of als de \"%s\" functie wordt gebruikt.",
"TopLinkTooltip": "Bekijk web analyse rapporten voor %s.",
"WidgetNotFound": "Widget niet gevonden",
"WidgetPreview": "Voorbeeld widget"
}
}

View File

@@ -0,0 +1,32 @@
{
"Dashboard": {
"AddAWidget": "Legg til småprogram",
"AddPreviewedWidget": "Klikk for å leggja småprogram til styringspanelet",
"ChangeDashboardLayout": "Endre oppsett på styringspanelet",
"CreateNewDashboard": "Opprett nytt styringspanel",
"Dashboard": "Styringspanel",
"DashboardEmptyNotification": "Styringspanelet ditt inneheld ingen småprogram. Start med å leggja til nokre småprogram, eller nullstill panelet til standardutvalet.",
"DashboardName": "Namn på styringspanel:",
"DashboardOf": "Styringspanelet til %s",
"DefaultDashboard": "Standard styringspanel - Bruker standard småprogramutval og kolonneutforming",
"DeleteWidgetConfirm": "Er du sikker på at du vil fjerna dette småprogrammet frå styringspanelet ditt?",
"EmptyDashboard": "Tomt styringspanel - Vel dine favorittsmåprogram",
"LoadingWidget": "Lastar småprogram, vent...",
"ManageDashboard": "Handsam styringspanel",
"Maximise": "Maksimer",
"Minimise": "Minimer",
"NotUndo": "Du kan ikkje angra denne handlinga.",
"RemoveDashboard": "Fjern styringspanel",
"RemoveDashboardConfirm": "Er du sikker på at du vil fjerna styringspanelet \"%s\"?",
"RenameDashboard": "Lag nytt namn på styringspanel",
"ResetDashboard": "Nullstill styringspanelet",
"ResetDashboardConfirm": "Vil du verkeleg nullstilla styringspanelet ditt?",
"SelectDashboardLayout": "Vel ditt nye oppsett av styringspanelet",
"SelectWidget": "Vel det småprogrammet du vil legga til styringspanelet",
"SetAsDefaultWidgets": "Sett som standard småprogramutval",
"SetAsDefaultWidgetsConfirm": "Er du sikker på at du vil setja dette utvalet av småprogram og utforming som standardmal for styringspanel?",
"SetAsDefaultWidgetsConfirmHelp": "Dette utvalet av småprogram og kolonneutforminga vil bli brukt når ein brukar opprettar eit nytt styringspanel, eller når \"%s\"-funksjonen er brukt.",
"WidgetNotFound": "Fann ikkje småprogrammet",
"WidgetPreview": "Småprogramvisning"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Dodaj gadżet",
"AddPreviewedWidget": "Kliknij, aby dodać gadżet do pulpitu",
"ChangeDashboardLayout": "Zmień układ pulpitu",
"CopyDashboardToUser": "Kopiuj pulpit do użytkownika",
"CreateNewDashboard": "Utwórz nowy pulpit",
"Dashboard": "Pulpit",
"DashboardCopied": "Bieżący panel został pomyślnie skopiowany do wybranego użytkownika.",
"DashboardEmptyNotification": "Twój pulpit nie zawiera żadnych gadżetów. Rozpocznij pracę od dodania kilku gadżetów, lub po prostu zresetuj pulpit, aby przywrócić domyślny zestaw gadżetów.",
"DashboardName": "Nazwa pulpitu:",
"DashboardOf": "Pulpit %s",
"DefaultDashboard": "Domyślny pulpit - używa domyślnego zestawu gadżetów i układu kolumn.",
"DeleteWidgetConfirm": "Czy jesteś pewien, że chcesz usunąć ten gadżet z pulpitu?",
"EmptyDashboard": "Pusty pulpit - wskaż swóje ulubione gadżety",
"LoadingWidget": "Ładowanie gadżetu, proszę czekać...",
"ManageDashboard": "Zarządzaj pulpitem",
"Maximise": "Maksymalizuj",
"Minimise": "Minimalizuj",
"NotUndo": "Nie będziesz mógł cofnąć tej operacji.",
"PluginDescription": "Twoja tablica statystyk. Dostosuj swoją tablicę poprzez dodanie nowych gadżetów, przeciągaj i opuszczaj je wokoło, zmień także układ kolumn. Każdy użytkownik może zarządzać swoją własną tablicą.",
"RemoveDashboard": "Usuń pulpit",
"RemoveDashboardConfirm": "Czy jesteś pewny, że chcesz usunąć pulpit \"%s\"?",
"RemoveDefaultDashboardNotPossible": "Nie można usunąć domyślnego pulpitu",
"RenameDashboard": "Zmień nawę pulpitu",
"ResetDashboard": "Resetuj pulpit",
"ResetDashboardConfirm": "Czy na pewno chcesz zresetować układ pulpitu?",
"SelectDashboardLayout": "Proszę wybrać swój nowy wygląd pulpitu",
"SelectWidget": "Wybierz gadżet, który chcesz dodać do pulpitu",
"SetAsDefaultWidgets": "Ustaw jako domyślny zestaw gadżetów",
"SetAsDefaultWidgetsConfirm": "Czy na pewno chcesz ustawić wybór i układ gadżetów na bieżącym panelu jako domyślny szablon panelu?",
"SetAsDefaultWidgetsConfirmHelp": "Ten zestaw gadżetów i układ kolumn będzie używany, gdy jakikolwiek użytkownik stworzy nowy panel, albo gdy funkcja \"%s\" jest w użyciu.",
"TopLinkTooltip": "Podgląd raportów Web Analytics dla %s.",
"WidgetNotFound": "Gadżet nie został znaleziony",
"WidgetPreview": "Podgląd gadżetu"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Adicionar um widget",
"AddPreviewedWidget": "Adicionar o widget visualizado no preview ao painel",
"ChangeDashboardLayout": "Alterar o leiaute do painel de controle",
"CopyDashboardToUser": "Copiar o painel para um usuário",
"CreateNewDashboard": "Criar um novo painel",
"Dashboard": "Painel de Controle",
"DashboardCopied": "Painel atual copiado com êxito para o usuário selecionado.",
"DashboardEmptyNotification": "Seu Painel não contém widgets. Comece por adicionar alguns widgets ou apenas voltar o painel para a seleção widget padrão.",
"DashboardName": "Nome do painel:",
"DashboardOf": "Painel de %s",
"DefaultDashboard": "Painel padrão - Usando seleção padrão widgets e layout de colunas",
"DeleteWidgetConfirm": "Tem certeza que deseja excluir este widget do seu Painel?",
"EmptyDashboard": "Painel vazio - Escolha os seus widgets favoritos",
"LoadingWidget": "Carregando widget, aguarde...",
"ManageDashboard": "Gerenciar painel",
"Maximise": "Maximizar",
"Minimise": "Minimizar",
"NotUndo": "Você não será capaz de desfazer esta operação.",
"PluginDescription": "Seu Painel de Análise da Rede. Personalize seu painel adicionando novos widgets, arrastando para suas posições, e mudando o leiaute das colunas do painel. Cada usuário pode gerenciar seus próprios painéis personalizados.",
"RemoveDashboard": "Remover painel",
"RemoveDashboardConfirm": "Tem certeza de que deseja remover o painel \"%s\"?",
"RemoveDefaultDashboardNotPossible": "O painel padrão não pode ser removido",
"RenameDashboard": "Renomear painel",
"ResetDashboard": "Resetar o painel",
"ResetDashboardConfirm": "Tem certeza de que deseja redefinir o layout do painel para a seleção Widgets padrão?",
"SelectDashboardLayout": "Por favor selecione o novo leiaute do painel",
"SelectWidget": "Selecione o widget a adicionar ao painel",
"SetAsDefaultWidgets": "Definir como seleção de widgets padrão",
"SetAsDefaultWidgetsConfirm": "Tem a certeza que pretende definir a seleção widgets do atual e layout de painel como o modelo de painel padrão?",
"SetAsDefaultWidgetsConfirmHelp": "Esta seleção widgets e layout de colunas do painel será usado quando qualquer usuário cria um novo painel, ou quando o recurso \"%s\" é usado.",
"TopLinkTooltip": "Ver relatórios de Análise Web para %s.",
"WidgetNotFound": "Widget não encontrado",
"WidgetPreview": "Visualização do Widget"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Adicionar um widget",
"AddPreviewedWidget": "Clique para adicionar o widget ao painel",
"ChangeDashboardLayout": "Alterar a disposição do painel",
"CopyDashboardToUser": "Copiar o painel para o utilizador",
"CreateNewDashboard": "Criar um novo painel",
"Dashboard": "Painel",
"DashboardCopied": "O painel atual foi copiado com sucesso para o utilizador selecionado.",
"DashboardEmptyNotification": "O seu painel não contém quaisquer widgets. Comece por adicionar alguns widgets ou simplesmente reponha o painel para a seleção predefinida de widgets.",
"DashboardName": "Nome do painel:",
"DashboardOf": "Painel de %s",
"DefaultDashboard": "Painel predefinido - Utilizando a seleção predefinida de widgets e disposição em colunas",
"DeleteWidgetConfirm": "Tem a certeza que deseja excluir este widget do seu painel?",
"EmptyDashboard": "Painel vazio - Escolha os seus widgets favoritos",
"LoadingWidget": "A carregar o widget, por favor aguarde...",
"ManageDashboard": "Gerir painel",
"Maximise": "Maximizar",
"Minimise": "Minimizar",
"NotUndo": "Não poderá anular esta operação.",
"PluginDescription": "O seu painel de Web Analytics. Personalize o seu painel adicionando novos widgets, movendo widgets e alterando o layout das colunas do painel. Cada utilizador pode gerir o seu próprio painel personalizado.",
"RemoveDashboard": "Remover painel",
"RemoveDashboardConfirm": "Tem a certeza que pretende remover o painel \"%s\"?",
"RemoveDefaultDashboardNotPossible": "O painel predefinido não pode ser removido",
"RenameDashboard": "Renomear painel",
"ResetDashboard": "Repor painel",
"ResetDashboardConfirm": "Tem a certeza que pretende repor a disposição do seu painel para a seleção de Widgets predefinida?",
"SelectDashboardLayout": "Por favor selecione a sua nova disposição de painel",
"SelectWidget": "Selecione o widget a adicionar ao painel",
"SetAsDefaultWidgets": "Definir como a seleção de widgets predefinida",
"SetAsDefaultWidgetsConfirm": "Tem a certeza que pretende definir a seleção de widgets e a disposição do painel atual como o modelo de painel predefinido?",
"SetAsDefaultWidgetsConfirmHelp": "Esta seleção de widgets e disposição colunas do painel será utilizada quando qualquer utilizador criar um novo painel ou quando a funcionalidade \"%s\" for utilizada.",
"TopLinkTooltip": "Ver relatórios de Web Analytics para %s.",
"WidgetNotFound": "Widget não encontrado",
"WidgetPreview": "Pré-visualização do widget"
}
}

View File

@@ -0,0 +1,35 @@
{
"Dashboard": {
"AddAWidget": "Adaugă un widget",
"AddPreviewedWidget": "Dă click ca să adaugi un widget la panoul de control",
"ChangeDashboardLayout": "Schimbă aspectul panoului de control",
"CopyDashboardToUser": "Crează o copie a panoului de control pentru utilizator",
"CreateNewDashboard": "Creează un panou de control nou",
"Dashboard": "Panou de control",
"DashboardCopied": "Panoul de control copiat cu succes pentru utilizatorul selectat.",
"DashboardEmptyNotification": "Panoul tău de control nu conţine niciun widget. Începi prin a adăuga câteva widget-uri sau doar resetează panoul de control către selecţia implicită de widget-uri.",
"DashboardName": "Numele panoului de control:",
"DashboardOf": "Panoul de control %s",
"DefaultDashboard": "Panou de control implicit - Foloseşte widget-urile selectate şi coloanele implicite",
"DeleteWidgetConfirm": "Esti sigur că doreşti să ştergi widget-ul din panoul de control?",
"EmptyDashboard": "Panou de control gol - Alege widget-urile preferate",
"LoadingWidget": "Se incarca dispozitivul, asteapta...",
"ManageDashboard": "Administreză panou de control",
"Maximise": "Maximizează",
"Minimise": "Minimizează",
"NotUndo": "Nu o să poţi revoca acestă operaţie.",
"RemoveDashboard": "Şterge panoul de control",
"RemoveDashboardConfirm": "Eşti sigur(ă) că vrei să ştergi panoul de control \"%s\"?",
"RenameDashboard": "Redenumeşte panoul de control",
"ResetDashboard": "Resetează panoul de control",
"ResetDashboardConfirm": "Eşti sigur(ă) că vrei să resetezi aspectul panoului de control la selecţia implicită de Widget-uri?",
"SelectDashboardLayout": "Te rog selectează aspectul noului panou de control",
"SelectWidget": "Selectează widget-ul ce doreşti să-l adaugi în panoul de control",
"SetAsDefaultWidgets": "Stabileşte ca implicită selecţia de widget-uri",
"SetAsDefaultWidgetsConfirm": "Eşti sigur(ă) că vrei să stabileşti selecţia curentă de widget-uri şi aspectul panoului de control ca fiind şablonul implicit al panoului de control?",
"SetAsDefaultWidgetsConfirmHelp": "Această selecţie de widget-uri şi aspectul coloanelor panoului de control va fi folosită când un utilizator creează un panou de control nou sau când este folosită caracteristica \"%s\".",
"TopLinkTooltip": "Vizualizează rapoarte web analitică pentru %s.",
"WidgetNotFound": "Dispozitivul nu exista",
"WidgetPreview": "Previzualizează widget-ul"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Добавить виджет",
"AddPreviewedWidget": "Добавить виджет на панель инструментов",
"ChangeDashboardLayout": "Выберите вид панели инструментов",
"CopyDashboardToUser": "Копировать панель инструментов пользователю",
"CreateNewDashboard": "Создать новую панель инструментов",
"Dashboard": "Панель инструментов",
"DashboardCopied": "Текущая панель инструментов успешно скопирован выбранному пользователю.",
"DashboardEmptyNotification": "Ваша панель инструментов не содержит ни одного виджета. Добавьте какие-нибудь виджеты или просто сбросьте панель инструментов к настройкам по умолчанию.",
"DashboardName": "Имя панели инструментов:",
"DashboardOf": "Панель инструментов %s",
"DefaultDashboard": "Панель инструментов по умолчанию использует набор виджетов и расположение колонок по умолчанияю.",
"DeleteWidgetConfirm": "Вы уверены, что хотите удалить этот виджет с информационной панели?",
"EmptyDashboard": "Панель инструментов пустая — выберите ваши любимые виджеты",
"LoadingWidget": "Загрузка виджета, пожалуйста, подождите...",
"ManageDashboard": "Настройки панели инструментов",
"Maximise": "Развернуть",
"Minimise": "Свернуть",
"NotUndo": "Данная операция не обратима.",
"PluginDescription": "Ваша Панель управления веб-аналитикой. Настройте свою панель управления, добавив новые виджеты, перемещайте их и изменяйте расположение столбцов в панели управления. Каждый пользователь может управлять своей собственной панелью управления.",
"RemoveDashboard": "Удалить панель инструментов",
"RemoveDashboardConfirm": "Вы уверены, что хотите удалить эту панель инструментов: «%s»?",
"RemoveDefaultDashboardNotPossible": "Панель управления по умолчанию не может быть удалена",
"RenameDashboard": "Переименовать панель инструментов",
"ResetDashboard": "Сбросить панель инструментов",
"ResetDashboardConfirm": "Вы уверены, что хотите сбросить вид панели инструментов к виду по умолчанию?",
"SelectDashboardLayout": "Пожалуйста, выберите ваш новый вид панели инструментов.",
"SelectWidget": "Выберите виджет для добавления на панель инструментов",
"SetAsDefaultWidgets": "Установить набор виджетов по умолчанию",
"SetAsDefaultWidgetsConfirm": "Вы уверены, что хотите установить текущий набор виджетов панели как набор виджетов по умолчанию?",
"SetAsDefaultWidgetsConfirmHelp": "Выбор виджетов и расположение колонок панели инструментов будет использоваться, когда пользователь создаёт новую панель инструментов или когда используется «%s».",
"TopLinkTooltip": "Посмотреть отчёт веб-аналитики для %s.",
"WidgetNotFound": "Виджет не найден",
"WidgetPreview": "Предпросмотр виджета"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Pridať widget",
"AddPreviewedWidget": "Pridať prezeranú miniaplikáciu na nástenku",
"ChangeDashboardLayout": "Zmeniť rozvrhnutie nástenky",
"CopyDashboardToUser": "Skopírovať nástenku pre používateľa",
"CreateNewDashboard": "Vytvoriť novú nástenku",
"Dashboard": "Nástenka",
"DashboardCopied": "Aktuálna nástenka bola úspešne skopírovaná pre vybraného používateľa.",
"DashboardEmptyNotification": "Vaša nástenka neobsahuje žiadne miniaplikácie. Začnite pridaním nejakých miniaplikácií alebo iba resetujte nástenku na výber prednastavených miniaplikácií.",
"DashboardName": "Názov panelu:",
"DashboardOf": "Nástenka %s",
"DefaultDashboard": "Prednastavený panel - používa výber prednastavených miniaplikácií a stĺpcové rozloženie",
"DeleteWidgetConfirm": "Ste si istý, že chcete odstrániť miniaplikáciu z panela?",
"EmptyDashboard": "Prázdna nástenka - vyberte si svoje preferované miniaplikácie",
"LoadingWidget": "Načítavanie miniaplikácie, prosím čakajte…",
"ManageDashboard": "Spravovať nástenku",
"Maximise": "Maximalizovať",
"Minimise": "Minimalizovať",
"NotUndo": "Túto operáciu nebudete schopný vrátiť späť.",
"PluginDescription": "Vaša nástenka webovej analýzy. Prispôsobte si svoj panel pridaním nových miniaplikácií, popresúvajte ich, a zmeňte rozvrhnutie stĺpcov panela. Každý používateľ môže spravovať svoju vlastnú nástenku.",
"RemoveDashboard": "Odstrániť nástenku",
"RemoveDashboardConfirm": "Naozaj chcete odstrániť panel \"%s\"?",
"RemoveDefaultDashboardNotPossible": "Štandardnú nástenku nie je možné odstrániť.",
"RenameDashboard": "Premenovať nástenku",
"ResetDashboard": "Resetovať nástenku",
"ResetDashboardConfirm": "Naozaj chcete resetovať rozvrhnutie vašej nástenky na výber prednastavených miniaplikácií?",
"SelectDashboardLayout": "Prosím vyberte si svoje nové rozvrhnutie nástenky",
"SelectWidget": "Vyberte miniaplikáciu, ktorá sa pridá na nástenku",
"SetAsDefaultWidgets": "Nastaviť ako výber prednastavených miniaplikácií",
"SetAsDefaultWidgetsConfirm": "Naozaj chcete nastaviť aktuálny výber miniaplikácií a rozvrhnutie nástenky ako prednastavenú šablónu panela?",
"SetAsDefaultWidgetsConfirmHelp": "Tento výber miniaplikácií a stĺpcové rozvrhnutie nástenky bude použitý ak hociktorý užívateľ vytvorí nový panel, alebo keď je použitá črta \"%s\" .",
"TopLinkTooltip": "Prezeranie reportov webovej analytiky pre %s.",
"WidgetNotFound": "Miniaplikácia nebola nájdená",
"WidgetPreview": "Náhľad na miniaplikáciu"
}
}

View File

@@ -0,0 +1,20 @@
{
"Dashboard": {
"AddAWidget": "Dodaj gradnik",
"AddPreviewedWidget": "Kliknite, če želite dodati gradnik na kontrolno ploščo",
"ChangeDashboardLayout": "Spremeni postavitev nadzorne plošče",
"Dashboard": "Nadzorna Plošča",
"DashboardOf": "Nadzorna plošča od %s",
"DeleteWidgetConfirm": "Ste prepričani da želite izbrisati ta gradnik s kontrolne plošče?",
"LoadingWidget": "Nalagam gradnik...",
"Maximise": "Povečaj",
"Minimise": "Pomanjšaj",
"NotUndo": "Te operacije ne bo mogoče razveljaviti.",
"ResetDashboard": "Ponastavi kontrolno ploščo",
"ResetDashboardConfirm": "Ste prepričani da želite ponastaviti postavitev kontrolne plošče na privzeti izbor gradnikov?",
"SelectDashboardLayout": "Prosimo, izberite vašo novo postavitev nadzorne plošče",
"SelectWidget": "Izberite gradnik, ki ga želite dodati na kontrolno ploščo.",
"WidgetNotFound": "Gradnik ni bil najden",
"WidgetPreview": "Predogled gradnika"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Shtoni një widget",
"AddPreviewedWidget": "Klikojeni që të shtohet widget-i te pulti",
"ChangeDashboardLayout": "Ndryshoni skemën e pultit",
"CopyDashboardToUser": "Kopjoje pultin te përdoruesi",
"CreateNewDashboard": "Krijoni pult të ri",
"Dashboard": "Pulti",
"DashboardCopied": "Pulti i tanishëm u kopjua me sukses te përdoruesi i përzgjedhur.",
"DashboardEmptyNotification": "Pulti juaj nuk përmban ndonjë widget. Fillojani duke shtuar ndonjë të tillë ose thjesht rikthejeni pultin te përzgjedhja parazgjedhje për widget-et.",
"DashboardName": "Emër pulti:",
"DashboardOf": "Pulti i %s",
"DefaultDashboard": "Pulti parazgjedhje - Përdorim i parazgjedhjeve për përzgjedhje widget-sh dhe skema shtyllash",
"DeleteWidgetConfirm": "Jeni i sigurt se doni të fshihet ky widget prej pultit?",
"EmptyDashboard": "Pult i zbrazët - Zgjidhni widget-et tuaj të parapëlqyer",
"LoadingWidget": "Widget-i po ngarkohet, ju lutemi, pritni...",
"ManageDashboard": "Administroni pultin",
"Maximise": "Maksimizoje",
"Minimise": "Minimizoje",
"NotUndo": "Nuk do të jeni në gjendje ta zhbëni këtë veprim.",
"PluginDescription": "Pulti Juaj i Analizave Web. Përshtateni pultin tuaj duke shtuar widget-e të rinj, merrini dhe vërini atje ku doni, dhe ndryshoni skemën e shtyllave të pultit. Çdo përdorues mund ta administrojë pultin e vet ashtu si do.",
"RemoveDashboard": "Hiqe pultin",
"RemoveDashboardConfirm": "Jeni i sigurt se doni të hiqet pulti \"%s\"?",
"RemoveDefaultDashboardNotPossible": "Pulti parazgjedhje smund të hiqet",
"RenameDashboard": "Riemërtoni pultin",
"ResetDashboard": "Riktheje pultin te parazgjedhjet",
"ResetDashboardConfirm": "Doni vërtet ta riktheni skemën e pultit tuaj te përzgjedhja parazgjedhje për Widget-et?",
"SelectDashboardLayout": "Ju lutemi, përzgjidhni skemën e re për pultin tuaj",
"SelectWidget": "Përzgjidhni widget-in që doni të shtohet te pulti",
"SetAsDefaultWidgets": "Caktojeni si përzgjedhje widget-esh parazgjedhje",
"SetAsDefaultWidgetsConfirm": "Jeni i sigurt se doni të caktohet përzgjedhja e tanishme e widget-eve dhe e skemës për shtyllat si gjedhja parazgjedhje e pultit?",
"SetAsDefaultWidgetsConfirmHelp": "Kjo përzgjedhje widget-sh dhe shtyllash për pultin do të përdoret kur cilido përdorues krijon një pult të ri, ose kur përdoret veçoria \"%s\".",
"TopLinkTooltip": "Shihni raporte Analizash Web për %s.",
"WidgetNotFound": "Su gjet widget-i",
"WidgetPreview": "Paraparje widget-i"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Dodaj vidžet",
"AddPreviewedWidget": "Dodaj pregledani vidžet na Konzolu",
"ChangeDashboardLayout": "Promeni izgled konzole",
"CopyDashboardToUser": "Kopiraj Konzolu korisniku",
"CreateNewDashboard": "Nova konzola",
"Dashboard": "Konzola",
"DashboardCopied": "Konzola je uspešno iskopirana izabranim korisnicima.",
"DashboardEmptyNotification": "Vaša konzola nema nijedan vidžet. Počnite sa dodavanjem vidžeta ili jednostavno resetujte konzolu na podrazumevane vidžete.",
"DashboardName": "Naziv konzole:",
"DashboardOf": "Konzola za %s",
"DefaultDashboard": "Podrazumevana konzola - prikaz podrazumevanih vidžeta i rasporeda kolona",
"DeleteWidgetConfirm": "Da li ste sigurni da želite da uklonite ovaj vidžet sa Konzole?",
"EmptyDashboard": "Prazna konzola - izaberite omiljene vidžete",
"LoadingWidget": "Učitavanje vidžeta, molimo sačekajte...",
"ManageDashboard": "Upravljanje konzolom",
"Maximise": "Povećaj",
"Minimise": "Smanji",
"NotUndo": "Nećete moći da poništite ovu operaciju",
"PluginDescription": "Vaša konzola za veb analitiku. Prilagodite je svojim potrebama dodavanjem novih vidžeta, prevlačenjem istih i menjanjem rasporeda. Svaki korisnik može da upravlja svojom konzolom.",
"RemoveDashboard": "Ukloni konzolu",
"RemoveDashboardConfirm": "Da li ste sigurni da želite da uklonite konzolu \"%s\"?",
"RemoveDefaultDashboardNotPossible": "Ne možete ukloniti podrazumevanu konzolu",
"RenameDashboard": "Promena naziva",
"ResetDashboard": "Resetuj konzolu",
"ResetDashboardConfirm": "Da li ste sigurni da želite da resetujete konzolu na podrazumevane vidžete?",
"SelectDashboardLayout": "Molimo vas da izaberete novi izgled konzole",
"SelectWidget": "Izaberite vidžet koji želite da dodate na Konzolu",
"SetAsDefaultWidgets": "Sačuvaj kao podrazumevane vidžete",
"SetAsDefaultWidgetsConfirm": "Da li ste sigurni da trenutno prikazane vidžete i raspored kolona želite da sačuvate kao podrazumevane?",
"SetAsDefaultWidgetsConfirmHelp": "Ovi vidžeti i raspored kolona će biti upotrebljeni kada neki korisnik kreira novu konzolu ili kada se klikne na \"%s\"",
"TopLinkTooltip": "Prikaži izveštaj za %s.",
"WidgetNotFound": "Vidžet nije pronađen",
"WidgetPreview": "Prikaz vidžeta"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Lägg till en widget",
"AddPreviewedWidget": "Lägg till widget i instrumentpanelen",
"ChangeDashboardLayout": "Ändra instrumentpanelens layout",
"CopyDashboardToUser": "Kopiera instrumentpanel till användare",
"CreateNewDashboard": "Skapa ny instrumentpanel",
"Dashboard": "Instrumentpanel",
"DashboardCopied": "Den nuvarande instrumentpanelen har kopierats till den valda användaren.",
"DashboardEmptyNotification": "Instrumentpanelen innehåller inga widgets. Börja med att lägga till widgets eller återställ instrumentpanelen till standardutseendet.",
"DashboardName": "Instrumentpanelens namn:",
"DashboardOf": "Instrumentpanel för %s",
"DefaultDashboard": "Standardinstrumentpanel - Använder standardval för widgets och kolumnlayout",
"DeleteWidgetConfirm": "Är du säker på att du vill ta bort denna widget från instrumentpanelen?",
"EmptyDashboard": "Tom instrumentpanel - Välj dina favoritwidgets",
"LoadingWidget": "Laddar widget, vänligen vänta...",
"ManageDashboard": "Hantera instrumentpanel",
"Maximise": "Maximera",
"Minimise": "Minimera",
"NotUndo": "Du kommer inte kunna ångra den här åtgärden.",
"PluginDescription": "Din instrumentpanel för webbanalys. Anpassa din instrumentpanel genom att lägga till nya widgets, flytta runt dem och ändra kolumnindelning. Varje användare kan anpassa sin egen instrumentpanel.",
"RemoveDashboard": "Ta bort instrumentpanel",
"RemoveDashboardConfirm": "Vill du verkligen radera instrumentpanelen \"%s\"?",
"RemoveDefaultDashboardNotPossible": "Standardinstrumentpanelen kan inte tas bort",
"RenameDashboard": "Byt namn på instrumentpanel",
"ResetDashboard": "Återställ instrumentpanel",
"ResetDashboardConfirm": "Vill du verkligen återställa instrumentpanelens layout för widgets?",
"SelectDashboardLayout": "Vänligen välj din nya instrumentpanels layout",
"SelectWidget": "Välj vilken widget som ska läggas till i instrumentpanelen",
"SetAsDefaultWidgets": "Ställ in som standardval för widgets",
"SetAsDefaultWidgetsConfirm": "Är du säker på att du vill använda nuvarande val av widgets och layout som standardval för instrumentpanelen?",
"SetAsDefaultWidgetsConfirmHelp": "Det här valet av widgets och kolumnlayout kommer att användas när användare skapar en ny instrumentpanel, eller när \"%s\" används.",
"TopLinkTooltip": "Visa webbanalysrapport för %s.",
"WidgetNotFound": "Widgeten hittades inte",
"WidgetPreview": "Widget förhandsgranskning"
}
}

View File

@@ -0,0 +1,30 @@
{
"Dashboard": {
"AddAWidget": "புதிய அமைப்பை சேர்க்க",
"ChangeDashboardLayout": "கட்டுப்பாட்டறை அமைப்புபை மாற்ற",
"CreateNewDashboard": "புதிய கட்டுப்பாட்டறை அமைப்புபை உருவாக்க",
"DashboardCopied": "தற்போதைய கட்டுப்பாட்டறை அமைப்பு வெற்றிகரமாக தெரிவுசெய்யப்பட்ட பாவனையாலருக்கு பிரதி செய்யப்பட்டுள்ளது.",
"DashboardEmptyNotification": "உங்களது முகப்புப்பலகையில் எந்தவொரு விட்ஜெட்டும் இல்லை. நீங்கள் வேண்டுமானால் சில விட்ஜெட்டுகளை சேர்க்கலாம் அல்லது அமைப்பு முறை விட்ஜெட்டுக்கு முகப்புப்பலகையை மீட்டமைக்கலாம்.",
"DashboardName": "கட்டுப்பாட்டறை அமைப்பு பெயர்:",
"DashboardOf": "%s -ன் முகப்புப்பலகை",
"DefaultDashboard": "அமைப்புமுறை முகப்புப்பலகை - அமைப்புமுறை விட்ஜெட் தேர்வு மற்றும் பத்தி திட்டம்",
"DeleteWidgetConfirm": "நீங்கள் உறுதியாக இந்த விட்ஜெட்டை முகப்புப்பலகயிலிருந்து நீக்கச்சொல்கிறீர்களா?",
"EmptyDashboard": "வெறுமையான கட்டுப்பாட்டறை அமைப்பு - உங்களுக்கு விருப்பமான விஜெட்டை எடுங்கள்",
"LoadingWidget": "விட்ஜெட் ஏற்றப்படுகிறது. தயவு செய்து காத்திருக்கவும்...",
"ManageDashboard": "கட்டுப்பாட்டறை அமைப்புபை நிர்வகிக்க",
"Maximise": "பெருப்பிக்க",
"Minimise": "சிறியதாக்க",
"NotUndo": "உங்களால் இந்த செயற்பாட்டை மீள பின்நோக்கி நகர்த்த முடியாது",
"RemoveDashboard": "கட்டுப்பாட்டறை அமைப்புபை நீக்க",
"RemoveDashboardConfirm": "நீங்கள் உறுதியாக முகப்புப்பலகை \"%s\" -ஐ நீக்கச்சொல்கிறீர்களா?",
"RenameDashboard": "கட்டுப்பாட்டறை அமைப்புபின் பெயரை மாற்ற",
"ResetDashboard": "முகப்புப்பலகையை மீட்டமை",
"ResetDashboardConfirm": "நீங்கள் உறுதியாக இந்த முகப்புப்பலகை திட்டத்தை, அமைப்புமுறை விட்ஜெட் தேர்வுக்கு மீட்டமைக்க வேண்டுமா?",
"SelectDashboardLayout": "தயவுசெய்து உங்கள் புதிய கட்டுப்பாட்டறை அமைப்புபை தெரிவுசெய்யுங்கள்",
"SelectWidget": "விட்ஜெட்டை முகப்புப்பலகையில் சேர்க்க, தேர்வு செய்யவும்",
"SetAsDefaultWidgets": "அமைப்புமுறை விட்ஜெட் அமைப்பாக தேர்ந்தெடுக்க",
"TopLinkTooltip": "இணைய பகுப்பாய்வு அறிக்கையை %s க்கு காண",
"WidgetNotFound": "விட்ஜெட்டை காணவில்லை",
"WidgetPreview": "விட்ஜெட்டை முன்னோட்டமிடுக"
}
}

View File

@@ -0,0 +1,7 @@
{
"Dashboard": {
"Dashboard": "డాష్‌బోర్డు",
"LoadingWidget": "విడ్జెట్ లోడవుతూండి, దయచేసి వేచివుండండి...",
"WidgetPreview": "విడ్జెట్ మునుజూపు"
}
}

View File

@@ -0,0 +1,28 @@
{
"Dashboard": {
"AddAWidget": "เพิ่มวิดเจ็ท",
"AddPreviewedWidget": "เพิ่มวิดเจ็ทตัวอย่างในแผงควบคุม",
"ChangeDashboardLayout": "เปลี่ยนเค้าโครงแผงควบคุม",
"CopyDashboardToUser": "คัดลอกกระดานหลักไปไว้ที่ผู้ใช้งาน",
"CreateNewDashboard": "สร้างหน้ากระดานหลักใหม่",
"Dashboard": "แผงควบคุม",
"DashboardCopied": "กระดานหลักปัจจุบันได้ถูกคัดลอกไปยังผู้ใช้งานที่เลือกเสร็จเรียบร้อยแล้ว",
"DashboardName": "ชื่อกระดานหลัก",
"DashboardOf": "กระดานหลักของ %s",
"DeleteWidgetConfirm": "คุณแน่ใจไหมที่จะลบวิดเจ็ทนี้ออกจากแผงควบคุม?",
"LoadingWidget": "กำลังโหลดวิดเจ็ท กรุณารอ...",
"ManageDashboard": "จัดการกระดานหลัก",
"Maximise": "มากที่สุด",
"Minimise": "น้อยที่สุด",
"NotUndo": "คุณจะไม่สามารถย้อนกลับไปดำเนินการในส่วนนี้ได้อีก",
"RemoveDashboard": "ลบกระดานหลักออก",
"RemoveDashboardConfirm": "คุณแน่ใจแล้วหรือว่าต้องการลบกระดานหลัก \"%s\" นี้ทิ้งไป?",
"RenameDashboard": "เปลี่ยนชื่อกระดานหลัก",
"ResetDashboard": "รีเซ็ตแผงควบคุมใหม่",
"ResetDashboardConfirm": "แน่ใจหรือไม่ ที่จะต้องการรีเซ็ตรูปแบบแผงควบคุมของคุณ เพื่อเริ่มต้นการเลือกวิดเจ็ตใหม่?",
"SelectDashboardLayout": "กรุณาเลือกรูปแบบแผงควบคุมใหม่ของคุณ",
"SelectWidget": "เลือกวิดเจ็ทเพื่อเพิ่มในแผงควบคุม",
"WidgetNotFound": "ไม่พบวิดเจ็ท",
"WidgetPreview": "ตัวอย่าง Widget"
}
}

View File

@@ -0,0 +1,35 @@
{
"Dashboard": {
"AddAWidget": "Magdagdag ng widget",
"AddPreviewedWidget": "I-click upang magdagdag ng widget sa dashboard",
"ChangeDashboardLayout": "Baguhin ang layout ng dashboard",
"CopyDashboardToUser": "Kopyahin ang dashboard sa user",
"CreateNewDashboard": "Lumikha ng bagong dashboard",
"Dashboard": "Dashboard",
"DashboardCopied": "Matagumpay na nakopya ang kasalukuyang dashboard sa napiling user.",
"DashboardEmptyNotification": "Ang iyong dashboard ay hindi nag lalaman ng kahit anong widgets. Umpisahan sa pagdag-dag ng mga widget o i-rest ang dashboard sa pangunahing widget selection.",
"DashboardName": "Pangalan ng dashboard:",
"DashboardOf": "Dashboard ng %s",
"DefaultDashboard": "Default dashboard - Paggamit ng default na pagpili ng widget at mga hanay ng layout",
"DeleteWidgetConfirm": "Sigurado ka bang gusto mong burahin itong widget mula sa dashboard?",
"EmptyDashboard": "Alisin ang laman ng dashboard - Pumili ng iyong mga paboritong widget",
"LoadingWidget": "Ni-loload ang widget mangyaring maghintay sandali.",
"ManageDashboard": "pamahalaan ang dashboard",
"Maximise": "I-maximise",
"Minimise": "I-minimise",
"NotUndo": "Hindi mo magagawang i-undo ang operasyon na ito.",
"RemoveDashboard": "Alisin dashboard",
"RemoveDashboardConfirm": "Sigurado ko bang gusto mong tanggalin ang dashboard \"%s\"?",
"RenameDashboard": "Palitan ang pangalan ng dashboard",
"ResetDashboard": "I-reset ang dashboard",
"ResetDashboardConfirm": "Sigurado ka bang gusto mong i-reset ang iyong layout dashboard sa default na pagpipilian Widget?",
"SelectDashboardLayout": "Mangyaring piliin ang iyong bagong layout dashboard.",
"SelectWidget": "Pumili ng widget na idadagdag sa inyong dashboard.",
"SetAsDefaultWidgets": "Itakda ang default na pagpipilian ng mga widget bilang.",
"SetAsDefaultWidgetsConfirm": "Sigurado ka bang gusto mong e-set ang kasalukuyang mga widget at layout ng dashboard ng template bilang default dashboard?",
"SetAsDefaultWidgetsConfirmHelp": "Ang mga widget na pagpilian at dashboard column layout ay magagamit kapag ang sinumang user na guwama ng bagong dashboard o kapag ang \"%s\" feature ay ginamit.",
"TopLinkTooltip": "Tignan ang Ulat ng Web Analytics para sa %s.",
"WidgetNotFound": "Hindi nakita ang Widget",
"WidgetPreview": "preview ng widget"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Gereç ekle",
"AddPreviewedWidget": "Gereci panoya eklemek için tıklayın",
"ChangeDashboardLayout": "Pano düzenini değiştir",
"CopyDashboardToUser": "Panoyu kullanıcıya kopyala",
"CreateNewDashboard": "Pano ekle",
"Dashboard": "Pano",
"DashboardCopied": "Geçerli pano seçilmiş kullanıcıya kopyalandı.",
"DashboardEmptyNotification": "Panoda henüz bir gereç yok. Başlamak için bazı gereçler ekleyin ya da panoyu varsayılan gereç seçimine sıfırlayın.",
"DashboardName": "Pano adı:",
"DashboardOf": "%s panosu",
"DefaultDashboard": "Varsayılan pano - Varsayılan gereç seçimlerini ve sütun düzenini kullanır",
"DeleteWidgetConfirm": "Bu gereci panodan silmek istediğinize emin misiniz?",
"EmptyDashboard": "Boş panı - Kullanmak istediğiniz gereçleri seçin",
"LoadingWidget": "Lütfen gereç yüklenirken bekleyin...",
"ManageDashboard": "Pano yönetimi",
"Maximise": "Büyüt",
"Minimise": "Küçült",
"NotUndo": "Bu işlem geri alınamaz.",
"PluginDescription": "Web İstatistikleri Panonuz. Panonuzu, yeni gereçler ekleyerek, varolan gereçleri sürükleyip bırakarak ve sütun düzenini değiştirerek isteğinize göre düzenleyebilirsiniz. Her kullanıcı kendine özel bir pano oluşturabilir.",
"RemoveDashboard": "Panoyu sil",
"RemoveDashboardConfirm": "\"%s\" panosunu silmek istediğinize emin misiniz?",
"RemoveDefaultDashboardNotPossible": "Varsayılan pano silinemez",
"RenameDashboard": "Panoyu yeniden adlandırın",
"ResetDashboard": "Panoyu sıfırla",
"ResetDashboardConfirm": "Pano düzeninizi varsayılan gereç seçimlerine göre sıfırlamak istediğinize emin misiniz?",
"SelectDashboardLayout": "Lütfen yeni pano düzenini seçin",
"SelectWidget": "Panoya eklemek istesiğiniz gereci seçin",
"SetAsDefaultWidgets": "Varsayılan gereç seçimi olarak ata",
"SetAsDefaultWidgetsConfirm": "Geçerli gereç seçimi ve pano düzenini varsayılan pano teması olarak atamak istediğinize emin misiniz?",
"SetAsDefaultWidgetsConfirmHelp": "Başka bir kullanıcı yeni bir pano eklediğinde ya da \"%s\" özelliği kullanıldığında, varsayılan olarak bu gereç seçimi ve sütun düzeni kullanılır.",
"TopLinkTooltip": "%s için web istatistikleri raporunu görüntüle.",
"WidgetNotFound": "Gereç bulunamadı",
"WidgetPreview": "Gereç önizlemesi"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Додати віджет",
"AddPreviewedWidget": "Додати віджет на панель інструментів",
"ChangeDashboardLayout": "Виберіть вид панелі інструментів",
"CopyDashboardToUser": "Копіювати панель інструментів користувачеві",
"CreateNewDashboard": "Створити нову панель інструментів",
"Dashboard": "Панель інструментів",
"DashboardCopied": "Поточна панель інструментів успішно скопійовано вибраному користувачеві.",
"DashboardEmptyNotification": "Ваша панель інструментів не містить жодного елемента. Додайте якісь віджети або просто скиньте панель інструментів до налаштувань за замовчуванням.",
"DashboardName": "Ім'я панелі інструментів:",
"DashboardOf": "Панель інструментів %s",
"DefaultDashboard": "Панель інструментів за замовчуванням використовує набір віджетів та розташування колонок за замовчуванням.",
"DeleteWidgetConfirm": "Ви впевнені, що хочете видалити цей віджет з інформаційної панелі?",
"EmptyDashboard": "Порожня панель інструментів - виберіть ваші улюблені віджети",
"LoadingWidget": "Завантаження віджету, будь ласка почекайте...",
"ManageDashboard": "Налаштування панелі інструментів",
"Maximise": "Розгорнути",
"Minimise": "Згорнути",
"NotUndo": "Дана операція не зворотна.",
"PluginDescription": "Ваша панель управління веб-аналітикою. Налаштуйте свою панель керування, додавайте нові віджети, переміщуйте їх і змінюйте розташування стовпців панелі управління. Кожен користувач може керувати своєю власною панеллю керування.",
"RemoveDashboard": "Видалити панель інструментів",
"RemoveDashboardConfirm": "Ви впевнені, що хочете видалити цю панель інструментів: '%s'?",
"RemoveDefaultDashboardNotPossible": "Панель управління за замовчуванням не може бути видалена",
"RenameDashboard": "Перейменувати панель інструментів",
"ResetDashboard": "Скинути панель інструментів",
"ResetDashboardConfirm": "Ви впевнені, що хочете скинути вид панелі інструментів до виду за замовчуванням?",
"SelectDashboardLayout": "Будь ласка, виберіть ваш новий вид панелі інструментів.",
"SelectWidget": "Виберіть віджет для додавання на панелі інструментів",
"SetAsDefaultWidgets": "Встановити набір віджетів за замовчуванням",
"SetAsDefaultWidgetsConfirm": "Ви впевнені, що хочете встановити поточний набір віджетів панелі інструментів як набір віджетів за замовчуванням?",
"SetAsDefaultWidgetsConfirmHelp": "Вибір віджетів і розташування колонок панелі інструментів буде використовуватися, коли користувач створює нову панель інструментів або коли використовується '%s'.",
"TopLinkTooltip": "Подивитися звіт веб-аналітики для %s.",
"WidgetNotFound": "Віджет не найден",
"WidgetPreview": "Попередній перегляд віджету"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "Thêm Widget",
"AddPreviewedWidget": "Bấm vào đây để thêm widget vào bảng điều khiển",
"ChangeDashboardLayout": "Thay đổi cách bố trí bảng điều khiển",
"CopyDashboardToUser": "Sao chép bảng điều khiển người sử dụng",
"CreateNewDashboard": "Tạo bảng điều khiển mới",
"Dashboard": "Bảng điều khiển",
"DashboardCopied": "Bảng điều khiển hiện tại đã sao chép thành công để cho người sử dụng lựa chọn.",
"DashboardEmptyNotification": "Bảng điều khiển của bạn không có widget nào. Bắt đầu bằng cách thêm các widget hoặc chỉ cần cài đặt lại bảng điều khiển với lựa chọn widget mặc định.",
"DashboardName": "Tên bảng điều khiển:",
"DashboardOf": "Bảng điều khiển của %s",
"DefaultDashboard": "Bảng điều khiển mặc định - Sử dụng các lựa chọn widget mặc định và cột bố trí.",
"DeleteWidgetConfirm": "Bạn có chắc chắn rằng muốn xóa widget này từ bảng điều khiển?",
"EmptyDashboard": "Bảng điều khiển trống - Chọn các widget yêu thích của bạn.",
"LoadingWidget": "Đang tải widget, vui lòng đợi ...",
"ManageDashboard": "Quản lý bảng điều khiển",
"Maximise": "Tối đa",
"Minimise": "Tối thiểu",
"NotUndo": "Bạn sẽ không thể lùi lại hoạt động này",
"PluginDescription": "Bảng điều khiển của bạn. Có thể tùy biến bằng cách thêm widget, kéo thả hoặc thêm các trường dữ liệu. Mỗi người dùng có thể tùy biến bảng điều khiến cho riêng mình.",
"RemoveDashboard": "Loại bỏ bảng điều khiển",
"RemoveDashboardConfirm": "Bạn có chắc chắn muốn loại bỏ bảng điều khiển \"%s\"?",
"RemoveDefaultDashboardNotPossible": "Các bảng điều khiển mặc định không thể bị gỡ bỏ",
"RenameDashboard": "Đổi tên bảng điều khiển",
"ResetDashboard": "Bảng điều khiển mặc định",
"ResetDashboardConfirm": "Bạn có chắc chắn muốn thiết lập lại bố trí bảng điều khiển của bạn cho thiết lập các Widget mặc định?",
"SelectDashboardLayout": "Vui lòng chọn bố trí bảng điều khiển mới của bạn",
"SelectWidget": "Chọn widget để thêm vào trong bảng điều khiển",
"SetAsDefaultWidgets": "Thiết lập như lựa chọn widget mặc định.",
"SetAsDefaultWidgetsConfirm": "Bạn có chắc chắn muốn thiết lập các lựa chọn widget hiện tại và bố trí bảng điều khiển như mẫu bảng điều khiển mặc định không?",
"SetAsDefaultWidgetsConfirmHelp": "Các lựa chọn Widget và bố trí các cột bảng điều khiển này sẽ được sử dụng khi bất kỳ người dùng tạo ra một bảng điều khiển mới, hoặc khi \"%s\" tính năng được sử dụng.",
"TopLinkTooltip": "Xem báo cáo Web Analytics cho %s.",
"WidgetNotFound": "Không tìm thấy Widget",
"WidgetPreview": "Xem trước Widget"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "增加一个小工具",
"AddPreviewedWidget": "添加小工具到报表面板",
"ChangeDashboardLayout": "修改面板布局",
"CopyDashboardToUser": "复制面板给用户",
"CreateNewDashboard": "创建新的面板",
"Dashboard": "报表面板",
"DashboardCopied": "当前面板成功复制到所选用户。",
"DashboardEmptyNotification": "您的面板没有任何小工具,请增加一些小工具或重置为默认的小工具选择。",
"DashboardName": "面板名称:",
"DashboardOf": "%s报表",
"DefaultDashboard": "默认面板——使用默认的小工具和布局",
"DeleteWidgetConfirm": "您确定要从报表面板中删除这个小工具吗?",
"EmptyDashboard": "空白面板——请选择您喜欢的小工具",
"LoadingWidget": "小工具加载中,请稍候……",
"ManageDashboard": "管理面板",
"Maximise": "最大化",
"Minimise": "最小化",
"NotUndo": "此操作不可撤消。",
"PluginDescription": "您的 Web 分析面板。如果需要自定义,您可以添加新的小工具,拖动这些小工具,和更改面板的列数和布局。每个用户都可以独立定制属于他自己的面板。",
"RemoveDashboard": "删除面板",
"RemoveDashboardConfirm": "确认要删除面板“%s”吗",
"RemoveDefaultDashboardNotPossible": "默认的面板无法删除",
"RenameDashboard": "重命名面板",
"ResetDashboard": "重置面板",
"ResetDashboardConfirm": "确认重置面板布局为默认的小工具列表?",
"SelectDashboardLayout": "请选择新报表布局",
"SelectWidget": "选择要加入面板的小工具",
"SetAsDefaultWidgets": "设置为默认小工具列表",
"SetAsDefaultWidgetsConfirm": "您确定要设置当前的小工具列表和布局为默认的面板模板吗?",
"SetAsDefaultWidgetsConfirmHelp": "用户创建新面板时,或者“%s”功能启用时将使用当前小工具列表和面板布局。",
"TopLinkTooltip": "查看%s的统计报表。",
"WidgetNotFound": "找不到小工具",
"WidgetPreview": "小工具预览"
}
}

View File

@@ -0,0 +1,37 @@
{
"Dashboard": {
"AddAWidget": "新增小工具",
"AddPreviewedWidget": "將小工具加入展示板",
"ChangeDashboardLayout": "改變展示板版面",
"CopyDashboardToUser": "將展示板複製給使用者",
"CreateNewDashboard": "新增展示板",
"Dashboard": "展示板",
"DashboardCopied": "已成功將目前的展示板複製給選擇的使用者",
"DashboardEmptyNotification": "你的展示板還沒有任何小工具。開始添加一些小工具,或是直接重置展示板,使用預選的小工具。",
"DashboardName": "展示板名稱:",
"DashboardOf": "%s 的展示板",
"DefaultDashboard": "預設展示板 - 使用預選小工具以及欄位版面",
"DeleteWidgetConfirm": "你確定要從展示板中刪除這個小工具嗎?",
"EmptyDashboard": "空白展示板 - 依你的喜好選擇小工具",
"LoadingWidget": "小工具載入中,請稍候...",
"ManageDashboard": "展示板管理",
"Maximise": "最大化",
"Minimise": "最小化",
"NotUndo": "你將無法還原此操作",
"PluginDescription": "你的網頁分析展示板。透過添加小工具來自定你的展示板,只需拖曳並放置即可改變展示板的欄位版面。每位使用者可以管理他們自己的展示板。",
"RemoveDashboard": "移除展示板",
"RemoveDashboardConfirm": "你確定要移除展示板:%s",
"RemoveDefaultDashboardNotPossible": "無法移除預設展示板",
"RenameDashboard": "重新命名展示板",
"ResetDashboard": "重置展示板",
"ResetDashboardConfirm": "你確定要重置你的展示板還原為預選小工具版面?",
"SelectDashboardLayout": "請選擇你新展示板的版面",
"SelectWidget": "選取欲增加至展示板的小工具",
"SetAsDefaultWidgets": "設定為預選小工具",
"SetAsDefaultWidgetsConfirm": "你確定要將目前選擇的小工具和展示板版面設定為預設的展示板模板?",
"SetAsDefaultWidgetsConfirmHelp": "這個小工具和展示板版面將於使用者建立的新展示板,或是使用 %s 功能時套用。",
"TopLinkTooltip": "查看 %s 的網頁分析報表。",
"WidgetNotFound": "找不到小工具",
"WidgetPreview": "小工具預覽"
}
}

View File

@@ -0,0 +1,433 @@
#dashboard {
margin: 0 -8px;
}
body#standalone {
background-color: @theme-color-widget-exported-background-base;
.top_controls {
background-color: @theme-color-widget-exported-background-base;
}
#dashboard {
margin: -10px -6px 0;
}
}
#dashboard {
#dashboardWidgetsArea > .col {
min-height: 100px;
// Customize Bootstrap gutter between columns
padding-right: 8px;
padding-left: 8px;
>.sortable {
padding: 5px 0 13px 0;
}
}
}
.hover {
border: 2px dashed #E3E3E3;
}
.widgetHover {
border: 1px solid #aba494;
}
.widget .entityContainer {
width: 100%;
}
.widget .sparkline {
margin-left: 5px;
}
// Overriding some dataTable css for better dashboard display
.widget .dataTableWrapper {
width: 100% !important;
table * {
// Because of Bootstrap
box-sizing: content-box;
}
}
.ui-confirm {
display: none;
color: @theme-color-text-light;
cursor: default;
font-size: 12px !important;
border-radius: 4px;
padding: 20px 10px;
border-radius: 4px;
min-height: 0 !important;
textarea {
background-color: @theme-color-background-contrast;
}
}
.ui-confirm p {
margin-top: 16px;
font-size: 14px;
}
.ui-confirm h2 {
text-align: center;
font-weight: bold;
padding: 0;
}
.ui-dialog .ui-dialog-buttonpane {
text-align: center;
border: none;
}
.ui-dialog .ui-dialog-buttonpane .ui-dialog-buttonset {
float: none;
}
.ui-dialog-buttonset input[type=button], .ui-dialog-buttonset button {
color: #fff !important;
border: 0 !important;
font-size: 12px !important;
padding: 5px 20px !important;
border-radius: 3px;
cursor: pointer;
display: inline-block;
margin: 0 8px 3px 8px !important;
}
.ui-dialog .ui-button-text {
padding: 0 !important;
}
.ui-widget-overlay {
opacity: 0.6;
background: none #000;
position: fixed;
z-index: 1000;
}
.ui-dialog {
z-index: 1001;
}
.menu {
display: none;
}
.widgetLoading, .widgetLoadingError, .dimensionLoadingError {
padding: 10px;
font-size: 10pt;
}
.widgetLoadingError {
.alert.alert-danger {
border: 0;
}
}
.widgetLoadingError, .dimensionLoadingError {
color: @theme-color-brand;
text-align: left;
a {
color: @theme-color-brand;
text-decoration: underline;
}
}
#closeMenuIcon {
float: right;
margin: 3px;
cursor: pointer;
}
.menuClear {
clear: both;
height: 30px;
}
.dashboardSettings > span {
background: url(plugins/Morpheus/images/sort_subtable_desc.png) right center no-repeat;
padding-right: 20px;
display: block;
}
.dashboardSettings ul.submenu {
display: none;
float: left;
}
.dashboardSettings.expanded ul.submenu {
display: block;
list-style: square outside none;
z-index: 1020; /* More than .jqplot-seriespicker-popover (1010) */
}
.dashboardSettings.expanded .dropdown {
min-width: 800px;
background-color: @theme-color-background-contrast;
}
.dashboardSettings ul.submenu > li {
padding: 5px 0;
clear: both;
}
#changeDashboardLayout h2 {
margin-bottom: 20px;
}
#columnPreview {
clear: both;
width: 400px;
margin: auto;
}
#columnPreview > div {
margin: 5px;
float: left;
opacity: 0.4;
cursor: pointer;
filter: Alpha(opacity=40);
}
#columnPreview > div:hover, #columnPreview > div.choosen {
opacity: 1;
filter: Alpha(opacity=100);
}
#columnPreview div div {
height: 120px;
float: left;
}
#columnPreview div div span {
background-color: #ddd;
width: 100%;
height: 100%;
display: block;
border: 2px dotted #555;
margin: 0 1px;
}
#columnPreview div.choosen div span, #columnPreview div:hover div span {
border-style: solid;
}
#columnPreview .width-100 {
width: 120px;
}
#columnPreview .width-75 {
width: 90px;
}
#columnPreview .width-67 {
width: 80.4px;
}
#columnPreview .width-50 {
width: 60px;
}
#columnPreview .width-40 {
width: 48px;
}
#columnPreview .width-33 {
width: 40px;
}
#columnPreview .width-30 {
width: 36px;
}
#columnPreview .width-25 {
width: 30px;
}
/**
* Layout for widget previews
*/
.widgetpreview-base {
clear: both;
}
.addWidget, .manageDashboard {
cursor: default;
}
ul.widgetpreview-widgetlist,
ul.widgetpreview-categorylist {
color: @theme-color-text-light;
list-style: none;
font-size: 11px;
line-height: 20px;
float: left;
margin-right: 20px;
}
ul.widgetpreview-categorylist {
cursor: default;
}
ul.widgetpreview-categorylist li,
ul.widgetpreview-widgetlist li {
line-height: 20px;
padding: 0 25px 0 5px;
border-radius: 2px;
}
.widgetpreview-base li.widgetpreview-choosen {
background: #e4e2d7 url(plugins/Morpheus/images/arr_r.png) no-repeat right 6px;
color: #255792;
font-weight: bold;
}
.widgetpreview-categorylist li.widgetpreview-choosen {
color: #000;
}
.widgetpreview-base li.widgetpreview-unavailable {
color: #D3D3D3;
cursor: default;
}
ul.widgetpreview-widgetlist {
cursor: pointer;
position: relative;
top: 0;
}
div.widgetpreview-preview {
width: 500px;
float: left;
}
.dashboardSettings .submenu {
font-weight: bold;
color: #255792;
}
.dashboardSettings .submenu ul {
float: none;
font-weight: normal;
padding-top: 10px;
margin-left: 10px;
color: @theme-color-text-light;
list-style: none;
font-size: 11px;
line-height: 20px;
margin-right: 20px;
}
.dashboardSettings .submenu ul li {
line-height: 20px;
padding: 0 25px 0 5px;
color: @theme-color-text-light;
width: 200px;
}
.dashboardSettings ul.submenu > li.generalAction:hover {
color: @theme-color-link;
cursor:pointer;
}
.dashboardSettings .submenu ul li:not([disabled]):hover {
background: @theme-color-background-base;
border-radius: 2px;
cursor:pointer;
}
.dashboardSettings .submenu li[disabled],
.dashboardSettings .submenu li[disabled]:hover {
color: #d3d3d3;
}
.dashboardSettings .widgetpreview-widgetlist {
width: 228px;
font-weight: normal;
}
.dashboardSettings .widgetTop {
cursor: pointer;
}
.dashboardSettings .widgetpreview-widgetlist,
.dashboardSettings .widgetpreview-preview {
display: none;
}
.dashboardSettings.expanded .widgetpreview-widgetlist,
.dashboardSettings.expanded .widgetpreview-preview {
display: block;
z-index: 333999;
}
.widgetPlaceholder {
border: 1px dashed #bbb6ad;
}
#newDashboardName, #createDashboardName {
width: 200px;
}
#newDashboardNameInput, #createDashboardNameInput {
margin: 20px 0 0 100px;
text-align: left;
}
#createDashboardNameInput input {
margin-bottom: 10px;
}
.popoverSubMessage {
text-align: center;
padding: 10px 0 5px 0;
}
#copyDashboardToUserConfirm .inputs {
width: 400px;
margin: 32px auto 0;
label {
margin-top: 18px;
display: inline-block;
}
}
#dashboardWidgetsArea {
margin-top: -5px;
}
@media all and (max-width: 749px) {
#dashboardWidgetsArea {
padding-right: 7px;
}
.col.width-75,
.col.width-67,
.col.width-50,
.col.width-40,
.col.width-33,
.col.width-30,
.col.width-25 {
width: 100%;
.widget {
margin-right: 0;
}
}
}
.ui-dialog .widget {
.button#close,.button#maximise {
display:none;
}
}
.ui-button, .ui-dialog-titlebar-close {
.btn;
color: @theme-color-brand-contrast !important;
background-color: @color-red-piwik !important;
&:hover {
background: none;
background-color: transparent;
}
}

View File

@@ -0,0 +1,72 @@
body {
padding-left: 7px;
}
#standalone strong {
font-weight: 700;
}
#dashboard {
margin: 30px -6px 0 -12px;
width: 100%;
padding-top: 8px;
}
#Dashboard {
z-index: 5;
font-size: 14px;
cursor: pointer;
float: left;
position: relative;
}
#Dashboard > ul > li {
list-style: square inside none;
}
#Dashboard > ul {
list-style: square inside none;
background: #f7f7f7;
border: 1px solid #e4e5e4;
padding: 5px 10px 6px 10px;
border-radius: 4px;
color: #444;
height: 18px;
}
#Dashboard:hover ul {
background: #f1f0eb;
border-color: #a9a399;
}
#Dashboard > ul > li {
float: left;
margin-right: 15px;
}
#Dashboard a {
color: #444;
text-decoration: none;
font-weight: normal;
display: inline-block;
}
#Dashboard > ul > li:hover,
#Dashboard > ul > li:hover a {
color: #e87500;
}
.top_controls > #Dashboard,
.top_controls > #periodString,
.top_controls > .dashboardSettings {
margin-left: 0;
margin-right: 10px;
}
.jqplot-seriespicker-popover {
top: 0;
}
#ajaxLoading {
margin: 40px 0 -30px 0;
}

View File

@@ -0,0 +1,168 @@
.widget {
.font-default(13px, 18px);
background: @theme-color-widget-background;
border-radius: 2px;
position: relative;
box-shadow: @default-box-shade;
border: 1px solid @theme-color-widget-background !important;
&:hover, &:focus {
box-shadow: @default-box-shade;
}
h2 {
font-weight: normal;
border-bottom: none;
margin: 0;
padding: 12px 10px 7px;
}
h3 {
font-weight: normal;
font-size: 15px;
margin: 0;
color: @theme-color-text;
text-shadow: none;
padding: 22px 15px 16px 12px !important;
}
p {
margin-left: 10px;
}
&.default {
margin-left: 0;
margin-right: 0;
.widgetTop {
cursor: default !important;
}
}
.widgetTop {
cursor: move;
font-size: 10pt;
font-weight: normal;
padding-bottom: 4px;
background: @theme-color-widget-title-background;
h3 {
.font-default(18px, 18px);
color: @theme-color-widget-title-text;
}
.button {
margin: 16px 8px 0 0;
opacity: 0.8;
cursor: pointer;
float: right;
}
.buttons {
right: 8px;
float: right;
position: absolute;
padding-left: 50px;
display: none;
top: 7px;
color: @theme-color-widget-title-text;
background: -moz-linear-gradient(left, rgba(255,255,255,0) 0%, @theme-color-widget-title-background 45px);
background: -webkit-linear-gradient(left,rgba(255,255,255,0) 0%, @theme-color-widget-title-background 45px);
background: linear-gradient(to right, rgba(255,255,255,0) 0%, @theme-color-widget-title-background 45px);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='@{theme-color-widget-title-background}',GradientType=1 );
}
&:hover .buttons {
display:block;
}
}
.widgetText {
padding: 10px;
}
.pk-emptyDataTable {
.font-default(13px, 16px);
text-transform: none;
}
.widgetContent {
.widgetBody {
padding: 5px 12px 0;
}
/** We do not want to show a material-card in a widget which is already a card */
.card {
box-shadow: 0 0;
padding: 0 10px;
.card-content {
padding: 0;
border-radius: 0
}
}
.jqplot-graph {
margin-top: 6px;
}
.sparkline {
padding: 0 10px;
}
}
.widgetContent.hidden {
position: absolute;
top: -5000px;
height: 1000px;
overflow: hidden;
}
.widgetContent.loading {
opacity: 0.5;
background: url(plugins/Morpheus/images/loading-blue.gif) no-repeat top right;
}
.widgetLoading {
cursor: wait;
text-align: center;
}
.widgetNameOffScreen {
overflow: hidden;
width:1px;
height:1px;
}
.card {
margin: 0;
border-radius: 0;
}
}
.widget.hiddenContent .widgetTop.widgetTopHover {
.button#minimise,.button#refresh {
display:none;
}
}
.widget table.dataTable tr td {
background-color: @theme-color-widget-background;
}
.dataTable table.dataTable tr td {
background-color: @theme-color-widget-background;
}
.widget {
.datatableHeaderMessage, .datatableFooterMessage {
padding-left: 12px;
}
}
.bar-graph-colors[data-name=grid-background] {
color: @theme-color-widget-background !important;
}
.widgetoverlay {
.widget, .ui-dialog-content {
position: static;
}
}
.ui-dialog .widget .widgetTop .buttons {
right: 25px;
}

View File

@@ -0,0 +1,24 @@
<a class="title" title="{{ 'Dashboard_ManageDashboard'|translate|e('html_attr') }}" tabindex="4"><span class="icon icon-arrow-bottom"></span>{{ 'Dashboard_Dashboard'|translate }} </a>
<div class="dropdown positionInViewport">
<ul class="submenu">
<li>
<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>
<ul>
{% for action, title in dashboardActions %}
<li data-action="{{ action }}">{{ title|translate }}</li>
{% endfor %}
</ul>
</li>
{% endif %}
{% for action, title in generalActions %}
<li class="generalAction" data-action="{{ action }}">{{ title|translate }}</li>
{% endfor %}
</ul>
<ul class="widgetpreview-widgetlist"></ul>
<div class="widgetpreview-preview"></div>
</div>

View File

@@ -0,0 +1,20 @@
{# This header is for loading the dashboard in stand alone mode #}
<!DOCTYPE html>
<html id="ng-app" ng-app="piwikApp">
<head>
<meta charset="utf-8">
<meta name="robots" content="noindex,nofollow">
<meta name="google" content="notranslate">
<meta http-equiv="x-ua-compatible" content="IE=EDGE,chrome=1" >
<title>{{ 'Dashboard_Dashboard'|translate }} - {{ 'CoreHome_WebAnalyticsReports'|translate }}</title>
<!--[if lt IE 9]>
<script language="javascript" type="text/javascript" src="libs/jqplot/excanvas.min.js"></script>
<![endif]-->
<link rel="stylesheet" type="text/css" href="plugins/Dashboard/stylesheets/standalone.css" />
{% include "_jsGlobalVariables.twig" %}
{% include "_jsCssIncludes.twig" %}
</head>
<body id="standalone" ng-app="app">
<div piwik-popover-handler></div>

View File

@@ -0,0 +1,28 @@
<div id="widgetTemplate" style="display:none;">
<div class="widget">
<div class="widgetTop">
<div class="buttons">
<div class="button" id="close">
<span class="icon-close" title="{{ 'General_Close'|translate }}"></span>
</div>
<div class="button" id="maximise">
<span class="icon-fullscreen" title="{{ 'Dashboard_Maximise'|translate }}"></span>
</div>
<div class="button" id="minimise">
<span class="icon-minimise" title="{{ 'Dashboard_Minimise'|translate }}"></span>
</div>
<div class="button" id="refresh">
<span class="icon-reload" title="{{ 'General_Refresh'|translate }}"></span>
</div>
</div>
<h3 class="widgetName">{% if widgetName is defined %}{{ widgetName }}{% endif %}
<div class="widgetNameOffScreen">
{{ 'General_Widget'|translate }}
</div>
</h3>
</div>
<div class="widgetContent">
<div class="widgetLoading">{{ 'Dashboard_LoadingWidget'|translate }}</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,110 @@
<div id="dashboard" piwik-dashboard dashboardid="{{ dashboardId }}">
<div class="ui-confirm" id="confirm">
<h2>{{ 'Dashboard_DeleteWidgetConfirm'|translate }}</h2>
<input role="yes" type="button" value="{{ 'General_Yes'|translate }}"/>
<input role="no" type="button" value="{{ 'General_No'|translate }}"/>
</div>
<div class="ui-confirm" id="setAsDefaultWidgetsConfirm">
<h2>{{ 'Dashboard_SetAsDefaultWidgetsConfirm'|translate }}</h2>
{% set resetDashboard %}{{ 'Dashboard_ResetDashboard'|translate }}{% endset %}
<div class="popoverSubMessage">{{ 'Dashboard_SetAsDefaultWidgetsConfirmHelp'|translate(resetDashboard) }}</div>
<input role="yes" type="button" value="{{ 'General_Yes'|translate }}"/>
<input role="no" type="button" value="{{ 'General_No'|translate }}"/>
</div>
<div class="ui-confirm" id="resetDashboardConfirm">
<h2>{{ 'Dashboard_ResetDashboardConfirm'|translate }}</h2>
<input role="yes" type="button" value="{{ 'General_Yes'|translate }}"/>
<input role="no" type="button" value="{{ 'General_No'|translate }}"/>
</div>
<div class="ui-confirm" id="dashboardEmptyNotification">
<h2>{{ 'Dashboard_DashboardEmptyNotification'|translate }}</h2>
<input role="addWidget" type="button" value="{{ 'Dashboard_AddAWidget'|translate }}"/>
<input role="resetDashboard" type="button" value="{{ 'Dashboard_ResetDashboard'|translate }}"/>
</div>
<div class="ui-confirm" id="changeDashboardLayout">
<h2>{{ 'Dashboard_SelectDashboardLayout'|translate }}</h2>
<div id="columnPreview">
{% for layout in availableLayouts %}
<div>
{% for column in layout %}
<div class="width-{{ column }}"><span></span></div>
{% endfor %}
</div>
{% endfor %}
<br class="clearfix" />
</div>
<input role="yes" type="button" value="{{ 'General_Save'|translate }}"/>
<input role="cancel" type="button" value="{{ 'General_Cancel'|translate }}"/>
</div>
<div class="ui-confirm" id="renameDashboardConfirm">
<h2>{{ 'Dashboard_RenameDashboard'|translate }}</h2>
<div id="newDashboardNameInput">
<label for="newDashboardName">{{ 'Dashboard_DashboardName'|translate }} </label>
<input type="text" name="newDashboardName" id="newDashboardName" value=""/>
</div>
<input role="yes" type="button" value="{{ 'General_Save'|translate }}"/>
<input role="cancel" type="button" value="{{ 'General_Cancel'|translate }}"/>
</div>
{% if hasSomeAdminAccess %}
<div class="ui-confirm" id="copyDashboardToUserConfirm">
<h2>{{ 'Dashboard_CopyDashboardToUser'|translate }}</h2>
<div class="inputs">
<div class="row">
<div class="col s12 m6"><label for="copyDashboardName">{{ 'Dashboard_DashboardName'|translate }} </label></div>
<div class="col s12 m6"><input type="text" name="copyDashboardName" id="copyDashboardName" value=""/></div>
</div>
<div class="row">
<div class="col s12 m6"><label for="copyDashboardUser">{{ 'General_Username'|translate }} </label></div>
<div class="col s12 m6"><select class="browser-default" name="copyDashboardUser" id="copyDashboardUser">
<option>{{ 'General_LoadingData'|translate }}</option></select></div>
</div>
</div>
<input role="yes" type="button" value="{{ 'General_Ok'|translate }}"/>
<input role="cancel" type="button" value="{{ 'General_Cancel'|translate }}"/>
</div>
{% endif %}
<div class="ui-confirm" id="createDashboardConfirm">
<h2>{{ 'Dashboard_CreateNewDashboard'|translate }}</h2>
<div id="createDashboardNameInput">
<p>
<label>{{ 'Dashboard_DashboardName'|translate }} </label>
<input type="text" name="newDashboardName" id="createDashboardName" value=""/>
</p>
<p>
<input type="radio" checked="checked" name="type" value="default" id="dashboard_type_default" />
<label for="dashboard_type_default">{{ 'Dashboard_DefaultDashboard'|translate }}</label>
</p>
<p>
<input type="radio" name="type" value="empty" id="dashboard_type_empty" />
<label for="dashboard_type_empty">{{ 'Dashboard_EmptyDashboard'|translate }}</label>
</p>
</div>
<input role="yes" type="button" value="{{ 'General_Ok'|translate }}"/>
<input role="no" type="button" value="{{ 'General_Cancel'|translate }}"/>
</div>
<div class="ui-confirm" id="removeDashboardConfirm">
<h2>{{ 'Dashboard_RemoveDashboardConfirm'|translate('<span></span>')|raw }}</h2>
<div class="popoverSubMessage">{{ 'Dashboard_NotUndo'|translate(resetDashboard) }}</div>
<input role="yes" type="button" value="{{ 'General_Yes'|translate }}"/>
<input role="no" type="button" value="{{ 'General_No'|translate }}"/>
</div>
{% include "@Dashboard/_widgetFactoryTemplate.twig" %}
<div id="dashboardWidgetsArea" class="row"></div>
</div>

View File

@@ -0,0 +1,23 @@
{% include "@Dashboard/_header.twig" %}
<div class="top_controls">
{% include "@CoreHome/_periodSelect.twig" %}
{{ postEvent("Template.nextToCalendar") }}
{% render dashboardSettingsControl %}
{% if dashboards|length %}
<div id="Dashboard" class="piwikTopControl borderedControl piwikSelector">
<ul>
{% for dashboard in dashboards %}
<li id="Dashboard_embeddedIndex_{{ dashboard.iddashboard }}">
<a href="#" onclick="$('#dashboardWidgetsArea').dashboard('loadDashboard', {{ dashboard.iddashboard }});"
class="item">{{ dashboard.name|escape }}</a>
</li>
{% endfor %}
</ul>
</div>
{% endif %}
</div>
{% import 'ajaxMacros.twig' as ajax %}
{{ ajax.loadingDiv }}
{% include "@Dashboard/embeddedIndex.twig" %}
</body>
</html>