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,372 @@
<?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\Annotations;
use Exception;
use Piwik\Date;
use Piwik\Period\Range;
use Piwik\Period;
use Piwik\Piwik;
use Piwik\Plugins\CoreVisualizations\Visualizations\JqplotGraph\Evolution as EvolutionViz;
/**
* @see plugins/Annotations/AnnotationList.php
*/
require_once PIWIK_INCLUDE_PATH . '/plugins/Annotations/AnnotationList.php';
/**
* API for annotations plugin. Provides methods to create, modify, delete & query
* annotations.
*
* @method static \Piwik\Plugins\Annotations\API getInstance()
*/
class API extends \Piwik\Plugin\API
{
/**
* Create a new annotation for a site.
*
* @param string $idSite The site ID to add the annotation to.
* @param string $date The date the annotation is attached to.
* @param string $note The text of the annotation.
* @param int $starred Either 0 or 1. Whether the annotation should be starred.
* @return array Returns an array of two elements. The first element (indexed by
* 'annotation') is the new annotation. The second element (indexed
* by 'idNote' is the new note's ID).
*/
public function add($idSite, $date, $note, $starred = 0)
{
$this->checkUserCanAddNotesFor($idSite);
$this->checkSingleIdSite($idSite, $extraMessage = "Note: Cannot add one note to multiple sites.");
$this->checkDateIsValid($date);
// add, save & return a new annotation
$annotations = new AnnotationList($idSite);
$newAnnotation = $annotations->add($idSite, $date, $note, $starred);
$annotations->save($idSite);
return $newAnnotation;
}
/**
* Modifies an annotation for a site and returns the modified annotation
* and its ID.
*
* If the current user is not allowed to modify an annotation, an exception
* will be thrown. A user can modify a note if:
* - the user has admin access for the site, OR
* - the user has view access, is not the anonymous user and is the user that
* created the note
*
* @param string $idSite The site ID to add the annotation to.
* @param string $idNote The ID of the note.
* @param string|null $date The date the annotation is attached to. If null, the annotation's
* date is not modified.
* @param string|null $note The text of the annotation. If null, the annotation's text
* is not modified.
* @param string|null $starred Either 0 or 1. Whether the annotation should be starred.
* If null, the annotation is not starred/un-starred.
* @return array Returns an array of two elements. The first element (indexed by
* 'annotation') is the new annotation. The second element (indexed
* by 'idNote' is the new note's ID).
*/
public function save($idSite, $idNote, $date = null, $note = null, $starred = null)
{
$this->checkSingleIdSite($idSite, $extraMessage = "Note: Cannot modify more than one note at a time.");
$this->checkDateIsValid($date, $canBeNull = true);
// get the annotations for the site
$annotations = new AnnotationList($idSite);
// check permissions
$this->checkUserCanModifyOrDelete($idSite, $annotations->get($idSite, $idNote));
// modify the annotation, and save the whole list
$annotations->update($idSite, $idNote, $date, $note, $starred);
$annotations->save($idSite);
return $annotations->get($idSite, $idNote);
}
/**
* Removes an annotation from a site's list of annotations.
*
* If the current user is not allowed to delete the annotation, an exception
* will be thrown. A user can delete a note if:
* - the user has admin access for the site, OR
* - the user has view access, is not the anonymous user and is the user that
* created the note
*
* @param string $idSite The site ID to add the annotation to.
* @param string $idNote The ID of the note to delete.
*/
public function delete($idSite, $idNote)
{
$this->checkSingleIdSite($idSite, $extraMessage = "Note: Cannot delete annotations from multiple sites.");
$annotations = new AnnotationList($idSite);
// check permissions
$this->checkUserCanModifyOrDelete($idSite, $annotations->get($idSite, $idNote));
// remove the note & save the list
$annotations->remove($idSite, $idNote);
$annotations->save($idSite);
}
/**
* Removes all annotations for a single site. Only super users can use this method.
*
* @param string $idSite The ID of the site to remove annotations for.
*/
public function deleteAll($idSite)
{
Piwik::checkUserHasSuperUserAccess();
$this->checkSingleIdSite($idSite, $extraMessage = "Note: Cannot delete annotations from multiple sites.");
$annotations = new AnnotationList($idSite);
// remove the notes & save the list
$annotations->removeAll($idSite);
$annotations->save($idSite);
}
/**
* Returns a single note for one site.
*
* @param string $idSite The site ID to add the annotation to.
* @param string $idNote The ID of the note to get.
* @return array The annotation. It will contain the following properties:
* - date: The date the annotation was recorded for.
* - note: The note text.
* - starred: Whether the note is starred or not.
* - user: The user that created the note.
* - canEditOrDelete: Whether the user that called this method can edit or
* delete the annotation returned.
*/
public function get($idSite, $idNote)
{
Piwik::checkUserHasViewAccess($idSite);
$this->checkSingleIdSite($idSite, $extraMessage = "Note: Specify only one site ID when getting ONE note.");
// get single annotation
$annotations = new AnnotationList($idSite);
return $annotations->get($idSite, $idNote);
}
/**
* Returns every annotation for a specific site within a specific date range.
* The date range is specified by a date, the period type (day/week/month/year)
* and an optional number of N periods in the past to include.
*
* @param string $idSite The site ID to add the annotation to. Can be one ID or
* a list of site IDs.
* @param bool|string $date The date of the period.
* @param string $period The period type.
* @param bool|int $lastN Whether to include the last N number of periods in the
* date range or not.
* @return array An array that indexes arrays of annotations by site ID. ie,
* array(
* 5 => array(
* array(...), // annotation #1
* array(...), // annotation #2
* ),
* 8 => array(...)
* )
*/
public function getAll($idSite, $date = false, $period = 'day', $lastN = false)
{
Piwik::checkUserHasViewAccess($idSite);
$annotations = new AnnotationList($idSite);
// if date/period are supplied, determine start/end date for search
list($startDate, $endDate) = self::getDateRangeForPeriod($date, $period, $lastN);
return $annotations->search($startDate, $endDate);
}
/**
* Returns the count of annotations for a list of periods, including the count of
* starred annotations.
*
* @param string $idSite The site ID to add the annotation to.
* @param string|bool $date The date of the period.
* @param string $period The period type.
* @param int|bool $lastN Whether to get counts for the last N number of periods or not.
* @param bool $getAnnotationText
* @return array An array mapping site IDs to arrays holding dates & the count of
* annotations made for those dates. eg,
* array(
* 5 => array(
* array('2012-01-02', array('count' => 4, 'starred' => 2)),
* array('2012-01-03', array('count' => 0, 'starred' => 0)),
* array('2012-01-04', array('count' => 2, 'starred' => 0)),
* ),
* 6 => array(
* array('2012-01-02', array('count' => 1, 'starred' => 0)),
* array('2012-01-03', array('count' => 4, 'starred' => 3)),
* array('2012-01-04', array('count' => 2, 'starred' => 0)),
* ),
* ...
* )
*/
public function getAnnotationCountForDates($idSite, $date, $period, $lastN = false, $getAnnotationText = false)
{
Piwik::checkUserHasViewAccess($idSite);
// get start & end date for request. lastN is ignored if $period == 'range'
list($startDate, $endDate) = self::getDateRangeForPeriod($date, $period, $lastN);
if ($period == 'range') {
$period = 'day';
}
// create list of dates
$dates = array();
for (; $startDate->getTimestamp() <= $endDate->getTimestamp(); $startDate = $startDate->addPeriod(1, $period)) {
$dates[] = $startDate;
}
// we add one for the end of the last period (used in for loop below to bound annotation dates)
$dates[] = $startDate;
// get annotations for the site
$annotations = new AnnotationList($idSite);
// create result w/ 0-counts
$result = array();
for ($i = 0; $i != count($dates) - 1; ++$i) {
$date = $dates[$i];
$nextDate = $dates[$i + 1];
$strDate = $date->toString();
foreach ($annotations->getIdSites() as $idSite) {
$result[$idSite][$strDate] = $annotations->count($idSite, $date, $nextDate);
// if only one annotation, return the one annotation's text w/ the counts
if ($getAnnotationText
&& $result[$idSite][$strDate]['count'] == 1
) {
$annotationsForSite = $annotations->search(
$date, Date::factory($nextDate->getTimestamp() - 1), $idSite);
$annotation = reset($annotationsForSite[$idSite]);
$result[$idSite][$strDate]['note'] = $annotation['note'];
}
}
}
// convert associative array into array of pairs (so it can be traversed by index)
$pairResult = array();
foreach ($result as $idSite => $counts) {
foreach ($counts as $date => $count) {
$pairResult[$idSite][] = array($date, $count);
}
}
return $pairResult;
}
/**
* Throws if the current user is not allowed to modify or delete an annotation.
*
* @param int $idSite The site ID the annotation belongs to.
* @param array $annotation The annotation.
* @throws Exception if the current user is not allowed to modify/delete $annotation.
*/
private function checkUserCanModifyOrDelete($idSite, $annotation)
{
if (!$annotation['canEditOrDelete']) {
throw new Exception(Piwik::translate('Annotations_YouCannotModifyThisNote'));
}
}
/**
* Throws if the current user is not allowed to create annotations for a site.
*
* @param int $idSite The site ID.
* @throws Exception if the current user is anonymous or does not have view access
* for site w/ id=$idSite.
*/
private static function checkUserCanAddNotesFor($idSite)
{
if (!AnnotationList::canUserAddNotesFor($idSite)) {
throw new Exception("The current user is not allowed to add notes for site #$idSite.");
}
}
/**
* Returns start & end dates for the range described by a period and optional lastN
* argument.
*
* @param string|bool $date The start date of the period (or the date range of a range
* period).
* @param string $period The period type ('day', 'week', 'month', 'year' or 'range').
* @param bool|int $lastN Whether to include the last N periods in the range or not.
* Ignored if period == range.
*
* @return Date[] array of Date objects or array(false, false)
* @ignore
*/
public static function getDateRangeForPeriod($date, $period, $lastN = false)
{
if ($date === false) {
return array(false, false);
}
$isMultiplePeriod = Range::isMultiplePeriod($date, $period);
// if the range is just a normal period (or the period is a range in which case lastN is ignored)
if ($period == 'range') {
$oPeriod = new Range('day', $date);
$startDate = $oPeriod->getDateStart();
$endDate = $oPeriod->getDateEnd();
} else if ($lastN == false && !$isMultiplePeriod) {
$oPeriod = Period\Factory::build($period, Date::factory($date));
$startDate = $oPeriod->getDateStart();
$endDate = $oPeriod->getDateEnd();
} else { // if the range includes the last N periods or is a multiple period
if (!$isMultiplePeriod) {
list($date, $lastN) = EvolutionViz::getDateRangeAndLastN($period, $date, $lastN);
}
list($startDate, $endDate) = explode(',', $date);
$startDate = Date::factory($startDate);
$endDate = Date::factory($endDate);
}
return array($startDate, $endDate);
}
/**
* Utility function, makes sure idSite string has only one site ID and throws if
* otherwise.
*/
private function checkSingleIdSite($idSite, $extraMessage)
{
// can only add a note to one site
if (!is_numeric($idSite)) {
throw new Exception("Invalid idSite: '$idSite'. $extraMessage");
}
}
/**
* Utility function, makes sure date string is valid date, and throws if
* otherwise.
*/
private function checkDateIsValid($date, $canBeNull = false)
{
if ($date === null
&& $canBeNull
) {
return;
}
Date::factory($date);
}
}

View File

@@ -0,0 +1,457 @@
<?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\Annotations;
use Exception;
use Piwik\Common;
use Piwik\Date;
use Piwik\Option;
use Piwik\Piwik;
use Piwik\Site;
/**
* This class can be used to query & modify annotations for multiple sites
* at once.
*
* Example use:
* $annotations = new AnnotationList($idSites = "1,2,5");
* $annotation = $annotations->get($idSite = 1, $idNote = 4);
* // do stuff w/ annotation
* $annotations->update($idSite = 2, $idNote = 4, $note = "This is the new text.");
* $annotations->save($idSite);
*
* Note: There is a concurrency issue w/ this code. If two users try to save
* an annotation for the same site, it's possible one of their changes will
* never get made (as it will be overwritten by the other's).
*
*/
class AnnotationList
{
const ANNOTATION_COLLECTION_OPTION_SUFFIX = '_annotations';
/**
* List of site IDs this instance holds annotations for.
*
* @var array
*/
private $idSites;
/**
* Array that associates lists of annotations with site IDs.
*
* @var array
*/
private $annotations;
/**
* Constructor. Loads annotations from the database.
*
* @param string|int $idSites The list of site IDs to load annotations for.
*/
public function __construct($idSites)
{
$this->idSites = Site::getIdSitesFromIdSitesString($idSites);
$this->annotations = $this->getAnnotationsForSite();
}
/**
* Returns the list of site IDs this list contains annotations for.
*
* @return array
*/
public function getIdSites()
{
return $this->idSites;
}
/**
* Creates a new annotation for a site. This method does not perist the result.
* To save the new annotation in the database, call $this->save.
*
* @param int $idSite The ID of the site to add an annotation to.
* @param string $date The date the annotation is in reference to.
* @param string $note The text of the new annotation.
* @param int $starred Either 1 or 0. If 1, the new annotation has been starred,
* otherwise it will start out unstarred.
* @return array The added annotation.
* @throws Exception if $idSite is not an ID that was supplied upon construction.
*/
public function add($idSite, $date, $note, $starred = 0)
{
$this->checkIdSiteIsLoaded($idSite);
$date = Date::factory($date)->toString('Y-m-d');
$this->annotations[$idSite][] = self::makeAnnotation($date, $note, $starred);
// get the id of the new annotation
end($this->annotations[$idSite]);
$newNoteId = key($this->annotations[$idSite]);
return $this->get($idSite, $newNoteId);
}
/**
* Persists the annotations list for a site, overwriting whatever exists.
*
* @param int $idSite The ID of the site to save annotations for.
* @throws Exception if $idSite is not an ID that was supplied upon construction.
*/
public function save($idSite)
{
$this->checkIdSiteIsLoaded($idSite);
$optionName = self::getAnnotationCollectionOptionName($idSite);
Option::set($optionName, serialize($this->annotations[$idSite]));
}
/**
* Modifies an annotation in this instance's collection of annotations.
*
* Note: This method does not perist the change in the DB. The save method must
* be called for that.
*
* @param int $idSite The ID of the site whose annotation will be updated.
* @param int $idNote The ID of the note.
* @param string|null $date The new date of the annotation, eg '2012-01-01'. If
* null, no change is made.
* @param string|null $note The new text of the annotation. If null, no change
* is made.
* @param int|null $starred Either 1 or 0, whether the annotation should be
* starred or not. If null, no change is made.
* @throws Exception if $idSite is not an ID that was supplied upon construction.
* @throws Exception if $idNote does not refer to valid note for the site.
*/
public function update($idSite, $idNote, $date = null, $note = null, $starred = null)
{
$this->checkIdSiteIsLoaded($idSite);
$this->checkNoteExists($idSite, $idNote);
$annotation =& $this->annotations[$idSite][$idNote];
if ($date !== null) {
$annotation['date'] = Date::factory($date)->toString('Y-m-d');
}
if ($note !== null) {
$annotation['note'] = $note;
}
if ($starred !== null) {
$annotation['starred'] = $starred;
}
}
/**
* Removes a note from a site's collection of annotations.
*
* Note: This method does not perist the change in the DB. The save method must
* be called for that.
*
* @param int $idSite The ID of the site whose annotation will be updated.
* @param int $idNote The ID of the note.
* @throws Exception if $idSite is not an ID that was supplied upon construction.
* @throws Exception if $idNote does not refer to valid note for the site.
*/
public function remove($idSite, $idNote)
{
$this->checkIdSiteIsLoaded($idSite);
$this->checkNoteExists($idSite, $idNote);
unset($this->annotations[$idSite][$idNote]);
}
/**
* Removes all notes for a single site.
*
* Note: This method does not perist the change in the DB. The save method must
* be called for that.
*
* @param int $idSite The ID of the site to get an annotation for.
* @throws Exception if $idSite is not an ID that was supplied upon construction.
*/
public function removeAll($idSite)
{
$this->checkIdSiteIsLoaded($idSite);
$this->annotations[$idSite] = array();
}
/**
* Retrieves an annotation by ID.
*
* This function returns an array with the following elements:
* - idNote: The ID of the annotation.
* - date: The date of the annotation.
* - note: The text of the annotation.
* - starred: 1 or 0, whether the annotation is stared;
* - user: (unless current user is anonymous) The user that created the annotation.
* - canEditOrDelete: True if the user can edit/delete the annotation.
*
* @param int $idSite The ID of the site to get an annotation for.
* @param int $idNote The ID of the note to get.
* @throws Exception if $idSite is not an ID that was supplied upon construction.
* @throws Exception if $idNote does not refer to valid note for the site.
*/
public function get($idSite, $idNote)
{
$this->checkIdSiteIsLoaded($idSite);
$this->checkNoteExists($idSite, $idNote);
$annotation = $this->annotations[$idSite][$idNote];
$this->augmentAnnotationData($idSite, $idNote, $annotation);
return $annotation;
}
/**
* Returns all annotations within a specific date range. The result is
* an array that maps site IDs with arrays of annotations within the range.
*
* Note: The date range is inclusive.
*
* @see self::get for info on what attributes stored within annotations.
*
* @param Date|bool $startDate The start of the date range.
* @param Date|bool $endDate The end of the date range.
* @param array|bool|int|string $idSite IDs of the sites whose annotations to
* search through.
* @return array Array mapping site IDs with arrays of annotations, eg:
* array(
* '5' => array(
* array(...), // annotation
* array(...), // annotation
* ...
* ),
* '6' => array(
* array(...), // annotation
* array(...), // annotation
* ...
* ),
* )
*/
public function search($startDate, $endDate, $idSite = false)
{
if ($idSite) {
$idSites = Site::getIdSitesFromIdSitesString($idSite);
} else {
$idSites = array_keys($this->annotations);
}
// collect annotations that are within the right date range & belong to the right
// site
$result = array();
foreach ($idSites as $idSite) {
if (!isset($this->annotations[$idSite])) {
continue;
}
foreach ($this->annotations[$idSite] as $idNote => $annotation) {
if ($startDate !== false) {
$annotationDate = Date::factory($annotation['date']);
if ($annotationDate->getTimestamp() < $startDate->getTimestamp()
|| $annotationDate->getTimestamp() > $endDate->getTimestamp()
) {
continue;
}
}
$this->augmentAnnotationData($idSite, $idNote, $annotation);
$result[$idSite][] = $annotation;
}
// sort by annotation date
if (!empty($result[$idSite])) {
uasort($result[$idSite], array($this, 'compareAnnotationDate'));
}
}
return $result;
}
/**
* Counts annotations & starred annotations within a date range and returns
* the counts. The date range includes the start date, but not the end date.
*
* @param int $idSite The ID of the site to count annotations for.
* @param string|false $startDate The start date of the range or false if no
* range check is desired.
* @param string|false $endDate The end date of the range or false if no
* range check is desired.
* @return array eg, array('count' => 5, 'starred' => 2)
*/
public function count($idSite, $startDate, $endDate)
{
$this->checkIdSiteIsLoaded($idSite);
// search includes end date, and count should not, so subtract one from the timestamp
$annotations = $this->search($startDate, Date::factory($endDate->getTimestamp() - 1));
// count the annotations
$count = $starred = 0;
if (!empty($annotations[$idSite])) {
$count = count($annotations[$idSite]);
foreach ($annotations[$idSite] as $annotation) {
if ($annotation['starred']) {
++$starred;
}
}
}
return array('count' => $count, 'starred' => $starred);
}
/**
* Utility function. Creates a new annotation.
*
* @param string $date
* @param string $note
* @param int $starred
* @return array
*/
private function makeAnnotation($date, $note, $starred = 0)
{
return array('date' => $date,
'note' => $note,
'starred' => (int)$starred,
'user' => Piwik::getCurrentUserLogin());
}
/**
* Retrieves annotations from the database for the sites supplied to the
* constructor.
*
* @return array Lists of annotations mapped by site ID.
*/
private function getAnnotationsForSite()
{
$result = array();
foreach ($this->idSites as $id) {
$optionName = self::getAnnotationCollectionOptionName($id);
$serialized = Option::get($optionName);
if ($serialized !== false) {
$result[$id] = Common::safe_unserialize($serialized);
if (empty($result[$id])) {
// in case unserialize failed
$result[$id] = array();
}
} else {
$result[$id] = array();
}
}
return $result;
}
/**
* Utility function that checks if a site ID was supplied and if not,
* throws an exception.
*
* We can only modify/read annotations for sites that we've actually
* loaded the annotations for.
*
* @param int $idSite
* @throws Exception
*/
private function checkIdSiteIsLoaded($idSite)
{
if (!in_array($idSite, $this->idSites)) {
throw new Exception("This AnnotationList was not initialized with idSite '$idSite'.");
}
}
/**
* Utility function that checks if a note exists for a site, and if not,
* throws an exception.
*
* @param int $idSite
* @param int $idNote
* @throws Exception
*/
private function checkNoteExists($idSite, $idNote)
{
if (empty($this->annotations[$idSite][$idNote])) {
throw new Exception("There is no note with id '$idNote' for site with id '$idSite'.");
}
}
/**
* Returns true if the current user can modify or delete a specific annotation.
*
* A user can modify/delete a note if the user has write access for the site OR
* the user has view access, is not the anonymous user and is the user that
* created the note in question.
*
* @param int $idSite The site ID the annotation belongs to.
* @param array $annotation The annotation.
* @return bool
*/
public static function canUserModifyOrDelete($idSite, $annotation)
{
// user can save if user is admin or if has view access, is not anonymous & is user who wrote note
$canEdit = Piwik::isUserHasWriteAccess($idSite)
|| (!Piwik::isUserIsAnonymous()
&& Piwik::getCurrentUserLogin() == $annotation['user']);
return $canEdit;
}
/**
* Adds extra data to an annotation, including the annotation's ID and whether
* the current user can edit or delete it.
*
* Also, if the current user is anonymous, the user attribute is removed.
*
* @param int $idSite
* @param int $idNote
* @param array $annotation
*/
private function augmentAnnotationData($idSite, $idNote, &$annotation)
{
$annotation['idNote'] = $idNote;
$annotation['canEditOrDelete'] = self::canUserModifyOrDelete($idSite, $annotation);
// we don't supply user info if the current user is anonymous
if (Piwik::isUserIsAnonymous()) {
unset($annotation['user']);
}
}
/**
* Utility function that compares two annotations.
*
* @param array $lhs An annotation.
* @param array $rhs An annotation.
* @return int -1, 0 or 1
*/
public function compareAnnotationDate($lhs, $rhs)
{
if ($lhs['date'] == $rhs['date']) {
return $lhs['idNote'] <= $rhs['idNote'] ? -1 : 1;
}
return $lhs['date'] < $rhs['date'] ? -1 : 1; // string comparison works because date format should be YYYY-MM-DD
}
/**
* Returns true if the current user can add notes for a specific site.
*
* @param int $idSite The site to add notes to.
* @return bool
*/
public static function canUserAddNotesFor($idSite)
{
return Piwik::isUserHasViewAccess($idSite)
&& !Piwik::isUserIsAnonymous();
}
/**
* Returns the option name used to store annotations for a site.
*
* @param int $idSite The site ID.
* @return string
*/
public static function getAnnotationCollectionOptionName($idSite)
{
return $idSite . self::ANNOTATION_COLLECTION_OPTION_SUFFIX;
}
}

View File

@@ -0,0 +1,50 @@
<?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\Annotations;
/**
* Annotations plugins. Provides the ability to attach text notes to
* dates for each sites. Notes can be viewed, modified, deleted or starred.
*
*/
class Annotations extends \Piwik\Plugin
{
/**
* @see Piwik\Plugin::registerEvents
*/
public function registerEvents()
{
return array(
'AssetManager.getStylesheetFiles' => 'getStylesheetFiles',
'AssetManager.getJavaScriptFiles' => 'getJsFiles',
'Translate.getClientSideTranslationKeys' => 'getClientSideTranslationKeys',
);
}
public function getClientSideTranslationKeys(&$translationKeys)
{
$translationKeys[] = 'Intl_Today';
}
/**
* Adds css files for this plugin to the list in the event notification.
*/
public function getStylesheetFiles(&$stylesheets)
{
$stylesheets[] = "plugins/Annotations/stylesheets/annotations.less";
}
/**
* Adds js files for this plugin to the list in the event notification.
*/
public function getJsFiles(&$jsFiles)
{
$jsFiles[] = "plugins/Annotations/javascripts/annotations.js";
}
}

View File

@@ -0,0 +1,221 @@
<?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\Annotations;
use Piwik\API\Request;
use Piwik\Common;
use Piwik\Date;
use Piwik\View;
/**
* Controller for the Annotations plugin.
*
*/
class Controller extends \Piwik\Plugin\Controller
{
/**
* Controller action that returns HTML displaying annotations for a site and
* specific date range.
*
* Query Param Input:
* - idSite: The ID of the site to get annotations for. Only one allowed.
* - date: The date to get annotations for. If lastN is not supplied, this is the start date,
* otherwise the start date in the last period.
* - period: The period type.
* - lastN: If supplied, the last N # of periods will be included w/ the range specified
* by date + period.
*
* Output:
* - HTML displaying annotations for a specific range.
*
* @param bool $fetch True if the annotation manager should be returned as a string,
* false if it should be echo-ed.
* @param bool|string $date Override for 'date' query parameter.
* @param bool|string $period Override for 'period' query parameter.
* @param bool|string $lastN Override for 'lastN' query parameter.
* @return string|void
*/
public function getAnnotationManager($fetch = false, $date = false, $period = false, $lastN = false)
{
$this->checkSitePermission();
if ($date === false) {
$date = Common::getRequestVar('date', false);
}
if ($period === false) {
$period = Common::getRequestVar('period', 'day');
}
if ($lastN === false) {
$lastN = Common::getRequestVar('lastN', false);
}
// create & render the view
$view = new View('@Annotations/getAnnotationManager');
$allAnnotations = Request::processRequest(
'Annotations.getAll', array('date' => $date, 'period' => $period, 'lastN' => $lastN));
$view->annotations = empty($allAnnotations[$this->idSite]) ? array() : $allAnnotations[$this->idSite];
$view->period = $period;
$view->lastN = $lastN;
list($startDate, $endDate) = API::getDateRangeForPeriod($date, $period, $lastN);
$view->startDate = $startDate->toString();
$view->endDate = $endDate->toString();
if ($startDate->toString() !== $endDate->toString()) {
$view->selectedDate = Date::today()->toString();
} else {
$view->selectedDate = $endDate->toString();
}
$dateFormat = Date::DATE_FORMAT_SHORT;
$view->startDatePretty = $startDate->getLocalized($dateFormat);
$view->endDatePretty = $endDate->getLocalized($dateFormat);
$view->canUserAddNotes = AnnotationList::canUserAddNotesFor($this->idSite);
return $view->render();
}
/**
* Controller action that modifies an annotation and returns HTML displaying
* the modified annotation.
*
* Query Param Input:
* - idSite: The ID of the site the annotation belongs to. Only one ID is allowed.
* - idNote: The ID of the annotation.
* - date: The new date value for the annotation. (optional)
* - note: The new text for the annotation. (optional)
* - starred: Either 1 or 0. Whether the note should be starred or not. (optional)
*
* Output:
* - HTML displaying modified annotation.
*
* If an optional query param is not supplied, that part of the annotation is
* not modified.
*/
public function saveAnnotation()
{
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$this->checkTokenInUrl();
$view = new View('@Annotations/saveAnnotation');
// NOTE: permissions checked in API method
// save the annotation
$view->annotation = Request::processRequest("Annotations.save");
return $view->render();
}
}
/**
* Controller action that adds a new annotation for a site and returns new
* annotation manager HTML for the site and date range.
*
* Query Param Input:
* - idSite: The ID of the site to add an annotation to.
* - date: The date for the new annotation.
* - note: The text of the annotation.
* - starred: Either 1 or 0, whether the annotation should be starred or not.
* Defaults to 0.
* - managerDate: The date for the annotation manager. If a range is given, the start
* date is used for the new annotation.
* - managerPeriod: For rendering the annotation manager. @see self::getAnnotationManager
* for more info.
* - lastN: For rendering the annotation manager. @see self::getAnnotationManager
* for more info.
* Output:
* - @see self::getAnnotationManager
*/
public function addAnnotation()
{
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$this->checkTokenInUrl();
// the date used is for the annotation manager HTML that gets echo'd. we
// use this date for the new annotation, unless it is a date range, in
// which case we use the first date of the range.
$date = Common::getRequestVar('date');
if (strpos($date, ',') !== false) {
$date = reset(explode(',', $date));
}
// add the annotation. NOTE: permissions checked in API method
Request::processRequest("Annotations.add", array('date' => $date));
$managerDate = Common::getRequestVar('managerDate', false);
$managerPeriod = Common::getRequestVar('managerPeriod', false);
return $this->getAnnotationManager($fetch = true, $managerDate, $managerPeriod);
}
}
/**
* Controller action that deletes an annotation and returns new annotation
* manager HTML for the site & date range.
*
* Query Param Input:
* - idSite: The ID of the site this annotation belongs to.
* - idNote: The ID of the annotation to delete.
* - date: For rendering the annotation manager. @see self::getAnnotationManager
* for more info.
* - period: For rendering the annotation manager. @see self::getAnnotationManager
* for more info.
* - lastN: For rendering the annotation manager. @see self::getAnnotationManager
* for more info.
*
* Output:
* - @see self::getAnnotationManager
*/
public function deleteAnnotation()
{
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$this->checkTokenInUrl();
// delete annotation. NOTE: permissions checked in API method
Request::processRequest("Annotations.delete");
return $this->getAnnotationManager($fetch = true);
}
}
/**
* Controller action that echo's HTML that displays marker icons for an
* evolution graph's x-axis. The marker icons still need to be positioned
* by the JavaScript.
*
* Query Param Input:
* - idSite: The ID of the site this annotation belongs to. Only one is allowed.
* - date: The date to check for annotations. If lastN is not supplied, this is
* the start of the date range used to check for annotations. If supplied,
* this is the start of the last period in the date range.
* - period: The period type.
* - lastN: If supplied, the last N # of periods are included in the date range
* used to check for annotations.
*
* Output:
* - HTML that displays marker icons for an evolution graph based on the
* number of annotations & starred annotations in the graph's date range.
*/
public function getEvolutionIcons()
{
// get annotation the count
$annotationCounts = Request::processRequest(
"Annotations.getAnnotationCountForDates", array('getAnnotationText' => 1));
// create & render the view
$view = new View('@Annotations/getEvolutionIcons');
$view->annotationCounts = reset($annotationCounts); // only one idSite allowed for this action
return $view->render();
}
}

View File

@@ -0,0 +1,600 @@
/*!
* Piwik - free/libre analytics platform
*
* @link http://piwik.org
* @license http://www.gnu.org/licenses/gpl-3.0.html GPL v3 or later
*/
(function ($, piwik) {
var annotationsApi = {
// calls Annotations.getAnnotationManager
getAnnotationManager: function (idSite, date, period, lastN, callback) {
var ajaxParams =
{
module: 'Annotations',
action: 'getAnnotationManager',
idSite: idSite,
date: date,
period: period,
filter_limit: '-1'
};
if (lastN) {
ajaxParams.lastN = lastN;
}
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams(ajaxParams, 'get');
ajaxRequest.setCallback(callback);
ajaxRequest.setFormat('html');
ajaxRequest.send();
},
// calls Annotations.addAnnotation
addAnnotation: function (idSite, managerDate, managerPeriod, date, note, callback) {
var ajaxParams =
{
module: 'Annotations',
action: 'addAnnotation',
idSite: idSite,
date: date,
managerDate: managerDate,
managerPeriod: managerPeriod,
note: note
};
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams(ajaxParams, 'get');
ajaxRequest.withTokenInUrl();
ajaxRequest.setCallback(callback);
ajaxRequest.setFormat('html');
ajaxRequest.send();
},
// calls Annotations.saveAnnotation
saveAnnotation: function (idSite, idNote, date, noteData, callback) {
var ajaxParams =
{
module: 'Annotations',
action: 'saveAnnotation',
idSite: idSite,
idNote: idNote,
date: date
};
for (var key in noteData) {
ajaxParams[key] = noteData[key];
}
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams(ajaxParams, 'get');
ajaxRequest.withTokenInUrl();
ajaxRequest.setCallback(callback);
ajaxRequest.setFormat('html');
ajaxRequest.send();
},
// calls Annotations.deleteAnnotation
deleteAnnotation: function (idSite, idNote, managerDate, managerPeriod, callback) {
var ajaxParams =
{
module: 'Annotations',
action: 'deleteAnnotation',
idSite: idSite,
idNote: idNote,
date: managerDate,
period: managerPeriod
};
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams(ajaxParams, 'get');
ajaxRequest.withTokenInUrl();
ajaxRequest.setCallback(callback);
ajaxRequest.setFormat('html');
ajaxRequest.send();
},
// calls Annotations.getEvolutionIcons
getEvolutionIcons: function (idSite, date, period, lastN, callback) {
var ajaxParams =
{
module: 'Annotations',
action: 'getEvolutionIcons',
idSite: idSite,
date: date,
period: period,
filter_limit: '-1'
};
if (lastN) {
ajaxParams.lastN = lastN;
}
var ajaxRequest = new ajaxHelper();
ajaxRequest.addParams(ajaxParams, 'get');
ajaxRequest.setFormat('html');
ajaxRequest.setCallback(callback);
ajaxRequest.send();
}
};
var today = new Date();
/**
* Returns options to configure an annotation's datepicker shown in edit mode.
*
* @param {Element} annotation The annotation element.
*/
var getDatePickerOptions = function (annotation) {
var annotationDateStr = annotation.attr('data-date'),
parts = annotationDateStr.split('-'),
annotationDate = new Date(parts[0], parts[1] - 1, parts[2]);
var result = piwik.getBaseDatePickerOptions(annotationDate);
result.showButtonPanel = true;
result.currentText = _pk_translate('Intl_Today');
// make sure days before site start & after today cannot be selected
var piwikMinDate = result.minDate;
result.beforeShowDay = function (date) {
var valid = true;
// if date is after today or before date of site creation, it cannot be selected
if (date > today
|| date < piwikMinDate) {
valid = false;
}
return [valid, ''];
};
// on select a date, change the text of the edit date link
result.onSelect = function (dateText) {
$('.annotation-period-edit>a', annotation).text(dateText);
$('.datepicker', annotation).hide();
};
return result;
};
/**
* Switches the current mode of an annotation between the view/edit modes.
*
* @param {Element} inAnnotationElement An element within the annotation to toggle the mode of.
* Should be two levels nested in the .annotation-value
* element.
* @return {Element} The .annotation-value element.
*/
var toggleAnnotationMode = function (inAnnotationElement) {
var annotation = $(inAnnotationElement).closest('.annotation');
annotation.toggleClass('edit')
$('.annotation-period,.annotation-period-edit,.delete-annotation,' +
'.annotation-edit-mode,.annotation-view-mode', annotation).toggle();
return $(inAnnotationElement).find('.annotation-value');
};
/**
* Creates the datepicker for an annotation element.
*
* @param {Element} annotation The annotation element.
*/
var createDatePicker = function (annotation) {
$('.datepicker', annotation).datepicker(getDatePickerOptions(annotation)).hide();
};
/**
* Creates datepickers for every period edit in an annotation manager.
*
* @param {Element} manager The annotation manager element.
*/
var createDatePickers = function (manager) {
$('.annotation-period-edit', manager).each(function () {
createDatePicker($(this).parent().parent());
});
};
/**
* Replaces the HTML of an annotation manager element, and resets date/period
* attributes.
*
* @param {Element} manager The annotation manager.
* @param {string} html The HTML of the new annotation manager.
*/
var replaceAnnotationManager = function (manager, html) {
var newManager = $(html);
manager.html(newManager.html())
.attr('data-date', newManager.attr('data-date'))
.attr('data-period', newManager.attr('data-period'));
createDatePickers(manager);
};
/**
* Returns true if an annotation element is starred, false if otherwise.
*
* @param {Element} annotation The annotation element.
* @return {boolean}
*/
var isAnnotationStarred = function (annotation) {
return !!(+$('.annotation-star', annotation).attr('data-starred') == 1);
};
/**
* Replaces the HTML of an annotation element with HTML returned from Piwik, and
* makes sure the data attributes are correct.
*
* @param {Element} annotation The annotation element.
* @param {string} html The replacement HTML (or alternatively, the replacement
* element/jQuery object).
*/
var replaceAnnotationHtml = function (annotation, html) {
var newHtml = $(html);
annotation.html(newHtml.html()).attr('data-date', newHtml.attr('data-date'));
createDatePicker(annotation);
};
/**
* Binds events to an annotation manager element.
*
* @param {Element} manager The annotation manager.
* @param {int} idSite The site ID the manager is showing annotations for.
* @param {function} onAnnotationCountChange Callback that is called when there is a change
* in the number of annotations and/or starred annotations,
* eg, when a user adds a new one or deletes an existing one.
*/
var bindAnnotationManagerEvents = function (manager, idSite, onAnnotationCountChange) {
if (!onAnnotationCountChange) {
onAnnotationCountChange = function () {};
}
// show new annotation row if create new annotation link is clicked
manager.on('click', '.add-annotation', function (e) {
e.preventDefault();
var $newRow = $('.new-annotation-row', manager);
$newRow.show();
$(this).hide();
return false;
});
// hide new annotation row if cancel button clicked
manager.on('click', '.new-annotation-cancel', function () {
var newAnnotationRow = $(this).parent().parent();
newAnnotationRow.hide();
$('.add-annotation', newAnnotationRow.closest('.annotation-manager')).show();
});
// save new annotation when new annotation row save is clicked
manager.on('click', '.new-annotation-save', function () {
var addRow = $(this).parent().parent(),
addNoteInput = addRow.find('.new-annotation-edit'),
noteDate = addRow.find('.annotation-period-edit>a').text();
// do nothing if input is empty
if (!addNoteInput.val()) {
return;
}
// disable input & link
addNoteInput.attr('disabled', 'disabled');
$(this).attr('disabled', 'disabled');
// add a new annotation for the site, date & period
annotationsApi.addAnnotation(
idSite,
manager.attr('data-date'),
manager.attr('data-period'),
noteDate,
addNoteInput.val(),
function (response) {
replaceAnnotationManager(manager, response);
// increment annotation count for this date
onAnnotationCountChange(noteDate, 1, 0);
}
);
});
// add new annotation when enter key pressed on new annotation input
manager.on('keypress', '.new-annotation-edit', function (e) {
if (e.which == 13) {
$(this).parent().find('.new-annotation-save').click();
}
});
// show annotation editor if edit link, annotation text or period text is clicked
manager.on('click', '.annotation-enter-edit-mode', function (e) {
e.preventDefault();
var annotationContent = toggleAnnotationMode(this);
annotationContent.find('.annotation-edit').focus();
return false;
});
// hide annotation editor if cancel button is clicked
manager.on('click', '.annotation-cancel', function () {
toggleAnnotationMode(this);
});
// save annotation if save button clicked
manager.on('click', '.annotation-edit-mode .annotation-save', function () {
var annotation = $(this).parent().parent().parent(),
input = $('.annotation-edit', annotation),
dateEditText = $('.annotation-period-edit>a', annotation).text();
// if annotation value/date has not changed, just show the view mode instead of edit
if (input[0].defaultValue == input.val()
&& dateEditText == annotation.attr('data-date')) {
toggleAnnotationMode(this);
return;
}
// disable input while ajax is happening
input.attr('disabled', 'disabled');
$(this).attr('disabled', 'disabled');
// save the note w/ the new note text & date
annotationsApi.saveAnnotation(
idSite,
annotation.attr('data-id'),
dateEditText,
{
note: input.val()
},
function (response) {
response = $(response);
var newDate = response.attr('data-date'),
isStarred = isAnnotationStarred(response),
originalDate = annotation.attr('data-date');
replaceAnnotationHtml(annotation, response);
// if the date has been changed, update the evolution icon counts to reflect the change
if (originalDate != newDate) {
// reduce count for original date
onAnnotationCountChange(originalDate, -1, isStarred ? -1 : 0);
// increase count for new date
onAnnotationCountChange(newDate, 1, isStarred ? 1 : 0);
}
}
);
});
// save annotation if 'enter' pressed on input
manager.on('keypress', '.annotation-value input', function (e) {
if (e.which == 13) {
$(this).parent().find('.annotation-save').click();
}
});
// delete annotation if delete link clicked
manager.on('click', '.delete-annotation', function (e) {
e.preventDefault();
var annotation = $(this).parent().parent();
$(this).attr('disabled', 'disabled');
// delete annotation by ajax
annotationsApi.deleteAnnotation(
idSite,
annotation.attr('data-id'),
manager.attr('data-date'),
manager.attr('data-period'),
function (response) {
replaceAnnotationManager(manager, response);
// update evolution icons
var isStarred = isAnnotationStarred(annotation);
onAnnotationCountChange(annotation.attr('data-date'), -1, isStarred ? -1 : 0);
}
);
return false;
});
// star/unstar annotation if star clicked
manager.on('click', '.annotation-star-changeable', function (e) {
var annotation = $(this).parent().parent(),
newStarredVal = $(this).attr('data-starred') == 0 ? 1 : 0 // flip existing 'starred' value
;
// perform ajax request to star annotation
annotationsApi.saveAnnotation(
idSite,
annotation.attr('data-id'),
annotation.attr('data-date'),
{
starred: newStarredVal
},
function (response) {
replaceAnnotationHtml(annotation, response);
// change starred count for this annotation in evolution graph based on what we're
// changing the starred value to
onAnnotationCountChange(annotation.attr('data-date'), 0, newStarredVal == 0 ? -1 : 1);
}
);
});
// when period edit is clicked, show datepicker
manager.on('click', '.annotation-period-edit>a', function (e) {
e.preventDefault();
$('.datepicker', $(this).parent()).toggle();
return false;
});
// make sure datepicker popups are closed if someone clicks elsewhere
$('body').on('mouseup', function (e) {
var container = $('.annotation-period-edit>.datepicker:visible').parent();
if (!container.has(e.target).length) {
container.find('.datepicker').hide();
}
});
};
// used in below function
var loadingAnnotationManager = false;
/**
* Shows an annotation manager under a report for a specific site & date range.
*
* @param {Element} domElem The element of the report to show the annotation manger
* under.
* @param {int} idSite The ID of the site to show the annotations of.
* @param {string} date The start date of the period.
* @param {string} period The period type.
* @param {int} lastN Whether to include the last N periods in the date range or not. Can
* be undefined.
* @param {function} [callback]
*/
var showAnnotationViewer = function (domElem, idSite, date, period, lastN, callback) {
var addToAnnotationCount = function (date, amt, starAmt) {
if (date.indexOf(',') != -1) {
date = date.split(',')[0];
}
$('.evolution-annotations>span[data-date]', domElem).each(function () {
if ($(this).attr('data-date') == date) {
// get counts from attributes (and convert them to ints)
var starredCount = +$(this).attr('data-starred'),
annotationCount = +$(this).attr('data-count');
// modify the starred count & make sure the correct image is used
var newStarCount = starredCount + starAmt;
var newAnno = 'icon-annotation';
if (newStarCount > 0) {
newAnno += ' starred';
}
$(this).attr('data-starred', newStarCount).find('span').attr('class', newAnno);
// modify the annotation count & hide/show based on new count
var newCount = annotationCount + amt;
$(this).attr('data-count', newCount).css('opacity', newCount > 0 ? 1 : 0);
return false;
}
});
};
var manager = $('.annotation-manager', domElem);
if (manager.length) {
// if annotations for the requested date + period are already loaded, then just toggle the
// visibility of the annotation viewer. otherwise, we reload the annotations.
if (manager.attr('data-date') == date
&& manager.attr('data-period') == period) {
// toggle manager view
if (manager.is(':hidden')) {
manager.slideDown('slow', function () { if (callback) callback(manager) });
}
else {
manager.slideUp('slow', function () { if (callback) callback(manager) });
}
}
else {
// show nothing but the loading gif
$('.annotations', manager).html('');
$('.loadingPiwik', manager).show();
// reload annotation manager for new date/period
annotationsApi.getAnnotationManager(idSite, date, period, lastN, function (response) {
replaceAnnotationManager(manager, response);
createDatePickers(manager);
// show if hidden
if (manager.is(':hidden')) {
manager.slideDown('slow', function () { if (callback) callback(manager) });
}
else {
if (callback) {
callback(manager);
}
}
});
}
}
else {
// if we are already loading the annotation manager, don't load it again
if (loadingAnnotationManager) {
return;
}
loadingAnnotationManager = true;
$('.loadingPiwikBelow', domElem).insertAfter($('.evolution-annotations', domElem));
var loading = $('.loadingPiwikBelow', domElem).css({display: 'block'});
// the annotations for this report have not been retrieved yet, so do an ajax request
// & show the result
annotationsApi.getAnnotationManager(idSite, date, period, lastN, function (response) {
var manager = $(response).hide();
// if an error occurred (and response does not contain the annotation manager), do nothing
if (!manager.hasClass('annotation-manager')) {
return;
}
// create datepickers for each shown annotation
createDatePickers(manager);
bindAnnotationManagerEvents(manager, idSite, addToAnnotationCount);
loading.css('visibility', 'hidden');
// add & show annotation manager
manager.insertAfter($('.evolution-annotations', domElem));
manager.slideDown('slow', function () {
loading.hide().css('visibility', 'visible');
loadingAnnotationManager = false;
if (callback) callback(manager)
});
});
}
};
/**
* Determines the x-coordinates of a set of evolution annotation icons.
*
* @param {Element} annotations The '.evolution-annotations' element.
* @param {Element} graphElem The evolution graph's datatable element.
*/
var placeEvolutionIcons = function (annotations, graphElem) {
var canvases = $('.piwik-graph .jqplot-xaxis canvas', graphElem),
noteSize = 16;
// if no graph available, hide all icons
if (!canvases || canvases.length == 0) {
$('span[data-date]', annotations).hide();
return true;
}
// set position of each individual icon
$('span[data-date]', annotations).each(function (i) {
var canvas = $(canvases[i]),
canvasCenterX = canvas.position().left + (canvas.width() / 2);
$(this).css({
left: canvasCenterX - noteSize / 2,
// show if there are annotations for this x-axis tick
opacity: +$(this).attr('data-count') > 0 ? 1 : 0
});
});
};
// make showAnnotationViewer, placeEvolutionIcons & annotationsApi globally accessible
piwik.annotations = {
showAnnotationViewer: showAnnotationViewer,
placeEvolutionIcons: placeEvolutionIcons,
api: annotationsApi
};
}(jQuery, piwik));

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "أضف توضيحات عن %s...",
"AnnotationOnDate": "توضيحات عن %1$s: %2$s",
"Annotations": "التوضيحات",
"ClickToDelete": "انقر لحذف هذا التوضيح.",
"ClickToEdit": "انقر لتحرير هذا التوضيح.",
"ClickToEditOrAdd": "انقر لتحرير أو إضافة توضيح جديد.",
"ClickToStarOrUnstar": "انقر لتمييز أو أزالة تمييز هذا التوضيح.",
"CreateNewAnnotation": "إنشاء توضيح جديد...",
"EnterAnnotationText": "أكتب ملاحظتك...",
"HideAnnotationsFor": "إخفاء توضيحات %s...",
"IconDesc": "شاهد ملاحظات نطاق التاريخ هذا.",
"IconDescHideNotes": "إخفاء ملاحظات نطاق التاريخ هذا.",
"InlineQuickHelp": "يمكنك إنشاء توضيحات لإضافة أحداث مميزة (كمقال جديد بالمدونة، أو تصميم جديد للموقع)، لحفظ تحليل بياناتك أو لحفظ أي شيء آخر تراه مهماً.",
"LoginToAnnotate": "سجل الدخول لإنشاء توضيح.",
"NoAnnotations": "لا توجد توضيحات في هذا النطاق التاريخي.",
"PluginDescription": "يمكنك ارفاق ملاحظات لأيام مختلفة لتحديد تغييرات أجريتها على موقعك، حفظ تحليلك الذي أجريته فيما يتعلق بالبيانات ومشاركة أفكارك مع زملائك. بوضع توضيحات على بياناتك، ستتمكن من تذكر لماذا كانت بياناتك تبدو بهذه الطريقة.",
"ViewAndAddAnnotations": "مشاهدة وإضافة توضيحات حول %s...",
"YouCannotModifyThisNote": "لا يمكنك تحرير هذا التوضيح لأنك لم تنشأها، ولا تملك صلاحيات وصول مشرف في هذا الموقع."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Добави анотации за %s...",
"AnnotationOnDate": "Анотация на %1$s: %2$s",
"Annotations": "Анотации",
"ClickToDelete": "Натиснете, за да изтриете този коментар.",
"ClickToEdit": "Цъкни за да редактираш тази анотация.",
"ClickToEditOrAdd": "Натисни за да редактираш или добавиш нова анотация.",
"ClickToStarOrUnstar": "Натиснете, за да отбележите или премахнете звезда за този коментар.",
"CreateNewAnnotation": "Създайте нова анотация",
"EnterAnnotationText": "Въведете своята бележка…",
"HideAnnotationsFor": "Скриване на анотациите за %s...",
"IconDesc": "Вижте бележките за този период от време.",
"IconDescHideNotes": "Скриване на бележките за този период от време.",
"InlineQuickHelp": "Можете да създавате анотации, за да отбелязвате специални събития (като нова публикация в блог или нов изглед на сайт), за съхраняване на анализи или за запазване на нещо друго, което смятате за важно.",
"LoginToAnnotate": "Влезте в профила си за да създадете анотация.",
"NoAnnotations": "Няма анотации за този период от време.",
"PluginDescription": "Позволява да се прикрепят бележки към различни дни, за да бъдат отбелязани промените, направени във вашия сайт. Запазва анализите в зависимост от информацията, която е предоставена и споделя мнението ви с вашите колеги. Публикувайки данните ще имате възможност да запомните по какъв начин изглеждат те.",
"ViewAndAddAnnotations": "Преглеждане и добавяне на коментари за %s…",
"YouCannotModifyThisNote": "Вие не можете да променяте тази анотация, защото все още не сте я създали или нямате администраторски права за този сайт."
}
}

View File

@@ -0,0 +1,19 @@
{
"Annotations": {
"AddAnnotationsFor": "Dodaj bilješku za %s...",
"AnnotationOnDate": "Bilješka za %1$s: %2$s",
"Annotations": "Bilješke",
"ClickToDelete": "Kliknite da obrišete ovu bilješku.",
"ClickToEdit": "Kliknite da uredite ovu bilješku.",
"ClickToEditOrAdd": "Kliknite da uredite ili dodate novu bilješku.",
"ClickToStarOrUnstar": "Kliknite da markirate bilješku ili da uklonite markiranje.",
"CreateNewAnnotation": "Napravi novu bilješku...",
"EnterAnnotationText": "Unesite vašu bilješku...",
"HideAnnotationsFor": "Sakrij bilješke za %s...",
"IconDesc": "Prikaži bilješke za ovaj vremenski period.",
"IconDescHideNotes": "Sakrij bilješke za ovaj vremenski period.",
"InlineQuickHelp": "Možete napraviti bilješke kako bi markirali posebne događaje (kao na primjer pravljenje novog članka na blogu, ili ponovno dizajniranje internet stranice), sačuvali vašu analizu podataka ili da sačuvate bilo šta drugo što smatrate važnim.",
"LoginToAnnotate": "Prijavite se da napravite novu bilješku.",
"NoAnnotations": "Nema bilješki za ovaj vremenski period."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Afegir una anotació per %s",
"AnnotationOnDate": "Anotació per %1$s: %2$s",
"Annotations": "Anotacions",
"ClickToDelete": "Feu click per eliminar l'anotació",
"ClickToEdit": "Feu click per editar aquesta anotació",
"ClickToEditOrAdd": "Feu click per editar o afegir una anotació",
"ClickToStarOrUnstar": "Feu click per marcar o desmarcar aquesta nota.",
"CreateNewAnnotation": "Crea una nova anotació...",
"EnterAnnotationText": "Introduix la teva nota...",
"HideAnnotationsFor": "Amaga les anotacións per %s...",
"IconDesc": "Veure les notes d'aquest rang.",
"IconDescHideNotes": "Amaga les notes d'aquest rang.",
"InlineQuickHelp": "Podeu crear anotacions per marcar events especials (una nova entrada al blog, el rediseny del web). Les annotacions us permeten guardar el vostre anàlisis de la informació o qualsevol altra cosa que creïeu important.",
"LoginToAnnotate": "Identifiqueu-vos per crear una anotació.",
"NoAnnotations": "No hi ha notes per aquest rang de pàgines.",
"PluginDescription": "Permet afegir notes als diferents dies perquè pogueu recordar perquè la vostra inforamció es mostra d'una determinada forma.",
"ViewAndAddAnnotations": "Mostra i afegeix anotacions per %s...",
"YouCannotModifyThisNote": "No podeu modificar aquesta nota perquè o bé no l'heu creada vosatres, o no teni accès d'administrador per aquest lloc web."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Přidat anotace k %s...",
"AnnotationOnDate": "Anotace na %1$s: %2$s",
"Annotations": "Anotace",
"ClickToDelete": "Kliknutím odstraníte tuto anotaci.",
"ClickToEdit": "Klikněte k úpravě této anotace.",
"ClickToEditOrAdd": "Kliknutím upravit nebo přidat novou anotaci",
"ClickToStarOrUnstar": "Kliknutím ohnodnotíte tuto anotaci",
"CreateNewAnnotation": "Vytvořit novou anotaci...",
"EnterAnnotationText": "Vložte poznámku...",
"HideAnnotationsFor": "Skrýt anotace %s...",
"IconDesc": "Zobrazit poznámky k tomuto časovému rozsahu.",
"IconDescHideNotes": "Skrýt poznámky zvoleného rozsahu.",
"InlineQuickHelp": "Můžete vytvořit anotace k důležitým událostem, jako je třeba nový příspěvek na blogu, redesign stránek, nebo cokoliv, co považujete za důležité.",
"LoginToAnnotate": "Přihlásit se pro vytvoření anotace.",
"NoAnnotations": "Nejsou zde žádné anotace k tomuto časovému rozsahu.",
"PluginDescription": "Dovoluje vám přidat poznámky k jednotlivým dnům (k označení změn na stránkách, poznamenání analýz dat, které lze sdílet s kolegy...). Anotováním dat zajistíte, že budete v budoucnu vědět, proč data vypadají tak, jak vypadají.",
"ViewAndAddAnnotations": "Zobrazit a přidat anotace k %s...",
"YouCannotModifyThisNote": "Nemůžete upravit tuto anotaci, protože jste ji nevytvořil(a) a ani nemáte administrátorský přístup k této stránce."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Tilføj annotation for %s...",
"AnnotationOnDate": "Annotation den %1$s: %2$s",
"Annotations": "Anmærkninger",
"ClickToDelete": "Klik for at slette en annotation",
"ClickToEdit": "Klik for at rette en annotation",
"ClickToEditOrAdd": "Klik for at ændre eller tilføje en ny annotation.",
"ClickToStarOrUnstar": "Klik for at markere eller fjerne markering af anmærkningen.",
"CreateNewAnnotation": "Opret ny annotation",
"EnterAnnotationText": "Indtast din note...",
"HideAnnotationsFor": "Skjul annotationer for %s...",
"IconDesc": "Vis noter for dette tidsrum.",
"IconDescHideNotes": "Skjul noter for dette tidsrum.",
"InlineQuickHelp": "Du kan oprette anmærkninger for at markere specielle begivenheder (som et nyt blog-indlæg, eller hjemmeside redesign), gemme dine data analyser eller at gemme noget andet, du synes er vigtigt.",
"LoginToAnnotate": "Log på for at oprette en anmærkning",
"NoAnnotations": "Der er ingen anmærkninger for datointervallet.",
"PluginDescription": "Giver mulighed for at knytte bemærkninger til forskellige dage, så du kan huske, hvorfor data ser ud som de gør.",
"ViewAndAddAnnotations": "Vis og tilføj annotationer for %s...",
"YouCannotModifyThisNote": "Du kan ikke ændre denne annotation, da du ikke har oprettet den eller har administrator adgang."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Anmerkung für %s hinzufügen...",
"AnnotationOnDate": "Anmerkung für %1$s: %2$s",
"Annotations": "Anmerkungen",
"ClickToDelete": "Klicken Sie um diese Anmerkung zu löschen.",
"ClickToEdit": "Klicken Sie um diese Anmerkung zu bearbeiten.",
"ClickToEditOrAdd": "Klicken Sie hier um eine Anmerkung hinzuzufügen oder zu bearbeiten.",
"ClickToStarOrUnstar": "Klicken Sie, um die Markierung dieser Anmerkung zu setzen oder zu entfernen.",
"CreateNewAnnotation": "Neue Anmerkung anlegen...",
"EnterAnnotationText": "Geben Sie Ihre Notiz ein...",
"HideAnnotationsFor": "Anmerkungen für %s verbergen …",
"IconDesc": "Notizen für diesen Zeitraum anzeigen.",
"IconDescHideNotes": "Notizen für diesen Zeitraum verbergen.",
"InlineQuickHelp": "Sie können Anmerkungen erstellen um spezielle Ereignisse (wie einen Blog-Eintrag oder eine Neugestaltung der Website) zu markieren, Stichtage für die Datenanalyse zu speichern oder einfach alles zu speichern was Ihnen wichtig erscheint.",
"LoginToAnnotate": "Sie müssen sich einloggen um eine Anmerkung hinzufügen zu können.",
"NoAnnotations": "Für diesen Zeitraum sind keine Anmerkungen vorhanden.",
"PluginDescription": "Erlaubt Ihnen Hinweise zu verschiedenen Tagen hinzuzufügen, um Änderungen zu markieren, die an der Website gemacht wurden, Analysen zu speichern, die bezüglich Ihrer Daten gemacht wurden und um Ihre Gedanken mit Ihren Kollegen zu teilen. Durch das Hinzufügen von Hinweisen stellen Sie sicher, dass Sie sich daran erinnern warum die Daten so sind, wie sie sind.",
"ViewAndAddAnnotations": "Anmerkungen zu %s ansehen und hinzufügen …",
"YouCannotModifyThisNote": "Sie können diese Anmerkung nicht ändern, da Sie sie weder erstellt haben noch administrativen Zugang für diese Seite besitzen."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Προσθήκη σχολίων για %s...",
"AnnotationOnDate": "Σχόλιο για %1$s: %2$s",
"Annotations": "Σχολιασμοί",
"ClickToDelete": "Πατήστε για να διαγράψετε αυτό το σχολιασμό.",
"ClickToEdit": "Πατήστε για να επεξεργαστείτε αυτό το σχολιασμό.",
"ClickToEditOrAdd": "Κάντε κλικ για να επεξεργαστείτε ή να προσθέσετε μια νέα σημείωση.",
"ClickToStarOrUnstar": "Πατήστε για να βάλετε ή να βγάλετε τη σημαία αυτού του σχολιασμού.",
"CreateNewAnnotation": "Δημιουργία νέου σχολιασμού...",
"EnterAnnotationText": "Εισάγετε τη σημείωσή σας...",
"HideAnnotationsFor": "Απόκρυψη σημειώσεων για %s...",
"IconDesc": "Προβολή σημειώσεων για αυτό το εύρος ημερομηνιών.",
"IconDescHideNotes": "Απόκρυψη σημειώσεων για αυτό το εύρος ημερομηνιών.",
"InlineQuickHelp": "Μπορείτε να δημιουργήσετε σημειώσεις για να επισημάνετε ειδικές εκδηλώσεις (όπως ένα νέο blog post, ή επανασχεδιασμό ιστοσελίδας), για να αποθηκεύσετε αναλύσεις των δεδομένων σας ή να αποθηκεύσετε ό,τι άλλο νομίζετε ότι είναι σημαντικό.",
"LoginToAnnotate": "Συνδεθείτε για να δημιουργήσετε ένα σχολιασμό.",
"NoAnnotations": "Δεν υπάρχουν σημειώσεις για αυτό το εύρος ημερομηνιών.",
"PluginDescription": "Σας επιτρέπει να επισυνάπτετε σημειώσεις σε διαφορετικές ημέρες για να σημειώνετε αλλαγές που συμβαίνουν στον ιστοτόπο σας, να κρατάτε τις αναλύσεις που κάνετε σχετικά με τα δεδομένα σας και να μοιράζεστε τις σκέψεις σας με τους συναδέλφους σας. Με την επισύναψη σημειώσεων, θα είστε σίγουροι ότι θα θυμάστε για ποιο λόγο τα δεδομένα σας φαίνονται έτσι.",
"ViewAndAddAnnotations": "Προβολή και προσθήκη σχολιασμών για %s...",
"YouCannotModifyThisNote": "Δεν μπορείτε να τροποποιήσετε αυτή τη σημείωση, γιατί δεν τη δημιουργήσατε, ούτε έχετε πρόσβαση διαχειριστή για αυτό το site."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Add annotations for %s...",
"AnnotationOnDate": "Annotation on %1$s: %2$s",
"Annotations": "Annotations",
"ClickToDelete": "Click to delete this annotation.",
"ClickToEdit": "Click to edit this annotation.",
"ClickToEditOrAdd": "Click to edit or add a new annotation.",
"ClickToStarOrUnstar": "Click to star or unstar this annotation.",
"CreateNewAnnotation": "Create a new annotation...",
"EnterAnnotationText": "Enter your note...",
"HideAnnotationsFor": "Hide annotations for %s...",
"IconDesc": "View notes for this date range.",
"IconDescHideNotes": "Hide notes for this date range.",
"InlineQuickHelp": "You can create annotations to mark special events (like a new blog post, or website redesign), to save your data analyses or to save anything else you think is important.",
"LoginToAnnotate": "Login to create an annotation.",
"NoAnnotations": "There are no annotations for this date range.",
"PluginDescription": "Allows you to attach notes to different days to mark changes made to your website, save analyses you make regarding your data and share your thoughts with your colleagues. By annotating your data, you will make sure you remember why your data looks the way it does.",
"ViewAndAddAnnotations": "View and add annotations for %s...",
"YouCannotModifyThisNote": "You cannot modify this annotation, because you did not create it, nor do you have admin access for this site."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Agregar anotaciones para %s…",
"AnnotationOnDate": "Anotaciones en %1$s: %2$s",
"Annotations": "Anotaciones",
"ClickToDelete": "Hacé clic para eliminar esta anotación.",
"ClickToEdit": "Hacé clic para editar esta anotación.",
"ClickToEditOrAdd": "Hacé clic para editar o agregar una nueva anotación.",
"ClickToStarOrUnstar": "Hacé clic para destacar o quitar destacado a esta anotación.",
"CreateNewAnnotation": "Crear una nueva anotación",
"EnterAnnotationText": "Ingresá tu nota…",
"HideAnnotationsFor": "Ocultar anotaciones para %s",
"IconDesc": "Ver las notas en este rango de fechas.",
"IconDescHideNotes": "Ocultar las notas en este rango de fechas.",
"InlineQuickHelp": "Podés crear anotaciones para marcar eventos especiales (como un nuevo artículo en el blog o el rediseño del sitio), para guardar tus análisis de los datos o para guardar cualquier otra cosa que te parezca importante.",
"LoginToAnnotate": "Iniciá sesión para crear una anotación.",
"NoAnnotations": "No existen anotaciones en este rango de fechas.",
"PluginDescription": "Te permite adjuntar notas en diferentes¿s días para marcar cambios hechos a tu sitio web, guardar los análisis que hayás hecho sobre los datos y compartir tus ideas con tus colegas. Al agregar anotaciones a tus datos te asegurarás de recordar por qué los datos lucen así.",
"ViewAndAddAnnotations": "Ver y agregar anotaciones para %s",
"YouCannotModifyThisNote": "No podés modificar esta anotación porque ni la creaste vos, ni tenés privilegios de administrador en este sitio."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Añadir anotaciones para %s...",
"AnnotationOnDate": "Anotaciones en %1$s: %2$s",
"Annotations": "Anotaciones",
"ClickToDelete": "Haz clic para borrar esta anotación",
"ClickToEdit": "Haz clic para editar esta anotación.",
"ClickToEditOrAdd": "Clic para editar o añadir una nueva anotación.",
"ClickToStarOrUnstar": "Haz clic para destacar o quitar destacado a esta anotación.",
"CreateNewAnnotation": "Crear una nueva anotación...",
"EnterAnnotationText": "Ingrese su nota...",
"HideAnnotationsFor": "Ocultar anotaciones para %s...",
"IconDesc": "Ver las notas en este rango de fechas.",
"IconDescHideNotes": "Ocultar las notas en este rango de fechas.",
"InlineQuickHelp": "Puede crear anotaciones para señalar eventos especiales (como un nuevo artículo en el blog o el rediseño del sitio de internet), para guardar sus análisis de los datos o para guardar cualquier otra cosa que considere importante.",
"LoginToAnnotate": "Inicia sesión para crear una anotación.",
"NoAnnotations": "No existen anotaciones en este rango de fechas.",
"PluginDescription": "Le permite adjuntar notas en diferentes días para señalar cambios que haya realizado en su sitio de internet, guardar los análisis que haya realizado sobre los datos y compartir sus ideas con sus colegas. Al agregar anotaciones a sus datos se asegurará recordar el por qué de sus datos se vean de ese modo.",
"ViewAndAddAnnotations": "Ver y añadir anotaciones para %s...",
"YouCannotModifyThisNote": "No puede modificar esta anotación debido a que ni la creó ni posee privilegios de administrador en este sitio."
}
}

View File

@@ -0,0 +1,19 @@
{
"Annotations": {
"AddAnnotationsFor": "%s kommentaari lisamine...",
"AnnotationOnDate": "%1$s kommentaar: %2$s",
"Annotations": "Kommentaarid",
"ClickToDelete": "Vali et kustutada kommentaar",
"ClickToEdit": "Vali et kommentaari muuta",
"ClickToEditOrAdd": "Vali et lisada või muuta kommentaari",
"ClickToStarOrUnstar": "Vali et kommentaari hinnata",
"CreateNewAnnotation": "Loo uus kommentaar",
"EnterAnnotationText": "Sisesta oma märkmed...",
"HideAnnotationsFor": "Peida %s kommentaarid..",
"IconDesc": "Vaata antud ajavahemiku märkmeid.",
"IconDescHideNotes": "Peida antud ajavahemiku märkmed.",
"LoginToAnnotate": "Sisene, et luua kommentaar.",
"NoAnnotations": "Antud ajavahemiku kohta puuduvad märkmed.",
"ViewAndAddAnnotations": "Vaata ja lisa märkmeid %s kohta..."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "توضیحاتی اضافه کنید برای %s...",
"AnnotationOnDate": "توضیحات از %1$s:%2$s",
"Annotations": "توضیحات",
"ClickToDelete": "برای پاک کردن توضیح کلیک کنید",
"ClickToEdit": "برای ویرایش توضیح کلیک کنید",
"ClickToEditOrAdd": "برای ویرایش یا اضافه کردن یک توضیح جدید کلیک کنید",
"ClickToStarOrUnstar": "برای ویژه کردن\/نکردن توضیح کلیک کنید",
"CreateNewAnnotation": "یک توضیح جدید بسازید",
"EnterAnnotationText": "یادداشت تان را وارد کنید...",
"HideAnnotationsFor": "توضیحاتی پنهان کنید برای %s...",
"IconDesc": "یادداشت های این بازه زمانی را مشاهده کنید.",
"IconDescHideNotes": "یادداشت های این بازه زمانی را پنهان کنید.",
"InlineQuickHelp": "شما می توانید توضیحاتی را برای علامت گذاری رخداد ویژه ای (مثلا یک مطلب جدید وبلاگ یا طراحی دوباره وبسایت)ایجاد کنید.این برای نگهداری تحلیل داده هایتان یا هر چیزی دیگری است که شما فکر می کنید مهم است.",
"LoginToAnnotate": "برای ایجاد توضیح وارد سیستم شوید.",
"NoAnnotations": "برای بازه زمانی انتخابی یادداشتی موجود نیست.",
"PluginDescription": "به شما اجازه می دهد برای روز های مختلف برای سایت هود نوشته اضافه کنید،صرفه جویی میکند در تجزیه تحلیل و برای شما اطلاعات را میسازد و شما میتوانید ان را با همکارانتان به اشتراک بگزارید. با حاشیه نویسی اطلاعات شما، شما مطمئن خواهند شد که فراموش نخواهید کرد .",
"ViewAndAddAnnotations": "نمایش و افزودن توضیحات برای %s...",
"YouCannotModifyThisNote": "شما نمی توانید این توضیح را تغییر دهید , زیرا شما آن را ایجاد نکرده اید و نه اجازه دسترسی مدیر برای این سایت را دارید."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Lisää kommentti %s:lle...",
"AnnotationOnDate": "Kommentti %1$s:lle: %2$s",
"Annotations": "Kommentit",
"ClickToDelete": "Klikkaa poistaaksesi tämä kommentti.",
"ClickToEdit": "Klikkaa muokataksesi tätä kommenttia.",
"ClickToEditOrAdd": "Klikkaa muokataksesi kommenttia tai lisätäksesi uuden kommentin.",
"ClickToStarOrUnstar": "Klikkaa merkitäksesi tähdellä tai poistaaksesi tähtimerkinnän tästä kommentista.",
"CreateNewAnnotation": "Luo uusi kommentti...",
"EnterAnnotationText": "Kirjoita kommenttisi...",
"HideAnnotationsFor": "Piilota %s:n kommentit...",
"IconDesc": "Näytä kommentit tältä aikaväliltä.",
"IconDescHideNotes": "Piilota kommentit tältä aikaväliltä.",
"InlineQuickHelp": "Voit luoda kommentteja erityisiä tapahtumia varten (kuten uusi blogiteksti tai verkkosivun uusi design), tallentaaksesi data-analyysejä tai muuta tärkeäksi katsomaasi.",
"LoginToAnnotate": "Kirjaudu sisään luodaksesi kommentti.",
"NoAnnotations": "Tällä aikavälillä ei ole kommentteja.",
"PluginDescription": "Mahdollistaa kommenttien lisäämisen eri päiville, jotta voit merkitä verkkosivulle tekemiäsi muutoksia, tallentaa analyysejä ja jakaa ajatuksia kollegoidesi kanssa. Kommenttien avulla muistat, miksi data näyttää siltä kuin näyttää.",
"ViewAndAddAnnotations": "Tarkastele ja lisää kommentteja %s:lle...",
"YouCannotModifyThisNote": "Et voi muokata tätä kommenttia, koska et ole luonut sitä, eikä sinulla ole admin-oikeuksia tällä verkkosivulla."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Ajouter une annotation pour %s...",
"AnnotationOnDate": "Annotation sur %1$s : %2$s",
"Annotations": "Annotations",
"ClickToDelete": "Cliquez ici pour supprimer une annotation",
"ClickToEdit": "Cliquez ici pour supprimer une annotation",
"ClickToEditOrAdd": "Cliquer pour éditer ou ajouter une nouvelle annotation.",
"ClickToStarOrUnstar": "Cliquez pour marquer ou enlever le marquage de cette annotation.",
"CreateNewAnnotation": "Cliquez-ici pour créer une annotation",
"EnterAnnotationText": "Description...",
"HideAnnotationsFor": "Masquer les annotations pour %s...",
"IconDesc": "Voir les annotations pour cette période",
"IconDescHideNotes": "Masquer les annotations pour cette période",
"InlineQuickHelp": "Vous pouvez créer des annotations pour marquer des évènements spéciaux (comme un nouveau billet de blog ou une refonte du site web), pour garder une trace de vos analyses de données ou de ce que vous jugez important.",
"LoginToAnnotate": "Identifiez vous pour créer une annotation",
"NoAnnotations": "Il n'y a aucune annotation pour cette période",
"PluginDescription": "Vous permet d'annoter des dates pour marquer des changement sur votre site, noter des analyses que vous faites de vos données et partager vos notes avec vos collègues. En annotant vos données, vous pourrez vous rappeler pourquoi vos données sont ainsi.",
"ViewAndAddAnnotations": "Voir et ajouter une annotation pour %s ...",
"YouCannotModifyThisNote": "Vous ne pouvez pas modifier cette annotation parce que vous ne l'avez pas créée ou vous n'avez pas les accès d'administrateur pour ce site."
}
}

View File

@@ -0,0 +1,11 @@
{
"Annotations": {
"AddAnnotationsFor": "Engadir anotación para %s...",
"Annotations": "Anotacións",
"ClickToDelete": "Prema para eliminar esta anotación.",
"ClickToEdit": "Prema para editar esta anotación.",
"ClickToEditOrAdd": "Prema para editar ou engadir unha anotación nova.",
"CreateNewAnnotation": "Crear unha anotación nova...",
"EnterAnnotationText": "Introduza a súa nota..."
}
}

View File

@@ -0,0 +1,15 @@
{
"Annotations": {
"Annotations": "הערות הסבר",
"ClickToDelete": "לחץ כדי למחוק הערה זו.",
"ClickToEdit": "לחץ כדי לערוך הערה זו.",
"ClickToEditOrAdd": "לחץ כדי לערוך או להוסיף הערה חדשה.",
"ClickToStarOrUnstar": "לחץ כדי לסמן או להוריד סימון מהערה זו.",
"CreateNewAnnotation": "יצירת הערה חדשה..",
"EnterAnnotationText": "הקלידו הערה...",
"IconDesc": "הראה הערות לטווח תאריכים המבוקש",
"IconDescHideNotes": "הסתר הערות של טווח תאריכים זה",
"LoginToAnnotate": "יש להתחבר כדי ליצור הערה.",
"NoAnnotations": "אין הסברים על טווח תאריכים זה"
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "%s एनोटेशन जोड़ें",
"AnnotationOnDate": "%1$s एनोटेशन तारीख: %2$s",
"Annotations": "टिप्पणियाँ",
"ClickToDelete": "इस टिपण्णी को हटाने के लिए क्लिक करें।",
"ClickToEdit": "इस टिपण्णी में बदलाव करने के लिए क्लिक करें।",
"ClickToEditOrAdd": "टिपण्णी में बदलाव करने के लिए या नयी टिपण्णी बनाने के लिए क्लिक करें।",
"ClickToStarOrUnstar": "इस टिप्पणी को स्टार या अतारांकित करने के लिए क्लिक करें.",
"CreateNewAnnotation": "नयी टिपण्णी बनाएं।",
"EnterAnnotationText": "अपनी टिप्पणी दर्ज करें ...",
"HideAnnotationsFor": "%s एनोटेशन छुपाएं...",
"IconDesc": "इस समय अवधि के लिए नोट्स देखें.",
"IconDescHideNotes": "इस समय अवधि के लिए नोट्स छुपाये .",
"InlineQuickHelp": "आप विशेष घटनाओं (जैसे की नया ब्लॉग पोस्ट या वेबसाइट को पुनः डिज़ाइन करना) को अंकित करने के लिए या अपने डेटा के विश्लेषण अथवा ऐसी कोई भी चीज़ जो कि आप के अनुसार महत्वपूर्ण है को सुरक्षित रखने के लिए टिप्पणियों का प्रयोग कर सकते हैं।",
"LoginToAnnotate": "नयी टिपण्णी बनाने के लिए लौग इन करें।",
"NoAnnotations": "स्पष्ट की गयी तारीख की सीमा के लिए कोई टिपण्णी मौजूद नहीं है।",
"PluginDescription": "आप अपनी वेबसाइट पर किए गए परिवर्तनों को चिह्नित करने के लिए अलग अलग दिनों के लिए नोट संलग्न करने के लिए अनुमति देता है,विश्लेषण बचाने आप अपने डेटा को को बनाने और अपने सहयोगियों के साथ अपने विचारों को साझा करें. अपने डेटा एनोटेट करके, आप सुनिश्चित करे क्यों अपने डेटा ऐसा लग रहा है",
"ViewAndAddAnnotations": "%s टिप्पणियां देखें और जोड़...",
"YouCannotModifyThisNote": "आप इस टिपण्णी में परिवर्तन नहीं कर सकते हैं क्योंकि न तो आपने इसके लेखक हैं और न ही आपके पास इस साइट के लिए एडमिन एक्सेस है।"
}
}

View File

@@ -0,0 +1,11 @@
{
"Annotations": {
"AddAnnotationsFor": "Dodaj bilješke za %s...",
"AnnotationOnDate": "Interaktivne bilješke na %1$s: %2$s",
"Annotations": "Interaktivne bilješke",
"ClickToDelete": "Kliknite izbrisati ovu obavijest.",
"ClickToEdit": "Klikni za urediti ovu obavijest.",
"EnterAnnotationText": "Unesi svoju bilješku",
"LoginToAnnotate": "Prijavi se za objaviti obavijest."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Tambahkan penjelasan untuk %s...",
"AnnotationOnDate": "Penjelasan dalam %1$s: %2$s",
"Annotations": "Penjelasan",
"ClickToDelete": "Klik untuk menghapus penjelasan ini.",
"ClickToEdit": "Klik untuk menyunting penjelsan ini.",
"ClickToEditOrAdd": "Klik untuk menyunting atau menambah penjelasan baru.",
"ClickToStarOrUnstar": "Klik untuk memberi atau menghapus bintang penjelasan ini.",
"CreateNewAnnotation": "Membuat penjelasan baru...",
"EnterAnnotationText": "Masukkan catatan Anda...",
"HideAnnotationsFor": "Sembunyikan penjelasan untuk %s...",
"IconDesc": "Lihat catatan untuk rentang data ini.",
"IconDescHideNotes": "Sembunyikan catatan untuk rentang tanggal ini.",
"InlineQuickHelp": "Anda dapat membuat penjelasan untuk menandai kejadian istimewa (seperti sebuah kiriman blog baru, atau perubahan desain situs), untuk menyimpan analisa data Anda atau untuk menyimpan hal lain yang menurut Anda penting.",
"LoginToAnnotate": "Masuk-log untuk membuat penjelasan baru.",
"NoAnnotations": "Tidak tersedia penjelasan untuk rentang tanggal ini.",
"PluginDescription": "Memungkinkan Anda untuk melampirkan catatan dari hari berbeda untuk menandai perubahan dalam situs Anda, simpan analisa mengenai data Anda dan berbagi pemikiran tersebut dengan rekan Anda. Dengan memberi penjelasan terhadap data, akan membuat Anda ingat mengapa data tampak seperti saat ini terjadi.",
"ViewAndAddAnnotations": "Tampilkan dan tambahkan penjelasan untuk %s...",
"YouCannotModifyThisNote": "Anda tidak dapat mengubah penjelasan ini, sebab Anda bukan yang membuat ini, atau Anda tidak memiliki akses pengelola untuk situs ini."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Aggiungi annotazioni per %s...",
"AnnotationOnDate": "Annotazione su %1$s: %2$s",
"Annotations": "Annotazioni",
"ClickToDelete": "Cancella questa annotazione.",
"ClickToEdit": "Modifica questa annotazione.",
"ClickToEditOrAdd": "Modifica o aggiungi una nuova annotazione.",
"ClickToStarOrUnstar": "Segna questa annotazione.",
"CreateNewAnnotation": "Crea una nuova annotazione",
"EnterAnnotationText": "Inserisci annotazione...",
"HideAnnotationsFor": "Nascondi annotazioni per %s...",
"IconDesc": "Visualizza le annotazioni per questo intervallo di date.",
"IconDescHideNotes": "Nascondi le annotazioni in questo intervallo di date.",
"InlineQuickHelp": "Potete creare delle note per segnale eventi speciali (quali un nuovo post in un blog o il restyling di un sito), per salvare i vostri dati di analisi o per salvare qualcos'altro voi pensiate sia importante.",
"LoginToAnnotate": "Accedi per creare un'annotazione.",
"NoAnnotations": "Non ci sono annotazioni per questo intervallo di date.",
"PluginDescription": "Vi permette di associare delle note a vari giorni per segnare i cambiamenti fatti al vostro sito, salvare le analisi da voi fatte sui vostri dati e condividere i vostri pensieri con i colleghi.",
"ViewAndAddAnnotations": "Visualizza ed aggiungi annotazioni per %s...",
"YouCannotModifyThisNote": "Non potete modificare questa annotazione perché non l'avete creata voi, e non avete i privilegi di amministratore per questo sito."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "%sのアテーションを追加…",
"AnnotationOnDate": "%1$sのアテーション: %2$s",
"Annotations": "アノテーション",
"ClickToDelete": "クリックしてこのアノテーションを削除",
"ClickToEdit": "クリックしてこのアノテーションを編集",
"ClickToEditOrAdd": "クリックして新しいアノテーションを編集または作成",
"ClickToStarOrUnstar": "クリックしてアノテーションに星印を付ける、または外す",
"CreateNewAnnotation": "新しいアノテーションを作成する",
"EnterAnnotationText": "メモを入力して下さい",
"HideAnnotationsFor": "%sのアテーションを非表示にする…",
"IconDesc": "この期間のメモを表示します。",
"IconDescHideNotes": "この期間のメモを非表示にします。",
"InlineQuickHelp": "データの分析結果や重要と思うものを記録するのに、特別なイベントとしてアノテーションを作成できます ( 新しいブログの投稿、ウェブサイトのリニューアルなど ) 。",
"LoginToAnnotate": "アノテーションを作成するにはログインしてください。",
"NoAnnotations": "この期間内のアノテーションはありません",
"PluginDescription": "ウェブサイトに加えられた変更をマークしたり、データに関して行った分析を保存したり、あなたの考えを同僚と共有したりするために、それぞれの日にノートを添付することができます。 データにアノテーションを付けることで、そのデータの根拠を思い出すきっかけになります。",
"ViewAndAddAnnotations": "%sのアテーションの表示と追加",
"YouCannotModifyThisNote": "このアノテーションは変更できません。あなたが生成したアノテーションではないか、このサイトの管理者権限がないためです"
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "%s에 대한 주석 추가...",
"AnnotationOnDate": "%1$s에 대한 주석: %2$s",
"Annotations": "주석",
"ClickToDelete": "이 주석을 삭제하려면 클릭합니다.",
"ClickToEdit": "이 주석을 편집하려면 클릭합니다.",
"ClickToEditOrAdd": "주석을 편집하거나 추가하거나 생성하려면 클릭합니다.",
"ClickToStarOrUnstar": "클릭하여 주석에 별표 또는 제거합니다.",
"CreateNewAnnotation": "새로운 주석을 생성합니다...",
"EnterAnnotationText": "메모를 입력하세요...",
"HideAnnotationsFor": "%s에 대한 주석 숨기기...",
"IconDesc": "이 기간동안의 메모를 조회합니다.",
"IconDescHideNotes": "이 기간의 노트를 숨깁니다.",
"InlineQuickHelp": "특별한 이벤트를 표시하는 주석을 만들 수 있습니다 (새 블로그 게시물, 또는 웹사이트 재설계 등), 데이터 분석을 저장하거나 중요하다고 생각되는 것들을 저장하세요.",
"LoginToAnnotate": "로그인하여 주석을 생성합니다.",
"NoAnnotations": "이 기간에 해당하는 주석이 없습니다.",
"PluginDescription": "당신의 웹사이트에 변경 사항을 일별로 표시할 수 있는 메모를 첨부 할 수 있습니다. 당신이 가진 생각을 저장하고 동료들과 서로 의견을 나누세요. 당신이 기억해야 할 것들이나 원인과 결과들에 주석을 달아보세요.",
"ViewAndAddAnnotations": "%s을(를) 조회하고 주석을 추가합니다...",
"YouCannotModifyThisNote": "주석을 수정할 수 없습니다. 직접 생성한 주석이 아니거나 이 사이트의 관리 권한이 없기 때문입니다."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Legg til merknader for %s...",
"AnnotationOnDate": "Merknad på %1$s: %2$s",
"Annotations": "Merknader",
"ClickToDelete": "Klikk for å slette denne merknaden.",
"ClickToEdit": "Klikk for å redigere denne merknaden.",
"ClickToEditOrAdd": "Klikk for å redigere eller legge til en ny merknad.",
"ClickToStarOrUnstar": "Klikk for å merke eller ikke merke denne merknaden som favoritt.",
"CreateNewAnnotation": "Opprett en ny merknad...",
"EnterAnnotationText": "Skriv inn merknad...",
"HideAnnotationsFor": "Skjul merknader for %s...",
"IconDesc": "Se merknader for dette datoområdet.",
"IconDescHideNotes": "Skjul merknader for denne datoperioden.",
"InlineQuickHelp": "Du kan lage merknader for å markere spesielle hendelser (som et nytt blogginnlegg eller et redesign), for å bruke i dataanalyser eller for å lagre det du mener er viktig.",
"LoginToAnnotate": "Logg inn for å opprette en merknad.",
"NoAnnotations": "Det er ingen merknader i dette datoområdet.",
"PluginDescription": "Lar deg knytte merknader til ulike datoer for å huske endringer på ditt nettsted, lagre tanker du gjør om dine data og dele dine tanker med kollegaer. Ved å merke dine data vil du være sikker på å huske hvorfor dine data ser ut som de gjør.",
"ViewAndAddAnnotations": "Vis og legg til merknader for %s...",
"YouCannotModifyThisNote": "Du kan ikke redigere denne merknaden fordi du ikke laget den, eller du har ikke admintilgang for dette nettstedet."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Notities toevoegen voor %s...",
"AnnotationOnDate": "Notitie op %1$s: %2$s",
"Annotations": "Notities",
"ClickToDelete": "Klik om deze notitie te verwijderen.",
"ClickToEdit": "Klik om deze notitie te bewerken.",
"ClickToEditOrAdd": "Klik om te bewerken of een nieuwe notitie toe te voegen.",
"ClickToStarOrUnstar": "Klik om deze notitie te markeren of niet te markeren.",
"CreateNewAnnotation": "Nieuwe notitie toevoegen...",
"EnterAnnotationText": "Schrijf je notitie...",
"HideAnnotationsFor": "Verberg notities voor %s...",
"IconDesc": "Bekijk notities voor dit datumbereik.",
"IconDescHideNotes": "Verberg notities voor dit datumbereik.",
"InlineQuickHelp": "U kunt notities aanmaken om speciale gebeurtenissen (zoals een nieuw blogbericht of herontwerp website) te markeren, om gegevensanalyses op te slaan of iets anders dat u belangrijk vindt op te slaan.",
"LoginToAnnotate": "Log in om een notitie aan te maken.",
"NoAnnotations": "Er zijn geen notities voor dit datumbereik.",
"PluginDescription": "Maakt het mogelijk om opmerkingen op verschillende dagen bij te voegen om wijzigingen aan uw website te markeren, analyses die u maakt met betrekking tot uw gegevens op te slaan en uw gedachten met collega's te delen. Door notities bij uw gegevens te plaatsen, zorgt u ervoor dat u weet waarom uw gegevens er op een bepaalde manier uitzien.",
"ViewAndAddAnnotations": "Bekijk en voeg notities toe voor %s...",
"YouCannotModifyThisNote": "U kunt deze notitie niet aanpassen, omdat u deze niet heeft aangemaakt en u heeft ook geen beheerdersrechten voor deze site."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Dodaj adnotacje dla %s...",
"AnnotationOnDate": "Adnotacja do %1$s: %2$s",
"Annotations": "Adnotacje",
"ClickToDelete": "Kliknij aby usunąć tą adnotację.",
"ClickToEdit": "Kliknij aby edytować tą adnotację.",
"ClickToEditOrAdd": "Kliknij aby edytować albo dodać nową adnotację.",
"ClickToStarOrUnstar": "Kliknij aby zaznaczyć lub odznaczyć (gwiazdką) tą adnotację.",
"CreateNewAnnotation": "Utwórz nową adnotację...",
"EnterAnnotationText": "Wpisz swoją notatkę...",
"HideAnnotationsFor": "Ukryj tą adnotację dla %s...",
"IconDesc": "Pokarz notatki dla danego zakresu dat.",
"IconDescHideNotes": "Ukryj notatki dla tego zakresu dat.",
"InlineQuickHelp": "Możesz utworzyć adnotację aby zaznaczać specjalne zdarzenia (jak nowy wpis na blogu albo re-design strony) aby zapisać twoje dane analityczne lub by zapisać cokolwiek innego co wydaje ci się ważne.",
"LoginToAnnotate": "Zaloguj się aby utworzyć adnotację.",
"NoAnnotations": "Nie ma adnotacji dla tego zakresu dat.",
"PluginDescription": "Daje ci możliwość dodania notatek do innych dni aby zaznaczyć zmiany na twojej stronie, zapisać jakiś wnioski dotyczące twoich danych oraz podzielić się twoimi spostrzeżeniami z kolegami. Adnotując twoje dane będziesz miał pewność że pamiętasz dlaczego twoje dane wyglądają tak jak wyglądają.",
"ViewAndAddAnnotations": "Pokarz i dodaj adnotację dla %s...",
"YouCannotModifyThisNote": "Nie możesz modyfikować tej adnotacji ponieważ jej nie utworzyłeś lub nie masz praw administratora dla tej strony."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Adicione anotações para %s...",
"AnnotationOnDate": "Anotação em %1$s: %2$s",
"Annotations": "Anotações",
"ClickToDelete": "Clique para excluir esta anotação.",
"ClickToEdit": "Clique para editar esta anotação.",
"ClickToEditOrAdd": "Clique para editar ou adicione uma nova anotação.",
"ClickToStarOrUnstar": "Clique para adicionar ou remover uma estrela a esta anotação",
"CreateNewAnnotation": "Criar uma nova anotação...",
"EnterAnnotationText": "Digite a sua nota...",
"HideAnnotationsFor": "Esconder anotações para %s...",
"IconDesc": "Ver notas para este intervalo de datas.",
"IconDescHideNotes": "Esconder anotações para este intervalo de datas",
"InlineQuickHelp": "Você pode criar anotações para marcar eventos especiais (como uma nova postagem no blog, ou redefinição do site), para salvar suas análises de dados ou para salvar qualquer coisa que você acha que é importante.",
"LoginToAnnotate": "Faça login para criar uma anotação",
"NoAnnotations": "Não existem notas para este intervalo de datas.",
"PluginDescription": "Permite anexar notas para dias diferentes para marcar as alterações feitas em seu site, salvar as análises que você faz a respeito de seus dados e compartilhar suas opiniões com seus colegas. Anotando seus dados, você poderá se lembrar por que seus dados possuem determinada aparência no sistema.",
"ViewAndAddAnnotations": "Ver e adicionar notas para %s...",
"YouCannotModifyThisNote": "Você não pode modificar essa anotação, porque você não possui permição, nem possui acesso de administrador para este site."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Adicionar anotações para %s...",
"AnnotationOnDate": "Anotação em %1$s: %2$s",
"Annotations": "Anotações",
"ClickToDelete": "Clique para eliminar esta anotação.",
"ClickToEdit": "Clique para editar esta anotação.",
"ClickToEditOrAdd": "Clique para editar ou adicionar uma nova anotação.",
"ClickToStarOrUnstar": "Clique para adicionar ou remover favorito da anotação.",
"CreateNewAnnotation": "Criar uma nova anotação...",
"EnterAnnotationText": "Introduza a sua nota...",
"HideAnnotationsFor": "Esconder anotações para %s...",
"IconDesc": "Ver notas para este intervalo de datas.",
"IconDescHideNotes": "Ocultar notas para este intervalo de datas.",
"InlineQuickHelp": "Pode criar anotações para marcar eventos especiais (como uma nova publicação no blogue, ou alteração no aspeto do site), para guardar as suas análises de dados ou para guardar qualquer outra coisa que considere ser importante.",
"LoginToAnnotate": "Inicie sessão para criar uma anotação.",
"NoAnnotations": "Não existem anotações para este intervalo de datas.",
"PluginDescription": "Permite que anexe notas a dias diferentes para marcar alterações realizadas ao seu site, guardar análises que realizou relativas aos seus dados e partilhar os seus pensamentos com os seus colegas. Ao anotar a sua informação, terá a certeza que se lembrará da razão pela qual esta tem o aspeto que tem.",
"ViewAndAddAnnotations": "Ver e adicionar anotações para %s...",
"YouCannotModifyThisNote": "Não pode modificar esta anotação, porque não a criou ou não tem privilégios de administração para este site."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Adaugă notiţe pentru %s...",
"AnnotationOnDate": "Comentariu in %1$s: %2$s",
"Annotations": "Note",
"ClickToDelete": "Click pentru a sterge acesta nota",
"ClickToEdit": "Dă clic pentru a modifica aceasă notiţă.",
"ClickToEditOrAdd": "Dă click pentru a edita sau a adăuga o notiţă.",
"ClickToStarOrUnstar": "Click pentru a marca sau demarca aceasta nota.",
"CreateNewAnnotation": "Crează o notiţă nouă...",
"EnterAnnotationText": "Introdu nota...",
"HideAnnotationsFor": "Ascunde adnotaiile pentru %s...",
"IconDesc": "Vezi notele pentru aceasta data de interval.",
"IconDescHideNotes": "Ascunde notiţele pentru acest interval",
"InlineQuickHelp": "Poti crea note pentru a marca evenimente speciale (cum ar fi o noua postare pe blog sau redesign-ul siteului), pentru a salva datele analizate sau pentru a salva orice altceva crezi ca este important.",
"LoginToAnnotate": "Conecteaza-te pentru a crea o nota.",
"NoAnnotations": "Nu există notiţe pentru acest interval",
"PluginDescription": "Permite sa inserezi note pentru zile diferite pentru a marca modificarile facute la siteul tau, salveaza rapoartele pe care le faci privind datele siteului tau si impartaseste gandurile cu colegii. Facand note pentru datele tale, vei fi sigur ca iti vei aminti de ce datele tale arata in felul in care sunt.",
"ViewAndAddAnnotations": "Vezi şi adaugă notiţe pentru %s...",
"YouCannotModifyThisNote": "Nu poti modifica aceasta nota deoarece nu ai creat-o tu sau pentru ca nu ai access ca admin pentru acest site."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Добавить примечания для %s...",
"AnnotationOnDate": "Примечание на %1$s: %2$s",
"Annotations": "Примечания",
"ClickToDelete": "Удалить примечание.",
"ClickToEdit": "Редактировать примечание.",
"ClickToEditOrAdd": "Изменить или добавить новые примечания.",
"ClickToStarOrUnstar": "Поставить или снять примечание.",
"CreateNewAnnotation": "Создать новое примечание...",
"EnterAnnotationText": "Введите свою заметку...",
"HideAnnotationsFor": "Спрятать примечания для %s...",
"IconDesc": "Просмотреть заметки для данного диапазона дат.",
"IconDescHideNotes": "Спрятать заметки для данного диапазона дат.",
"InlineQuickHelp": "Вы можете создавать примечания для того, чтобы отмечать важные события в истории вашего сайта (такие как новый пост в блоге или редизайн).",
"LoginToAnnotate": "Войдите для создания примечаний.",
"NoAnnotations": "Нет примечаний в данном диапазоне дат.",
"PluginDescription": "Позволяет прикрепить заметки к различным дням, чтобы отметить изменения, внесённые в ваш сайт. Создавая примечания вы будете знать, почему посещения изменились именно так.",
"ViewAndAddAnnotations": "Просмотреть и добавить примечания для %s...",
"YouCannotModifyThisNote": "Вы не можете изменить это примечание, так как вы не являетесь её автором или у вас нет прав администратора."
}
}

View File

@@ -0,0 +1,21 @@
{
"Annotations": {
"AddAnnotationsFor": "Pridať anotáciu pre %s…",
"AnnotationOnDate": "Anotácia na %1$s: %2$s",
"Annotations": "Anotácie",
"ClickToDelete": "Kliknutím odstránite túto anotáciu.",
"ClickToEdit": "Kliknutím upravíte túto anotáciu.",
"ClickToEditOrAdd": "Klknutím upravíte alebo pridáte anotáciu.",
"ClickToStarOrUnstar": "Klknutím označíte alebo odznačíte hviezdičkou anotáciu.",
"CreateNewAnnotation": "Vytvoriť novú anotáciu…",
"EnterAnnotationText": "Vložte svoju poznámku...",
"HideAnnotationsFor": "Skryť anotáciu pre %s…",
"IconDesc": "Pozrieť poznámky pre tento časový rozsah.",
"IconDescHideNotes": "Skryť poznámky pre tento časový rozsah.",
"InlineQuickHelp": "Môžete vytvoriť anotácie na onačenie špeciálnych udalostí (ako nový príspevok na blogu, alebo redizajn webovej stránky), na uloženie Vašich dátových analýz alebo na uloženie čohokoľvek ďalšieho čo si myslíte, že je dôležité.",
"LoginToAnnotate": "Prihláste sa pre vytvorenie anotácie.",
"NoAnnotations": "Pre tento časový rozsah nie sú anotácie.",
"ViewAndAddAnnotations": "Zobraziť a pridať anotácie pre %s…",
"YouCannotModifyThisNote": "Nemôžete upraviť túto anotáciu, pretože ste ju nevytvorili, ani nemáte administrátorský prístup pre túto stránku."
}
}

View File

@@ -0,0 +1,14 @@
{
"Annotations": {
"Annotations": "Beležke",
"ClickToDelete": "Kliknite za izbris te beležke.",
"ClickToEdit": "Kliknite za urejanje te beležke.",
"ClickToEditOrAdd": "Kliknite za urejanje ali dodajanje nove beležke.",
"EnterAnnotationText": "Dodajte svojo opombo...",
"HideAnnotationsFor": "Skrij opombe za %s...",
"IconDesc": "Preglej opombe za ta časovni razpon.",
"IconDescHideNotes": "Skrij opombe za ta časovni razpon.",
"LoginToAnnotate": "Za kreiranje beležke se morate prijaviti.",
"ViewAndAddAnnotations": "Preglej in dodaj opombe za %s..."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Shtoni shënime për %s…",
"AnnotationOnDate": "Shënim te %1$s: %2$s",
"Annotations": "Shënime",
"ClickToDelete": "Klikoni që të fshihet ky shënim.",
"ClickToEdit": "Klikoni që të përpunohet ky shënim.",
"ClickToEditOrAdd": "Klikoni që të përpunohet ose që të shtohet një shënim i ri.",
"ClickToStarOrUnstar": "Klikoni që këtij shënimi ti vihet ose hiqet ylli.",
"CreateNewAnnotation": "Krijoni një shënim të ri…",
"EnterAnnotationText": "Jepni shënimin tuaj…",
"HideAnnotationsFor": "Fshihi shënimet për %s…",
"IconDesc": "Shihni shënimet për këtë interval datash.",
"IconDescHideNotes": "Fshihi shënimet për këtë interval datash.",
"InlineQuickHelp": "Mund të krijoni shënime për të vënë një shenjë te akt special (fjala vjen, një postim i ri blogu, ose rihartim sajti), për të ruajtur analiza të të dhënave tuaja ose për të ruajtur çfarëdo gjëje tjetër që mendoni se është e rëndësishme.",
"LoginToAnnotate": "Që të krijoni një shënim, bëni hyrjen.",
"NoAnnotations": "Ska shënime për këtë interval datash.",
"PluginDescription": "Ju lejon të bashkëngjitni shënime në ditë të ndryshme, për tu vënë shenjë ndryshimeve të bëra te sajti juaj, të ruani analiza që bëni dhe që lidhen me të dhënat tuaja, si dhe për të ndarë me kolegët mendimet tuaja. Duke bërë shënime në të dhënat tuaja, do të bëni të mundur të mbani mend pse të dhënat tuaja duken ashtu si duken.",
"ViewAndAddAnnotations": "Shihni dhe shtoni shënime për %s…",
"YouCannotModifyThisNote": "Se ndryshoni dot këtë shënim, ngaqë se krijuat ju, dhe as keni të drejta përgjegjësi për këtë sajt."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Dodaj belešku za %s...",
"AnnotationOnDate": "Beleške za %1$s: %2$s",
"Annotations": "Beleške",
"ClickToDelete": "Kliknite kako biste obrisali belešku.",
"ClickToEdit": "Kliknite kako biste izmenili belešku.",
"ClickToEditOrAdd": "Kliknite kako biste dodali ili izmenili belešku.",
"ClickToStarOrUnstar": "Kliknite kako biste markirali belešku.",
"CreateNewAnnotation": "Napravi novu belešku...",
"EnterAnnotationText": "Upišite belešku...",
"HideAnnotationsFor": "Sakrij beleške za %s...",
"IconDesc": "Prikaži beleške za ovaj vremenski period.",
"IconDescHideNotes": "Sakrij beleške za ovaj vremenski period.",
"InlineQuickHelp": "Možete da kreirate beleške kako biste istakli posebne događaje (novi post na blogu, redizajn sajta), sačuvali vašu analizu podataka ili kako biste sačuvali bilo šta drugo što smatrate važnim.",
"LoginToAnnotate": "Prijavite se kako biste napravili novu belešku.",
"NoAnnotations": "Nema beleški za ovaj vremenski period.",
"PluginDescription": "Omogućuje vam da dodate beleške za određene dane kako biste zapamtili zašto podaci izgledaju tako kako izgledaju.",
"ViewAndAddAnnotations": "Prikaži i dodaj beleške za %s...",
"YouCannotModifyThisNote": "Ovu belešku ne možete da izmenite zato što je niste vi kreirali i nemate nivo administratorskog pristupa sajtu."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Lägg till en anteckning för %s...",
"AnnotationOnDate": "Anteckning den %1$s: %2$s",
"Annotations": "Anteckningar",
"ClickToDelete": "Klicka för att ta bort denna anteckning.",
"ClickToEdit": "Klicka för att redigera denna anteckning.",
"ClickToEditOrAdd": "Klicka för att redigera eller lägga till en ny anteckning",
"ClickToStarOrUnstar": "Klicka för att stjärnmärka eller ta bort stjärnmärkning för denna anteckning.",
"CreateNewAnnotation": "Skapa ny anteckning...",
"EnterAnnotationText": "Skriv in din anteckning...",
"HideAnnotationsFor": "Dölj anteckning för %s...",
"IconDesc": "Visa anteckningar för det här datumintervallet.",
"IconDescHideNotes": "Dölj anteckningar för det här datumintervallet.",
"InlineQuickHelp": "Du kan skapa anteckningar för att markera speciella händelser (som t.ex. ett nytt blogginlägg eller ny design av webbplatsen), för att spara data-analyser eller annat som du tycker är viktigt.",
"LoginToAnnotate": "Logga in för att skapa en anteckning.",
"NoAnnotations": "Det finns inga noteringar för detta datumintervall.",
"PluginDescription": "Tillåter dig att koppla anteckningar till olika datum för att markera ändringar som gjorts till webbplatsen, spara analyser som du gör av din data och dela dina tankar med kollegor. Genom att koppla anteckningar så kommer du alltid komma ihåg vad som gör att din data förändras och ser ut som den gör.",
"ViewAndAddAnnotations": "Visa och lägg till anteckningar för %s...",
"YouCannotModifyThisNote": "Du kan inte ändra den här anteckningen eftersom du inte har skapat den, eller har admin-behörighet för den här webbplasten."
}
}

View File

@@ -0,0 +1,20 @@
{
"Annotations": {
"AddAnnotationsFor": "விளக்கங்களை சேர்க்க %s...",
"AnnotationOnDate": "விளக்கம் %1$s: %2$s",
"Annotations": "சிறுகுறிப்புகள்",
"ClickToDelete": "சிறுகுறிப்பை நீக்க இங்கே சொடுக்கவும்",
"ClickToEdit": "சிறுகுறிப்பை மாற்ற இங்கே சொடுக்கவும்",
"ClickToEditOrAdd": "சிறுகுறிப்பை மாற்ற அல்லது புதிதாக சேர்க்க இங்கே சொடுக்கவும்",
"ClickToStarOrUnstar": "குறிப்பை நச்சதிரமிட அல்லது நச்சத்திரம் நீக்க இங்கே சொடுக்கவும்",
"CreateNewAnnotation": "புதிய சிறுகுறிப்பை உருவாக்கு",
"EnterAnnotationText": "உங்கள் குறிப்பை உள்ளிடுக",
"HideAnnotationsFor": "விளக்கங்களை மறைக்க %s...",
"IconDesc": "இந்த தேதி வரம்பிக்கான குறிப்புகளை காட்டு",
"IconDescHideNotes": "இந்த தேதி வரம்பிக்கான குறிப்புகளை மறை",
"LoginToAnnotate": "விளக்கங்களை சேர்க்க உள் நுழையுங்கள்.",
"NoAnnotations": "இந்த காலப்பகுதில் விளக்கங்கள் எவையும் இல்லை.",
"ViewAndAddAnnotations": "%s க்கு விளக்கங்களை சேர்க்கவும் பார்க்கவும்",
"YouCannotModifyThisNote": "இந்த சிறுகுறிப்பை உங்களால் மாற்ற முடியாது. என் என்றால் நீங்கள் இதை உருவாக்கவில்லை அல்லது உங்களுக்கு நிர்வாகி உரிமைகள் இல்லை"
}
}

View File

@@ -0,0 +1,5 @@
{
"Annotations": {
"ClickToEdit": "మార్చడానికి నొక్కండి"
}
}

View File

@@ -0,0 +1,7 @@
{
"Annotations": {
"Annotations": "หมายเหตุประกอบ",
"EnterAnnotationText": "กรอกหมายเหตุของคุณ...",
"LoginToAnnotate": "เข้าสู่ระบบเพื่อสร้างหมายเหตุประกอบ"
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Magdagdag ng mga anotasyon para sa %s ...",
"AnnotationOnDate": "Anotasyon sa %1$s: %2$s",
"Annotations": "Mga anotasyon",
"ClickToDelete": "I-Click upang alisin ang anotasyong ito",
"ClickToEdit": "I-Click upang baguhin ang anotasyong ito",
"ClickToEditOrAdd": "I-Click upang baguhin o dagdagan ang anotasyong ito",
"ClickToStarOrUnstar": "I-Click upang lagyan ng bituin o hindi ang anotasyong ito",
"CreateNewAnnotation": "Gumawa ng bagong anotasyon…",
"EnterAnnotationText": "Ipasok ang iyong paalala...",
"HideAnnotationsFor": "Itago ang mga anotasyon para sa %s…",
"IconDesc": "Tingnan ang mga paalala para sa hanay ng petsa na ito.",
"IconDescHideNotes": "Itago ang mga paalala para sa hanay ng petsa na ito.",
"InlineQuickHelp": "Maaari kang lumikha ng mga anotasyon upang markahan ang mga espesyal na mga kaganapan (tulad ng isang bagong post sa blog, o pagbabago ng disenyo ng website), upang i-save ang iyong pag-aaral ng datos o i-save ang anumang bagay na sa tingin mo ay mahalaga.",
"LoginToAnnotate": "Mag-login upang gumawa ng isang anotasyon.",
"NoAnnotations": "Walang mga anotasyon para sa hanay ng petsa na ito.",
"PluginDescription": "Pinapayagan kang mag-attach ng mga tala sa iba't ibang araw upang markahan ang mga pagbabagong ginawa sa iyong website, i-save ang pinag-aaralan na gagawin mo tungkol sa iyong datos at ibahagi ang iyong mga pananaw sa iyong mga kasamahan. Sa pamamagitan ng annotating ng iyong data, tiyak na iyong maaalala kung bakit ganito ang itsura ng iyong mga datos.",
"ViewAndAddAnnotations": "Tingnan at magdagdag ng mga anotasyon para sa %s…",
"YouCannotModifyThisNote": "Hindi mo maaaring baguhin ang anotasyon na ito, dahil ito ay hindi mo nilikha, at wala ka ring admin access para sa site na ito."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "%s için notlar ekle...",
"AnnotationOnDate": "%1$s için not: %2$s",
"Annotations": "Notlar",
"ClickToDelete": "Bu notu silmek için tıklayın.",
"ClickToEdit": "Bu notu düzenlemek için tıklayın.",
"ClickToEditOrAdd": "Not eklemek ya da düzenlemek icin buraya tıklayın.",
"ClickToStarOrUnstar": "Bu nota işaret koymak ya da kaldırmak için tıklayın.",
"CreateNewAnnotation": "Not ekle...",
"EnterAnnotationText": "Notunuzu yazın...",
"HideAnnotationsFor": "%s için notları gizle...",
"IconDesc": "Bu tarih aralığındaki notları görüntüle.",
"IconDescHideNotes": "Bu tarih aralığındaki notları gizle",
"InlineQuickHelp": "Önemli etkinlikleri (yeni blog iletileri ya da web sitesi tasarım değişiklikleri gibi), veri incelemelerinizi ya da önemli olduğunu düşündüğünüz konuları kaydetmek için notlar oluşturabilirsiniz.",
"LoginToAnnotate": "Not eklemek için oturum açın.",
"NoAnnotations": "Bu tarih aralığında bir not yok.",
"PluginDescription": "Bu özellik web sitenizde farklı günlerde yaptığınız değişiklikleri veri incelemeleri ve düşüncelerinizi çalışma arkadaşlarınızla paylaşmak için notlar eklenmesini sağlar. Verilerinize not ekleyerek neden bu şekilde görüntülendiklerini hatırlayabilirsiniz.",
"ViewAndAddAnnotations": "%s için notları görüntüle ve yeni not ekle...",
"YouCannotModifyThisNote": "Bu notu siz oluşturmadığınız ya da yönetici yetkileriniz olmadığı için düzenleyemezsiniz."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Додати замітки для %s...",
"AnnotationOnDate": "Замітка на %1$s: %2$s",
"Annotations": "Замітки",
"ClickToDelete": "Видалити цю замітку.",
"ClickToEdit": "Редагувати замітку.",
"ClickToEditOrAdd": "Змінити або додати нові замітки.",
"ClickToStarOrUnstar": "Поставити або зняти позначку.",
"CreateNewAnnotation": "Створити замітку",
"EnterAnnotationText": "Введіть свою замітку",
"HideAnnotationsFor": "Приховати замітки для %s...",
"IconDesc": "Переглянути нотатки для даного діапазону дат.",
"IconDescHideNotes": "Приховати замітки для даного діапазону дат.",
"InlineQuickHelp": "Ви можете створювати нотатки для того, щоб відзначати важливі події в історії вашого сайту (такі як новий пост в блозі або редизайн).",
"LoginToAnnotate": "Увійдіть для створення заміток.",
"NoAnnotations": "Ні заміток в даному діапазоні дат.",
"PluginDescription": "Дозволяє прикріпити замітки до різних днів, щоб відзначити зміни, внесені в ваш сайт. Створюючи замітки, ви будете знати, чому відвідування змінилися саме так.",
"ViewAndAddAnnotations": "Переглянути та додати замітки для %s...",
"YouCannotModifyThisNote": "Ви не можете змінити цю замітку, так як ви не є її автором. Також у вас немає прав адміністратора."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "Thêm các chú thích cho %s...",
"AnnotationOnDate": "Chú thích trên %1$s: %2$s",
"Annotations": "Các chú thích",
"ClickToDelete": "Click để xóa chú thích này",
"ClickToEdit": "Click để sửa chú thích này",
"ClickToEditOrAdd": "Click để sửa hay thêm một chú thích mới",
"ClickToStarOrUnstar": "Click để đánh dấu sao hay bỏ đánh dấu chú thích này",
"CreateNewAnnotation": "Tạo một chú thích mới...",
"EnterAnnotationText": "Nhập ghi chú của bạn...",
"HideAnnotationsFor": "Ẩn các chú thích cho %s...",
"IconDesc": "Xem ghi chú trong giới hạn của ngày này",
"IconDescHideNotes": "Ẩn ghi chú trong giới hạn của ngày này",
"InlineQuickHelp": "Bạn có thể tạo chú thích để đánh dấu những sự kiện quan trọng (như là: thời điểm đăng một bài blog mới hoặc thay đổi thiết kế trang web), để ghi nhớ những phân tích dữ liệu hoặc để ghi lại bất cứ gì bạn cho là quan trọng.",
"LoginToAnnotate": "Đăng nhập để tạo một chú thích",
"NoAnnotations": "Không có chú thích nào trong phạm vi ngày này",
"PluginDescription": "Cho phép bạn đính kèm ghi chú vào những ngày khác nhau; đánh dấu những thay đổi đã thực hiện trên trang web của bạn; ghi nhớ những phân tích bạn thực hiện liên quan đến dữ liệu của bạn; và chia sẻ quan điểm của bạn với đồng nghiệp. Việc chú thích sẽ giải thích cho bạn vì sao dữ liệu của bạn đang ở tình trạng hiện tại.",
"ViewAndAddAnnotations": "Hiện thị và thêm chú thích cho %s...",
"YouCannotModifyThisNote": "Bạn không thể sửa đổi chú thích này, bởi vì bạn đã không tạo ra nó, bạn cũng không có quyền quản trị trang web này."
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "给%s添加备注……",
"AnnotationOnDate": "%1$s的备注%2$s",
"Annotations": "备注",
"ClickToDelete": "点击删除此备注。",
"ClickToEdit": "点击编辑此备注。",
"ClickToEditOrAdd": "点击编辑或新增备注。",
"ClickToStarOrUnstar": "点击为此备注增加或取消星标。",
"CreateNewAnnotation": "新增备注……",
"EnterAnnotationText": "输入您的记录……",
"HideAnnotationsFor": "隐藏%s的备注……",
"IconDesc": "查看此时间段内的备注。",
"IconDescHideNotes": "隐藏此时间段内的备注。",
"InlineQuickHelp": "您可以添加备注用于记录特别事件(例如新的博客文章,或者网站重新设计),保存您的数据分析或任何您觉得重要的事情。",
"LoginToAnnotate": "登录以添加备注。",
"NoAnnotations": "该时间段内没有备注。",
"PluginDescription": "可以添加说明文字到不同的日期来标记您网站的修改,保存您关于数据的分析并与同事分享您的想法。通过备注资料,您能确保记住为什么您的数据看起来是这样的。",
"ViewAndAddAnnotations": "查看并添加%s的备注……",
"YouCannotModifyThisNote": "您无法修改此备注,因为这个备注不是您创建的,并且您也没有此网站的管理员权限。"
}
}

View File

@@ -0,0 +1,22 @@
{
"Annotations": {
"AddAnnotationsFor": "新增 %s 的註解...",
"AnnotationOnDate": "%1$s 的註解:%2$s",
"Annotations": "註解",
"ClickToDelete": "點擊刪除此註解。",
"ClickToEdit": "點擊編輯此註解。",
"ClickToEditOrAdd": "點擊以編輯或新增註解。",
"ClickToStarOrUnstar": "點擊以標示或撤銷此註解的星號",
"CreateNewAnnotation": "新增註解",
"EnterAnnotationText": "輸入你的筆記...",
"HideAnnotationsFor": "隱藏 %s 的註解...",
"IconDesc": "查看此日期範圍的筆記。",
"IconDescHideNotes": "隱藏此日期範圍的筆記。",
"InlineQuickHelp": "你可以建立註解來標記特殊事件(如部落格新文章或網頁重新設計),來保存你的資料分析或是任何你覺得重要的事。",
"LoginToAnnotate": "登入以建立註解。",
"NoAnnotations": "這個日期範圍內沒有註解。",
"PluginDescription": "讓你可以在不同日期加入筆記來標記你的網站修改處,保存你的分析數據資料以及和你的同事分享你的想法。透過註解,你可以確保未來能記得為什麼你的資料看起來會是這樣。",
"ViewAndAddAnnotations": "查看並新增 %s 的註解...",
"YouCannotModifyThisNote": "你無法編輯這個註解,因為你並沒有建立它,也沒有這個網站的管理權限。"
}
}

View File

@@ -0,0 +1,252 @@
.evolution-annotations {
position: relative;
height: 18px;
width: 100%;
cursor: pointer;
.icon-annotation {
font-size: 16px;
color: #666666;
}
.icon-annotation.starred {
color: @theme-color-brand;
}
}
.evolution-annotations > span {
position: absolute;
}
.evolution-annotations {
margin-top: 3px;
}
.annotation-manager {
text-align: left;
margin-top: 30px;
.new-annotation-row {
height: 145px;
.input-field {
margin-top: 2px;
.new-annotation-edit {
padding-bottom: 4px;
}
}
}
.annotation.edit .annotation-edit-mode {
min-height: 125px;
.input-field {
margin-top: 2px;
.annotation-edit {
padding-bottom: 4px;
}
}
}
}
span.annotation {
display: block;
font-size: 20px;
color: black;
font-style: normal;
text-align: left;
padding-left: 10px;
}
.annotations-header {
display: inline-block;
width: 128px;
text-align: left;
font-size: 12px;
font-style: italic;
margin-bottom: 8px;
vertical-align: top;
color: @theme-color-text-lighter;
}
.annotation-controls {
display: inline-block;
margin:0;
padding: 50px 0px 10px 10px;
color: transparent;
}
.annotation-controls a:hover {
text-decoration: underline;
}
.annotation-controls>a {
font-size:14px;
font-style: normal;
color: black;
cursor: pointer;
padding: 3px 0 6px 0;
display: inline-block;
margin:0;
}
.annotation-controls>a:hover {
text-decoration: none;
}
.annotation-list {
margin-left: 8px;
}
.annotation-list table {
width: 100%;
}
.annotation-list-range {
display: block;
font-size: 15px;
font-style: italic;
color: @theme-color-text-lighter;
vertical-align: top;
margin: 0 0 8px 8px;
padding-bottom: 20px;
}
.empty-annotation-list, .annotation-list .loadingPiwik {
display: block;
font-style: italic;
color: @theme-color-text-lighter;
margin: 0 0 12px 140px;
}
.annotation-meta {
width: 159px;
text-align: left;
vertical-align: top;
font-size: 14px;
padding-top: 10px;
}
.annotation-user {
font-style: normal;
font-size: 13px;
color: @theme-color-text-light;
}
.annotation-user-cell {
vertical-align: top;
width: 92px;
}
.annotation-period {
display: inline-block;
font-style: normal;
margin: 0 8px 8px 8px;
vertical-align: top;
}
.annotation-value {
margin: 0 12px 12px 8px;
vertical-align: top;
position: relative;
font-size: 14px;
}
.annotation-enter-edit-mode {
cursor: pointer;
font-size: 15px;
}
.annotation-edit, .new-annotation-edit {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
width: 98%;
}
.annotation-star {
display: inline-block;
margin: 0 8px 8px 0;
width: 16px;
}
.annotation-star-changeable {
cursor: pointer;
}
.delete-annotation {
font-size: 15px;
color: #666666;
text-decoration: none;
display: NONE;
}
.delete-annotation:hover {
color: #cc3300;
text-decoration: none;
}
.annotation-manager .submit {
float: none;
}
.edit-annotation {
font-size: 13px;
color: black;
font-style: italic;
padding: 6px 5px;
margin-top: -5px;
}
.edit-annotation:hover {
text-decoration: none;
}
.annotation-period-edit {
display: inline-block;
background: white;
color: @theme-color-text-light;
font-size: 12px;
border: 1px solid #e4e5e4;
padding: 5px 5px 6px 3px;
border-radius: 4px;
}
.annotation-period-edit:hover {
background: #f1f0eb;
border-color: #a9a399;
}
.annotation-period-edit>a {
text-decoration: none;
cursor: pointer;
display: block;
}
.annotation-period-edit>.datepicker {
position: absolute;
margin-top: 6px;
margin-left: -5px;
z-index: 15;
background: white;
border: 1px solid #e4e5e4;
border-radius: 4px;
}
a.add-annotation {
margin: 0;
}
td.padding {
padding: 1px 5px 6px 5px;
}
td.wider {
width: 80px;
}
a.font {
font-size: 14px;
}

View File

@@ -0,0 +1,62 @@
<tr class="annotation" data-id="{{ annotation.idNote }}" data-date="{{ annotation.date }}">
<td class="annotation-meta">
<div class="annotation-star{% if annotation.canEditOrDelete %} annotation-star-changeable{% endif %}" data-starred="{{ annotation.starred }}"
{% if annotation.canEditOrDelete %}title="{{ 'Annotations_ClickToStarOrUnstar'|translate }}"{% endif %}>
{% if annotation.starred %}
<img src="plugins/Morpheus/images/star.png"/>
{% else %}
<img src="plugins/Morpheus/images/star_empty.png"/>
{% endif %}
</div>
<div class="annotation-period {% if annotation.canEditOrDelete %}annotation-enter-edit-mode{% endif %}">{{ annotation.date }}</div>
{% if annotation.canEditOrDelete %}
<div class="annotation-period-edit" style="display:none;">
<a href="#" class= "font">{{ annotation.date }}</a>
<div class="datepicker" style="display:none;"/>
</div>
{% endif %}
</td>
{% if annotation.user is defined and userLogin != 'anonymous' %}
<td class="annotation-user-cell">
<span class="annotation-user">{{ annotation.user }}</span><br/>
</td>
{% endif %}
<td class="annotation-value">
<div class="annotation-view-mode">
<span {% if annotation.canEditOrDelete %}title="{{ 'Annotations_ClickToEdit'|translate }}"
class="annotation-enter-edit-mode"{% endif %}>{{ annotation.note|raw }}</span>
</div>
{% if annotation.canEditOrDelete %}
<div class="annotation-edit-mode" style="display:none;">
<div class="input-field">
<input class="annotation-edit browser-default" type="text" value="{{ annotation.note|raw }}"/>
</div>
<br/>
<input class="annotation-save btn" type="button" value="{{ 'General_Save'|translate }}"/>
<input class="annotation-cancel btn" type="button" value="{{ 'General_Cancel'|translate }}"/>
</div>
{% endif %}
</td>
<td class = "wider">
{% if annotation.canEditOrDelete %}
<span class="table-action edit-annotation annotation-enter-edit-mode" title="{{ 'Annotations_ClickToEdit'|translate }}">
<span class="icon-edit"></span>
</span>
<a class="delete-annotation" title="Delete">
<span class="icon-delete"></span>
</a>
{% endif %}
</td>
</tr>

View File

@@ -0,0 +1,37 @@
<div class="annotations">
{% if annotations is empty %}
<div class="empty-annotation-list">{{ 'Annotations_NoAnnotations'|translate }}</div>
{% endif %}
<table>
{% for annotation in annotations %}
{% include "@Annotations/_annotation.twig" %}
{% endfor %}
<tr class="new-annotation-row" style="display:none;" data-date="{{ selectedDate }}">
<td class="annotation-meta">
<div class="annotation-star">&nbsp;</div>
<div class="annotation-period-edit">
<a href="#" class="font">{{ selectedDate }}</a>
<div class="datepicker" style="display:none;"/>
</div>
</td>
<td class="annotation-user-cell"><span class="annotation-user">{{ userLogin }}</span></td>
<td class="annotation-value">
<div class="input-field">
<input type="text" value=""
class="new-annotation-edit browser-default"
placeholder="{{ 'Annotations_EnterAnnotationText'|translate }}"/>
</div><br/>
<input type="button" class="btn new-annotation-save" value="{{ 'General_Save'|translate }}"/>
<input type="button" class="btn new-annotation-cancel" value="{{ 'General_Cancel'|translate }}"/>
</td>
</tr>
</table>
</div>

View File

@@ -0,0 +1,32 @@
<div class="annotation-manager"
{% if startDate != endDate %}data-date="{{ startDate }},{{ endDate }}" data-period="range"
{% else %}data-date="{{ startDate }}" data-period="{{ period }}"
{% endif %}>
<div class="annotations-header">
<span class= "annotation">{{ 'Annotations_Annotations'|translate }}</span>
</div>
<div class="annotation-list-range">{{ startDatePretty }}{% if startDate != endDate %} &mdash; {{ endDatePretty }}{% endif %}</div>
<div class="annotation-list">
{% include "@Annotations/_annotationList.twig" %}
<span class="loadingPiwik" style="display:none;"><img src="plugins/Morpheus/images/loading-blue.gif"/>{{ 'General_Loading'|translate }}</span>
</div>
<div class="annotation-controls">
{% if canUserAddNotes %}
<a class="add-annotation">
<span class="icon-add"></span>
{{ 'Annotations_CreateNewAnnotation'|translate }}
</a>
{% elseif userLogin == 'anonymous' %}
<a href="index.php?module=Login">{{ 'Annotations_LoginToAnnotate'|translate }}</a>
{% endif %}
</div>
</div>

View File

@@ -0,0 +1,14 @@
<div class="evolution-annotations">
{% for dateCountPair in annotationCounts %}
{% set date=dateCountPair[0] %}
{% set counts=dateCountPair[1] %}
<span data-date="{{ date }}" data-count="{{ counts.count }}" data-starred="{{ counts.starred }}"
{% if counts.count == 0 %}title="{{ 'Annotations_AddAnnotationsFor'|translate(date) }}"
{% elseif counts.count == 1 %}title="{{ 'Annotations_AnnotationOnDate'|translate(date,
(counts.note|e('html_attr')))|raw }}
{{ 'Annotations_ClickToEditOrAdd'|translate }}"
{% else %}}title="{{ 'Annotations_ViewAndAddAnnotations'|translate(date) }}"{% endif %}>
<span class="icon-annotation {% if counts.starred > 0 %}starred{% endif %}"/>
</span>
{% endfor %}
</div>

View File

@@ -0,0 +1 @@
{% include "@Annotations/_annotation.twig" %}