psensor-1.2.1/0000775000175000017500000000000013676133431010216 500000000000000psensor-1.2.1/ar-lib0000755000175000017500000001330213353521057011224 00000000000000#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2013 Free Software Foundation, Inc. # Written by Peter Rosin . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat < Psensor Frequently Asked Questions

The last version of this FAQ is available at https://gitlab.com/jeanfi/psensor/blob/master/doc/faq.txt

1. No sensors or only cpu usage is displayed

Psensor is relying on few libraries or softwares for retrieving the information about the computer:

  • motherboard and CPUs sensors: the information is retrieved from the lm-sensors library, it requires that sensors-detect has been run and the kernel module correctly installed. sensors can be used for checking.

  • GPUs: it depends on which driver you are using:

    • Opensource drivers (nouveau for Nvidia GPUs or radeon/ati for ATI GPUs) is used and support sensor monitoring for your GPU, the information is using lm-sensors, same steps than above.

    • proprietary driver Nvidia: run nvidia-settings to check that it supports sensors monitoring.

    • proprietary driver Catalyst/fglx: use aticonfig to check that it supports sensors monitoring. Important note: it requires that you are using a Psensor binary compiled with the ATI support.

For hard disk drives, psensor can use:

  • udisks2: added since 1.1.2 release. It is the default and recommended provider.

  • hddtemp: verify that it is correctly reporting temperature by using the command: sudo hddtemp /dev/sda. It is the default provider until 1.1.2 release.

  • atasmart library: before the 1.1.2 release it can be enabled by using the command line option --use-libatasmart.

If the underlying software is reporting sensors which are not displayed by Psensor, it is probably a bug in Psensor, so please report it. Otherwise, the issue is on the underlying software itself and you should contact the corresponding development team or refer to its documentation.

Since the release 1.1.2, the providers can be enabled or disabled directly from the user interface (Preferences>Provider).

2. How to monitor an ATI card using the Catalyst driver?

For monitoring ATI card using the proprietary Catalyst driver, Psensor must be compiled with a proprietary library which is not packaged in any Linux distribution.

Unfortunely, due to the license of this library, I cannot provide a compiled version of Psensor, even in a Ubuntu PPA or Ubuntu/Debian standard repositories. You have to compile Psensor sensor. You can find the instructions in the section ATI/AMD GPU Support of the README file available in the Psensor source archives.

If you are using the ATI OpenSource driver, it is not needed to compile Psensor with this proprietary library.

3. The reported temperature is obviously wrong

If the reported temperature is obviously wrong (never change, lower than the ambiant temperature, negative, higher than the sun temperature, etc):

  • most of the time it is not a bug in Psensor nor in the underlying monitoring libraries:

    • if the temperature does not change, it might be due to an existent sensor not wired by the hardware manufacturer.

    • the goal of the sensor is to allow the system to detect critical temperature and NOT to report an exact temperature. Most sensors report a relative temperature. The more it differs from the critical temperature , the more it is wrong.

  • It is only a bug in Psensor if the underlying libraries report a different information than Psensor (use the appropriate command or software: sensors, aticonfig or hddtemp to check). In this case, please report a bug.

4. What is the sensors XXXX?

Since Psensor v0.7.0.4, open the preferences of the sensor (click on its name in the main window and select the menu item Preferences), and look at the Chip field.

For older Psensor releases, look at the Id field, if the string is starting with:

  • lmsensor coretemp: Intel CPU.

  • lmsensor k10temp, lmsensor k8temp, lmsensor fam15h_power: AMD CPU.

  • nvidia or lmsensor nouveau: NVIDIA GPU.

  • hdd: hard disk drive.

  • amd: AMD GPU.

  • lmsensor C B: C is the name of the chip, B the name of the adapter.

For more information about lmsensor devices, see http://lm-sensors.org/wiki/Devices.

5. How to report a bug?

Please use https://bugs.launchpad.net/psensor/+filebug to report bugs even if it can only reproduced with a non-Ubuntu distribution or a release not available in the standard Ubuntu repositories.

You can also use https://bugs.launchpad.net/ubuntu/+source/psensor/+filebug if the bug can be reproduced with a package from the standard Ubuntu repositories.

If you don’t want to use the launchpad, you can send the report by email to:

If the bug is concerning Debian or Ubuntu derivatives distribution, please add in its description the output of the command: apt-cache policy psensor.

If it is related to the Psensor source compilation, please add the full output of the configure command.

6. How to send ideas, questions or comments?

Check the FAQ or the TODO pages.

If you don’t find the information, you can send an email to the public mailing-list psensor-users@googlegroups.com or directly to me: jeanfi@gmail.com.

8. How to install Psensor on Ubuntu?

Psensor is in the official repository, search psensor in the software center and install it. More information at: http://wpitchoune.net/blog/psensor/ubuntu-integration/.

9. How to install Psensor on Debian?

Psensor is in the official repository since Debian 7.0. You can get the last packaged version from the sid repository. More information at: http://packages.qa.debian.org/p/psensor.html.

10. How to install Psensor on ArchLinux?

11. How to install Psensor on my Linux distribution?

Psensor packages are available in the standard repositories of Ubuntu (since Oneiric) and Debian (since v7) distributions.

For other distributions, you will find the compilation and installation instructions in the section Installation from source archive in the README file of the source archive. Psensor should compile in any modern distribution.

12. How to log sensors temperatures?

The best way is probably to use sensord or a custom script based on the output of the different commands like sensors.

Anyway, as I received several requests about such feature, since the 0.7.0.4 release it is implemented in both psensor ( menu preferences > sensors > enable log of measures) and psensor-server (--sensor-log-file option). For psensor the log file is $HOME/.psensor/sensors.log.

13. No graphs are displayed, but the table of the main window is displaying sensors

In the sensors table of the main window, switch on the checkbox of the last column (named Enabled or Graph depending on the Psensor version).

14. Launch Psensor automaticaly on session startup

Since the version 1.0.1, Psensor is no more started automaticaly by default.

Open the Preferences window, select the Startup tab and switch on the option Launch on session startup.

This feature is requiring that the Desktop Environment supports the XDG specification.

15. How to monitor the temperature of a disk with hddtemp?

Until the release 1.1.2, Psensor is using hddtemp by default to retrieve the temperature of the disks.

If hddtemp is installed but no disk temperature is reported, check that the daemon is running by using for example the command ps -eaf|grep hddtemp. It should output something like:

root      1433     1  0 May28 ?        00:00:21 /usr/sbin/hddtemp -d -l 127.0.0.1 -p 7634 -s | /dev/sdb

Depending on the Linux distribution, the installation of the hddtemp package does not enable the hddtemp daemon automaticaly.

In this case, edit the file /etc/default/hddtemp and set RUN_DAEMON to "true". After edition, it should contain the following line:

RUN_DAEMON="true"

For Debian/Ubuntu, you can use at root:

dpkg-reconfigure hddtemp

and reply yes when asked whether hddtemp daemon must be run during the startup.

16. Is there any other similar softwares?

Here is a list of few well-known sensors monitoring softwares:

17. Is it possible to hide sensors in the main window?

Before v1.1.1, the sensors retrieved from the lm-sensor library can be ignored directly in the lm-sensor configuration. See the manpage of sensors.conf(5).

Since v1.1.1, it is possible to hide a sensor, uncheck the setting 'Display sensor in the list of sensors' in the sensor preferences.

psensor-1.2.1/doc/Makefile.in0000664000175000017500000003651313676133314012760 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_doc_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(docdir)" DATA = $(dist_doc_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPINDICATOR_CFLAGS = @APPINDICATOR_CFLAGS@ APPINDICATOR_LIBS = @APPINDICATOR_LIBS@ AR = @AR@ ASCIIDOCTOR = @ASCIIDOCTOR@ ATASMART_CFLAGS = @ATASMART_CFLAGS@ ATASMART_LIBS = @ATASMART_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURL_CFLAGS = @CURL_CFLAGS@ CURL_LIBS = @CURL_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ GTOP_CFLAGS = @GTOP_CFLAGS@ GTOP_LIBS = @GTOP_LIBS@ HAVE_CPPCHECK = @HAVE_CPPCHECK@ HELP2MAN = @HELP2MAN@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ JSON_CFLAGS = @JSON_CFLAGS@ JSON_LIBS = @JSON_LIBS@ LDFLAGS = @LDFLAGS@ LIBATIADL_CFLAGS = @LIBATIADL_CFLAGS@ LIBATIADL_LIBS = @LIBATIADL_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMICROHTTPD_CFLAGS = @LIBMICROHTTPD_CFLAGS@ LIBMICROHTTPD_LIBS = @LIBMICROHTTPD_LIBS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@ LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NVIDIA_CFLAGS = @NVIDIA_CFLAGS@ NVIDIA_LIBS = @NVIDIA_LIBS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SENSORS_LIBS = @SENSORS_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UNITY_CFLAGS = @UNITY_CFLAGS@ UNITY_LIBS = @UNITY_LIBS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XEXT_CFLAGS = @XEXT_CFLAGS@ XEXT_LIBS = @XEXT_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMKMF = @XMKMF@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ dist_doc_DATA = faq.html faq.txt TODO.txt TODO.html all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-dist_docDATA: $(dist_doc_DATA) @$(NORMAL_INSTALL) @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(docdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(docdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-dist_docDATA: @$(NORMAL_UNINSTALL) @list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(docdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_docDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_docDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dist_docDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_docDATA .PRECIOUS: Makefile @ASCIIDOCTOR_TRUE@faq.html: faq.txt ../www/style.css @ASCIIDOCTOR_TRUE@ asciidoctor -n faq.txt @ASCIIDOCTOR_TRUE@TODO.html: faq.txt ../www/style.css @ASCIIDOCTOR_TRUE@ asciidoctor -n TODO.txt # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: psensor-1.2.1/doc/TODO.html0000664000175000017500000007445313675227622012360 00000000000000 Psensor TODO

The last version of this file is available at https://gitlab.com/jeanfi/psensor/blob/master/doc/TODO.txt

  • Play a sound when a sensor alert is raised. Note that it can actually be done by using the script support.

  • Use max/crit temperature information provided by lm-sensor.

  • Include help/faq directly in psensor UI.

psensor-1.2.1/doc/faq.txt0000664000175000017500000002372613675227622012232 00000000000000= Psensor Frequently Asked Questions :docinfo2: :toc: The last version of this FAQ is available at https://gitlab.com/jeanfi/psensor/blob/master/doc/faq.txt [[S_NoSensors]] No sensors or only cpu usage is displayed ----------------------------------------- Psensor is relying on few libraries or softwares for retrieving the information about the computer: - motherboard and CPUs sensors: the information is retrieved from the lm-sensors library, it requires that +sensors-detect+ has been run and the kernel module correctly installed. +sensors+ can be used for checking. - GPUs: it depends on which driver you are using: * Opensource drivers (nouveau for Nvidia GPUs or radeon/ati for ATI GPUs) is used and support sensor monitoring for your GPU, the information is using lm-sensors, same steps than above. * proprietary driver Nvidia: run +nvidia-settings+ to check that it supports sensors monitoring. * proprietary driver Catalyst/fglx: use +aticonfig+ to check that it supports sensors monitoring. Important note: it requires that you are using a Psensor binary compiled with the ATI support. For hard disk drives, psensor can use: - udisks2: added since 1.1.2 release. It is the default and recommended provider. - hddtemp: verify that it is correctly reporting temperature by using the command: +sudo hddtemp /dev/sda+. It is the default provider until 1.1.2 release. - atasmart library: before the 1.1.2 release it can be enabled by using the command line option +--use-libatasmart+. If the underlying software is reporting sensors which are not displayed by Psensor, it is probably a bug in Psensor, so please report it. Otherwise, the issue is on the underlying software itself and you should contact the corresponding development team or refer to its documentation. Since the release 1.1.2, the providers can be enabled or disabled directly from the user interface (+Preferences>Provider+). [[S_ATIMonitoring]] How to monitor an ATI card using the Catalyst driver? ----------------------------------------------------- For monitoring ATI card using the proprietary Catalyst driver, Psensor must be compiled with a proprietary library which is not packaged in any Linux distribution. Unfortunely, due to the license of this library, I cannot provide a compiled version of Psensor, even in a Ubuntu PPA or Ubuntu/Debian standard repositories. You have to compile Psensor sensor. You can find the instructions in the section +ATI/AMD GPU Support+ of the README file available in the Psensor source archives. If you are using the ATI OpenSource driver, it is not needed to compile Psensor with this proprietary library. [[S_WrongTemperature]] The reported temperature is obviously wrong ------------------------------------------- If the reported temperature is obviously wrong (never change, lower than the ambiant temperature, negative, higher than the sun temperature, etc): - most of the time it is not a bug in Psensor nor in the underlying monitoring libraries: * if the temperature does not change, it might be due to an existent sensor not wired by the hardware manufacturer. * the goal of the sensor is to allow the system to detect critical temperature and NOT to report an exact temperature. Most sensors report a relative temperature. The more it differs from the critical temperature , the more it is wrong. - It is only a bug in Psensor if the underlying libraries report a different information than Psensor (use the appropriate command or software: +sensors+, +aticonfig+ or +hddtemp+ to check). In this case, please report a bug. [[S_WhatIsTheSensor]] What is the sensors XXXX? ------------------------- Since Psensor v0.7.0.4, open the preferences of the sensor (click on its name in the main window and select the menu item Preferences), and look at the Chip field. For older Psensor releases, look at the Id field, if the string is starting with: - +lmsensor coretemp+: Intel CPU. - +lmsensor k10temp+, +lmsensor k8temp+, +lmsensor fam15h_power+: AMD CPU. - +nvidia+ or +lmsensor nouveau+: NVIDIA GPU. - +hdd+: hard disk drive. - +amd+: AMD GPU. - +lmsensor C B+: C is the name of the chip, B the name of the adapter. For more information about lmsensor devices, see http://lm-sensors.org/wiki/Devices. [[S_BugReport]] How to report a bug? -------------------- Please use https://bugs.launchpad.net/psensor/+filebug to report bugs even if it can only reproduced with a non-Ubuntu distribution or a release not available in the standard Ubuntu repositories. You can also use https://bugs.launchpad.net/ubuntu/+source/psensor/+filebug if the bug can be reproduced with a package from the standard Ubuntu repositories. If you don’t want to use the launchpad, you can send the report by email to: - psensor-users@googlegroups.com - or jeanfi@gmail.com. If the bug is concerning Debian or Ubuntu derivatives distribution, please add in its description the output of the command: +apt-cache policy psensor+. If it is related to the Psensor source compilation, please add the full output of the +configure+ command. [[S_SubmitIdea]] How to send ideas, questions or comments? ----------------------------------------- Check the FAQ or the TODO pages. If you don’t find the information, you can send an email to the public mailing-list psensor-users@googlegroups.com or directly to me: jeanfi@gmail.com. [[S_Contribute]] How to contribute? ------------------ See http://wpitchoune.net/blog/psensor/how-to-contribute/. [[S_UbuntuInstall]] How to install Psensor on Ubuntu? --------------------------------- Psensor is in the official repository, search +psensor+ in the software center and install it. More information at: http://wpitchoune.net/blog/psensor/ubuntu-integration/. [[S_DebianInstall]] How to install Psensor on Debian? --------------------------------- Psensor is in the official repository since Debian 7.0. You can get the last packaged version from the sid repository. More information at: http://packages.qa.debian.org/p/psensor.html. [[S_ArchLinuxInstall]] How to install Psensor on ArchLinux? ------------------------------------ See http://aur.archlinux.org/packages.php?ID=37807. [[S_OtherInstall]] How to install Psensor on my Linux distribution? ------------------------------------------------ Psensor packages are available in the standard repositories of Ubuntu (since Oneiric) and Debian (since v7) distributions. For other distributions, you will find the compilation and installation instructions in the section +Installation from source archive+ in the README file of the source archive. Psensor should compile in any modern distribution. [[S_LOG]] How to log sensors temperatures? -------------------------------- The best way is probably to use sensord or a custom script based on the output of the different commands like +sensors+. Anyway, as I received several requests about such feature, since the 0.7.0.4 release it is implemented in both psensor ( menu preferences > sensors > enable log of measures) and psensor-server (+--sensor-log-file+ option). For psensor the log file is +$HOME/.psensor/sensors.log+. [[S_NO_GRAPH_DISPLAYED]] No graphs are displayed, but the table of the main window is displaying sensors ------------------------------------------------------------------------------- In the sensors table of the main window, switch on the checkbox of the last column (named +Enabled+ or +Graph+ depending on the Psensor version). [[S_autostart]] Launch Psensor automaticaly on session startup ---------------------------------------------- Since the version 1.0.1, Psensor is no more started automaticaly by default. Open the +Preferences+ window, select the +Startup+ tab and switch on the option +Launch on session startup+. This feature is requiring that the Desktop Environment supports the http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html[XDG specification]. [[S_disk]] How to monitor the temperature of a disk with +hddtemp+? -------------------------------------------------------- Until the release 1.1.2, Psensor is using +hddtemp+ by default to retrieve the temperature of the disks. If +hddtemp+ is installed but no disk temperature is reported, check that the daemon is running by using for example the command +ps -eaf|grep hddtemp+. It should output something like: --------------------- root 1433 1 0 May28 ? 00:00:21 /usr/sbin/hddtemp -d -l 127.0.0.1 -p 7634 -s | /dev/sdb --------------------- Depending on the Linux distribution, the installation of the +hddtemp+ package does not enable the hddtemp daemon automaticaly. In this case, edit the file +/etc/default/hddtemp+ and set +RUN_DAEMON+ to +"true"+. After edition, it should contain the following line: ------------------ RUN_DAEMON="true" ------------------ For Debian/Ubuntu, you can use at root: ------------------ dpkg-reconfigure hddtemp ------------------ and reply +yes+ when asked whether hddtemp daemon must be run during the startup. [[S_SimilarSoft]] Is there any other similar softwares? ------------------------------------- Here is a list of few well-known sensors monitoring softwares: - for X11: http://freecode.com/projects/xsensors - for GNOME2: http://sensors-applet.sourceforge.net/ - for Ubuntu Unity: https://launchpad.net/indicator-sensors - more general, but can be configured to display sensors information: http://conky.sourceforge.net/ [[S_HideSensor]] Is it possible to hide sensors in the main window? -------------------------------------------------- Before v1.1.1, the sensors retrieved from the lm-sensor library can be ignored directly in the lm-sensor configuration. See the manpage of sensors.conf(5). Since v1.1.1, it is possible to hide a sensor, uncheck the setting 'Display sensor in the list of sensors' in the sensor preferences. psensor-1.2.1/doc/TODO.txt0000664000175000017500000000054613675227622012223 00000000000000= Psensor TODO :docinfo2: The last version of this file is available at https://gitlab.com/jeanfi/psensor/blob/master/doc/TODO.txt * Play a sound when a sensor alert is raised. Note that it can actually be done by using the script support. * Use max/crit temperature information provided by lm-sensor. * Include help/faq directly in psensor UI. psensor-1.2.1/doc/Makefile.am0000664000175000017500000000030313675227622012740 00000000000000dist_doc_DATA = faq.html faq.txt TODO.txt TODO.html if ASCIIDOCTOR faq.html: faq.txt ../www/style.css asciidoctor -n faq.txt TODO.html: faq.txt ../www/style.css asciidoctor -n TODO.txt endif psensor-1.2.1/po/0000775000175000017500000000000013676133430010633 500000000000000psensor-1.2.1/po/en@quot.header0000644000175000017500000000226313353521057013337 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # psensor-1.2.1/po/de.po0000664000175000017500000005562013675227773011530 00000000000000# German translations for psensor package. # Copyright (C) 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # msgid "" msgstr "" "Project-Id-Version: psensor 1.2.0\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2016-08-24 23:30+0200\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: German\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, c-format msgid "Failed to create the directory %s: %s" msgstr "Erzeugen des Ordners %s ist gescheitert: %s" #: src/cfg.c:550 #, c-format msgid "Failed to load configuration file %s: %s" msgstr "Laden der Konfigurationsdatei %s ist gescheitert: %s" #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "Speichern der Konfigurationsdatei %s ist gescheitert." #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "Info" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Einstellungen" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Beenden" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Sensoreinstellungen" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - Temperaturüberwachung" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Hilfe" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Sensor" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Wert" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Min." #: src/glade/psensor.glade:258 msgid "Max" msgstr "Max." #: src/glade/psensor.glade:269 msgid "Color" msgstr "Farbe" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Graph" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Anzeigen" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "Rechts" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "Links" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "Oberseite" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "Unterseite" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Einstellungen bearbeiten" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Keine Fensterdekorationen verwenden" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Fenster unterhalb anheften" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Menü aktivieren" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Wert im Unity Starter anzeigen" #: src/glade/psensor-pref.glade:190 msgid "Psensor has not been build with Unity Launcher support" msgstr "Psensor wurde ohne Unterstützung für Unity Starter kompiliert" #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Temperatureinheit:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Position der Sensorentabelle:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Benutzeroberfläche" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "Bei Benutzeranmeldung starten" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Fenster beim Programmstart ausblenden" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Fensterposition und -größe merken" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "Programmstart" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Vordergrund:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Hintergrund:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Hintergrunddeckkraft:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Farben" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Überwachungszeitraum:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Aktualisierungsintervall:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Messungen" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Min." #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Max." #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "Sekunde(n)" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "Minute(n)" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "Sensorgraphen glätten" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "Sensorgraphen" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Messintervall:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Sensorenprotokollierung aktivieren" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Sensorenprotokollierungsintervall:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "Folgendes Script bei einem Alarm ausführen:" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Sensoren" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "Unterstützung für lm-sensors aktivieren" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "Unterstützung für NVCtrl (NVidia) aktivieren" #: src/glade/psensor-pref.glade:974 msgid "Psensor has not been build with NVCtrl support" msgstr "Psensor wurde ohne Unterstützung für NVCtrl kompiliert" #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "Unterstützung für ATI ADL aktivieren" #: src/glade/psensor-pref.glade:993 msgid "Psensor has not been build with ATI ADL support" msgstr "Psensor wurde ohne Unterstützung für ATI ADL kompiliert" #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "Unterstützung für gtop2 aktivieren" #: src/glade/psensor-pref.glade:1012 msgid "Psensor has not been build with gtop2 support" msgstr "Psensor wurde ohne Unterstützung für gtop2 kompiliert" #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "Unterstützung für den hddtemp Daemon aktivieren" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "Unterstützung für libatasmart aktivieren" #: src/glade/psensor-pref.glade:1049 msgid "Psensor has not been build with libatasmart support" msgstr "Psensor wurde ohne Unterstützung für libatasmart kompiliert" #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "Unterstützung für udisks2 aktivieren" #: src/glade/psensor-pref.glade:1068 msgid "Psensor has not been build with udisks2 support" msgstr "Psensor wurde ohne Unterstützung für udisks2 kompiliert" #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "Die Änderungen werden erst nach einem Neustart von psensor wirksam." #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "Festplattenlaufwerk" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "Prozessor- und Arbeitsspeichernutzung" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "Grafikkarte mit proprietärem Treiber" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "Motherboard, Prozessor und Grafikkarte" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "Provider" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Sensoreinstellungen bearbeiten" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Name" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Typ:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "N/V" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Chip:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Name:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Id:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "Label" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Sensorgraphen darstellen" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Farbe:" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "Sensor in der Sensorenliste anzeigen" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Benachrichtigungen aktivieren" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Obere Grenze:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Untere Grenze:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Alarm" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Sensor im Menü anzeigen" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 msgid "Psensor has not been build with AppIndicator support" msgstr "Psensor wurde ohne Unterstützung für AppIndicator kompiliert" #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "Sensor in der Menüleiste anzeigen (experimentell)" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "Programm-Indikator" #: src/graph.c:460 msgid "No graphs enabled" msgstr "Keine Graphen aktiviert" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: ADL-Bibliothek konnte nicht gefunden werden." #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: API der ADL-Bibliothek fehlt." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: ADL-Bibliothek konnte nicht initialisiert werden." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: Anzahl der Adapter konnte nicht ermittelt werden." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "Anzahl der AMD/ATI-Adapter: %d" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "Anzahl der aktiven AMD/ATI-Adapter: %d" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Speichern der Konfigurationsdatei %s ist gescheitert." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s: sk_disk_open() gescheitert: %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: Öffnen des Sockets gescheitert." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: Öffnen der Verbindung gescheitert." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: Falsche Zeichenkette: %s." #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: Wert der Unterfunktion %s kann nicht ermittelt werden: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "%s: Falscher Funktionstyp." #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s: Initialisierung gescheitert: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Protokolldatei kann nicht geöffnet werden: %s" #: src/lib/nvidia.c:69 #, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "%s: Unbekannter NVIDIA Produktname der GPU %d" #: src/lib/nvidia.c:74 #, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "%s: Abrufen des NVIDIA Produktnamens der GPU %d gescheitert" #: src/lib/nvidia.c:240 #, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "%s: Abrufen der Messung vom Typ %x der NVIDIA GPU %d gescheitert" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Verbindung zum X11-Server konnte nicht hergestellt werden." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: Ermittlung der NVIDIA-Informationen gescheitert." #: src/lib/nvidia.c:394 #, c-format msgid "%s: Failed to retrieve number of fans." msgstr "%s: Abrufen der Lüfteranzahl gescheitert." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "U/min" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "gettimeofday ist gescheitert." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "HOME-Variable ist nicht festgelegt." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Sensorprotokolldatei ist bereits geöffnet." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "Sensorprotokolldatei kann nicht geöffnet werden: %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "Sensorprotokolldatei ist nicht geöffnet." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "" "Sensorprotokolldatei ist nicht geöffnet und kann deswegen nicht geschlossen " "werden." #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright © %s jeanfi@gmail.com\n" "Lizenz GPLv2: GNU GPL Version 2 oder neuer \n" "Dies ist freie Software: Sie können Sie beliebig ändern und " "weiterverbreiten.\n" "Sie wird OHNE JEGLICHE GEWÄHRLEISTUNG zur Verfügung gestellt.\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Aufruf: %s [OPTION]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor ist eine GTK+-Anwendung zur Überwachung von Hardware-Sensoren, " "inklusive Temperaturen und Lüftergeschwindigkeiten." #: src/main.c:79 msgid "Options:" msgstr "Optionen:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help Diese Hilfe anzeigen und beenden\n" " -v, --version Versionsinformationen anzeigen und beenden" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL Die Adresse (URL) von psensor-server,\n" " Beispiel: http://hostname:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr "" " -n, --new-instance Erzeugung einer neuen Psensor-Anwendung erzwingen" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=STUFE Fehlerdiagnosestufe festlegen, Ganzzahl zwischen 0 und " "3" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Programmfehler melden an: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s-Website: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "Psensor wurde ohne Unterstützung für entfernte Sensoren kompiliert." #: src/main.c:472 msgid "Enables debug mode." msgstr "Fehlerdiagnosemodus wird aktiviert." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Rufen Sie »%s --help« auf, um weitere Informationen zu erhalten.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Es existiert bereits eine Psensor-Instanz." #: src/main.c:539 msgid "Failed to create thread for monitoring sensors" msgstr "Erzeugung eines Threads zur Sensorenüberwachung fehlgeschlagen" #: src/rsensor.c:115 #, c-format msgid "%s: Fail to connect to: %s" msgstr "%s: Herstellen der Verbindung mit %s gescheitert" #: src/rsensor.c:152 #, c-format msgid "%s: Invalid content: %s" msgstr "%s: Ungültiger Inhalt: %s" #: src/rsensor.c:190 #, c-format msgid "%s: Invalid JSON: %s" msgstr "%s: Ungültiges JSON: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

Anhalten des Servers angefordert

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Seite nicht gefunden - Gehen Sie zurück zur Startseite

" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-server ist ein HTTP-Server zur Fernüberwachung von Hardware-Sensoren." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\tDiese Hilfe anzeigen und beenden\n" " -v, --version\t\tVersionsinformationen anzeigen und beenden" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\tWebserver-Port\n" " -w,--wdir=DIR\t\tOrdner, der Webserver-Seiten enthält" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL Fehlerdiagnoseebene festlegen, Ganzzahl zwischen 0 " "und 3" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=PATH Protokolldatei auf PATH festlegen" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr " --sensor-log-file=PATH Sensorenprotokolldatei auf PATH festlegen" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" " --sensor-log-interval=S Sensorenprotokollierungsintervall auf S (Sekunden) " "festlegen" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "Zugriff auf Ressource verweigert, %s tatsächlicher Pfad ist %s" #: src/server/server.c:270 #, c-format msgid "Cannot get real path of %s" msgstr "Tatsächlicher Pfad von %s kann nicht ermittelt werden" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "HTTP Abfrage: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Aktiviert den Fehlerdiagnosemodus: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "Webserver-Ordner existiert nicht.\n" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Keine Sensoren erkannt." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Erzeugen des Webservers ist gescheitert." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Webserver wurde gestartet auf Port: %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW-Ordner: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "Adresse: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Aktivieren der Sensorenprotokollierung ist gescheitert." #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "Psensor ist eine GTK-Anwendung zur Überwachung von Hardware-Sensoren" #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "Copyright(c) 2010-2016 jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "Info zu Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Contributions:\n" " Daniel Winzen https://launchpad.net/~q-d\n" " Dennis Baudys https://launchpad.net/~thecondordb\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " Michael Egger https://launchpad.net/~michael-egger\n" " Veit https://launchpad.net/~shoutbox" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Psensor-Website" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Laden des Psensor-Symbols ist gescheitert." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "Verstecken" #: src/ui_sensorlist.c:305 msgid "Select sensor color" msgstr "Wählen Sie eine Sensorfarbe" #: src/ui_appindicator.c:148 #, c-format msgid "Failed to load glade file %s: %s" msgstr "Laden der Glade-Datei %s ist gescheitert: %s" #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Temperaturalarm" #: src/ui_notify.c:79 msgid "Fan speed alert" msgstr "Lüftergeschwindigkeitsalarm" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Unbekannt" #~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type." #~ msgstr "" #~ "lmsensor: lmsensor_psensor_create gescheitert: Falscher Funktionstyp." #~ msgid "Sensor Information" #~ msgstr "Sensorinformationen" #~ msgid "" #~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU " #~ "temperature." #~ msgstr "" #~ "Entweder wird kein proprietärer NVIDIA-Treiber verwendet oder die NVIDIA-" #~ "GPU-Temperatur kann nicht ermittelt werden." psensor-1.2.1/po/pl.po0000664000175000017500000005407013675227773011551 00000000000000# Polish translations for psensor package. # Copyright (C) 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # Translators: # hawkeye116477 , 2016. msgid "" msgstr "" "Project-Id-Version: psensor 1.2.0\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2016-08-25 11:09+0200\n" "Last-Translator: hawkeye116477 \n" "Language-Team: Polish\n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: src/cfg.c:503 #, c-format msgid "Failed to create the directory %s: %s" msgstr "Nie powiodło się utworzenie katalogu %s: %s" #: src/cfg.c:550 #, c-format msgid "Failed to load configuration file %s: %s" msgstr "Nie powiodło się załadowanie pliku konfiguracyjnego %s: %s" #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "Nie powiodło się zapisanie pliku konfiguracyjnego %s." #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "O programie" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Preferencje" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Zamknij" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Preferencje czujników" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - kontroler temperatury" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "Pomoc" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Czujnik" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Wartość" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Min" #: src/glade/psensor.glade:258 msgid "Max" msgstr "Max" #: src/glade/psensor.glade:269 msgid "Color" msgstr "Kolor" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Wykres" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Pokaż" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "Prawo" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "Lewo" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "Góra" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "Dół" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Edycja preferencji" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Ukryj dekorację okna" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Utrzymaj okno poniżej" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Włącz menu" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Włącz licznik Unity Launcher" #: src/glade/psensor-pref.glade:190 msgid "Psensor has not been build with Unity Launcher support" msgstr "Psensor nie został zbudowany z obsługą Unity Launcher" #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "Celsjusz" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "Fahrenheit" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Jednostka temperatury:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Pozycja tabeli czujników:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Interfejs" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "Uruchom przy starcie sesji" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Ukryj okno przy starcie" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Przywróć pozycję i rozmiar okna" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "Uruchamianie" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Pierwszy plan:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Tło:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Nieprzezroczystość tła:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Kolory" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Czas trwania monitorowania:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Częstość aktualizacji:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Pomiary" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Min" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Max" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "sekund(y)" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "minut(y)" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "Gładkie krzywe" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "Krzywe" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Częstość aktualizacji pomiarów:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Włącz logowanie czujników" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Częstość logowania czujników:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "Wykonywany skrypt, gdy podniesiony jest alarm:" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Czujniki" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "Włącz obsługę lm-sensors" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "Włącz obsługę NVCtrl (NVidia)" #: src/glade/psensor-pref.glade:974 msgid "Psensor has not been build with NVCtrl support" msgstr "Psensor nie został zbudowany z obsługą NVCtrl" #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "Włącz obsługę ATI ADL" #: src/glade/psensor-pref.glade:993 msgid "Psensor has not been build with ATI ADL support" msgstr "Psensor nie został zbudowany z obsługą ATI ADL" #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "Włącz obsługę gtop2" #: src/glade/psensor-pref.glade:1012 msgid "Psensor has not been build with gtop2 support" msgstr "Psensor nie został zbudowany z obsługą gtop2" #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "Włącz obsługę demona hddtemp" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "Włącz obsługę libatasmart" #: src/glade/psensor-pref.glade:1049 msgid "Psensor has not been build with libatasmart support" msgstr "Psensor nie został zbudowany z obsługą libatasmart " #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "Włącz obsługę udisks2" #: src/glade/psensor-pref.glade:1068 msgid "Psensor has not been build with udisks2 support" msgstr "Psensor nie został zbudowany z obsługą udisks2" #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "Zmiany zostaną zatwierdzone po restarcie programu psensor" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "Dysk twardy" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "Wykorzystanie pamięci i procesora" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "GPU z własnościowym sterownikiem" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "Płyta główna, procesor (CPU) i procesor graficzny (GPU)" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "Dostawcy" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Edycja preferencji czujników" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Nazwa" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Typ:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "Niedostępne" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Chip:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Nazwa:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Id:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "Min:" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "Max:" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "etykieta" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "Szczegóły" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Narysuj krzywą czujnika" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Kolor:" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "Wyświetl czujnik na liście czujników" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Aktywuj powiadomienia na pulpicie" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Wysoki próg:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "0" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "-1" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Niski próg:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Alarm" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Wyświetl czujnik w menu" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 msgid "Psensor has not been build with AppIndicator support" msgstr "" "Psensor nie został zbudowany z obsługą wskaźnika aplikacji (AppIndicator)" #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "Wyświetl czujnik w etykiecie (eksperymentalne)" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "Wskaźnik aplikacji" #: src/graph.c:460 msgid "No graphs enabled" msgstr "Brak wykresów" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: nie można znaleźć biblioteki ADL." #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: brakuje API ADL." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: nie powiodła się inicjalizacja ADL." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: nie można uzyskać ilości kart." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "Ilość kart AMD/ATI: %d" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "Ilość aktywnych kart AMD/ATI: %d" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Nie powiodło się zapisanie pliku konfiguracyjnego %s." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "Dysk" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s: sk_disk_open() niepowodzenie: %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: nie udało się otworzyć gniazdo." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: nie udało się otworzyć połączenie." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: błędne wyrażenie: %s." #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: Nie można uzyskać wartości podfunkcji %s: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "%s: Błędny typ funkcji." #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "Procesor Intel" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "Procesor AMD" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "GPU NVIDIA" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "Procesor VIA" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "ACPI" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s: nie powodzenie inicjalizacji: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "Wykorzystanie procesora" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "Procesor" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "wolna pamięć" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "pamięć" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Nie można otworzyć pliku dziennika: %s" #: src/lib/nvidia.c:69 #, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "%s: Nieznana nazwa produktu NVIDIA dla GPU %d" #: src/lib/nvidia.c:74 #, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "%s: Nie powiodło się uzyskanie nazwy produktu NVIDIA dla GPU %d" #: src/lib/nvidia.c:240 #, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "%s: Nie powiodło się uzyskanie pomiarów typu %x dla GPU NVIDIA %d" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Nie można otworzyć połączenia do serwera X11." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: Nie powiodło się uzyskanie informacji NVIDIA." #: src/lib/nvidia.c:394 #, c-format msgid "%s: Failed to retrieve number of fans." msgstr "%s: Nie powiodło się uzyskanie ilości wentylatorów." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "obr./min" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "gettimeofday nie powiodło się." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "Zmienna HOME nie jest ustawiona." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Plik dziennika czujnika jest już otwarty." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "Nie można otworzyć pliku dziennika czujnika: %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "Plik dziennika czujnika nie otwarty." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "Plik dziennika czujnika nie otwarty, nie można zamknąć." #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright (C) %s jeanfi@gmail.com\n" "Licencja GPLv2: GNU GPL wersja 2 lub nowsza \n" "To jest wolne oprogramowanie: możesz je dowolnie modyfikować i " "rozpowszechniać.\n" "NIE MA GWARANCJI w zakresie dozwolonym przez prawo.\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Użycie: %s [OPCJA]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor jest aplikacją GTK+ do monitorowania czujników sprzętowych, w tym " "temperatury i prędkości wentylatorów." #: src/main.c:79 msgid "Options:" msgstr "Opcje:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help wyświetl pomoc i wyjdź\n" " -v, --version wyświetl informacje o wersji i wyjdź" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL adres URL serwera psensor,\n" " przykład: http://nazwahosta:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr " -n, --new-instance wymuś utworzenie nowej aplikacji Psensor" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=POZIOM ustaw poziom debugowania, liczbę całkowitą od 0 do 3" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Zgłoś błędy do: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "Strona internetowa %s: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "Psensor nie został skompilowany z obsługą zdalnego czujnika." #: src/main.c:472 msgid "Enables debug mode." msgstr "Włącza tryb debugowania." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Spróbuj `%s --help', aby uzyskać więcej informacji.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Instancja Psensor już istnieje." #: src/main.c:539 msgid "Failed to create thread for monitoring sensors" msgstr "Nie powiodło się utworzenie wątku do monitorowania czujników" #: src/rsensor.c:115 #, c-format msgid "%s: Fail to connect to: %s" msgstr "%s: Nie udało się połączyć: %s" #: src/rsensor.c:152 #, c-format msgid "%s: Invalid content: %s" msgstr "%s: Nieprawidłowa zawartość: %s" #: src/rsensor.c:190 #, c-format msgid "%s: Invalid JSON: %s" msgstr "%s: Nieprawidłowy JSON: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

Żądano zatrzymania serwera

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Strona nie znaleziona - Przejdź do strony " "głównej

" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-server jest serwerem HTTP do zdalnego monitorowania czujników " "sprzętowych." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\twyświetl pomoc i wyjdź\n" " -v, --version\t\twyświetl informacje o wersji i wyjdź" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\tport serwera sieciowego\n" " -w,--wdir=KATALOG\t\tkatalog zawierający strony serwera sieciowego" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr " -d, --debug=POZIOM ustaw poziom debugowania, liczba całkowita 0-3" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=ŚCIEŻKA ustaw ŚCIEŻKĘ do pliku dziennika" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr " --sensor-log-file=ŚCIEŻKA ustaw ŚCIEŻKĘ do pliku dziennika" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" " --sensor-log-interval=S ustaw częstość logowania czujników na S (sekund)" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, c-format msgid "Cannot get real path of %s" msgstr "Nie można uzyskać prawdziwej ścieżki %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "Żądanie HTTP: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Włącza tryb debugowania: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "Ścieżka serwera sieciowego nie istnieje.\n" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Brak czujników." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Nie powiodło się utworzenie serwera sieciowego." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Serwer sieciowy uruchomiony pod portem: %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "Katalog WWW: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "Adres URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Nie powiodło się włączenie logowania czujników." #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "Psensor jest aplikacją GTK+ do monitorowania czujników sprzętowych" #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "Copyright(c) 2010-2016 jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "O programie Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Contributions:\n" " hawkeye116477" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Strona internetowa programu Psensor" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Nie powiodło się załadowanie ikony programu Psensor" #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "Ukryj" #: src/ui_sensorlist.c:305 msgid "Select sensor color" msgstr "Wybierz kolor czujnika" #: src/ui_appindicator.c:148 #, c-format msgid "Failed to load glade file %s: %s" msgstr "Nie powiodło się załadowanie pliku glade %s: %s" #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Alarm temperatury" #: src/ui_notify.c:79 msgid "Fan speed alert" msgstr "Alarm prędkości wentylatora" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Nieznany" #~ msgid "Copyright(c) 2010-2014 jeanfi@gmail.com" #~ msgstr "Copyright(c) 2010-2014 jeanfi@gmail.com" psensor-1.2.1/po/remove-potcdate.sin0000644000175000017500000000066013353521057014362 00000000000000# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } psensor-1.2.1/po/hu.po0000664000175000017500000005571713675227773011563 00000000000000# Hungarian translation for psensor # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # # Lukács Bence , 2012. msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-20 11:26+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, c-format msgid "Failed to create the directory %s: %s" msgstr "Nem sikerült a mappa létrehozása: %s - %s" #: src/cfg.c:550 #, fuzzy, c-format msgid "Failed to load configuration file %s: %s" msgstr "Nem sikerült a konfigurációs fájlt beolvasni: %s" #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "Nem sikerült a konfigurációs fájlt elmenteni: %s" #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "Névjegy" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Beállítások" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Kilépés" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Érzékelő beállításai" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - hőmérsékletfigyelő" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Súgó" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Érzékelő" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Érték" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Minimum" #: src/glade/psensor.glade:258 msgid "Max" msgstr "Maximum" #: src/glade/psensor.glade:269 msgid "Color" msgstr "Szín" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Grafikon" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Megjelenítés" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "Jobbra" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "Balra" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "Felül" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "Alul" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Beállítások szerkesztése" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Ablakdíszítés elrejtése" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Ablak alul tartása" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Menü engedélyezése" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Unity indítón lévő számláló engedélyezése" #: src/glade/psensor-pref.glade:190 #, fuzzy msgid "Psensor has not been build with Unity Launcher support" msgstr "A Psensor távoli érzékelők támogatása nélkül lett lefordítva." #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "Celsius" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "Fahrenheit" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Hőmérséklet mértékegysége:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Érzékelőtábla pozíciója:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Felület" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "Indítás a munkamenettel" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Ablak elrejtése induláskor" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Ablak pozíciójának és méretének visszaállítása" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "Indítás" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Előtér:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Háttér:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Háttér átlátszósága:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Színek" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Figyelés hossza:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Frissítési időköz:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Mérések" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Min" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Max" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "másodperc" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "perc" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Mérések frissítési időköze:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Érzékelők naplózásának engedélyezése" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Naplózás időköze:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "Parancsfájl futtatás riasztáskor:" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Érzékelők" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 #, fuzzy msgid "Psensor has not been build with NVCtrl support" msgstr "A Psensor távoli érzékelők támogatása nélkül lett lefordítva." #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 #, fuzzy msgid "Psensor has not been build with ATI ADL support" msgstr "A Psensor távoli érzékelők támogatása nélkül lett lefordítva." #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 #, fuzzy msgid "Psensor has not been build with gtop2 support" msgstr "A Psensor távoli érzékelők támogatása nélkül lett lefordítva." #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 #, fuzzy msgid "Psensor has not been build with libatasmart support" msgstr "A Psensor távoli érzékelők támogatása nélkül lett lefordítva." #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 #, fuzzy msgid "Psensor has not been build with udisks2 support" msgstr "A Psensor távoli érzékelők támogatása nélkül lett lefordítva." #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Érzékelő beállításainak szerkesztése" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Név" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Típus:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "---" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Chip:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Név:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Azonosító:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Érzékelő görbéjének rajzolása" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Szín:" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "Érzékelő megjelenítése az érzékelők listáján" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Asztali értesítések bekapcsolása" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Felső küszöbérték:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "-1" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Alsó küszöbérték:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Riasztás" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Érzékelők megjelenítése az alkalmazásmenüben" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 #, fuzzy msgid "Psensor has not been build with AppIndicator support" msgstr "A Psensor távoli érzékelők támogatása nélkül lett lefordítva." #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "Érzékelők megjelenítése a címkén (fejlesztés alatt)" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "Alkalmazás Indikátor" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: Nem sikerült betölteni az ADL programkönyvtárat." #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: hiányzó ADL API." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: az ADL előkészítése meghiúsult." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: adapterek számainak lekérése meghiúsult" #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "ADM/ATI adapterek száma: %d" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "Aktív ADM/ATI adapterek száma: %d" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Nem sikerült a konfigurációs fájlt elmenteni: %s" #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "Lemez" #: src/lib/hdd_atasmart.c:153 #, fuzzy, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s: sk_disk_open() hiba: %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: foglalat megnyitása meghiúsult." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: a kapcsolat megnyitása nem sikerült." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: rossz karakterlánc: %s." #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: alfunkció értékének lekérdezése meghiúsult %s: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "%s: rossz funkciótípus." #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "Intel processzor" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "AMD processzor" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "NVIDIA videokártya" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "VIA processzor" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s: előkészítési hiba: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "Processzor" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "A naplófájl megnyitása sikertelen: %s" #: src/lib/nvidia.c:69 #, fuzzy, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "NVIDIA információinak lekérése meghiúsult." #: src/lib/nvidia.c:74 #, fuzzy, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "NVIDIA információinak lekérése meghiúsult." #: src/lib/nvidia.c:240 #, fuzzy, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "NVIDIA információinak lekérése meghiúsult." #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Nem lehet létrehozni a kapcsolatot az X11 kiszolgálóval." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: NVIDIA információinak lekérése meghiúsult." #: src/lib/nvidia.c:394 #, fuzzy, c-format msgid "%s: Failed to retrieve number of fans." msgstr "NVIDIA információinak lekérése meghiúsult." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "RPM" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "gettimeofday meghiúsult." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "HOME változó nincs beállítva." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Az érzékelő naplófájlja már meg van nyitva." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "%s érzékelő naplófájlját nem lehet megnyitni" #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "Az érzékelő naplófájlja nincs nyitva." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "Az érzékelő naplófájlja nincs nyitva, nem lehet bezárni." #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright (C) %s jeanfi@gmail.com\n" "Licenc: GNU General Public License második (vagy bármely későbbi) változata\n" "\n" "Ez egy szabad szoftver: szabadon terjesztheti és/vagy módosíthatja\n" "NINCS GARANCIA, a jogszabályok által megengedett mértékben.\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Használat: %s [KAPCSOLÓK]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "A Psensor egy GTK+ alkalmazás a hardver érzékelőinek figyelésére, beleértve " "a hőmérsékleteket és a ventilátor sebességét." #: src/main.c:79 msgid "Options:" msgstr "Kapcsolók:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help ezen súgó megjelenítése, majd kilépés\n" " -v, --version verzióinformációk megjelenítése, majd kilépés" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL a psensor-server URL-címe,\n" " például: http://gepnev:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr " -n, --new-instance új Psensor alkalmazás indításának kényszerítése" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL hibakeresési szint beállítása, egész 0 és 3 között" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "A talált hibákat itt jelentse be: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s honlap: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "A Psensor távoli érzékelők támogatása nélkül lett lefordítva." #: src/main.c:472 msgid "Enables debug mode." msgstr "Hibakeresési mód engedélyezése." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "További információkért adja ki a „%s --help” parancsot.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "A Psensors egy példánya már létezik." #: src/main.c:539 #, fuzzy msgid "Failed to create thread for monitoring sensors" msgstr "Nem sikerült a mappa létrehozása: %s - %s" #: src/rsensor.c:115 #, fuzzy, c-format msgid "%s: Fail to connect to: %s" msgstr "Nem sikerül kapcsolódni a következőhöz: %s" #: src/rsensor.c:152 #, fuzzy, c-format msgid "%s: Invalid content: %s" msgstr "Érvénytelen tartalom: %s" #: src/rsensor.c:190 #, fuzzy, c-format msgid "%s: Invalid JSON: %s" msgstr "Érvénytelen JSON: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

A kiszolgáló leállítást kért

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Az oldal nem található - Ugrás a Főoldalra" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "A psensor-server egy HTTP kiszolgáló a hardver érzékelőinek figyelésére " "távolról." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\tezen súgó megjelenítése, majd kilépés\n" " -v, --version\t\tverzióinformáció megjelenítése, majd kilépés" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\twebkiszolgáló portja\n" " -w,--wdir=DIR\t\ta webkiszolgáló oldalait tartalmazó mappa" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL hibakeresési szint beállítása, egész 0 és 3 között" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=ÚTVONAL a naplófájl ÚTVONALÁNAK beállítása" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr "" " --sensor-log-file=ÚTVONAL érzékelők naplójának beállítása az ÚTVONALRA" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" " --sensor-log-interval=S érzékelő naplózási gyakoriságának beállítása S " "másodpercre" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "A naplófájl megnyitása sikertelen: %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "HTTP-kérés: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Hibakeresési mód engedélyezése: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Nem találhatók érzékelők." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Nem sikerült létrehozni a webkiszolgálót." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "A webkiszolgáló elindult ezen a porton: %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW könyvtár: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Érzékelők naplózásának aktiválása meghiúsult." #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "A Psensor egy GTK+ alkalmazás a hardver érzékelőinek figyelésére" #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "Copyright(c) 2010-2014 jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "A Psensor névjegye" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Bence Lukács https://launchpad.net/~lukacs-bence1\n" " Gabor Kelemen https://launchpad.net/~kelemeng\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " Richard Somlói https://launchpad.net/~ricsipontaz" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "A Psensor honlapja" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Nem sikerült betölteni a Psensor ikonját." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 #, fuzzy msgid "Select sensor color" msgstr "Előtérszín kiválasztása" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "Nem sikerült a konfigurációs fájlt beolvasni: %s" #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Hőmérséklet riasztás" #: src/ui_notify.c:79 #, fuzzy msgid "Fan speed alert" msgstr "Ventilátor riasztás" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Ismeretlen" #~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type." #~ msgstr "lmsensor: lmsensor_psensor_create hiba: rossz funkciótípus." #~ msgid "The configuration file does not exist." #~ msgstr "A konfigurációs fájl nem létezik." #~ msgid "Sensor Information" #~ msgstr "Érzékelő információi" #~ msgid "" #~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU " #~ "temperature." #~ msgstr "" #~ "Az NVIDIA zár eszközmeghajtó nincs használatban vagy csak nem sikerült a " #~ "videokártya hőmérsékletének lekérése." psensor-1.2.1/po/de.gmo0000664000175000017500000003567213676133402011663 00000000000000\ (8)DbDB^/k0E+Uqh02*F)q*5;&Sz* $DdJz6  "5'T|  ")>Y r*%0AY w! -Jdx&%.((E n%  +0G^n r|#5J%i  /4(.]6-3/%9U=e38<*P {("+NVp u5&  / 7 H _ e w $     J H!R!re!B"V#Pr#N#j$w}$9$G/%Vw%p%?&A&>S&>&0&4';7'@s'*'''-(A('\($($(#((a)Ar) ) )*)1)6)*6`*"******+ + )+%4+6Z+.+5+++, ,, %-23-$f------."%.&H..o.$.1.*.) /&J/#q/%/7/(/+0?H0*040,051K1 h1%u11#111 1#1%2 ?2M2Q2e222222 222&2333#3;3S3&r3 33 33 339 4>C484?474=359q5E5E5|76666?6# 7,D7q777+7)7T7T8"]888 888D8 9C 9d9i9 99999&9"9 :':0:N: T:^:Ne: ::HTAn),5' UcRNCF uKEt4d{+?gxl@6]}s3-e XP9WYiOM:a* "h_|%fr~0 $\^pB<Q>[yID;w`8.v&(Z LJoV!q1mS#/zj=bkG72 --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Fail to connect to: %s%s: Failed to retrieve NVIDIA information.%s: Failed to retrieve NVIDIA product name for GPU %d%s: Failed to retrieve measure of type %x for NVIDIA GPU %d%s: Failed to retrieve number of fans.%s: Invalid JSON: %s%s: Invalid content: %s%s: Unknown NVIDIA product name for GPU %d%s: Wrong feature type.%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: sk_disk_open() failure: %s.%s: wrong string: %s.

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.AMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmApplication IndicatorBackground opacity:Background:BottomCPU and memory usageCannot get real path of %sCannot open log file: %sCannot open sensor log file: %s.Chip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. CurvesDisplay sensor in the label (experimental)Display sensor in the list of sensorsDisplay sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnable support of ATI ADLEnable support of NVCtrl (NVidia)Enable support of gtop2Enable support of hddtemp daemonEnable support of libatasmartEnable support of lm-sensorsEnable support of udisks2Enables debug mode.Enables debug mode: %dFailed to activate logging of sensors.Failed to create Web server.Failed to create the directory %s: %sFailed to create thread for monitoring sensorsFailed to load Psensor icon.Failed to load configuration file %s: %sFailed to load glade file %s: %sFailed to save configuration file %s.Fan speed alertForeground:GPU with proprietary driverGraphHOME variable not set.HTTP Request: %sHard disk driveHideHide window decorationHide window on startupHigh threshold:Id:InterfaceKeep window belowLaunch on session startupLeftLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:Motherboard, CPU and GPUN/ANameName:No graphs enabledNo sensors detected.Number of AMD/ATI adapters: %dNumber of active AMD/ATI adapters: %dOptions:Position of sensors table:PreferencesProvidersPsensor - Temperature MonitorPsensor HomepagePsensor has not been build with ATI ADL supportPsensor has not been build with AppIndicator supportPsensor has not been build with NVCtrl supportPsensor has not been build with Unity Launcher supportPsensor has not been build with gtop2 supportPsensor has not been build with libatasmart supportPsensor has not been build with udisks2 supportPsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Resource access refused %s real path is %sRestore window position and sizeScript executed when an alarm is raised:Select sensor colorSensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowSmooth curvesStartupTemperature alertTemperature unit:The changes are applied after the restart of psensor.TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... ValueWWW directory: %sWeb server started on port: %dWebserver directory does not exist. _Help_Psensorgettimeofday failed.labelminute(s)psensorRightpsensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor 1.2.0 Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2016-08-24 23:30+0200 Last-Translator: Jean-Philippe Orsini Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) --sensor-log-file=PATH Sensorenprotokolldatei auf PATH festlegen --sensor-log-interval=S Sensorenprotokollierungsintervall auf S (Sekunden) festlegen -d, --debug=LEVEL Fehlerdiagnoseebene festlegen, Ganzzahl zwischen 0 und 3 -d, --debug=STUFE Fehlerdiagnosestufe festlegen, Ganzzahl zwischen 0 und 3 -h, --help Diese Hilfe anzeigen und beenden -v, --version Versionsinformationen anzeigen und beenden -h, --help Diese Hilfe anzeigen und beenden -v, --version Versionsinformationen anzeigen und beenden -l, --log-file=PATH Protokolldatei auf PATH festlegen -n, --new-instance Erzeugung einer neuen Psensor-Anwendung erzwingen -p,--port=PORT Webserver-Port -w,--wdir=DIR Ordner, der Webserver-Seiten enthält -u, --url=URL Die Adresse (URL) von psensor-server, Beispiel: http://hostname:3131%%s-Website: <%s> %s: Wert der Unterfunktion %s kann nicht ermittelt werden: %s.%s: Verbindung zum X11-Server konnte nicht hergestellt werden.%s: Herstellen der Verbindung mit %s gescheitert%s: Ermittlung der NVIDIA-Informationen gescheitert.%s: Abrufen des NVIDIA Produktnamens der GPU %d gescheitert%s: Abrufen der Messung vom Typ %x der NVIDIA GPU %d gescheitert%s: Abrufen der Lüfteranzahl gescheitert.%s: Ungültiges JSON: %s%s: Ungültiger Inhalt: %s%s: Unbekannter NVIDIA Produktname der GPU %d%s: Falscher Funktionstyp.%s: Öffnen der Verbindung gescheitert.%s: Öffnen des Sockets gescheitert.%s: Initialisierung gescheitert: %s.%s: sk_disk_open() gescheitert: %s.%s: Falsche Zeichenkette: %s.

Seite nicht gefunden - Gehen Sie zurück zur Startseite

Anhalten des Servers angefordert

Max.Min.Es existiert bereits eine Psensor-Instanz.AMD: ADL-Bibliothek konnte nicht gefunden werden.AMD: Anzahl der Adapter konnte nicht ermittelt werden.AMD: ADL-Bibliothek konnte nicht initialisiert werden.AMD: API der ADL-Bibliothek fehlt.InfoInfo zu PsensorBenachrichtigungen aktivierenAlarmProgramm-IndikatorHintergrunddeckkraft:Hintergrund:UnterseiteProzessor- und ArbeitsspeichernutzungTatsächlicher Pfad von %s kann nicht ermittelt werdenProtokolldatei kann nicht geöffnet werden: %sSensorprotokolldatei kann nicht geöffnet werden: %s.Chip:FarbeFarbe:FarbenCopyright © %s jeanfi@gmail.com Lizenz GPLv2: GNU GPL Version 2 oder neuer Dies ist freie Software: Sie können Sie beliebig ändern und weiterverbreiten. Sie wird OHNE JEGLICHE GEWÄHRLEISTUNG zur Verfügung gestellt. SensorgraphenSensor in der Menüleiste anzeigen (experimentell)Sensor in der Sensorenliste anzeigenSensor im Menü anzeigenSensorgraphen darstellenEinstellungen bearbeitenSensoreinstellungen bearbeitenWert im Unity Starter anzeigenMenü aktivierenSensorenprotokollierung aktivierenUnterstützung für ATI ADL aktivierenUnterstützung für NVCtrl (NVidia) aktivierenUnterstützung für gtop2 aktivierenUnterstützung für den hddtemp Daemon aktivierenUnterstützung für libatasmart aktivierenUnterstützung für lm-sensors aktivierenUnterstützung für udisks2 aktivierenFehlerdiagnosemodus wird aktiviert.Aktiviert den Fehlerdiagnosemodus: %dAktivieren der Sensorenprotokollierung ist gescheitert.Erzeugen des Webservers ist gescheitert.Erzeugen des Ordners %s ist gescheitert: %sErzeugung eines Threads zur Sensorenüberwachung fehlgeschlagenLaden des Psensor-Symbols ist gescheitert.Laden der Konfigurationsdatei %s ist gescheitert: %sLaden der Glade-Datei %s ist gescheitert: %sSpeichern der Konfigurationsdatei %s ist gescheitert.LüftergeschwindigkeitsalarmVordergrund:Grafikkarte mit proprietärem TreiberGraphHOME-Variable ist nicht festgelegt.HTTP Abfrage: %sFestplattenlaufwerkVersteckenKeine Fensterdekorationen verwendenFenster beim Programmstart ausblendenObere Grenze:Id:BenutzeroberflächeFenster unterhalb anheftenBei Benutzeranmeldung startenLinksUntere Grenze:Max.Messintervall:MessungenMin.Überwachungszeitraum:Motherboard, Prozessor und GrafikkarteN/VNameName:Keine Graphen aktiviertKeine Sensoren erkannt.Anzahl der AMD/ATI-Adapter: %dAnzahl der aktiven AMD/ATI-Adapter: %dOptionen:Position der Sensorentabelle:EinstellungenProviderPsensor - TemperaturüberwachungPsensor-WebsitePsensor wurde ohne Unterstützung für ATI ADL kompiliertPsensor wurde ohne Unterstützung für AppIndicator kompiliertPsensor wurde ohne Unterstützung für NVCtrl kompiliertPsensor wurde ohne Unterstützung für Unity Starter kompiliertPsensor wurde ohne Unterstützung für gtop2 kompiliertPsensor wurde ohne Unterstützung für libatasmart kompiliertPsensor wurde ohne Unterstützung für udisks2 kompiliertPsensor wurde ohne Unterstützung für entfernte Sensoren kompiliert.Psensor ist eine GTK-Anwendung zur Überwachung von Hardware-SensorenPsensor ist eine GTK+-Anwendung zur Überwachung von Hardware-Sensoren, inklusive Temperaturen und Lüftergeschwindigkeiten.BeendenU/minProgrammfehler melden an: %s Zugriff auf Ressource verweigert, %s tatsächlicher Pfad ist %sFensterposition und -größe merkenFolgendes Script bei einem Alarm ausführen:Wählen Sie eine SensorfarbeSensorSensoreinstellungenSensorprotokolldatei ist bereits geöffnet.Sensorprotokolldatei ist nicht geöffnet.Sensorprotokolldatei ist nicht geöffnet und kann deswegen nicht geschlossen werden.SensorenSensorenprotokollierungsintervall:AnzeigenSensorgraphen glättenProgrammstartTemperaturalarmTemperatureinheit:Die Änderungen werden erst nach einem Neustart von psensor wirksam.OberseiteRufen Sie »%s --help« auf, um weitere Informationen zu erhalten. Typ:Adresse: http://localhost:%dUnbekanntAktualisierungsintervall:Aufruf: %s [OPTION]... WertWWW-Ordner: %sWebserver wurde gestartet auf Port: %dWebserver-Ordner existiert nicht. _Hilfe_Psensorgettimeofday ist gescheitert.LabelMinute(n)Rechtspsensor-server ist ein HTTP-Server zur Fernüberwachung von Hardware-Sensoren.Sekunde(n)Contributions: Daniel Winzen https://launchpad.net/~q-d Dennis Baudys https://launchpad.net/~thecondordb Jean-Philippe Orsini https://launchpad.net/~jfi Michael Egger https://launchpad.net/~michael-egger Veit https://launchpad.net/~shoutboxpsensor-1.2.1/po/lv.po0000664000175000017500000005326113675227773011560 00000000000000# Latvian translation for psensor # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-20 11:26+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Latvian \n" "Language: lv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, fuzzy, c-format msgid "Failed to create the directory %s: %s" msgstr "Neizdevās izveidot tīmekļa serveri." #: src/cfg.c:550 #, fuzzy, c-format msgid "Failed to load configuration file %s: %s" msgstr "Neizdevās aktivizēt sensoru žurnalēšanu." #: src/cfg.c:575 #, fuzzy, c-format msgid "Failed to save configuration file %s." msgstr "Neizdevās aktivizēt sensoru žurnalēšanu." #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "Par" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Iestatījumi" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Iziet" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Sensoru iestatījumi" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - temperatūras pārraugs" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Palīdzība" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Sensors" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Vērtība" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Min." #: src/glade/psensor.glade:258 msgid "Max" msgstr "Maks." #: src/glade/psensor.glade:269 msgid "Color" msgstr "Krāsa" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Grafiks" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Rādīt" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "Pa labi" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "Pa kreisi" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "Augšā" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "Lejā" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Rediģēt iestatījumus" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Slēpt loga apdari" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Turēt logu apakšā" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Aktivizēt izvēlni" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Aktivizēt Unity palaidēja skaitītāju" #: src/glade/psensor-pref.glade:190 #, fuzzy msgid "Psensor has not been build with Unity Launcher support" msgstr "Psensor nav kompilēts ar attālināto sensoru atbalstu." #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "Celsijs" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "Fārenheits" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Temperatūras mērvienība:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Sensoru tabulas novietojums:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Saskarne" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "Palaist pieteicoties sistēmā" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Slēpt logu pieteicoties sistēmā" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Atjaunot loga pozīciju un izmēru" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "Palaišana" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Priekšplāns:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Fons:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Fona necaurspīdība:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Krāsas" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Pārraudzības ilgums:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Atjaunināšanas intervāls:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Mērījumi" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Min." #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Maks." #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "sekunde(s)" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "minūte(s)" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Mērījumu atjaunināšanas intervāls:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Aktivizēt sensora žurnalēšanu" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Sensoru žurnalēšanas intervāls:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "Skrips izpildīts, kad trauksme ir aktivizēta:" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Sensori" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 #, fuzzy msgid "Psensor has not been build with NVCtrl support" msgstr "Psensor nav kompilēts ar attālināto sensoru atbalstu." #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 #, fuzzy msgid "Psensor has not been build with ATI ADL support" msgstr "Psensor nav kompilēts ar attālināto sensoru atbalstu." #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 #, fuzzy msgid "Psensor has not been build with gtop2 support" msgstr "Psensor nav kompilēts ar attālināto sensoru atbalstu." #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 #, fuzzy msgid "Psensor has not been build with libatasmart support" msgstr "Psensor nav kompilēts ar attālināto sensoru atbalstu." #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 #, fuzzy msgid "Psensor has not been build with udisks2 support" msgstr "Psensor nav kompilēts ar attālināto sensoru atbalstu." #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Rediģēt sensoru iestatījumus" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Nosaukums" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Tips:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "N/P" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Mikroshēma:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Nosaukums:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Id:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Zīmēt sensora līkni" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Krāsa:" #: src/glade/sensor-edit.glade:448 #, fuzzy msgid "Display sensor in the list of sensors" msgstr "Rādīt sensoru aplikāciju indikatora izvēlnē" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Aktivizēt darbvirsmas paziņojumus" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Augsts slieksnis:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "-1" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Zems slieksnis:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Trauksme" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Rādīt sensoru aplikāciju indikatora izvēlnē" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 #, fuzzy msgid "Psensor has not been build with AppIndicator support" msgstr "Psensor nav kompilēts ar attālināto sensoru atbalstu." #: src/glade/sensor-edit.glade:719 #, fuzzy msgid "Display sensor in the label (experimental)" msgstr "Attēlot sensoru etiķetē (eksperimentāls)" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "Aplikāciju indikators" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: nevar atrast ADL bibliotēku." #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: trūkst ADL programmatūras saskarne." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: neizdevās inicializēt ADL." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: nevar saņemt adapteru skaitu." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "AMD/ATI adapteru skaits: %d" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "Aktīvo AMD/ATI adapteru skaits: %d" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Neizdevās aktivizēt sensoru žurnalēšanu." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "Disks" #: src/lib/hdd_atasmart.c:153 #, fuzzy, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "atasmart: sk_disk_open() atteice: %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: neizdevās atvērt ligzdu." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: neizdevās atvērt savienojumu." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: nepareiza virkne: %s." #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: nevar iegūt vērtību no apakšīpašības %s: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "%s: nepareis īpašības tips." #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "Intel CPU" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "AMD CPU" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "NVIDIA GPU" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "VIA CPU" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s: inicializācijas kļūda: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "CPU" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Nevar atvērt žurnāla failu: %s" #: src/lib/nvidia.c:69 #, fuzzy, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "Neizdevās saņemt NVIDIA informāciju." #: src/lib/nvidia.c:74 #, fuzzy, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "Neizdevās saņemt NVIDIA informāciju." #: src/lib/nvidia.c:240 #, fuzzy, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "Neizdevās saņemt NVIDIA informāciju." #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Nevar atvērt savienojumu ar X11 server." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: Neizdevās saņemt NVIDIA informāciju." #: src/lib/nvidia.c:394 #, fuzzy, c-format msgid "%s: Failed to retrieve number of fans." msgstr "Neizdevās saņemt NVIDIA informāciju." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "RPM" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "gettimeofday neizdevās." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "HOME mainīgais nav iestatīts." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Sensora žurnāla fails jau ir atvērts." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "Nevar atvērt sensora žurnāla failu: %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "Sensora žurnāla fails nav atvērts." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "Sensora žurnāls nav atvērts, nevar aizvērt." #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Lietošana: %s [OPCIJAS]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor ir GTK+ lietotne aparatūras sensoru pārraudzībai, ieskaitot " "temperatūras un ventilatoru ātrumus." #: src/main.c:79 msgid "Options:" msgstr "Opcijas:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help rādīt šo palīdzību un iziet\n" " -v, --version rādīt versijas informāciju un iziet" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=SAITE psensor-server adrese,\n" " piemērs: http://saimniekdatoravārds:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr " -n, --new-instance piespiest izveidot jaunu Psensor lietotni" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr " -d, --debug=LĪMENIS iestatīt atkļūdošanas līmeni, starp 0 un 3" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Ziņojiet kļūdas uz: %s.\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s mājas lapa: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "Psensor nav kompilēts ar attālināto sensoru atbalstu." #: src/main.c:472 msgid "Enables debug mode." msgstr "Aktivizēt atkļūdošanas režīmu." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Mēģiniet `%s --help', lai iegūtu vairāk informācijas.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Psensor instance jau eksistē." #: src/main.c:539 #, fuzzy msgid "Failed to create thread for monitoring sensors" msgstr "Neizdevās izveidot tīmekļa serveri." #: src/rsensor.c:115 #, fuzzy, c-format msgid "%s: Fail to connect to: %s" msgstr "Neizdevās savienoties ar: %s" #: src/rsensor.c:152 #, fuzzy, c-format msgid "%s: Invalid content: %s" msgstr "Nederīgs saturs: %s" #: src/rsensor.c:190 #, fuzzy, c-format msgid "%s: Invalid JSON: %s" msgstr "Nederīgs JSON: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

Servera apturēšana pieprasīta

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Lapa nav atrasta - dodieties uz galveno lapu" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-server ir HTTP serveris aparatūras sensoru attālinātai pārraudzībai." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\trādīt šo palīdzību un iziet\n" " -v, --version\t\trādīt versijas informāciju un iziet" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORTS\ttīmekļa servera ports\n" " -w,--wdir=DIR\t\tmape ar tīmekļa servera lapām" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LĪMENIS iestatīt atkļūdošanas līmeni, vesels skaitlis " "starp 0 un 3" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=CEĻŠ žurnalēšanas faila ceļš" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr " --sensor-log-file=CEĻŠ sensora žurnāla faila ceļš" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" " --sensor-log-interval=S iestata sensora žurnāla intervālu uz S (sekundēm)" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "Nevar atvērt žurnāla failu: %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "HTTP pieprasījums: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Aktivizē atkļūdošanas režīmu: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Sensori nav atklāti." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Neizdevās izveidot tīmekļa serveri." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Tīmekļa serveris sākts uz porta: %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW mape: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "Saite: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Neizdevās aktivizēt sensoru žurnalēšanu." #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "Psensor ir GTK+ lietotne aparatūras sensoru pārraudzībai" #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "" "Autortiesības(c) 2010-2014\n" "jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "Par Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " tuxmaniack https://launchpad.net/~tuxmaniack" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Psensor mājas lapa" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Neizdevās ielādēt Psensor ikonu." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 #, fuzzy msgid "Select sensor color" msgstr "Izvēlieties priekšplāna krāsu" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "Neizdevās aktivizēt sensoru žurnalēšanu." #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Temperatūras trauksme" #: src/ui_notify.c:79 #, fuzzy msgid "Fan speed alert" msgstr "Ventilatora trauksme" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Nezināms" #~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type." #~ msgstr "lmsensor: lmsensor_psensor_create atteice: nepareis īpašības tips." #~ msgid "Sensor Information" #~ msgstr "Sensora informācija" #~ msgid "" #~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU " #~ "temperature." #~ msgstr "" #~ "NVIDIA īpašniekdraiveris netiek izmantots vai nevar iegūt NVIDIA GPU " #~ "temperatūru." psensor-1.2.1/po/quot.sed0000644000175000017500000000023113353521057012230 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g psensor-1.2.1/po/Makevars0000644000175000017500000000341613353521057012247 00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = psensor-1.2.1/po/nl.po0000664000175000017500000005356513675227773011557 00000000000000# Dutch translation for psensor # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the psensor package. # FIRST AUTHOR , 2014. # msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-20 11:25+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Dutch \n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, fuzzy, c-format msgid "Failed to create the directory %s: %s" msgstr "Kon geen webserver maken." #: src/cfg.c:550 #, fuzzy, c-format msgid "Failed to load configuration file %s: %s" msgstr "Kon logboeken bijhouden niet inschakelen voor sensoren." #: src/cfg.c:575 #, fuzzy, c-format msgid "Failed to save configuration file %s." msgstr "Kon logboeken bijhouden niet inschakelen voor sensoren." #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "Over" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Voorkeuren" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Afsluiten" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Sensorvoorkeuren" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - Temperatuurbewaker" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Hulp" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Sensor" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Waarde" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Min" #: src/glade/psensor.glade:258 msgid "Max" msgstr "Max" #: src/glade/psensor.glade:269 msgid "Color" msgstr "Kleur" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Grafiek" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Tonen" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Voorkeuren bewerken" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Vensteromlijsting verbergen" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Houd venster eronder" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Menu inschakelen" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Teller voor Unity-starter inschakelen" #: src/glade/psensor-pref.glade:190 #, fuzzy msgid "Psensor has not been build with Unity Launcher support" msgstr "" "Psensor os niet gecompileerd met ondersteuning voor sensoren op afstand." #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Temperatuureenheid:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Positie van sensorentabel:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Bedieningsschil" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Venster bij opstarten verbergen" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Vensterpositie en -grootte herstellen" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Voorgrond:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Achtergrond:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Ondoorzichtigheid van achtergrond:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Kleuren" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Duur van bewaking:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Tussenpoze voor bijwerken:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Metingen" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Min" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Max" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "seconde(n)" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "minu(u)t(en)" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Tussenpoze voor bijwerken van meting:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Logboeken bijhouden inschakelen voor sensoren" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Tussenpoze voor bijhouden van logboeken voor sensoren:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "Script dat wordt uitgevoerd wanneer er een alarm plaatsvindt:" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Sensoren" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 #, fuzzy msgid "Psensor has not been build with NVCtrl support" msgstr "" "Psensor os niet gecompileerd met ondersteuning voor sensoren op afstand." #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 #, fuzzy msgid "Psensor has not been build with ATI ADL support" msgstr "" "Psensor os niet gecompileerd met ondersteuning voor sensoren op afstand." #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 #, fuzzy msgid "Psensor has not been build with gtop2 support" msgstr "" "Psensor os niet gecompileerd met ondersteuning voor sensoren op afstand." #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 #, fuzzy msgid "Psensor has not been build with libatasmart support" msgstr "" "Psensor os niet gecompileerd met ondersteuning voor sensoren op afstand." #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 #, fuzzy msgid "Psensor has not been build with udisks2 support" msgstr "" "Psensor os niet gecompileerd met ondersteuning voor sensoren op afstand." #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Sensorvoorkeuren bewerken" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Naam" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Soort:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "N.v.t." #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Chip:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Naam:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Id:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Sensor-curve tekenen" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Kleur:" #: src/glade/sensor-edit.glade:448 #, fuzzy msgid "Display sensor in the list of sensors" msgstr "Sensor tonen in het menu van de Toepassingsindicator" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Bureaubladmeldingen inschakelen" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Drempel voor hoog:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Drempel voor laag:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Alarm" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Sensor tonen in het menu van de Toepassingsindicator" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 #, fuzzy msgid "Psensor has not been build with AppIndicator support" msgstr "" "Psensor os niet gecompileerd met ondersteuning voor sensoren op afstand." #: src/glade/sensor-edit.glade:719 #, fuzzy msgid "Display sensor in the label (experimental)" msgstr "Sensor tonen in het menu van de Toepassingsindicator" #: src/glade/sensor-edit.glade:752 #, fuzzy msgid "Application Indicator" msgstr "Ubuntu Toepassingsindicator" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: kan ADL-bibliotheekbestand niet vinden" #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: ontbrekende ADL's API." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: kon ADL niet initialiseren." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: kan het aantal videokaarten niet bepalen." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "Aantal AMD/ATI-videokaarten: %d" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "Aantal actieve AMD/ATI-videokaarten: %d" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Kon logboeken bijhouden niet inschakelen voor sensoren." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "" #: src/lib/hdd_atasmart.c:153 #, fuzzy, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "atasmart: sk_disk_open() mislukking: %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: kon contactpunt niet openen." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: kon verbinding niet openen." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: verkeerde tekenreeks: %s." #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: kan waarde van subfunctie %s niet bepalen: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "%s: verkeerd functietype." #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s: opstartfout: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Kan logboekbestand niet openen: %s" #: src/lib/nvidia.c:69 #, fuzzy, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "Kon Nvidia-informatie niet ophalen." #: src/lib/nvidia.c:74 #, fuzzy, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "Kon Nvidia-informatie niet ophalen." #: src/lib/nvidia.c:240 #, fuzzy, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "Kon Nvidia-informatie niet ophalen." #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Kan verbinding met X11-server niet openen." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: Kon Nvidia-informatie niet ophalen." #: src/lib/nvidia.c:394 #, fuzzy, c-format msgid "%s: Failed to retrieve number of fans." msgstr "Kon Nvidia-informatie niet ophalen." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "RPM" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "gettimeofday (tijdbepaling) is mislukt." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "Variabele voor HOME niet ingesteld." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Logboekbestand van sensor is al geopend." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "Kan logboekbestand van sensor niet openen: %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "Logboekbestand van sensor niet geopend." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "Logboekbestand van sensor niet geopend, kan niet sluiten." #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Auteursrecht (C) %s jeanfi@gmail.com\n" "Licentie GPLv2: GNU GPL versie 2 of nieuwer \n" "Dit is vrije programmatuur: u mag hem wijzigen en doorgeven.\n" "Er zit geen garantie op, voor zover de wet dat toestaat.\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Gebruik: %s [OPTIE]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor is een GTK+ toepassing voor het bewaken van apparatuursensoren, " "inclusief temperaturen en ventilatorsnelheden." #: src/main.c:79 msgid "Options:" msgstr "Opties:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help toon deze hulpinformatie en sluit af\n" " -v, --version toon versie-informatie en sluit af" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL het webadres van de psensor-server,\n" " voorbeeld: http://hostname:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr "" " -n, --new-instance forceer het aanmaken van een nieuwe Psensor-toepassing" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL stel het foutopsporingsniveau in, integer tussen 0 en 3" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Meld fouten aan: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "Webpagina van %s: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "" "Psensor os niet gecompileerd met ondersteuning voor sensoren op afstand." #: src/main.c:472 msgid "Enables debug mode." msgstr "Schakelt foutopsporingsmodus in." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Probeer '%s --help' voor meer informatie.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Er bestaat reeds een instantie van Psensor." #: src/main.c:539 #, fuzzy msgid "Failed to create thread for monitoring sensors" msgstr "Kon geen webserver maken." #: src/rsensor.c:115 #, fuzzy, c-format msgid "%s: Fail to connect to: %s" msgstr "Kon niet verbinden met: %s" #: src/rsensor.c:152 #, fuzzy, c-format msgid "%s: Invalid content: %s" msgstr "Ongeldige inhoud: %s" #: src/rsensor.c:190 #, fuzzy, c-format msgid "%s: Invalid JSON: %s" msgstr "Ongeldige JSON: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

Stilzetting van server verzocht

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Pagina niet gevonden - ga naar Hoofdpagina" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-server is een HTTP-server voor het bewaken van apparatuursensoren op " "afstand." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\ttoon deze hulptekst en sluit af\n" " -v, --version\t\ttoon versie-infomatie en sluit af" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\twebserverpoort\n" " -w,--wdir=DIR\t\tmap die webserverpagina's bevat" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL stel het foutopsporingsniveau in, integer tussen 0 " "en 3" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=PATH stel het logboekbestand in op PATH" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr " --sensor-log-file=PATH stel het sensorlogboekbestand in op PATH" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" " --sensor-log-interval=S stel de tussenpoze voor het sensorlogboek in op S " "(seconden)" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "Kan logboekbestand niet openen: %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "HTTP-verzoek: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Schakelt foutopsporingsmodus in: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Geen sensoren bespeurd." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Kon geen webserver maken." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Webserver gestart op poort: %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW-map: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Kon logboeken bijhouden niet inschakelen voor sensoren." #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "Psensor is een GTK+ toepassing voor het bewaken van apparatuursensoren" #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "Auteursrecht(c) 2010-2014 jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "Over Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " Pjotr12345 https://launchpad.net/~computertip" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Thuispagina van Psensor" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Kon pictogram van Psensor niet laden." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 #, fuzzy msgid "Select sensor color" msgstr "Kies voorgrondkleur" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "Kon logboeken bijhouden niet inschakelen voor sensoren." #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Temperatuurwaarschuwing" #: src/ui_notify.c:79 #, fuzzy msgid "Fan speed alert" msgstr "Ventilatorwaarschuwing" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Onbekend" #~ msgid "Sensor Information" #~ msgstr "Sensorinformatie" #~ msgid "" #~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU " #~ "temperature." #~ msgstr "" #~ "Het niet-vrije Nvidia-stuurprogramma wordt niet gebruikt of het kan de " #~ "temperatuur van de grafische Nvidia-chip niet bepalen." psensor-1.2.1/po/tr.po0000664000175000017500000005447113675227773011570 00000000000000# Turkish translation for psensor # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-20 11:27+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Turkish \n" "Language: tr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, fuzzy, c-format msgid "Failed to create the directory %s: %s" msgstr "Web sunucusu oluşturulamadı." #: src/cfg.c:550 #, fuzzy, c-format msgid "Failed to load configuration file %s: %s" msgstr "Algılayıcıların günlük kaydı etkinleştirilemedi." #: src/cfg.c:575 #, fuzzy, c-format msgid "Failed to save configuration file %s." msgstr "Algılayıcıların günlük kaydı etkinleştirilemedi." #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "Hakkında" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Tercihler" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Çıkış" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Algılayıcı Tercihleri" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - Sıcaklık Gözlemleyici" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Yardım" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Algılayıcı" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Değer" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Asgari" #: src/glade/psensor.glade:258 msgid "Max" msgstr "Azami" #: src/glade/psensor.glade:269 msgid "Color" msgstr "Renk" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Grafik" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Göster" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "Sağ" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "Sol" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "Üstte" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "Alt" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Tercihleri Düzenle" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Pencere çubuğunu gizle" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Pencereyi aşağıda tut" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Menüyü etkinleştir" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Unity Başlatıcı sayacını etkinleştir" #: src/glade/psensor-pref.glade:190 #, fuzzy msgid "Psensor has not been build with Unity Launcher support" msgstr "Psensor, uzaktan algılayıcı desteği ile derlenmemiştir." #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "Celsius" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "Fahrenhayt" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Sıcaklık birimi:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Gözlemleyici tablosunun konumu:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Arayüz" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "Oturum başlangıcında başlat" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Başlangıçta pencereyi gizle" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Pencere konumunu ve boyutunu yeniden yükle" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "Başlangıç" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Önplan:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Arkaplan:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Arkaplan saydamlığı:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Renk" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Gözlemleme süresi:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Güncelleme aralığı:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Ölçümler" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Asgari" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Azami" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "saniye" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "dakika" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Ölçüm güncelleştirme aralığı:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Algılayıcı günlük kaydını etkinleştir" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Algılayıcı günlük kaydı aralığı:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "Alarm çaldığında betik çalıştırılır:" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Algılayıcılar" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 #, fuzzy msgid "Psensor has not been build with NVCtrl support" msgstr "Psensor, uzaktan algılayıcı desteği ile derlenmemiştir." #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 #, fuzzy msgid "Psensor has not been build with ATI ADL support" msgstr "Psensor, uzaktan algılayıcı desteği ile derlenmemiştir." #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 #, fuzzy msgid "Psensor has not been build with gtop2 support" msgstr "Psensor, uzaktan algılayıcı desteği ile derlenmemiştir." #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 #, fuzzy msgid "Psensor has not been build with libatasmart support" msgstr "Psensor, uzaktan algılayıcı desteği ile derlenmemiştir." #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 #, fuzzy msgid "Psensor has not been build with udisks2 support" msgstr "Psensor, uzaktan algılayıcı desteği ile derlenmemiştir." #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Algılayıcı Tercihlerini Düzenle" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Ad" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Tür:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "Bilinmeyen" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Yonga:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "İsim:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Kimlik:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Algılayıcı eğrisini çiz" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Renk :" #: src/glade/sensor-edit.glade:448 #, fuzzy msgid "Display sensor in the list of sensors" msgstr "Algılayıcıları menüde göster" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Masaüstü bildirimlerini etkinleştir" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Yüksek eşik:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "-1" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Düşük eşik:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Alarm" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Algılayıcıları menüde göster" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 #, fuzzy msgid "Psensor has not been build with AppIndicator support" msgstr "Psensor, uzaktan algılayıcı desteği ile derlenmemiştir." #: src/glade/sensor-edit.glade:719 #, fuzzy msgid "Display sensor in the label (experimental)" msgstr "Etikette algılayıcı göster (deneysel)" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "Uygulama Göstergesi" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: ADL kütüphanesi bulunamadı." #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: ADL'nin API'sı kayıp." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: ADL başlatılamadı." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: bağdaştırıcıların sayısı alınamadı." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "AMD/ATI bağdaştırıcı sayısı: %d" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "Etkin AMD/ATI bağdaştırıcı sayısı: %d" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Algılayıcıların günlük kaydı etkinleştirilemedi." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "Disk" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s: sk_disk_open() hatası: %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: yuva açılamadı" #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: bağlantı açılamadı." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: yanlış dizi: %s." #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: %s alt özelliğinin değeri alınamıyor: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "%s: yanlış özellik tipi." #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "İntel işlemci" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "AMD işlemci" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "NVIDIA Ekran Kartı" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "VIA İşlemci" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s: başlatma hatası: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "İşlemci" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Günlükleme dosyası açılamadı: %s" #: src/lib/nvidia.c:69 #, fuzzy, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "NVIDIA bilgisi alınamıyor." #: src/lib/nvidia.c:74 #, fuzzy, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "NVIDIA bilgisi alınamıyor." #: src/lib/nvidia.c:240 #, fuzzy, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "NVIDIA bilgisi alınamıyor." #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: X11 sunucusu bağlantısı açılamıyor." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: NVIDIA bilgisi alınamıyor." #: src/lib/nvidia.c:394 #, fuzzy, c-format msgid "%s: Failed to retrieve number of fans." msgstr "NVIDIA bilgisi alınamıyor." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "RPM" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "gettimeofday başarısız." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "HOME değişkeni ayarlanmamış." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Algılayıcı günlük kaydı dosyası zaten açık." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "Algılayıcı günlük kaydı dosyası açılamıyor: %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "Algılayıcı günlük kaydı dosyası açık değil." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "Algılayıcı günlük kaydı açık değil, kapatılamıyor." #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Telif Hakkı (C) %s jeanfi@gmail.com\n" "Lisans GPLv2: GNU GPL 2. sürümü veya daha yenisi \n" "Bu bir özgür yazılımdır: değiştirmekte ve yeniden dağıtmakta özgürsünüz.\n" "Yasaların izin verdiği çerçevede hiçbir garantisi YOKTUR.\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Kullanım: %s [SEÇENEK]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor, sıcaklık ve fan hızı da dahil olmak üzere donanım algılayıcılarını " "gözlemleyen bir GTK+ uygulamasıdır." #: src/main.c:79 msgid "Options:" msgstr "Seçenekler:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help yardımı göster ve çık\n" " -v, --version sürüm bilgisini göster ve çık" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL psensor sunucusunun bağlantısı,\n" " example: http://hostname:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr "" " -n, --new-instance yeni bir Psensor uygulaması oluşturulmasını zorla" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL hata ayıklama seviyesin ayarla, 0 ve 3 arasında tamsayı" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Hataları rapor et:%s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s ana sayfa: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "Psensor, uzaktan algılayıcı desteği ile derlenmemiştir." #: src/main.c:472 msgid "Enables debug mode." msgstr "Hata ayıklama modunu etkinleştirir." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Daha fazla bilgi için `%s --help' yazın.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Bir Psensor örneği zaten mevcut." #: src/main.c:539 #, fuzzy msgid "Failed to create thread for monitoring sensors" msgstr "Web sunucusu oluşturulamadı." #: src/rsensor.c:115 #, fuzzy, c-format msgid "%s: Fail to connect to: %s" msgstr "Şuna bağlanamadı: %s" #: src/rsensor.c:152 #, fuzzy, c-format msgid "%s: Invalid content: %s" msgstr "Geçersiz içerik: %s" #: src/rsensor.c:190 #, fuzzy, c-format msgid "%s: Invalid JSON: %s" msgstr "Geçersiz JSON: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

Sunucu durdurma istendi

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Sayfa bulunamadı - Şuraya gidin Main page" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-sunucusu, donanım algılayıcılarını uzaktan gözlemleme amaçlı bir " "HTTP sunucusudur." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\tyardımı göster ve çık\n" " -v, --version\t\tsürüm bilgisini göster ve çık" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\twebsunucu bağlantı noktası\n" " -w,--wdir=DIR\t\tdizin websunucusu sayfaları içerir" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL hata ayıklama seviyesini ayarla, 0 ve 3 arasında bir " "tamsayı" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=PATH günlük kaydı dosyasını PATH olarak ayarla" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr "" " --sensor-log-file=PATH algılayıcı günlük kaydı dosyasını PATH olarak ayarla" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" " --sensor-log-interval=S algılayıcı günlük kaydı aralığını S (saniye) " "olarak ayarla" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "Günlükleme dosyası açılamadı: %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "HTTP İsteği: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Hata ayıklama modunu etkinleştirir: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Hiçbir algılayıcı bulunamadı." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Web sunucusu oluşturulamadı." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Web sunucusu şu noktadan başlatıldı: %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW dizini: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Algılayıcıların günlük kaydı etkinleştirilemedi." #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "" "Psensor, donanım algılayıcılarının gözlenmesi amaçlı bir GTK+ uygulamasıdır" #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "Telif Hakkı(c) 2010-2014 jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "Psensor Hakkında" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " zeugma https://launchpad.net/~sunder67\n" " İbrahim Çelik https://launchpad.net/~ibrahimcelik89" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Psensor Anasayfası" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Psensor simgesi yüklenemedi." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 #, fuzzy msgid "Select sensor color" msgstr "Önplan rengini seçin" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "Algılayıcıların günlük kaydı etkinleştirilemedi." #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Sıcaklık uyarısı" #: src/ui_notify.c:79 #, fuzzy msgid "Fan speed alert" msgstr "Fan uyarısı" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Bilinmeyen" #~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type." #~ msgstr "lmsensor: lmsensor_psensor_create hatası: yanlış özellik tipi." #~ msgid "The configuration file does not exist." #~ msgstr "Yapılandırma dosyası mevcut değil." #~ msgid "Sensor Information" #~ msgstr "Algılayıcı Bilgisi" #~ msgid "" #~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU " #~ "temperature." #~ msgstr "" #~ "NVIDIA kapalı kaynak sürücüsü kullanılmıyor veya NVIDIA ekran kartı " #~ "sıcaklığı alınamıyor." psensor-1.2.1/po/sl.gmo0000664000175000017500000000114013676133402011670 00000000000000,<PQ{dtranslator-creditsProject-Id-Version: psensor Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-11 21:22+0000 Last-Translator: Jean-Philippe Orsini Language-Team: Slovenian Language: sl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) Launchpad Contributions: Jean-Philippe Orsini https://launchpad.net/~jfi Sasa Batistic https://launchpad.net/~sasa-batisticpsensor-1.2.1/po/ru.po0000664000175000017500000006313613675227773011567 00000000000000# Russian translations for psensor package. # Copyright (C) 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # Translators: # Dmitry Serov, 2014 # Grigorii Chirkov , 2016. msgid "" msgstr "" "Project-Id-Version: psensor 0.7.0.x\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2016-02-07 23:08+0300\n" "Last-Translator: Grigorii Chirkov \n" "Language-Team: Russian\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Poedit 1.8.4\n" #: src/cfg.c:503 #, c-format msgid "Failed to create the directory %s: %s" msgstr "Не удалось создать каталог %s: %s" #: src/cfg.c:550 #, c-format msgid "Failed to load configuration file %s: %s" msgstr "Не удалось загрузить файл конфигурации %s: %s" #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "Не удалось сохранить файл конфигурации %s." #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "О программе" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Параметры" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Выход" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Параметры датчиков" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - монитор температуры" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Справка" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Датчик" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Значение" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Мин." #: src/glade/psensor.glade:258 msgid "Max" msgstr "Макс." #: src/glade/psensor.glade:269 msgid "Color" msgstr "Цвет" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Диаграмма" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Показать" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "Справа" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "Слева" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "Сверху" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "Снизу" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Изменить параметры" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Скрывать рамку окна" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Удерживать окно под другими" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Включить меню" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Включить счетчик в панели запуска Unity" #: src/glade/psensor-pref.glade:190 #, fuzzy msgid "Psensor has not been build with Unity Launcher support" msgstr "Psensor не был собран с поддержкой удалённых датчиков." #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "Цельсия" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "Фаренгейта" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Единицы измерения температуры:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Положение таблицы датчиков:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Внешний вид" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "Запускать автоматически при старте сессии" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Скрывать окно при запуске" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Восстанавливать положение и размер окна" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "Автозапуск" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Передний план:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Фон:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Непрозрачность фона:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Цвета" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Время мониторинга:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Интервал обновления:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Замеры" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Мин." #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Макс." #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "сек." #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "мин." #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "Сглаживать графики" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "Графики" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Интервал обновления замеров:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Вести журнал событий датчиков" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Интервал ведения журнала событий датчиков:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "Скрипт, выполняемый при выдаче уведомления:" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Датчики" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "Включить поддержку lm-sensors" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "Включить поддержку NVCtrl (NVidia)" #: src/glade/psensor-pref.glade:974 #, fuzzy msgid "Psensor has not been build with NVCtrl support" msgstr "Psensor не был собран с поддержкой удалённых датчиков." #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "Включить поддержку ATI ADL" #: src/glade/psensor-pref.glade:993 #, fuzzy msgid "Psensor has not been build with ATI ADL support" msgstr "Psensor не был собран с поддержкой удалённых датчиков." #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "Включить поддержку gtop2" #: src/glade/psensor-pref.glade:1012 #, fuzzy msgid "Psensor has not been build with gtop2 support" msgstr "Psensor не был собран с поддержкой удалённых датчиков." #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "Включить поддержку демона hddtemp" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "Включить поддержку libatasmart" #: src/glade/psensor-pref.glade:1049 #, fuzzy msgid "Psensor has not been build with libatasmart support" msgstr "Psensor не был собран с поддержкой удалённых датчиков." #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "Включить поддержку udisks2" #: src/glade/psensor-pref.glade:1068 #, fuzzy msgid "Psensor has not been build with udisks2 support" msgstr "Psensor не был собран с поддержкой удалённых датчиков." #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "Изменения будут применены после перезапуска psensor." #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "Жесткий диск" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "Использование ЦП и ОЗУ" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "ГП (проприетарный драйвер)" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "Материнская плата, ЦП и ГП" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "Поддержка" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Изменить параметры датчика" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Название" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Тип:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "Н/Д" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Микросхема:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Название:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Идентификатор:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "Подробности" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Рисовать график датчика" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Цвет:" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "Показать датчик в списке датчиков" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Включить уведомления" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Высший порог:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "0" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "-1" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Низший порог:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Уведомление" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Показать датчик в индикаторе меню приложений" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 #, fuzzy msgid "Psensor has not been build with AppIndicator support" msgstr "Psensor не был собран с поддержкой удалённых датчиков." #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "Показать датчик в области уведомлений (экспериментально)" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "Индикатор приложения" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: библиотека ADL не найдена." #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: отсутствует API ADL." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: не удалось инициализировать ADL." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: ошибка определения количества адаптеров." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "Количество адаптеров AMD/ATI: %d" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "Количество активных адаптеров AMD/ATI: %d" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Не удалось сохранить файл конфигурации %s." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "Диск" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s: ошибка sk_disk_open(): %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: не удалось открыть сокет." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: не удалось открыть соединение." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: неправильная строка: %s." #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: Не удалось получить значение подмодуля %s: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "%s: Неверный тип модуля." #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "ЦП Intel" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "ЦП AMD" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "ГП NVIDIA" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "ЦП VIA" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "ACPI" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s: ошибка инициализации: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "Загрузка ЦП" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "ЦП" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "Использование ОЗУ" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "ОЗУ" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Ошибка открытия файла журнала: %s" #: src/lib/nvidia.c:69 #, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "%s: Неизвестное название продукта ГП NVIDIA %d" #: src/lib/nvidia.c:74 #, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "%s: Не удалось получить информацию о названии продукта ГП NVIDIA %d" #: src/lib/nvidia.c:240 #, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "%s: Не удалось получить информацию о типе %x ГП NVIDIA %d" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Ошибка открытия соединения к серверу X11." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: Не удалось получить информацию NVIDIA." #: src/lib/nvidia.c:394 #, c-format msgid "%s: Failed to retrieve number of fans." msgstr "%s: Не удалось получить информацию о количестве вентиляторов." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "об/мин" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "ошибка gettimeofday." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "Переменная HOME не установлена." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Файл журнала датчика уже открыт." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "Не удалось открыть файл журнала датчика: %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "Файл журнала датчика не открыт." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "Файл журнала датчика не открыт, не удалось закрыть." #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright (C) %s jeanfi@gmail.com\n" "Лицензия GPLv2: GNU GPL версии 2 или выше \n" "Это свободное программное обеспечение, вы можете модифицировать и " "распространять его.\n" "На него не предоставляется никаких гарантий в мере, предусмотренной " "законодательством.\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Использование: %s [КЛЮЧ]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor — это GTK+ приложение для мониторинга аппаратных датчиков, включая " "температуру и скорость вентилятора." #: src/main.c:79 msgid "Options:" msgstr "Опции:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help показать эту справку и выйти\n" " -v, --version показать версию и выйти" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL URL psensor-сервера, пример: http://hostname:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr "" " -n, --new-instance принудительно запускает новую копию программы Psensor" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr " -d, --debug=УРОВЕНЬ установить уровень отладки, целое между 0 и 3" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Сообщайте об ошибках на: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s домашняя страница: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "Psensor не был собран с поддержкой удалённых датчиков." #: src/main.c:472 msgid "Enables debug mode." msgstr "Включает режим отладки." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Попробуйте `%s --help' для дополнительной информации.↵\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Копия Psensor уже запущена." #: src/main.c:539 #, fuzzy msgid "Failed to create thread for monitoring sensors" msgstr "Не удалось создать веб-сервер." #: src/rsensor.c:115 #, c-format msgid "%s: Fail to connect to: %s" msgstr "%s: Ошибка подключения к: %s" #: src/rsensor.c:152 #, c-format msgid "%s: Invalid content: %s" msgstr "%s: Неправильное содержимое: %s" #: src/rsensor.c:190 #, c-format msgid "%s: Invalid JSON: %s" msgstr "%s: Неправильный JSON: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

Запрошена остановка сервера

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Страница не найдена - Перейти к Главной странице

" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-server ‌— это HTTP-сервер для удалённого мониторинга аппаратных " "датчиков." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\tпоказать эту справку и выйти\n" " -v, --version\t\tпоказать версию и выйти" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\tпорт веб-сервера\n" " -w,--wdir=DIR\t\tдиректория для страниц веб-сервера" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr " -d, --debug=LEVEL установить уровень отладки, целое между 0 и 3" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=ПУТЬ установить ПУТЬ к файлу журнала" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr " --sensor-log-file=ПУТЬ установить ПУТЬ к файлу журнала датчика" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" " --sensor-log-interval=ПЕРИОД установить ПЕРИОД журналирования датчиков (в " "секундах)" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "Ошибка открытия файла журнала: %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "HTTP запрос: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Включает режим отладки: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Датчики не обнаружены." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Не удалось создать веб-сервер." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Веб-сервер запущен на порту: %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW-каталог: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Не удалось включить журналирование датчиков." #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "Psensor — это приложение GTK+ для мониторинга аппаратных сенсоров" #: src/ui.c:216 msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "" #: src/ui.c:222 msgid "About Psensor" msgstr "О Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Contributions:\n" " Dmitry Serov https://launchpad.net/~dmitri-s93\n" " Eugene Marshal https://launchpad.net/~lowrider\n" " Ilya Volchanetskiy https://launchpad.net/~volchanetskiy\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " Grigorii Chirkov" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Домашняя страница Psensor" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Не удалось загрузить значок Psensor." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "Скрыть" #: src/ui_sensorlist.c:305 msgid "Select sensor color" msgstr "Выбор цвета датчика" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "Не удалось включить журналирование датчиков." #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Уведомление температуры" #: src/ui_notify.c:79 msgid "Fan speed alert" msgstr "Уведомление вентилятора" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Неизвестно" #~ msgid "Sensor Information" #~ msgstr "Информация датчика" psensor-1.2.1/po/POTFILES.in0000664000175000017500000000110013675227622012326 00000000000000src/cfg.c src/glade/psensor.glade src/glade/psensor-appindicator.glade src/glade/psensor-pref.glade src/glade/sensor-edit.glade src/graph.c src/lib/amd.c src/lib/bcm2835.c src/lib/hdd_atasmart.c src/lib/hdd_hddtemp.c src/lib/lmsensor.c src/lib/pgtop2.c src/lib/plog.c src/lib/nvidia.c src/lib/psensor.c src/lib/pudisks2.c src/lib/slog.c src/main.c src/rsensor.c src/server/server.c src/ui.c src/ui_sensorlist.c src/ui_appindicator.c src/ui_color.c src/ui_graph.c src/ui_notify.c src/ui_pref.c src/ui_sensorlist.c src/ui_sensorpref.c tests/test_psensor_type_to_unit_str.cpsensor-1.2.1/po/el.gmo0000664000175000017500000000056713676133402011666 00000000000000$,8=9Project-Id-Version: psensor 1.2.0 Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2016-06-30 17:02+0200 Last-Translator: Language-Team: Greek Language: el MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); psensor-1.2.1/po/sr.po0000664000175000017500000004164513675227773011566 00000000000000# Serbian translation for psensor # Copyright (c) 2011 Rosetta Contributors and Canonical Ltd 2011 # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-11 21:25+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, c-format msgid "Failed to create the directory %s: %s" msgstr "" #: src/cfg.c:550 #, c-format msgid "Failed to load configuration file %s: %s" msgstr "" #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "" #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "О програму" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Поставке" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Изађи" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Сензор" #: src/glade/psensor.glade:236 msgid "Value" msgstr "" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Најмање" #: src/glade/psensor.glade:258 msgid "Max" msgstr "Највише" #: src/glade/psensor.glade:269 msgid "Color" msgstr "У боји" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Укључено" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "" #: src/glade/psensor-pref.glade:190 msgid "Psensor has not been build with Unity Launcher support" msgstr "" #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "У боји" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Сензор" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 msgid "Psensor has not been build with NVCtrl support" msgstr "" #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 msgid "Psensor has not been build with ATI ADL support" msgstr "" #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 msgid "Psensor has not been build with gtop2 support" msgstr "" #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 msgid "Psensor has not been build with libatasmart support" msgstr "" #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 msgid "Psensor has not been build with udisks2 support" msgstr "" #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "Недоступно" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 msgid "Psensor has not been build with AppIndicator support" msgstr "" #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "" #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "" #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "" #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "" #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, c-format msgid "Failed to get content of file %s." msgstr "" #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "" #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "" #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "" #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "" #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "" #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "" #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "" #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "" #: src/lib/nvidia.c:69 #, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "" #: src/lib/nvidia.c:74 #, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "" #: src/lib/nvidia.c:240 #, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "" #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "" #: src/lib/nvidia.c:394 #, c-format msgid "%s: Failed to retrieve number of fans." msgstr "" #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "" #: src/lib/psensor.c:428 msgid "%" msgstr "" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "" #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "" #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "" #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "" #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "" #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "" #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Употреба: %s [ОПЦИЈА]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" #: src/main.c:79 msgid "Options:" msgstr "Опције:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr "" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Пријавите грешку на: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s матична страна: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "" #: src/main.c:472 msgid "Enables debug mode." msgstr "" #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Покушајте„%s --help“ за више информација.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "" #: src/main.c:539 msgid "Failed to create thread for monitoring sensors" msgstr "" #: src/rsensor.c:115 #, c-format msgid "%s: Fail to connect to: %s" msgstr "" #: src/rsensor.c:152 #, c-format msgid "%s: Invalid content: %s" msgstr "" #: src/rsensor.c:190 #, c-format msgid "%s: Invalid JSON: %s" msgstr "" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr "" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr "" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, c-format msgid "Cannot get real path of %s" msgstr "" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "" #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "" #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "" #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "" #: src/ui.c:216 msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "" #: src/ui.c:222 msgid "About Psensor" msgstr "О Псензору" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " Мирослав Николић https://launchpad.net/~lipek" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Матична страница Псензора" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "" #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 #, fuzzy msgid "Select sensor color" msgstr "Одаберите боју текста" #: src/ui_appindicator.c:148 #, c-format msgid "Failed to load glade file %s: %s" msgstr "" #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "" #: src/ui_notify.c:79 msgid "Fan speed alert" msgstr "" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "" #~ msgid "_Preferences" #~ msgstr "_Поставке" #~ msgid "_About" #~ msgstr "О _програму" #~ msgid "_Quit" #~ msgstr "_Изађи" psensor-1.2.1/po/hr.po0000664000175000017500000005345413675227773011554 00000000000000# Croatian translation for psensor # Copyright (c) 2014 Rosetta Contributors and Canonical Ltd 2014 # This file is distributed under the same license as the psensor package. # Jean-Philippe Orsini , 2014. # msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-21 06:25+0000\n" "Last-Translator: gogo \n" "Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, c-format msgid "Failed to create the directory %s: %s" msgstr "Neuspjelo stvaranje direktorija %s: %s" #: src/cfg.c:550 #, c-format msgid "Failed to load configuration file %s: %s" msgstr "Neuspjelo učitavanje datoteke podešavanja %s: %s" #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "Neuspjelo spremanje datoteke podešavanja %s." #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "O programu" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Osobitosti" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Zatvori" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Osobitosti senzora" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - Nadziratelj temperature" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Pomoć" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Senzor" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Vrijednost" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Min" #: src/glade/psensor.glade:258 msgid "Max" msgstr "Maks" #: src/glade/psensor.glade:269 msgid "Color" msgstr "Boja" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Grafikon" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Prikaži" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "Desno" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "Lijevo" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "Vrh" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "Dno" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Uredi osobitosti" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Sakrij ukras prozora" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Drži prozor ispod" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Omogući izbornik" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Omogući brojač Unity pokretača" #: src/glade/psensor-pref.glade:190 #, fuzzy msgid "Psensor has not been build with Unity Launcher support" msgstr "Psensor nije kompajliran s udaljenom podrškom senzora." #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "Celzijus" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "Farenhajt" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Jedinica temperature:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Položaj okvira senzora:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Sučelje" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "Pokreni pri pokretanju sesije" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Sakrij prozor pri pokretanju" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Vrati položaj i veličinu prozora" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "Pokretanje" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Prednji plan:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Pozadina:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Prozirnost pozadine:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Boje" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Trajanje nadziranja:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Razdoblje ažuriranja:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Mjere" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Min" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Maks" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "sekunda(i)" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "minuta(e)" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "Zaglađene krivulje" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "Krivulje" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Razdoblje ažuriranja mjera:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Omogući zapisivanje sensora" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Razdoblje zapisivanja senzora:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "Skripta za izvršavanje kada se alarm upali" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Senzori" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "Omogući podršku za lm-sensors" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "Omogući podršku za NVCtrl (NVidia)" #: src/glade/psensor-pref.glade:974 #, fuzzy msgid "Psensor has not been build with NVCtrl support" msgstr "Psensor nije kompajliran s udaljenom podrškom senzora." #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "Omogući podršku za ATI ADL" #: src/glade/psensor-pref.glade:993 #, fuzzy msgid "Psensor has not been build with ATI ADL support" msgstr "Psensor nije kompajliran s udaljenom podrškom senzora." #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "Omogući podršku za gtop2" #: src/glade/psensor-pref.glade:1012 #, fuzzy msgid "Psensor has not been build with gtop2 support" msgstr "Psensor nije kompajliran s udaljenom podrškom senzora." #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "Omogući podršku za hddtemp daemon" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "Omogući podršku za libatasmart" #: src/glade/psensor-pref.glade:1049 #, fuzzy msgid "Psensor has not been build with libatasmart support" msgstr "Psensor nije kompajliran s udaljenom podrškom senzora." #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "Omogući podršku za udisks2" #: src/glade/psensor-pref.glade:1068 #, fuzzy msgid "Psensor has not been build with udisks2 support" msgstr "Psensor nije kompajliran s udaljenom podrškom senzora." #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "Promjene će biti primjenjene nakon ponovnog pokretanja psensora." #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "Čvrsti disk" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "Korištenje CPU-a i memorije" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "GPU s vlasničkim upravljačkim programima" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "Matična ploča, CPU i GPU" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Uredi osobitosti senzora" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Naziv" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Vrsta:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "Nedostupno" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Čip:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Naziv:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Id:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "Pojedinosti" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Iscrtavaj krivulju senzora" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Boja:" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "Prikaži senzor u popisu senzora" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Uključi obavijesti radne površine" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Gornja granica:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "0" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "-1" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Donja granica:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Alarm" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Prikaži senzor u izbrniku" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 #, fuzzy msgid "Psensor has not been build with AppIndicator support" msgstr "Psensor nije kompajliran s udaljenom podrškom senzora." #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "Prikaži senzor u oznaci (eksperimentalno)" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "Programičić pokazivača" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: nemogu pronaći ADL biblioteku." #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: nedostaje ADL API." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: neuspjelo pokretanje ADL-a." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: nemoguće je dobiti broj adaptera." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "Broj AMD/ATI adaptera: %d" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "Broj aktivnih AMD/ATI adaptera: %d" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Neuspjelo spremanje datoteke podešavanja %s." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "Disk" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s: sk_disk_open() neuspjelo: %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: neuspjelo otvaranje socketa." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: neuspjelo otvaranje povezivanja." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: pogrešan string: %s." #: src/lib/lmsensor.c:73 #, fuzzy, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: nemoguće dobivanje vrijednosti podznačajki %s: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "%s: pogrešna vrsta značajki." #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "Intel CPU" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "AMD CPU" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "NVIDIA GPU" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "VIA CPU" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "ACPI" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s: neuspjeh pokretanja: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "CPU" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "slobodna memorija" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "memorija" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Nemoguće otvaranje datoteke: %s" #: src/lib/nvidia.c:69 #, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "%s: Nepoznat naziv NVIDIA proizvoda za GPU %d" #: src/lib/nvidia.c:74 #, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "%s: Neuspjelo čitanje naziva NVIDIA proizvoda za GPU %d" #: src/lib/nvidia.c:240 #, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "%s: Neuspjelo čitanje mjernih jedinica %x za NVIDIA GPU %d" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Nemoguće povezivanje s X11 poslužiteljem." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: Neuspjelo primanje NVIDIA informacija." #: src/lib/nvidia.c:394 #, c-format msgid "%s: Failed to retrieve number of fans." msgstr "%s: NVIDIA: nuespjelo očitavanje broja ventilatora." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "Okr/min" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "dobivanje-vremena-dana neuspjelo." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "HOME varijabla nije postavljena." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Datoteka zapisa senzora je već otvorena." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "Nemoguće otvaranje datoteke zapisa senzora: %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "Datoteka zapisa senzora nije otvorena." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "Datoteka zapisa senzora nije otvorena, nemoguće zatvaranje." #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Autorsko pravo (C) %s jeanfi@gmail.com\n" "Licenca GPLv2: GNU GPL inačica 2 ili novija \n" "Ovo je slobodan softver: slobodno ga možete mijenjati i redistribuirati.\n" "Ne postoji nikakvo JAMSTVO, propisano zakonom.\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Upotreba: %s [MOGUĆNOST]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor je GTK+ aplikacija za nadziranje hardverskih senzora, koja uključuje " "temperature i brzinu okretaja ventilatora." #: src/main.c:79 msgid "Options:" msgstr "Mogućnosti:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help prikaz pomoći\n" " -v, --version prikaz informacije inačice" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL URL psensor-poslužitelja,\n" " npr: http://hostname:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr " -n, --new-instance prisili stvaranje nove Psensor aplikacije" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL postavi razinu otklanjanja greške, cijeli broj između " "0 i 3" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Prijavi grešku na: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s početna stranica: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "Psensor nije kompajliran s udaljenom podrškom senzora." #: src/main.c:472 msgid "Enables debug mode." msgstr "Omogućava način otklanjanja greške." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Pokušajte `%s --help` za više informacija.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Psensor primjerak je već pokrenut." #: src/main.c:539 msgid "Failed to create thread for monitoring sensors" msgstr "Neuspjelo stvaranje niza za nadziranje senzora" #: src/rsensor.c:115 #, fuzzy, c-format msgid "%s: Fail to connect to: %s" msgstr "Neuspjelo povezivanje s: %s" #: src/rsensor.c:152 #, fuzzy, c-format msgid "%s: Invalid content: %s" msgstr "Nevaljan sadržaj: %s" #: src/rsensor.c:190 #, fuzzy, c-format msgid "%s: Invalid JSON: %s" msgstr "Nevaljan JSON: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

Poslužitelj je prestao reagirat

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Stranica nije pronađena - Idite na Glavna " "stranica

" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-poslužitelj je HTTP poslužitelj za udaljeno nadziranje senzora " "hardvera." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\tprikazuje pomoć\n" " -v, --version\t\tprikazuje informacije o inačici" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\tulaz web poslužitelja\n" " -w,--wdir=DIR\t\tdirektorij sadrži stranice web poslužitelja" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL postavi razinu otklanjanja greške, cijeli broj " "između 0 i 3" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=PUTANJA postavite PUTANJU datoteke zapisa" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr " --sensor-log-file=PUTANJA postavite PUTANJU datoteke zapisa senzora" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" " --sensor-log-interval=S postavite trajanje zapisa senzora u S (sekunde)" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "Nemoguće otvaranje datoteke: %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "HTTP Zahtjev: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Omogućuje način otklanjanja greške: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Nema otkrivenih senzora." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Neuspjelo stvaranje Web poslužitelja." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Web poslužitelj pokrenut na ulazu: %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW direktorij: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Neuspjelo aktiviranje zapisivanja senzora." #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "Psensor je GTK+ aplikacija za nadziranje senzora hardvera." #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "Autorsko pravo(c) 2010-2014 jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "O Psensoru" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " gogo https://launchpad.net/~trebelnik-stefina" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Psensor web stranica" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Neuspjelo učitavanje ikone Psensora." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "Sakrij" #: src/ui_sensorlist.c:305 msgid "Select sensor color" msgstr "Odaberi boju senzora" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "Neuspjelo učitavanje datoteke podešavanja %s: %s" #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Upozorenje temperature" #: src/ui_notify.c:79 msgid "Fan speed alert" msgstr "Upozorenje brzine ventilatora" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Nepoznato" psensor-1.2.1/po/Makefile.in.in0000644000175000017500000003322113353521057013222 00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2006 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.16 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: all-@USE_NLS@ all-yes: stamp-po all-no: # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all $(mkdir_p) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: $(mkdir_p) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(MAKE) update-po @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && $(SHELL) ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: psensor-1.2.1/po/en@boldquot.header0000644000175000017500000000247113353521057014201 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # psensor-1.2.1/po/stamp-po0000664000175000017500000000001213676133402012226 00000000000000timestamp psensor-1.2.1/po/it.po0000664000175000017500000005374313675227773011560 00000000000000# Italian translations for psensor package. # Copyright (C) 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # msgid "" msgstr "" "Project-Id-Version: psensor 0.7.0.x\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-20 11:24+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Italian\n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, fuzzy, c-format msgid "Failed to create the directory %s: %s" msgstr "Impossibile creare il Web server." #: src/cfg.c:550 #, fuzzy, c-format msgid "Failed to load configuration file %s: %s" msgstr "Attivazione registro dei sensori fallita." #: src/cfg.c:575 #, fuzzy, c-format msgid "Failed to save configuration file %s." msgstr "Attivazione registro dei sensori fallita." #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "Informazioni su..." #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Preferenze" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Esci" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Preferenze Sensore" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - Monitor temperatura" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Aiuto" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Sensore" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Valore" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Minimo" #: src/glade/psensor.glade:258 msgid "Max" msgstr "Massimo" #: src/glade/psensor.glade:269 msgid "Color" msgstr "Colore" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Grafico" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Mostra" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "Destra" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "Sinistra" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "In Alto" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "In Basso" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Modifica le preferenze" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Nascondi le decorazioni della finestra" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Mantieni la finestra sotto" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Abilita il menù" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Abilita contatore nel Launcher Unity" #: src/glade/psensor-pref.glade:190 #, fuzzy msgid "Psensor has not been build with Unity Launcher support" msgstr "Psensor è stato compilato senza il supporto per sensori remoti." #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "Celsius" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "Fahrenheit" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Unità di misura della temperatura" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Posizione della tabella dei sensori" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Interfaccia" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "Lancia all'avvio" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Nascondi la finestra all'avvio" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Ripristina posizione e dimensione della finestra" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "Avvio" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Primo piano:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Sfondo:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Opacità dello sfondo:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Colori" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Durata del monitoraggio:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Intervallo di aggiornamento:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Misure" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Minimo" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Massimo" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "secondo/i" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "minuto/i" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Intervallo di aggiornamento delle misure" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Abilita registrazione sensori" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Intervallo registrazione sensori:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "Script eseguito quando un allarme viene attivato:" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Sensori" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 #, fuzzy msgid "Psensor has not been build with NVCtrl support" msgstr "Psensor è stato compilato senza il supporto per sensori remoti." #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 #, fuzzy msgid "Psensor has not been build with ATI ADL support" msgstr "Psensor è stato compilato senza il supporto per sensori remoti." #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 #, fuzzy msgid "Psensor has not been build with gtop2 support" msgstr "Psensor è stato compilato senza il supporto per sensori remoti." #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 #, fuzzy msgid "Psensor has not been build with libatasmart support" msgstr "Psensor è stato compilato senza il supporto per sensori remoti." #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 #, fuzzy msgid "Psensor has not been build with udisks2 support" msgstr "Psensor è stato compilato senza il supporto per sensori remoti." #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Modifica preferenze del sensore" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Nome" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Tipo:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "N/A" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Processore:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Nome:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Id:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Disegna curva" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Colore:" #: src/glade/sensor-edit.glade:448 #, fuzzy msgid "Display sensor in the list of sensors" msgstr "Mostra sensore nel menu" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Attiva le notifiche sul desktop" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Soglia verso l'alto" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "-1" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Soglia verso il basso" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Avviso" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Mostra sensore nel menu" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 #, fuzzy msgid "Psensor has not been build with AppIndicator support" msgstr "Psensor è stato compilato senza il supporto per sensori remoti." #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "Indicatore Applicazione" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: impossibile trovare la libreria ADL" #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: impossibile trovare l'API di ADL" #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: impossibile inizializzare ADL" #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: impossibile rilevare il numero di adattatori." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Attivazione registro dei sensori fallita." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "Disco" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s: errore sk_disk_open(): %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: impossibile aprire il socket." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: impossibile aprire la connessione." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: errore di stringa: %s" #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: impossibile rilevare il valore della sotto funzione %s: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "%s: tipo di funzione errata." #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "CPU Intel" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "CPU AMD" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "CPU NVIDIA" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "CPU VIA" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, fuzzy, c-format msgid "%s: initialization failure: %s." msgstr "lmsensor: inizializzazione fallita: %s" #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "CPU" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Impossibile aprire il file di log: %s" #: src/lib/nvidia.c:69 #, fuzzy, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "Impossibile recuperare informazioni da NVIDIA" #: src/lib/nvidia.c:74 #, fuzzy, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "Impossibile recuperare informazioni da NVIDIA" #: src/lib/nvidia.c:240 #, fuzzy, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "Impossibile recuperare informazioni da NVIDIA" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Impossibile connettersi al server X11." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: Impossibile recuperare informazioni da NVIDIA" #: src/lib/nvidia.c:394 #, fuzzy, c-format msgid "%s: Failed to retrieve number of fans." msgstr "Impossibile recuperare informazioni da NVIDIA" #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "RPM" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "gettimeofday fallito." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "Variabile HOME non impostata." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "File di registazione sensori già aperto." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "Impossibile aprire il file di registrazione sensori: %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "File di registazione sensori non aperto." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "Registro sensori non aperto, impossibile chiuderlo." #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright (C) %s jeanfi@gmail.com\n" "Licenza GPLv2: GNU GPL versione 2 o successiva \n" "Questo è software libero: sei libero di modificarlo e redistribuirlo.\n" "NON esiste GARANZIA, per gli scopi permessi dalla legge.\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Uso: %s [OPZIONE]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor è un'applicazione GTK+ per monitorare i sensori dell'hardware, " "incluse temperature e velocità delle ventole." #: src/main.c:79 msgid "Options:" msgstr "Opzioni:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help mostra questo help ed esce\n" " -v, --version mostra le informazioni sulla versione ed esce" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL URL del server psensor,\n" " esempio: http://hostname:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr "" " -n, --new-instance forza la creazione di una nuova applicazione Psensor" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL imposta il livello di debug, un intero compreso tra 0 e 3" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Segnalare i bug a: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s home page: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "Psensor è stato compilato senza il supporto per sensori remoti." #: src/main.c:472 msgid "Enables debug mode." msgstr "Abilita la modalità debug." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Usare '%s --help' per maggiori informazioni.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Esiste già un'istanza di Psensor" #: src/main.c:539 #, fuzzy msgid "Failed to create thread for monitoring sensors" msgstr "Impossibile creare il Web server." #: src/rsensor.c:115 #, fuzzy, c-format msgid "%s: Fail to connect to: %s" msgstr "Impossibile connettersi a: %s" #: src/rsensor.c:152 #, fuzzy, c-format msgid "%s: Invalid content: %s" msgstr "Conenuto non valido: %s" #: src/rsensor.c:190 #, fuzzy, c-format msgid "%s: Invalid JSON: %s" msgstr "JSON non valido: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

Arresto del server richiesto

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Pagina non trovata - Vai a Pagina principale" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-server è un server HTTP per il monitoraggio remoto di sensori " "hardware." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\tmostra questo help ed esce\n" " -v, --version\t\tmostra le informazioni sulla versione ed esce" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\tporta del server web\n" " -w,--wdir=DIR\t\tdirectory che contiene le pagine web" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL imposta il livello di debug, un intero compreso tra 0 e 3" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=PATH imposta il file di log su PATH" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr "" " --sensor-log-file=PATH imposta il file di registro dei sensori come PATH" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" " --sensor-log-interval=S imposta l'intervallo del registro di sensori come " "S (secondi)" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "Impossibile aprire il file di log: %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "HTTP Request: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Abilita modalità di debug: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Nessun sensore rilevato." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Impossibile creare il Web server." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Web server inizializzato sulla porta: %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW directory: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Attivazione registro dei sensori fallita." #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "Psensor è un'applicazione GTK+ per monitorare i sensori hardware" #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "Copyright(c) 2010-2014 jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "Informazioni su Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Andrea Bernini https://launchpad.net/~andrea-bernini\n" " Diego Pierotto https://launchpad.net/~gringo\n" " Gabriele https://launchpad.net/~deepdown23\n" " Jean-Philippe Orsini https://launchpad.net/~jfi" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Psensor Homepage" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Impossibile caricare l'icona di Psensor." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 #, fuzzy msgid "Select sensor color" msgstr "Colore di primo piano:" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "Attivazione registro dei sensori fallita." #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Allarme temperatura" #: src/ui_notify.c:79 #, fuzzy msgid "Fan speed alert" msgstr "Allarme ventola" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Sconosciuto" #~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type." #~ msgstr "lmsensor: lmsensor_psensor_create fallito: tipo di funzione errata." #~ msgid "Sensor Information" #~ msgstr "Informazioni sul Sensore" #~ msgid "" #~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU " #~ "temperature." #~ msgstr "" #~ "Driver proprietario NVIDIA non usato o impossibile rilevare la " #~ "temperatura della GPU NVIDIA." psensor-1.2.1/po/ru.gmo0000664000175000017500000004116013676133402011706 00000000000000d 889DrDB^?k0 E;Uh@B*V)*5;'&c*4TtJ6  "'JOW'v $ 8DKO dn *%-HZk ! 9Wt &%.(K%t ,CS W ak} 2%Qw  9=eX (%9@Sq" 5E&Ipv . 5 ?JM fF!!f8"o"##V$tr$$Ti%%+%T%MA&.&E&q'[v'o'%B(5h(K()(<)2Q)0)$).) * **U***++3+8+2A+Qt+>+$,*, @,'K,s,',&,, ,,),-;1-Nm---- - --//0i 0>t0S0,1#412X1D1171+"23N2)282/2.3+D3+p3.33S37448l4<4O4L25-550556 6C6Y6 q6$~6/666 773)7N]7 77 757 88"%8/H8x8 ~888)838D 9 P93\999/9)9]:pn:: ; ;0;J;P6<$< <#<;<9=]S==O=>#!>E>-Z>9>[> ?^+????&?-?@@/@6F@}@@!@@@@ @@xAAP@[Iv-0;+ \kYAKN! }TM|s:l/GofH<d{91m% _X8^`qWVBi. $pg)5n3 (ce?xJDSFbuQLCzh>2~*,a"UR&]# y6wZ'4rEjtO=7 --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Fail to connect to: %s%s: Failed to retrieve NVIDIA information.%s: Failed to retrieve NVIDIA product name for GPU %d%s: Failed to retrieve measure of type %x for NVIDIA GPU %d%s: Failed to retrieve number of fans.%s: Invalid JSON: %s%s: Invalid content: %s%s: Unknown NVIDIA product name for GPU %d%s: Wrong feature type.%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: sk_disk_open() failure: %s.%s: wrong string: %s.-10

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.ACPIAMD CPUAMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmApplication IndicatorBackground opacity:Background:BottomCPUCPU and memory usageCPU usageCannot open log file: %sCannot open sensor log file: %s.CelsiusChip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. CurvesDetailsDiskDisplay sensor in the label (experimental)Display sensor in the list of sensorsDisplay sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnable support of ATI ADLEnable support of NVCtrl (NVidia)Enable support of gtop2Enable support of hddtemp daemonEnable support of libatasmartEnable support of lm-sensorsEnable support of udisks2Enables debug mode.Enables debug mode: %dFahrenheitFailed to activate logging of sensors.Failed to create Web server.Failed to create the directory %s: %sFailed to load Psensor icon.Failed to load configuration file %s: %sFailed to save configuration file %s.Fan speed alertForeground:GPU with proprietary driverGraphHOME variable not set.HTTP Request: %sHard disk driveHideHide window decorationHide window on startupHigh threshold:Id:Intel CPUInterfaceKeep window belowLaunch on session startupLeftLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:Motherboard, CPU and GPUN/ANVIDIA GPUNameName:No sensors detected.Number of AMD/ATI adapters: %dNumber of active AMD/ATI adapters: %dOptions:Position of sensors table:PreferencesProvidersPsensor - Temperature MonitorPsensor HomepagePsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeScript executed when an alarm is raised:Select sensor colorSensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowSmooth curvesStartupTemperature alertTemperature unit:The changes are applied after the restart of psensor.TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... VIA CPUValueWWW directory: %sWeb server started on port: %d_Help_Psensorfree memorygettimeofday failed.memoryminute(s)psensorRightpsensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor 0.7.0.x Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2016-02-07 23:08+0300 Last-Translator: Grigorii Chirkov Language-Team: Russian Language: ru MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Poedit 1.8.4 --sensor-log-file=ПУТЬ установить ПУТЬ к файлу журнала датчика --sensor-log-interval=ПЕРИОД установить ПЕРИОД журналирования датчиков (в секундах) -d, --debug=LEVEL установить уровень отладки, целое между 0 и 3 -d, --debug=УРОВЕНЬ установить уровень отладки, целое между 0 и 3 -h, --help показать эту справку и выйти -v, --version показать версию и выйти -h, --help показать эту справку и выйти -v, --version показать версию и выйти -l, --log-file=ПУТЬ установить ПУТЬ к файлу журнала -n, --new-instance принудительно запускает новую копию программы Psensor -p,--port=PORT порт веб-сервера -w,--wdir=DIR директория для страниц веб-сервера -u, --url=URL URL psensor-сервера, пример: http://hostname:3131%%s домашняя страница: <%s> %s: Не удалось получить значение подмодуля %s: %s.%s: Ошибка открытия соединения к серверу X11.%s: Ошибка подключения к: %s%s: Не удалось получить информацию NVIDIA.%s: Не удалось получить информацию о названии продукта ГП NVIDIA %d%s: Не удалось получить информацию о типе %x ГП NVIDIA %d%s: Не удалось получить информацию о количестве вентиляторов.%s: Неправильный JSON: %s%s: Неправильное содержимое: %s%s: Неизвестное название продукта ГП NVIDIA %d%s: Неверный тип модуля.%s: не удалось открыть соединение.%s: не удалось открыть сокет.%s: ошибка инициализации: %s.%s: ошибка sk_disk_open(): %s.%s: неправильная строка: %s.-10

Страница не найдена - Перейти к Главной странице

Запрошена остановка сервера

Макс.Мин.Копия Psensor уже запущена.ACPIЦП AMDAMD: библиотека ADL не найдена.AMD: ошибка определения количества адаптеров.AMD: не удалось инициализировать ADL.AMD: отсутствует API ADL.О программеО PsensorВключить уведомленияУведомлениеИндикатор приложенияНепрозрачность фона:Фон:СнизуЦПИспользование ЦП и ОЗУЗагрузка ЦПОшибка открытия файла журнала: %sНе удалось открыть файл журнала датчика: %s.ЦельсияМикросхема:ЦветЦвет:ЦветаCopyright (C) %s jeanfi@gmail.com Лицензия GPLv2: GNU GPL версии 2 или выше Это свободное программное обеспечение, вы можете модифицировать и распространять его. На него не предоставляется никаких гарантий в мере, предусмотренной законодательством. ГрафикиПодробностиДискПоказать датчик в области уведомлений (экспериментально)Показать датчик в списке датчиковПоказать датчик в индикаторе меню приложенийРисовать график датчикаИзменить параметрыИзменить параметры датчикаВключить счетчик в панели запуска UnityВключить менюВести журнал событий датчиковВключить поддержку ATI ADLВключить поддержку NVCtrl (NVidia)Включить поддержку gtop2Включить поддержку демона hddtempВключить поддержку libatasmartВключить поддержку lm-sensorsВключить поддержку udisks2Включает режим отладки.Включает режим отладки: %dФаренгейтаНе удалось включить журналирование датчиков.Не удалось создать веб-сервер.Не удалось создать каталог %s: %sНе удалось загрузить значок Psensor.Не удалось загрузить файл конфигурации %s: %sНе удалось сохранить файл конфигурации %s.Уведомление вентилятораПередний план:ГП (проприетарный драйвер)ДиаграммаПеременная HOME не установлена.HTTP запрос: %sЖесткий дискСкрытьСкрывать рамку окнаСкрывать окно при запускеВысший порог:Идентификатор:ЦП IntelВнешний видУдерживать окно под другимиЗапускать автоматически при старте сессииСлеваНизший порог:Макс.Интервал обновления замеров:ЗамерыМин.Время мониторинга:Материнская плата, ЦП и ГПН/ДГП NVIDIAНазваниеНазвание:Датчики не обнаружены.Количество адаптеров AMD/ATI: %dКоличество активных адаптеров AMD/ATI: %dОпции:Положение таблицы датчиков:ПараметрыПоддержкаPsensor - монитор температурыДомашняя страница PsensorPsensor не был собран с поддержкой удалённых датчиков.Psensor — это приложение GTK+ для мониторинга аппаратных сенсоровPsensor — это GTK+ приложение для мониторинга аппаратных датчиков, включая температуру и скорость вентилятора.Выходоб/минСообщайте об ошибках на: %s Восстанавливать положение и размер окнаСкрипт, выполняемый при выдаче уведомления:Выбор цвета датчикаДатчикПараметры датчиковФайл журнала датчика уже открыт.Файл журнала датчика не открыт.Файл журнала датчика не открыт, не удалось закрыть.ДатчикиИнтервал ведения журнала событий датчиков:ПоказатьСглаживать графикиАвтозапускУведомление температурыЕдиницы измерения температуры:Изменения будут применены после перезапуска psensor.СверхуПопробуйте `%s --help' для дополнительной информации.↵ Тип:URL: http://localhost:%dНеизвестноИнтервал обновления:Использование: %s [КЛЮЧ]... ЦП VIAЗначениеWWW-каталог: %sВеб-сервер запущен на порту: %d_Справка_PsensorИспользование ОЗУошибка gettimeofday.ОЗУмин.Справаpsensor-server ‌— это HTTP-сервер для удалённого мониторинга аппаратных датчиков.сек.Contributions: Dmitry Serov https://launchpad.net/~dmitri-s93 Eugene Marshal https://launchpad.net/~lowrider Ilya Volchanetskiy https://launchpad.net/~volchanetskiy Jean-Philippe Orsini https://launchpad.net/~jfi Grigorii Chirkovpsensor-1.2.1/po/LINGUAS0000664000175000017500000000063313675222444011605 00000000000000# Set of available languages. # # Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, # 2002, 2003, 2005, 2006, 2007 Free Software Foundation, Inc. # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. de el es fr hu hr it lv nl pl pt_BR ru sl sr sv tr uk zh_CN psensor-1.2.1/po/tr.gmo0000664000175000017500000002602713676133402011712 00000000000000Dl8 89 Dr D B ^? k 0 E; U h @B*V)* (Hh~J6  "<D'c  %18< Uv~ 2F ]&h 1A E OYk %&LU p|9=e# ( ("Bem& 2:@Rqw  J yU^WDP\iJFKdGl2/-b ;RUU8  " " $/ 2T    & !!! 5!?! C!&M!9t!!!!!!&!"""#:##N#*r##-#%#($ 0$8;$t$$$$ $$$ %,%;%C%S%[%t%%%%%% %%% %&&&"%&&H&,o& & & &"&&< 'VH'}' ('(+(+B(.n( ((4(5(=/)m))~)) ))))+)** 7*B*Z* w***+******c+d+k+3!]=a,?Af 'tTR}iLKQ#\ $/j)J`521_nYI"9>6dg*eOZ<ywDG q+Nzo[xCHWb~^vuBscF-E X &mhp|USl8rk%;(@{V4:P .7M0 --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Failed to retrieve NVIDIA information.%s: Wrong feature type.%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: sk_disk_open() failure: %s.%s: wrong string: %s.-1

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.AMD CPUAMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmApplication IndicatorBackground opacity:Background:BottomCPUCannot open log file: %sCannot open sensor log file: %s.CelsiusChip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. DiskDisplay sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnables debug mode.Enables debug mode: %dFahrenheitFailed to activate logging of sensors.Failed to create Web server.Failed to load Psensor icon.Foreground:GraphHOME variable not set.HTTP Request: %sHide window decorationHide window on startupHigh threshold:Id:Intel CPUInterfaceKeep window belowLaunch on session startupLeftLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:N/ANVIDIA GPUNameName:No sensors detected.Number of AMD/ATI adapters: %dNumber of active AMD/ATI adapters: %dOptions:Position of sensors table:PreferencesPsensor - Temperature MonitorPsensor HomepagePsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeScript executed when an alarm is raised:SensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowStartupTemperature alertTemperature unit:TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... VIA CPUValueWWW directory: %sWeb server started on port: %d_Help_Psensorgettimeofday failed.minute(s)psensorRightpsensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-20 11:27+0000 Last-Translator: Jean-Philippe Orsini Language-Team: Turkish Language: tr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) --sensor-log-file=PATH algılayıcı günlük kaydı dosyasını PATH olarak ayarla --sensor-log-interval=S algılayıcı günlük kaydı aralığını S (saniye) olarak ayarla -d, --debug=LEVEL hata ayıklama seviyesini ayarla, 0 ve 3 arasında bir tamsayı -d, --debug=LEVEL hata ayıklama seviyesin ayarla, 0 ve 3 arasında tamsayı -h, --help yardımı göster ve çık -v, --version sürüm bilgisini göster ve çık -h, --help yardımı göster ve çık -v, --version sürüm bilgisini göster ve çık -l, --log-file=PATH günlük kaydı dosyasını PATH olarak ayarla -n, --new-instance yeni bir Psensor uygulaması oluşturulmasını zorla -p,--port=PORT websunucu bağlantı noktası -w,--wdir=DIR dizin websunucusu sayfaları içerir -u, --url=URL psensor sunucusunun bağlantısı, example: http://hostname:3131%%s ana sayfa: <%s> %s: %s alt özelliğinin değeri alınamıyor: %s.%s: X11 sunucusu bağlantısı açılamıyor.%s: NVIDIA bilgisi alınamıyor.%s: yanlış özellik tipi.%s: bağlantı açılamadı.%s: yuva açılamadı%s: başlatma hatası: %s.%s: sk_disk_open() hatası: %s.%s: yanlış dizi: %s.-1

Sayfa bulunamadı - Şuraya gidin Main page

Sunucu durdurma istendi

AzamiAsgariBir Psensor örneği zaten mevcut.AMD işlemciAMD: ADL kütüphanesi bulunamadı.AMD: bağdaştırıcıların sayısı alınamadı.AMD: ADL başlatılamadı.AMD: ADL'nin API'sı kayıp.HakkındaPsensor HakkındaMasaüstü bildirimlerini etkinleştirAlarmUygulama GöstergesiArkaplan saydamlığı:Arkaplan:AltİşlemciGünlükleme dosyası açılamadı: %sAlgılayıcı günlük kaydı dosyası açılamıyor: %s.CelsiusYonga:RenkRenk :RenkTelif Hakkı (C) %s jeanfi@gmail.com Lisans GPLv2: GNU GPL 2. sürümü veya daha yenisi Bu bir özgür yazılımdır: değiştirmekte ve yeniden dağıtmakta özgürsünüz. Yasaların izin verdiği çerçevede hiçbir garantisi YOKTUR. DiskAlgılayıcıları menüde gösterAlgılayıcı eğrisini çizTercihleri DüzenleAlgılayıcı Tercihlerini DüzenleUnity Başlatıcı sayacını etkinleştirMenüyü etkinleştirAlgılayıcı günlük kaydını etkinleştirHata ayıklama modunu etkinleştirir.Hata ayıklama modunu etkinleştirir: %dFahrenhaytAlgılayıcıların günlük kaydı etkinleştirilemedi.Web sunucusu oluşturulamadı.Psensor simgesi yüklenemedi.Önplan:GrafikHOME değişkeni ayarlanmamış.HTTP İsteği: %sPencere çubuğunu gizleBaşlangıçta pencereyi gizleYüksek eşik:Kimlik:İntel işlemciArayüzPencereyi aşağıda tutOturum başlangıcında başlatSolDüşük eşik:AzamiÖlçüm güncelleştirme aralığı:ÖlçümlerAsgariGözlemleme süresi:BilinmeyenNVIDIA Ekran KartıAdİsim:Hiçbir algılayıcı bulunamadı.AMD/ATI bağdaştırıcı sayısı: %dEtkin AMD/ATI bağdaştırıcı sayısı: %dSeçenekler:Gözlemleyici tablosunun konumu:TercihlerPsensor - Sıcaklık GözlemleyiciPsensor AnasayfasıPsensor, uzaktan algılayıcı desteği ile derlenmemiştir.Psensor, donanım algılayıcılarının gözlenmesi amaçlı bir GTK+ uygulamasıdırPsensor, sıcaklık ve fan hızı da dahil olmak üzere donanım algılayıcılarını gözlemleyen bir GTK+ uygulamasıdır.ÇıkışRPMHataları rapor et:%s Pencere konumunu ve boyutunu yeniden yükleAlarm çaldığında betik çalıştırılır:AlgılayıcıAlgılayıcı TercihleriAlgılayıcı günlük kaydı dosyası zaten açık.Algılayıcı günlük kaydı dosyası açık değil.Algılayıcı günlük kaydı açık değil, kapatılamıyor.AlgılayıcılarAlgılayıcı günlük kaydı aralığı:GösterBaşlangıçSıcaklık uyarısıSıcaklık birimi:ÜstteDaha fazla bilgi için `%s --help' yazın. Tür:URL: http://localhost:%dBilinmeyenGüncelleme aralığı:Kullanım: %s [SEÇENEK]... VIA İşlemciDeğerWWW dizini: %sWeb sunucusu şu noktadan başlatıldı: %d_Yardım_Psensorgettimeofday başarısız.dakikaSağpsensor-sunucusu, donanım algılayıcılarını uzaktan gözlemleme amaçlı bir HTTP sunucusudur.saniyeLaunchpad Contributions: Jean-Philippe Orsini https://launchpad.net/~jfi zeugma https://launchpad.net/~sunder67 İbrahim Çelik https://launchpad.net/~ibrahimcelik89psensor-1.2.1/po/zh_CN.po0000664000175000017500000005126213675227773012137 00000000000000# Chinese translations for psensor package. # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # Initial Chinese translation from 大宝 msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-11 21:24+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Chinese (simplified)\n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, fuzzy, c-format msgid "Failed to create the directory %s: %s" msgstr "无法创建网络服务器。" #: src/cfg.c:550 #, fuzzy, c-format msgid "Failed to load configuration file %s: %s" msgstr "无法激活监测器日志。" #: src/cfg.c:575 #, fuzzy, c-format msgid "Failed to save configuration file %s." msgstr "无法激活监测器日志。" #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "关于" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "首选项" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "退出" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "传感器首选项" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - 温度监视器" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "帮助(_H)" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "监视设备" #: src/glade/psensor.glade:236 msgid "Value" msgstr "值" #: src/glade/psensor.glade:247 msgid "Min" msgstr "最小值" #: src/glade/psensor.glade:258 msgid "Max" msgstr "最大值" #: src/glade/psensor.glade:269 msgid "Color" msgstr "颜色" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "图表" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "显示" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "左侧" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "顶部" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "底部" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "编辑首选项" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "隐藏窗口标题栏" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "保持在最底层" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "启用菜单" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "启用 Unity 启动器计数器" #: src/glade/psensor-pref.glade:190 #, fuzzy msgid "Psensor has not been build with Unity Launcher support" msgstr "Psensor 不支持远程传感器。" #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "温度单位:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "监视设备列表位置:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "界面" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "启动时隐藏窗口" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "恢复窗口位置和大小" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "前景:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "背景:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "背景透明:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "颜色" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "监视持续时长:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "更新间隔:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "测量" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "最小值" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "最大值" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "秒" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "分钟" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "测量更新间隔:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "启用监测器记录" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "传感器" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 #, fuzzy msgid "Psensor has not been build with NVCtrl support" msgstr "Psensor 不支持远程传感器。" #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 #, fuzzy msgid "Psensor has not been build with ATI ADL support" msgstr "Psensor 不支持远程传感器。" #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 #, fuzzy msgid "Psensor has not been build with gtop2 support" msgstr "Psensor 不支持远程传感器。" #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 #, fuzzy msgid "Psensor has not been build with libatasmart support" msgstr "Psensor 不支持远程传感器。" #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 #, fuzzy msgid "Psensor has not been build with udisks2 support" msgstr "Psensor 不支持远程传感器。" #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "编辑传感器首选项" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "类型:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "不可用" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "芯片:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "名称:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "标识:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "绘制监视曲线" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "颜色:" #: src/glade/sensor-edit.glade:448 #, fuzzy msgid "Display sensor in the list of sensors" msgstr "在应用指示器菜单中显示监视器" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "激活桌面气泡提示" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "高阈值:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "低阈值:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "警告" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "在应用指示器菜单中显示监视器" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 #, fuzzy msgid "Psensor has not been build with AppIndicator support" msgstr "Psensor 不支持远程传感器。" #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD:未找到 ADL 库。" #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD:ADL 的 API 丢失。" #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD:ADL 初始化出错。" #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD:无法获取适配器数目。" #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "无法激活监测器日志。" #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s:sk_disk_open() 失败:%s。" #: src/lib/hdd_hddtemp.c:62 #, fuzzy, c-format msgid "%s: failed to open socket." msgstr "硬盘温度:无法打开套接字。" #: src/lib/hdd_hddtemp.c:75 #, fuzzy, c-format msgid "%s: failed to open connection." msgstr "硬盘温度:无法打开连接。" #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, fuzzy, c-format msgid "%s: wrong string: %s." msgstr "硬盘温度:错误字符:%s。" #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s:无法获取子功能%s的值:%s。" #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "" #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s:初始化失败:%s。" #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "无法打开日志文件:%s" #: src/lib/nvidia.c:69 #, fuzzy, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "无法获取 NVIDIA 信息。" #: src/lib/nvidia.c:74 #, fuzzy, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "无法获取 NVIDIA 信息。" #: src/lib/nvidia.c:240 #, fuzzy, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "无法获取 NVIDIA 信息。" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: 无法打开到 X11 服务器的连接。" #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: 无法获取 NVIDIA 信息。" #: src/lib/nvidia.c:394 #, fuzzy, c-format msgid "%s: Failed to retrieve number of fans." msgstr "无法获取 NVIDIA 信息。" #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "转速" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "获取时间失败。" #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "未设置 HOME 变量。" #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "已经打开监测器日志文件。" #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "无法打开监测器日志文件:%s。" #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "监测器日志文件未打开。" #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "监测器日志未打开,故无法关闭。" #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "版权所有(C) %s jeanfi@gmail.com\n" "协议 GPLv2:GNU GPL 第 2 版或更新的\n" "本软件为自由软件:您可以自由修改并分发。\n" "There is NO WARRANTY, to the extent permitted by law。\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "用法:%s [选项]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "Psensor 是一款 GTK+ 应用程序,可监测硬件传感器,包括温度与风扇转速。" #: src/main.c:79 msgid "Options:" msgstr "选项:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help 显示这个帮助并退出\n" " -v, --version 显示版本信息并退出" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL psensor 服务器 URL\n" " 例如:http://hostname:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr " -n, --new-instance 强制创建一个新的 Psensor 例程" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr " -d,--debug=LEVEL 设置调试等级,等级为 0 到 3 之间的整数" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "报告问题至:%s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s 主页:<%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "Psensor 不支持远程传感器。" #: src/main.c:472 msgid "Enables debug mode." msgstr "启用调试模式。" #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "试用‘%s --help’来获得更多信息。\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "已存在一个 Psensor 例程。" #: src/main.c:539 #, fuzzy msgid "Failed to create thread for monitoring sensors" msgstr "无法创建网络服务器。" #: src/rsensor.c:115 #, fuzzy, c-format msgid "%s: Fail to connect to: %s" msgstr "无法连接到:%s" #: src/rsensor.c:152 #, fuzzy, c-format msgid "%s: Invalid content: %s" msgstr "无效内容:%s" #: src/rsensor.c:190 #, fuzzy, c-format msgid "%s: Invalid JSON: %s" msgstr "无效 JSON:%s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

服务器停止请求

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "

未找到页面 - 请访问主页

" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "psensor 服务器是用来远程监视硬件的 HTTP 服务器。" #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\t 显示本帮助并退出\n" " -v, --version\t\t 显示版本信息并退出" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\t 网络服务器端口\n" " -w,--wdir=DIR\t\t 包括网络服务器页面的目录" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr " -d, --debug=LEVEL 设置调试级别,0~3 之间的整数" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=PATH 将日志文件设为 PATH" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr " --sensor-log-file=路径 设置监测器日志文件的路径" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "无法打开日志文件:%s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "HTTP 请求:%s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "启用调试模式:%d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "未检测到传感器。" #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "无法创建网络服务器。" #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "网络服务器启动端口:%d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW 目录:%s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "无法激活监测器日志。" #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "Psensor 是一款 GTK+ 硬件监测传感应用程序" #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "" "版权所有(c) 2010-2014\n" "jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "关于 Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " Wang Dianjin https://launchpad.net/~tuhaihe\n" " tmpplus https://launchpad.net/~tmpplus.7328-deactivatedaccount\n" " 大宝 https://launchpad.net/~linux-dabao" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Psensor 主页" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "无法加载 Psensor 图标。" #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 #, fuzzy msgid "Select sensor color" msgstr "选择前景色" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "无法激活监测器日志。" #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "温度报警" #: src/ui_notify.c:79 #, fuzzy msgid "Fan speed alert" msgstr "风扇警报" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "未知" #~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type." #~ msgstr "lmsensor:lmsensor_psensor_create 失败:错误的功能类型。" #~ msgid "Sensor Information" #~ msgstr "传感器信息" psensor-1.2.1/po/psensor.pot0000664000175000017500000004005113675227773013005 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: src/cfg.c:503 #, c-format msgid "Failed to create the directory %s: %s" msgstr "" #: src/cfg.c:550 #, c-format msgid "Failed to load configuration file %s: %s" msgstr "" #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "" #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "" #: src/glade/psensor.glade:236 msgid "Value" msgstr "" #: src/glade/psensor.glade:247 msgid "Min" msgstr "" #: src/glade/psensor.glade:258 msgid "Max" msgstr "" #: src/glade/psensor.glade:269 msgid "Color" msgstr "" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "" #: src/glade/psensor-pref.glade:190 msgid "Psensor has not been build with Unity Launcher support" msgstr "" #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 msgid "Psensor has not been build with NVCtrl support" msgstr "" #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 msgid "Psensor has not been build with ATI ADL support" msgstr "" #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 msgid "Psensor has not been build with gtop2 support" msgstr "" #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 msgid "Psensor has not been build with libatasmart support" msgstr "" #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 msgid "Psensor has not been build with udisks2 support" msgstr "" #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 msgid "Psensor has not been build with AppIndicator support" msgstr "" #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "" #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "" #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "" #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "" #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, c-format msgid "Failed to get content of file %s." msgstr "" #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "" #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "" #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "" #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "" #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "" #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "" #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "" #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "" #: src/lib/nvidia.c:69 #, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "" #: src/lib/nvidia.c:74 #, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "" #: src/lib/nvidia.c:240 #, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "" #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "" #: src/lib/nvidia.c:394 #, c-format msgid "%s: Failed to retrieve number of fans." msgstr "" #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "" #: src/lib/psensor.c:428 msgid "%" msgstr "" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "" #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "" #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "" #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "" #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "" #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "" #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" #: src/main.c:79 msgid "Options:" msgstr "" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr "" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "" #: src/main.c:472 msgid "Enables debug mode." msgstr "" #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "" #: src/main.c:539 msgid "Failed to create thread for monitoring sensors" msgstr "" #: src/rsensor.c:115 #, c-format msgid "%s: Fail to connect to: %s" msgstr "" #: src/rsensor.c:152 #, c-format msgid "%s: Invalid content: %s" msgstr "" #: src/rsensor.c:190 #, c-format msgid "%s: Invalid JSON: %s" msgstr "" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr "" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr "" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, c-format msgid "Cannot get real path of %s" msgstr "" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "" #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "" #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "" #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "" #: src/ui.c:216 msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "" #: src/ui.c:222 msgid "About Psensor" msgstr "" #: src/ui.c:223 msgid "translator-credits" msgstr "" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "" #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 msgid "Select sensor color" msgstr "" #: src/ui_appindicator.c:148 #, c-format msgid "Failed to load glade file %s: %s" msgstr "" #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "" #: src/ui_notify.c:79 msgid "Fan speed alert" msgstr "" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "" psensor-1.2.1/po/uk.po0000664000175000017500000005317013675227773011555 00000000000000# Ukrainian translation for psensor # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-11 21:23+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Ukrainian \n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, fuzzy, c-format msgid "Failed to create the directory %s: %s" msgstr "Не вдалося створити веб-сервер." #: src/cfg.c:550 #, fuzzy, c-format msgid "Failed to load configuration file %s: %s" msgstr "Не вдалося створити веб-сервер." #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "" #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "Про програму" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Налаштування" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Вихід" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Налаштування датчиків" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Довдіка" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Датчик" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Значення" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Мін." #: src/glade/psensor.glade:258 msgid "Max" msgstr "Макс." #: src/glade/psensor.glade:269 msgid "Color" msgstr "Колір" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Діаграма" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Показати" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Редагувати налаштування" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Сховати каркас вікна" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Тримати вікно позаду" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Увімкнути меню" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Увімкнути лічильник на панелі запуску Unity" #: src/glade/psensor-pref.glade:190 #, fuzzy msgid "Psensor has not been build with Unity Launcher support" msgstr "Psensor не був зібраний з підтримкою віддалених датчиків." #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Одиниця температури:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Положення таблиці датчиків:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Зовнішній вигляд" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Сховати вікно після запуску" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Відновляти позицію і розмір вікна" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Передній план:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Тло:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Непрозорість тла:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Кольори" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Тривалість спостереження" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Інтервал оновлення:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Заміри" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Мін." #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Макс." #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "сек." #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "хв." #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Інтервал оновлення замірів:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Датчики" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 #, fuzzy msgid "Psensor has not been build with NVCtrl support" msgstr "Psensor не був зібраний з підтримкою віддалених датчиків." #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 #, fuzzy msgid "Psensor has not been build with ATI ADL support" msgstr "Psensor не був зібраний з підтримкою віддалених датчиків." #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 #, fuzzy msgid "Psensor has not been build with gtop2 support" msgstr "Psensor не був зібраний з підтримкою віддалених датчиків." #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 #, fuzzy msgid "Psensor has not been build with libatasmart support" msgstr "Psensor не був зібраний з підтримкою віддалених датчиків." #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 #, fuzzy msgid "Psensor has not been build with udisks2 support" msgstr "Psensor не був зібраний з підтримкою віддалених датчиків." #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Редагувати налаштування датчика" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Тип:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "Н/Д" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Назва:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Ідентифікатор:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Малювати криву датчика" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Колір:" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Увімкнути оповіщення" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Вищий поріг:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Нижчий поріг:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Оповіщення" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 #, fuzzy msgid "Psensor has not been build with AppIndicator support" msgstr "Psensor не був зібраний з підтримкою віддалених датчиків." #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: не вдалося знайти бібліотеку ADL." #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: відсутнє API ADL." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: не вдалося ініціалізувати ADL." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: не вдалося отримати кількість адаптерів." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Не вдалося створити веб-сервер." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "" #: src/lib/hdd_atasmart.c:153 #, fuzzy, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "atasmart: помилка sk_disk_open(): %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: не вдалося відкрити сокет." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: не вдалося встановити з'єднання." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: неправильний рядок: %s." #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "" #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "" #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, fuzzy, c-format msgid "%s: initialization failure: %s." msgstr "lmsensor: помилка ініціалізації: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Не вдалося відкрити лог-файл: %s" #: src/lib/nvidia.c:69 #, fuzzy, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "Не вдалося отримати інформацію NVIDIA." #: src/lib/nvidia.c:74 #, fuzzy, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "Не вдалося отримати інформацію NVIDIA." #: src/lib/nvidia.c:240 #, fuzzy, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "Не вдалося отримати інформацію NVIDIA." #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Не вдалося встановити з'єднання до сервера X11." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: Не вдалося отримати інформацію NVIDIA." #: src/lib/nvidia.c:394 #, fuzzy, c-format msgid "%s: Failed to retrieve number of fans." msgstr "Не вдалося отримати інформацію NVIDIA." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "об/хв" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "помилка gettimeofday." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "Змінна HOME не встановлена." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "" #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "" #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "" #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "" #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Використання: %s [КЛЮЧ]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" #: src/main.c:79 msgid "Options:" msgstr "Опції:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help показати цю довідку і вийти\n" " -v, --version показати версію і вийти" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL URL psensor-сервера, наприклад: http://hostname:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr " -n, --new-instance примусово створювати нову копію програми Psensor" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr " -d, --debug=РІВЕНЬ встановити рівень налагодження, ціле між 0 та 3" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Звітуйте про помилки до: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s домашня сторінка: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "Psensor не був зібраний з підтримкою віддалених датчиків." #: src/main.c:472 msgid "Enables debug mode." msgstr "Включає режим налагодження." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Спробуйте `%s --help' щоб отримати більше інформації.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "" #: src/main.c:539 #, fuzzy msgid "Failed to create thread for monitoring sensors" msgstr "Не вдалося створити веб-сервер." #: src/rsensor.c:115 #, fuzzy, c-format msgid "%s: Fail to connect to: %s" msgstr "Не вдалося підключитися до: %s" #: src/rsensor.c:152 #, fuzzy, c-format msgid "%s: Invalid content: %s" msgstr "Неправильний JSON: %s" #: src/rsensor.c:190 #, fuzzy, c-format msgid "%s: Invalid JSON: %s" msgstr "Неправильний JSON: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Сторінка не знайдена - Перейти до Головної " "сторінки

" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-server ‌— це HTTP-сервер для віддаленого моніторингу апаратних " "датчиків." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\tпоказати цю довідку і вийти\n" " -v, --version\t\tпоказати версію і вийти" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\tпорт веб-сервера\n" " -w,--wdir=DIR\t\tдиректорія для сторінок веб-сервера" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr "" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr "" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "Не вдалося відкрити лог-файл: %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "HTTP запит: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Датчики не знайдені." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Не вдалося створити веб-сервер." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW-директорія: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "" #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "" #: src/ui.c:216 msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "" #: src/ui.c:222 msgid "About Psensor" msgstr "Про Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Ilya Volchanetskiy https://launchpad.net/~volchanetskiy\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " VPIP https://launchpad.net/~tymbood" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Домашня сторінка Psensor" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Не вдалося завантажити іконку Psensor." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 #, fuzzy msgid "Select sensor color" msgstr "Оберіть колір переднього плану" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "Не вдалося створити веб-сервер." #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "" #: src/ui_notify.c:79 msgid "Fan speed alert" msgstr "" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "" #~ msgid "Sensor Information" #~ msgstr "Інформація датчика" psensor-1.2.1/po/sv.gmo0000664000175000017500000003570513676133402011720 00000000000000 8DDGB^k.0EUhg*);*V5;&/*Gr!&<?JA6  " '(Po    ; Tu}*%'8P nz! $A[o &%.!*L(i % .?OTk   3L P[`fx%   */;4k.6-34/h9=e v {  * ( !!#!6!T!"n!!!! !!!!8!5+"a"&e""""""""""$#?#E# N#Z#o#u# |# #J# ###@%O%B3&Nv&a&m''5':'U(`\(((6(/ )9))Y)4);),)!*6*)Q*{*$*!***+$+9+<+S>+4+ + +#+,,",$1,V,r,, ,,,,, , ,,,-(-H-"d-------...'.$/5/I/^/v/,/ ///#0'0"A0d00000 0#1*1!G14i1+1!1.1&2(B2k2 22222 222 3)3?3 C3 M3Y3s33333$3 333334 '42474=4U4m4!4 444 44 53 5<T525:5157163i696A6p7777.7(78"848;8P8l8*8888 8 889594J9 9(999999 :: :':G:e:m: v:::: ::O: ;; GuS3-YXj0.dNKZA^]c4{ +f(Rzs> qh*}Lot;`!r$8kT#&e1bm waiB|/@EIM?7:D~Hxl'9C5<y"V%6PJO[,_Fvgn)Q2=UWp\ --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Fail to connect to: %s%s: Failed to retrieve NVIDIA information.%s: Failed to retrieve NVIDIA product name for GPU %d%s: Failed to retrieve measure of type %x for NVIDIA GPU %d%s: Failed to retrieve number of fans.%s: Invalid JSON: %s%s: Invalid content: %s%s: Unknown NVIDIA product name for GPU %d%s: Wrong feature type.%s: cannot get the udisks2 client%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: sk_disk_open() failure: %s.%s: wrong string: %s.-10

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.ACPIAMD CPUAMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmApplication IndicatorBackground opacity:Background:BottomCPUCPU and memory usageCPU usageCannot get real path of %sCannot open log file: %sCannot open sensor log file: %s.CelsiusChip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. CurvesDetailsDiskDisplay sensor in the label (experimental)Display sensor in the list of sensorsDisplay sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnable support of ATI ADLEnable support of NVCtrl (NVidia)Enable support of gtop2Enable support of hddtemp daemonEnable support of libatasmartEnable support of lm-sensorsEnable support of udisks2Enables debug mode.Enables debug mode: %dFahrenheitFailed to activate logging of sensors.Failed to create Web server.Failed to create the directory %s: %sFailed to create thread for monitoring sensorsFailed to get content of file %s.Failed to load Psensor icon.Failed to load configuration file %s: %sFailed to load glade file %s: %sFailed to save configuration file %s.Fan speed alertForeground:GPU with proprietary driverGraphHOME variable not set.HTTP Request: %sHard disk driveHideHide window decorationHide window on startupHigh threshold:Id:Intel CPUInterfaceKeep window belowLaunch on session startupLeftLow threshold:MaxMax:Measure update interval:MeasuresMinMin:Monitoring duration:Motherboard, CPU and GPUN/ANVIDIA GPUNameName:No graphs enabledNo sensors detected.Number of AMD/ATI adapters: %dNumber of active AMD/ATI adapters: %dOptions:Position of sensors table:PreferencesProvidersPsensor - Temperature MonitorPsensor HomepagePsensor has not been build with ATI ADL supportPsensor has not been build with AppIndicator supportPsensor has not been build with NVCtrl supportPsensor has not been build with Unity Launcher supportPsensor has not been build with gtop2 supportPsensor has not been build with libatasmart supportPsensor has not been build with udisks2 supportPsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Resource access refused %s real path is %sRestore window position and sizeScript executed when an alarm is raised:Select sensor colorSensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowSmooth curvesStartupTemperature alertTemperature unit:The BCM2835 (probably a Raspberry PI3) has been detectedThe changes are applied after the restart of psensor.TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... VIA CPUValueWWW directory: %sWeb server started on port: %dWebserver directory does not exist. _Help_Psensorfree memorygettimeofday failed.labelmemoryminute(s)psensorRightpsensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor 1.0.0.0 Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2020-02-23 08:34+0100 Last-Translator: Åke Engelbrektson Language-Team: Swedish Language: sv MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Poedit 2.0.6 Plural-Forms: nplurals=2; plural=(n != 1); --sensor-log-file=PATH Ställ in loggfil för sensor till PATH --sensor-log-interval=S ställ in loggintervall för sensor till S (sekunder) -d, --debug=LEVEL Ställ in felsökningnivån mellan 0 and 3 -d, --debug=LEVEL Ställ in felsökningsnivå, heltal mellan nivå 0 och 3 -h, --help Visa denna hjälp och avsluta -v, --version Visa versionsinformation och avsluta -h, --help Visa denna hjälp och avsluta -v, --version Visa versionsinformation och avsluta -l, --log-file=PATH Ställ in loggfilen till PATH -n, --new-instance Tvinga fram ett nytt Psensor-program -p,--port=PORT Webbserverport -w,--wdir=DIR Mapp som innehåller webbserversidor -u, --url=URL URL för psensor-server, T.ex. http://värdnamn:3131%%s webbplats <%s> %s: Kan inte hämta värdet för underegenskap %s: %s.%s: Kan inte öppna anslutning till X11-server.%s: Kunde inte ansluta till: %s%s: Kunde inte hämta NVIDIA-information.%s: Kunde inte hämta NVIDIA-produktnamn för GPU %d%s: Kunde inte hämta mätning av typ %x för NVIDIA-GPU %d%s: Kunde inte identifiera antalet fläktar.%s: Ogiltig JSON: %s%s: Ogiltigt innehåll: %s%s: Okänt NVIDIA-produktnamn för GPU %d%s: Fel funktionstyp.%s: Kan inte hämta udisks2-klienten%s: Kunde inte öppna anslutning.%s: Kunde inte öppna socket.%s: Startfel: %s.%s: sk_disk_open()-fel: %s.%s: Fel sträng: %s.-10

Sidan hittades inte - Gå till Huvudsidan

Serverstopp begärt

MaxMinDet finns redan en Psensor-instans.ACPIAMD CPUAMD: Kan inte hitta ADL-bibliotek.AMD: Kan inte hämta antal adaptrar.AMD: Kunde inte starta ADL.AMD: ADL-API saknas.OmOm PsensorAktivera skrivbordsaviseringarLarmProgramindikatorBakgrundsopacitet:Bakgrund:UnderkantCPUCPU- och minnesanvändningCPU-belastningKan inte hämta absolut sökväg till %sKan inte öppna loggfil: %sKan inte öppna sensorloggfil: %s.CelsiusChip:FärgFärg:FärgerCopyright (C) %s jeanfi@gmail.com Licens GPLv2: GNU GPL version 2 eller senare Det här är fri programvara: Du kan fritt modifiera den och distribuera den Det finns INGEN GARANTI i den omfattning som medges av gällande lag. KurvorDetaljerad informationDiskVisa sensor i etiketten (experimentell)Visa sensorn i listan över sensorerVisa sensor i menynRita upp sensorkurvaRedigera inställningarRedigera sensorinställningarAktivera räknare för Unity programstartareAktivera menyAktivera sensorloggningAktivera stöd för ATI ADLAktivera stöd för NVCtrl (NVidia)Aktivera stöd för gtop2Aktivera stöd för hddtemp daemonAktivera stöd för libatasmartAktivera stöd för lm-sensorsAktivera stöd för udisks2Aktivera felsökningsläge.Aktiverar felsökningsläge: %dFahrenheitKunde inte aktivera sensorloggning.Kunde inte skapa webbserver.Kunde inte skapa katalogen %s: %sKunde inte skapa tråd för övervakning av sensorerKunde inte hämta innehåll från filen %s.Kunde inte läsa in Psensor-ikon.Kunde inte läsa in konfigurationsfilen %s: %sKunde inte läsa in glade-filen %s: %sKunde inte spara konfigurationsfilen %s.FläkthastighetslarmFörgrund:GPU med patentskyddad drivrutinDiagramHOME-variabel inte inställd.HTTP-begäran: %sHårddiskDöljDölj fönsterdekorationDölj fönstret vid uppstartHögt tröskelvärde:ID:Intel CPUGränssnittBehåll fönstret understStarta vid sessionsstartVänsterLågt tröskelvärde:MaxMax:Uppdateringsintervall för mätning:MätningarMinMin:Övervakningstid:Moderkort, CPU och GPUInte tillämpbarNVIDIA GPUNamnNamn:Inga diagram aktiveradeInga sensorer hittades.Antal AMD/ATI-adaptrar: %dAntal aktiva AMD/ATI-adaptrar: %dAlternativ:Sensortabellens position:InställningarLeverantörerPsensor - TemperaturövervakarePsensors webbplatsPsensor har inte kompilerats med stöd för ATI ADLPsensor har inte kompilerats med med stöd för AppIndicatorPsensor har inte kompilerats med stöd för NVCtrlPsensor har inte kompilerats med stöd för Unity LauncherPsensor har inte kompilerats med stöd för gtop2Psensor har inte kompilerats med stöd för libatasmartPsensor har inte kompilerats med stöd för udisks2Psensor har inte kompilerats med stöd för fjärrsensor.Psensor är ett GTK+-program för att övervaka hårdvarusensorerPsensor är ett GTK+-program för att övervaka hårdvarusensorer, inklusive temperaturer och fläkthastigheter.AvslutaRPMRapportera fel till: %s Resursåtkomst nekad %s riktig sökväg är %sÅterställ fönsterposition och storlekSkript att köra vid larm:Välj sensorfärgSensorSensorinställningarSensorloggfil redan öppen.Sensorloggfil ej öppen.Sensorloggfil ej öppen, kan inte stänga.SensorerLoggintervall för sensor:VisaJämna kurvorProgramstartTemperaturlarmTemperaturenhet:BCM2835 (troligen en Raspberry PI3) har identifieratsÄndringar tillämpas efter att psensor startats om.ÖverkantProva "%s --help" för mer information. Typ:URL: http://localhost:%dOkändUppdateringsintervall:Användning: %s [FLAGGA]... VIA CPUVärdeWWW-mapp: %sWebbserver startad på port: %dWebbservermappen finns inte. _Hjälp_PsensorLedigt minnegettimeofday misslyckades.EtikettMinneminut(er)Högerpsensor-server är en HTTP-server för fjärrövervakning av hårdvarusensorer.sekund(er)Launchpad Contributions: Jean-Philippe Orsini https://launchpad.net/~jfi Josef Andersson https://launchpad.net/~northar Åke Engelbrektson https://launchpad.net/~esonpsensor-1.2.1/po/hr.gmo0000664000175000017500000003205113676133402011670 00000000000000<\ 8 DDWB^k>0EU!hw)* 5K;&*'FaJ6 > I"Tw|' 5;Q eqx| *%*Pk} !# ;\z &%+.Q(% $*ARbg~  #'<U Ydio% 9(=be  #(Dm" +3E5W&'FL Uav } J wEu I U!S[!P!V"<W"?"f"`;###/#*#8$;N$4$-$$$ % 1%R%!o%%%%]%A& P& \&#g&&&$&'& &' ' )'#4'X'^'x' '''' '0'((("(((-(3) <)H)*M) x)))))!)*-*J*$g**#* ** +&)+)P+ z+*+&+&+.+%,,2R,-,, ,*, - -4- E-R-Y-n--- --------.!.%.:. U. `.k.q.x..". .. .!.!/76/:n/x/"0*020"J0+m0000)0&0<1V1^1}11 111A12-2F2M2 f2p222 22&2223!373 @3J3RP3 3z3je/,<{%5B^"dJxE@+} T qRn.~*aS4;s[`AHpoc z)F]k:8l$QuY29g(t>w- 1_ N#P6rMmUf=\K|VI'CiLvyZGD !X37Ohb?W0& --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot open connection to X11 server.%s: Failed to retrieve NVIDIA information.%s: Failed to retrieve NVIDIA product name for GPU %d%s: Failed to retrieve measure of type %x for NVIDIA GPU %d%s: Failed to retrieve number of fans.%s: Unknown NVIDIA product name for GPU %d%s: Wrong feature type.%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: sk_disk_open() failure: %s.%s: wrong string: %s.-10

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.ACPIAMD CPUAMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmApplication IndicatorBackground opacity:Background:BottomCPUCPU and memory usageCannot open log file: %sCannot open sensor log file: %s.CelsiusChip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. CurvesDetailsDiskDisplay sensor in the label (experimental)Display sensor in the list of sensorsDisplay sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnable support of ATI ADLEnable support of NVCtrl (NVidia)Enable support of gtop2Enable support of hddtemp daemonEnable support of libatasmartEnable support of lm-sensorsEnable support of udisks2Enables debug mode.Enables debug mode: %dFahrenheitFailed to activate logging of sensors.Failed to create Web server.Failed to create the directory %s: %sFailed to create thread for monitoring sensorsFailed to load Psensor icon.Failed to load configuration file %s: %sFailed to save configuration file %s.Fan speed alertForeground:GPU with proprietary driverGraphHOME variable not set.HTTP Request: %sHard disk driveHideHide window decorationHide window on startupHigh threshold:Id:Intel CPUInterfaceKeep window belowLaunch on session startupLeftLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:Motherboard, CPU and GPUN/ANVIDIA GPUNameName:No sensors detected.Number of AMD/ATI adapters: %dNumber of active AMD/ATI adapters: %dOptions:Position of sensors table:PreferencesPsensor - Temperature MonitorPsensor HomepagePsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeScript executed when an alarm is raised:Select sensor colorSensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowSmooth curvesStartupTemperature alertTemperature unit:The changes are applied after the restart of psensor.TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... VIA CPUValueWWW directory: %sWeb server started on port: %d_Help_Psensorfree memorygettimeofday failed.memoryminute(s)psensorRightpsensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-21 06:25+0000 Last-Translator: gogo Language-Team: Croatian Language: hr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) --sensor-log-file=PUTANJA postavite PUTANJU datoteke zapisa senzora --sensor-log-interval=S postavite trajanje zapisa senzora u S (sekunde) -d, --debug=LEVEL postavi razinu otklanjanja greške, cijeli broj između 0 i 3 -d, --debug=LEVEL postavi razinu otklanjanja greške, cijeli broj između 0 i 3 -h, --help prikazuje pomoć -v, --version prikazuje informacije o inačici -h, --help prikaz pomoći -v, --version prikaz informacije inačice -l, --log-file=PUTANJA postavite PUTANJU datoteke zapisa -n, --new-instance prisili stvaranje nove Psensor aplikacije -p,--port=PORT ulaz web poslužitelja -w,--wdir=DIR direktorij sadrži stranice web poslužitelja -u, --url=URL URL psensor-poslužitelja, npr: http://hostname:3131%%s početna stranica: <%s> %s: Nemoguće povezivanje s X11 poslužiteljem.%s: Neuspjelo primanje NVIDIA informacija.%s: Neuspjelo čitanje naziva NVIDIA proizvoda za GPU %d%s: Neuspjelo čitanje mjernih jedinica %x za NVIDIA GPU %d%s: NVIDIA: nuespjelo očitavanje broja ventilatora.%s: Nepoznat naziv NVIDIA proizvoda za GPU %d%s: pogrešna vrsta značajki.%s: neuspjelo otvaranje povezivanja.%s: neuspjelo otvaranje socketa.%s: neuspjeh pokretanja: %s.%s: sk_disk_open() neuspjelo: %s.%s: pogrešan string: %s.-10

Stranica nije pronađena - Idite na Glavna stranica

Poslužitelj je prestao reagirat

MaksMinPsensor primjerak je već pokrenut.ACPIAMD CPUAMD: nemogu pronaći ADL biblioteku.AMD: nemoguće je dobiti broj adaptera.AMD: neuspjelo pokretanje ADL-a.AMD: nedostaje ADL API.O programuO PsensoruUključi obavijesti radne površineAlarmProgramičić pokazivačaProzirnost pozadine:Pozadina:DnoCPUKorištenje CPU-a i memorijeNemoguće otvaranje datoteke: %sNemoguće otvaranje datoteke zapisa senzora: %s.CelzijusČip:BojaBoja:BojeAutorsko pravo (C) %s jeanfi@gmail.com Licenca GPLv2: GNU GPL inačica 2 ili novija Ovo je slobodan softver: slobodno ga možete mijenjati i redistribuirati. Ne postoji nikakvo JAMSTVO, propisano zakonom. KrivuljePojedinostiDiskPrikaži senzor u oznaci (eksperimentalno)Prikaži senzor u popisu senzoraPrikaži senzor u izbrnikuIscrtavaj krivulju senzoraUredi osobitostiUredi osobitosti senzoraOmogući brojač Unity pokretačaOmogući izbornikOmogući zapisivanje sensoraOmogući podršku za ATI ADLOmogući podršku za NVCtrl (NVidia)Omogući podršku za gtop2Omogući podršku za hddtemp daemonOmogući podršku za libatasmartOmogući podršku za lm-sensorsOmogući podršku za udisks2Omogućava način otklanjanja greške.Omogućuje način otklanjanja greške: %dFarenhajtNeuspjelo aktiviranje zapisivanja senzora.Neuspjelo stvaranje Web poslužitelja.Neuspjelo stvaranje direktorija %s: %sNeuspjelo stvaranje niza za nadziranje senzoraNeuspjelo učitavanje ikone Psensora.Neuspjelo učitavanje datoteke podešavanja %s: %sNeuspjelo spremanje datoteke podešavanja %s.Upozorenje brzine ventilatoraPrednji plan:GPU s vlasničkim upravljačkim programimaGrafikonHOME varijabla nije postavljena.HTTP Zahtjev: %sČvrsti diskSakrijSakrij ukras prozoraSakrij prozor pri pokretanjuGornja granica:Id:Intel CPUSučeljeDrži prozor ispodPokreni pri pokretanju sesijeLijevoDonja granica:MaksRazdoblje ažuriranja mjera:MjereMinTrajanje nadziranja:Matična ploča, CPU i GPUNedostupnoNVIDIA GPUNazivNaziv:Nema otkrivenih senzora.Broj AMD/ATI adaptera: %dBroj aktivnih AMD/ATI adaptera: %dMogućnosti:Položaj okvira senzora:OsobitostiPsensor - Nadziratelj temperaturePsensor web stranicaPsensor nije kompajliran s udaljenom podrškom senzora.Psensor je GTK+ aplikacija za nadziranje senzora hardvera.Psensor je GTK+ aplikacija za nadziranje hardverskih senzora, koja uključuje temperature i brzinu okretaja ventilatora.ZatvoriOkr/minPrijavi grešku na: %s Vrati položaj i veličinu prozoraSkripta za izvršavanje kada se alarm upaliOdaberi boju senzoraSenzorOsobitosti senzoraDatoteka zapisa senzora je već otvorena.Datoteka zapisa senzora nije otvorena.Datoteka zapisa senzora nije otvorena, nemoguće zatvaranje.SenzoriRazdoblje zapisivanja senzora:PrikažiZaglađene krivuljePokretanjeUpozorenje temperatureJedinica temperature:Promjene će biti primjenjene nakon ponovnog pokretanja psensora.VrhPokušajte `%s --help` za više informacija. Vrsta:URL: http://localhost:%dNepoznatoRazdoblje ažuriranja:Upotreba: %s [MOGUĆNOST]... VIA CPUVrijednostWWW direktorij: %sWeb poslužitelj pokrenut na ulazu: %d_Pomoć_Psensorslobodna memorijadobivanje-vremena-dana neuspjelo.memorijaminuta(e)Desnopsensor-poslužitelj je HTTP poslužitelj za udaljeno nadziranje senzora hardvera.sekunda(i)Launchpad Contributions: Jean-Philippe Orsini https://launchpad.net/~jfi gogo https://launchpad.net/~trebelnik-stefinapsensor-1.2.1/po/fr.gmo0000664000175000017500000002512613676133402011673 00000000000000zH 8I D D B ^O k 0 EK U h P R *f ) *   @`Jv6  "1'Px  %) Bciov}{ +&Bi + / 9CUZim  %96=pe 1RYl"&=C\du  J AKr^@[PnQmz>\9dLHJDg58+4G$|#OG0 x &18' 5H ~#  " A a h p z G ! !!","'G"o"&""$"9"&"#.I#x# ####&##$($-$ >$#H$l$s$$($$$$$$$$% %#'% K%(Y%%K%]%iE&&&&1& ''*.')Y'B''*''((-(42(g(n((((((1()) 7)B)YI) ))TS>o`@H2bc)"\emznyKwJ.0X 6f:;Bv&31  E<u,#^g?=pl Maq!O_4I]r85iCR'G+/hLDPQ-Vd$Wt*7(sj%ZY U FAx9Nk[ --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Failed to retrieve NVIDIA information.%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: sk_disk_open() failure: %s.%s: wrong string: %s.

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.AMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmApplication IndicatorBackground opacity:Background:BottomCPUCannot open log file: %sCannot open sensor log file: %s.Chip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. DiskDisplay sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnables debug mode.Enables debug mode: %dFailed to activate logging of sensors.Failed to create Web server.Failed to load Psensor icon.Fan speed alertForeground:GraphHOME variable not set.HTTP Request: %sHide window decorationHide window on startupHigh threshold:Id:Intel CPUInterfaceKeep window belowLeftLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:N/ANVIDIA GPUNameName:No sensors detected.Options:Position of sensors table:PreferencesPsensor - Temperature MonitorPsensor HomepagePsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeSensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowTemperature alertTemperature unit:TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... ValueWWW directory: %sWeb server started on port: %d_Helpgettimeofday failed.minute(s)psensorRightpsensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-21 09:39+0000 Last-Translator: Jean-Philippe Orsini Language-Team: French <> Language: fr_FR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 09:40+0000 X-Generator: Launchpad (build 17196) --sensor-log-file=PATH assigne le journal du capteur vers PATH --sensor-log-interval=S assigne l'intervalle de journalisation du capteur à S (secondes) -d, --debug=LEVEL assigne le niveau de débogage, nombre entier entre 0 et 3 -d, --debug=LEVEL assigner le niveau de débogage, nombre entier entre 0 et 3 -h, --help afficher cette aide et quitter -v, --version afficher les informations de version et quitter -h, --help afficher cette aide et quitter -v, --version afficher les informations de version et quitter -l, --log-file=PATH assigner le chemin d’accès au journal -n, --new-instance forcer la création d'une nouvelle occurrence de l'application Psensor -p,--port=PORT port du serveur Web -w,--wdir=DIR répertoire contenant les pages du serveur Web -u, --url=URL l'URL de psensor-server, example: http://hostname:3131%Page d'accueil de %s : <%s> %s : impossible de récupérer la valeur de la sous-fonction %s: %s.%s : Impossible d'ouvrir la connexion au serveur X11.%s : Échec de la récupération des information NVIDIA.%s : échec de l'ouverture de la connexion.%s : échec d'ouverture de l'interface de connexion.%s : échec de l'initialisation: %s.%s : échec de sk_disk_open() : %s.%s : mauvaise chaîne: %s.

Page introuvable - Allez à Main page

L’arrêt du serveur a été demandé

MaxMinUne instance de Psensor existe déjà.AMD : impossible de trouver la bibliothèque ADL.AMD : impossible de récupérer le nombre d'adaptateurs.AMD : échec de l'initialisation d'ADL.AMD : L'interface de programmation ADL est manquante.À proposÀ propos de PsensorActiver les notifications du bureauAlarmeIndicateur d'applicationOpacité de l'arrière-plan :Arrière-plan :BasProcesseurImpossible d'ouvrir le journal: %sNe peut ouvrir le journal : %s.Puce :CouleurCouleur :CouleursCopyright © %s wpitchoune@gmail.com License GPLv2 : GNU GPL version 2 ou ultérieure Ceci est un logiciel libre, vous êtes libre de le modifier et de le redistribuer. Ce logiciel n'est accompagné d'ABSOLUMENT AUCUNE GARANTIE, dans les limites autorisées par la loi. DisqueAfficher le capteur dans le menuDessiner la courbe du capteurModifier les préférencesPréférences des capteursActiver le compteur du lanceur de UnityActiver le menuActiver la journalisation des capteursActive le mode de débogage.Activation du mode de déboguage: %dÉchec de l'activation de la journalisation des capteurs.Échec de la création du serveur Web.Échec du chargement de l’icône de Psensor.Alerte ventilateurAvant-plan :GrapheVariable home non définie.Requête HTTP : %sCacher les décorations de la fenêtreCacher la fenêtre au lancementSeuil supérieur :Id :Processeur IntelInterfaceGarder la fenêtre en arrière-planGaucheSeuil inférieur :MaxIntervalle de mise à jour des mesures :MesuresMinDurée de surveillance :N/AProcesseur graphique NVIDIANom :Nom :Aucun capteur détecté.Options :Position de la table des capteurs :PréférencesPsensor - Surveillance des températuresSite internet de PsensorPsensor n'a pas été compilé avec le support de surveillance à distance.Psensor est une application GTK+ pour surveiller les capteurs thermiques et les ventilateurs.Psensor est une application GTK+ pour surveiller les capteurs thermiques et les vitesses de ventilateurs.QuitterTr/mnSignaler les bogues à: %s Rétablir la position et la taille de la fenêtreCapteurPréférences des capteursLe journal des capteurs est déjà ouvert.Le journal des capteurs n'est pas ouvert.Le journal des capteurs n'est pas ouvert, il ne peut être fermé.CapteursInterval de journallisation des capteurs :AfficherAlerte thermiqueUnité de température :HautEssayez « %s --help » pour plus d'informations. Type :URL : http://localhost:%dInconnuIntervalle de mise à jour :Utilisation : %s [OPTION]... ValeurWWW répertoire : %sLe serveur Web a été démarré sur le port : %d_AideÉchec de gettimeofday.minutes(s)Droitepsensor-server est un serveur HTTP pour surveiller à distance les capteurs matérielles.seconde(s)Launchpad Contributions: Jean-Philippe Orsini https://launchpad.net/~jfi Ubuntu-QC-1 https://launchpad.net/~aobreyss londumas https://launchpad.net/~helion331990psensor-1.2.1/po/pt_BR.gmo0000664000175000017500000001711613676133402012272 00000000000000c4LpkqhF H *\ ) *    6 JV "  ' ! @ X ^ l          ( @ L c w        0 @ D N ` o s         %   ;Ge=ve# 7X_r&";CTkq J %8jc)98/Ol! ] * 5$@3e5!  "CJg*w5:$In & (>!\~ *#)"A)d    C{<' /#/S#- 3@\rx" U 4? EIL`5(c HYJB'KV[D]3%Z+,!>&$?*S GT# A16\9)-:^Xb/"_ PQO@F4;U=0M.W<a2N 78RC -h, --help display this help and exit -v, --version display version information and exit -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Failed to retrieve NVIDIA information.%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: sk_disk_open() failure: %s.

Page not found - Go to Main page

MaxMinA Psensor instance already exists.AMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmBackground opacity:Background:Cannot open log file: %sCannot open sensor log file: %s.Chip:ColorColor:ColorsDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable menuEnable sensors loggingEnables debug mode.Enables debug mode: %dFailed to create Web server.Failed to load Psensor icon.Foreground:GraphHOME variable not set.HTTP Request: %sHide window decorationHide window on startupHigh threshold:Id:InterfaceKeep window belowLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:N/ANameName:No sensors detected.Number of AMD/ATI adapters: %dNumber of active AMD/ATI adapters: %dOptions:Position of sensors table:PreferencesPsensor - Temperature MonitorPsensor HomepagePsensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeSensorSensor PreferencesSensor log file already open.Sensor log file not open.SensorsSensors logging interval:ShowTemperature alertTemperature unit:Try `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... ValueWWW directory: %sWeb server started on port: %d_Help_Psensorgettimeofday failed.minute(s)psensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor 0.7.0.x Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-11 21:22+0000 Last-Translator: Jean-Philippe Orsini Language-Team: Brazilian Portuguese Language: pt_BR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) -h, --help exibir esta ajuda e sair -v, --version exibir informação de versão e sair -u, --url=URL a URL do psensor-server, exemplo: http://hostname:3131%Página inicial de %s: <%s> %s: não foi possível obter valor do sub-recurso %s: %s.%s: Não é possível abrir conexão com o servidor X11.%s: Falha ao recuperar informações de NVIDIA.%s: falha em abrir conexão.%s: falha em abrir conexão.%s: falha na inicialização: %s.%s: falha em sk_disk_open(): %s.

Página não encontrada - Ir para a página inicial

MaxMinUma instancia de Psensor já existe.AMD: não foi possível encontrar a biblioteca ADL.AMD: não foi possível obter número de adaptadores.AMD: falha ao iniciar ADL.AMD: está faltando a API da ADL.SobreSobre o PsensorAtivar notificações de desktopAlarmeOpacidade do plano de fundo:Plano de fundo:Não é possível abrir arquivo de log: %sNão é possível abrir arquivo de log do sensor: %s.Chip:CorCor:CoresDesenhar curva do sensorEditar PreferênciasEditar preferências do sensorHabilitar menuHabilitar registro (log) de sensoresAtivar o modo de depuraçãoHabilita modo de depuração: %dFalhou ao criar servidor web.Falha ao carregar o ícone do Psensor.Primeiro plano:GrafoVariável HOME não configurada.Requisição HTTP: %sOcultar decoração da janelaOcultar janela na inicializaçãoLimite superior:ID:InterfaceManter janela abaixoLimite inferior:MaxIntervalo de atualização das medições:MedidasMinDuração do monitoramento:N/DNomeNome:Nenhum sensor detectadoNúmero de adaptadores AMD/ATI: %dNúmero de adaptadores AMD/ATI ativos: %dOpções:Posição da tabela de sensores:PreferênciasPsensor - Monitor de temperaturaSite do PsensorPsensor é uma aplicação GTK+ para monitorar sensores de hardwarePsensor é um aplicativo GTK+ para monitoramento de sensores de hardware, incluindo temperatura e velocidade de ventoinhas.SairRPMRelatar falhas para: %s Restaurar posição e tamanho da janelaSensorPreferências de sensoresArquivo de registro do sensor já está aberto.Arquivo de registros do sensor não foi aberto.SensoresIntervalo de registro dos sensores:MostrarAlerta de temperaturaUnidade de temperatura:Utilize `%s --help' para mais informações. Tipo:URL: http://localhost:%dDesconhecidoIntervalo de atualização:Uso: %s [OPÇÃO]... ValorDiretório WWW: %sServidor web iniciado na porta: %dAjuda_Psensorfalha em gettimeofday.minuto(s)psensor-server é um servidor HTTP para monitoramento remoto de sensores de hardware.segundo(s)Launchpad Contributions: Celio Alves https://launchpad.net/~celio.alves Daniel Serafim https://launchpad.net/~daniel-serafim Jean-Philippe Orsini https://launchpad.net/~jfi MestreLion https://launchpad.net/~mestrelion Rafael Neri https://launchpad.net/~rafepelpsensor-1.2.1/po/hu.gmo0000664000175000017500000002737213676133402011705 00000000000000\p 8q D D B4 ^w k 0B Es U hxz*)*&E`J6  &"1T\'{  ) =IPT m*%1BZ x &%;%X ~   :?NRktx %  %1O9`=e>CG [(|""<AI[m&q&,5 J TJb R\_RPb~2EMeUe!#=4?r3* %+ Q p  X C -! 8!(C!l!9{!0!)!"("1"$E" j"t"" "" "("2"#$#*#0#7#1?#q$;w$6$3$$%C%+`%2%%,%#&&&& M&6X&-&,&,&4' L'V'!_''''' ''( ((8(>(U(!]( (((((((((#) &)2)Q) `))F)F)"* **'*7*$+ =+I+1d+*+>+ , ,#, 2,<, U,v,@},,, ,,-!-0-8-,K-x-----Z- ..H"xsa:^D!82zO`IJ{k]U} _0q 5of;+Q)p&>t6 *Pm~K-#r@wigynY.=Z| X <RVdE[hub\L%GFj,3 leBTA(cSW4?1C9/$N7v'M --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Failed to retrieve NVIDIA information.%s: Wrong feature type.%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: wrong string: %s.-1

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.AMD CPUAMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmApplication IndicatorBackground opacity:Background:BottomCPUCannot open log file: %sCannot open sensor log file: %s.CelsiusChip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. DiskDisplay sensor in the label (experimental)Display sensor in the list of sensorsDisplay sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnables debug mode.Enables debug mode: %dFahrenheitFailed to activate logging of sensors.Failed to create Web server.Failed to create the directory %s: %sFailed to load Psensor icon.Failed to save configuration file %s.Foreground:GraphHOME variable not set.HTTP Request: %sHide window decorationHide window on startupHigh threshold:Id:Intel CPUInterfaceKeep window belowLaunch on session startupLeftLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:N/ANVIDIA GPUNameName:No sensors detected.Number of AMD/ATI adapters: %dNumber of active AMD/ATI adapters: %dOptions:Position of sensors table:PreferencesPsensor - Temperature MonitorPsensor HomepagePsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeScript executed when an alarm is raised:SensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowStartupTemperature alertTemperature unit:TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... VIA CPUValueWWW directory: %sWeb server started on port: %d_Help_Psensorgettimeofday failed.minute(s)psensorRightpsensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-20 11:26+0000 Last-Translator: Jean-Philippe Orsini Language-Team: Hungarian Language: hu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) --sensor-log-file=ÚTVONAL érzékelők naplójának beállítása az ÚTVONALRA --sensor-log-interval=S érzékelő naplózási gyakoriságának beállítása S másodpercre -d, --debug=LEVEL hibakeresési szint beállítása, egész 0 és 3 között -d, --debug=LEVEL hibakeresési szint beállítása, egész 0 és 3 között -h, --help ezen súgó megjelenítése, majd kilépés -v, --version verzióinformáció megjelenítése, majd kilépés -h, --help ezen súgó megjelenítése, majd kilépés -v, --version verzióinformációk megjelenítése, majd kilépés -l, --log-file=ÚTVONAL a naplófájl ÚTVONALÁNAK beállítása -n, --new-instance új Psensor alkalmazás indításának kényszerítése -p,--port=PORT webkiszolgáló portja -w,--wdir=DIR a webkiszolgáló oldalait tartalmazó mappa -u, --url=URL a psensor-server URL-címe, például: http://gepnev:3131%%s honlap: <%s> %s: alfunkció értékének lekérdezése meghiúsult %s: %s.%s: Nem lehet létrehozni a kapcsolatot az X11 kiszolgálóval.%s: NVIDIA információinak lekérése meghiúsult.%s: rossz funkciótípus.%s: a kapcsolat megnyitása nem sikerült.%s: foglalat megnyitása meghiúsult.%s: előkészítési hiba: %s.%s: rossz karakterlánc: %s.-1

Az oldal nem található - Ugrás a Főoldalra

A kiszolgáló leállítást kért

MaxMinA Psensors egy példánya már létezik.AMD processzorAMD: Nem sikerült betölteni az ADL programkönyvtárat.AMD: adapterek számainak lekérése meghiúsultAMD: az ADL előkészítése meghiúsult.AMD: hiányzó ADL API.NévjegyA Psensor névjegyeAsztali értesítések bekapcsolásaRiasztásAlkalmazás IndikátorHáttér átlátszósága:Háttér:AlulProcesszorA naplófájl megnyitása sikertelen: %s%s érzékelő naplófájlját nem lehet megnyitniCelsiusChip:SzínSzín:SzínekCopyright (C) %s jeanfi@gmail.com Licenc: GNU General Public License második (vagy bármely későbbi) változata Ez egy szabad szoftver: szabadon terjesztheti és/vagy módosíthatja NINCS GARANCIA, a jogszabályok által megengedett mértékben. LemezÉrzékelők megjelenítése a címkén (fejlesztés alatt)Érzékelő megjelenítése az érzékelők listájánÉrzékelők megjelenítése az alkalmazásmenübenÉrzékelő görbéjének rajzolásaBeállítások szerkesztéseÉrzékelő beállításainak szerkesztéseUnity indítón lévő számláló engedélyezéseMenü engedélyezéseÉrzékelők naplózásának engedélyezéseHibakeresési mód engedélyezése.Hibakeresési mód engedélyezése: %dFahrenheitÉrzékelők naplózásának aktiválása meghiúsult.Nem sikerült létrehozni a webkiszolgálót.Nem sikerült a mappa létrehozása: %s - %sNem sikerült betölteni a Psensor ikonját.Nem sikerült a konfigurációs fájlt elmenteni: %sElőtér:GrafikonHOME változó nincs beállítva.HTTP-kérés: %sAblakdíszítés elrejtéseAblak elrejtése induláskorFelső küszöbérték:Azonosító:Intel processzorFelületAblak alul tartásaIndítás a munkamenettelBalraAlsó küszöbérték:MaximumMérések frissítési időköze:MérésekMinimumFigyelés hossza:---NVIDIA videokártyaNévNév:Nem találhatók érzékelők.ADM/ATI adapterek száma: %dAktív ADM/ATI adapterek száma: %dKapcsolók:Érzékelőtábla pozíciója:BeállításokPsensor - hőmérsékletfigyelőA Psensor honlapjaA Psensor távoli érzékelők támogatása nélkül lett lefordítva.A Psensor egy GTK+ alkalmazás a hardver érzékelőinek figyeléséreA Psensor egy GTK+ alkalmazás a hardver érzékelőinek figyelésére, beleértve a hőmérsékleteket és a ventilátor sebességét.KilépésRPMA talált hibákat itt jelentse be: %s Ablak pozíciójának és méretének visszaállításaParancsfájl futtatás riasztáskor:ÉrzékelőÉrzékelő beállításaiAz érzékelő naplófájlja már meg van nyitva.Az érzékelő naplófájlja nincs nyitva.Az érzékelő naplófájlja nincs nyitva, nem lehet bezárni.ÉrzékelőkNaplózás időköze:MegjelenítésIndításHőmérséklet riasztásHőmérséklet mértékegysége:FelülTovábbi információkért adja ki a „%s --help” parancsot. Típus:URL: http://localhost:%dIsmeretlenFrissítési időköz:Használat: %s [KAPCSOLÓK]... VIA processzorÉrtékWWW könyvtár: %sA webkiszolgáló elindult ezen a porton: %d_Súgó_Psensorgettimeofday meghiúsult.percJobbraA psensor-server egy HTTP kiszolgáló a hardver érzékelőinek figyelésére távolról.másodpercLaunchpad Contributions: Bence Lukács https://launchpad.net/~lukacs-bence1 Gabor Kelemen https://launchpad.net/~kelemeng Jean-Philippe Orsini https://launchpad.net/~jfi Richard Somlói https://launchpad.net/~ricsipontazpsensor-1.2.1/po/pl.gmo0000664000175000017500000003556613676133402011710 00000000000000 8DDBL^k0ZEUh'*)*5A;w&*2JiJ6* a l"w' % +9X^t   !'.53:B*G%r /!Ik   $&/V%s.( %/U eq  &8RWfjo  %(NW r ~/4.6K-3/9=Ne  (0 Y m t   "   ! !!!1!5C!y!&}!!!!!!!!""$2"W"]" f"r""" " "J" "#'#A<$N~$E$M%^a%k%@,&?m&l&h'''4'5'# (31(Ae(D(7($)"@)-c))+)&)%)%$*J*g*j*^l*=* + + +@+ E+)R+&|+*++ ++!,&,,,@,[,a,g,"p,,+,(,2-3-<-B-H-O- V-d. k.w./|.'...//7/ V/c//!// //000J0e0 04010-0@#16d1=1217 2D2b2"q22 22 2222 33!3 03:3Q3l3 q3~33#33333:3 4 4+41484G4X4"q444 444#415MA50585/56)61`6?6E6u7777"7.7 8 8(8*?8$j8:88!888 99+9:B9}9799999: : ':1:*A:+l:::: :::::T: M;W; FsR2,XW"h/-bMJ@\[a3y }*d'Qxq=of){Kmr:^ p#7iS%c0~`k u_gAz.?DHL>69C|Gvj&8B4;w!U$5OINY+]Etel(P1<TVnZ --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Fail to connect to: %s%s: Failed to retrieve NVIDIA information.%s: Failed to retrieve NVIDIA product name for GPU %d%s: Failed to retrieve measure of type %x for NVIDIA GPU %d%s: Failed to retrieve number of fans.%s: Invalid JSON: %s%s: Invalid content: %s%s: Unknown NVIDIA product name for GPU %d%s: Wrong feature type.%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: sk_disk_open() failure: %s.%s: wrong string: %s.-10

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.ACPIAMD CPUAMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmApplication IndicatorBackground opacity:Background:BottomCPUCPU and memory usageCPU usageCannot get real path of %sCannot open log file: %sCannot open sensor log file: %s.CelsiusChip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. CurvesDetailsDiskDisplay sensor in the label (experimental)Display sensor in the list of sensorsDisplay sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnable support of ATI ADLEnable support of NVCtrl (NVidia)Enable support of gtop2Enable support of hddtemp daemonEnable support of libatasmartEnable support of lm-sensorsEnable support of udisks2Enables debug mode.Enables debug mode: %dFahrenheitFailed to activate logging of sensors.Failed to create Web server.Failed to create the directory %s: %sFailed to create thread for monitoring sensorsFailed to load Psensor icon.Failed to load configuration file %s: %sFailed to load glade file %s: %sFailed to save configuration file %s.Fan speed alertForeground:GPU with proprietary driverGraphHOME variable not set.HTTP Request: %sHard disk driveHideHide window decorationHide window on startupHigh threshold:Id:Intel CPUInterfaceKeep window belowLaunch on session startupLeftLow threshold:MaxMax:Measure update interval:MeasuresMinMin:Monitoring duration:Motherboard, CPU and GPUN/ANVIDIA GPUNameName:No graphs enabledNo sensors detected.Number of AMD/ATI adapters: %dNumber of active AMD/ATI adapters: %dOptions:Position of sensors table:PreferencesProvidersPsensor - Temperature MonitorPsensor HomepagePsensor has not been build with ATI ADL supportPsensor has not been build with AppIndicator supportPsensor has not been build with NVCtrl supportPsensor has not been build with Unity Launcher supportPsensor has not been build with gtop2 supportPsensor has not been build with libatasmart supportPsensor has not been build with udisks2 supportPsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeScript executed when an alarm is raised:Select sensor colorSensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowSmooth curvesStartupTemperature alertTemperature unit:The changes are applied after the restart of psensor.TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... VIA CPUValueWWW directory: %sWeb server started on port: %dWebserver directory does not exist. _Help_Psensorfree memorygettimeofday failed.labelmemoryminute(s)psensorRightpsensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor 1.2.0 Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2016-08-25 11:09+0200 Last-Translator: hawkeye116477 Language-Team: Polish Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --sensor-log-file=ŚCIEŻKA ustaw ŚCIEŻKĘ do pliku dziennika --sensor-log-interval=S ustaw częstość logowania czujników na S (sekund) -d, --debug=POZIOM ustaw poziom debugowania, liczba całkowita 0-3 -d, --debug=POZIOM ustaw poziom debugowania, liczbę całkowitą od 0 do 3 -h, --help wyświetl pomoc i wyjdź -v, --version wyświetl informacje o wersji i wyjdź -h, --help wyświetl pomoc i wyjdź -v, --version wyświetl informacje o wersji i wyjdź -l, --log-file=ŚCIEŻKA ustaw ŚCIEŻKĘ do pliku dziennika -n, --new-instance wymuś utworzenie nowej aplikacji Psensor -p,--port=PORT port serwera sieciowego -w,--wdir=KATALOG katalog zawierający strony serwera sieciowego -u, --url=URL adres URL serwera psensor, przykład: http://nazwahosta:3131%Strona internetowa %s: <%s> %s: Nie można uzyskać wartości podfunkcji %s: %s.%s: Nie można otworzyć połączenia do serwera X11.%s: Nie udało się połączyć: %s%s: Nie powiodło się uzyskanie informacji NVIDIA.%s: Nie powiodło się uzyskanie nazwy produktu NVIDIA dla GPU %d%s: Nie powiodło się uzyskanie pomiarów typu %x dla GPU NVIDIA %d%s: Nie powiodło się uzyskanie ilości wentylatorów.%s: Nieprawidłowy JSON: %s%s: Nieprawidłowa zawartość: %s%s: Nieznana nazwa produktu NVIDIA dla GPU %d%s: Błędny typ funkcji.%s: nie udało się otworzyć połączenie.%s: nie udało się otworzyć gniazdo.%s: nie powodzenie inicjalizacji: %s.%s: sk_disk_open() niepowodzenie: %s.%s: błędne wyrażenie: %s.-10

Strona nie znaleziona - Przejdź do strony głównej

Żądano zatrzymania serwera

MaxMinInstancja Psensor już istnieje.ACPIProcesor AMDAMD: nie można znaleźć biblioteki ADL.AMD: nie można uzyskać ilości kart.AMD: nie powiodła się inicjalizacja ADL.AMD: brakuje API ADL.O programieO programie PsensorAktywuj powiadomienia na pulpicieAlarmWskaźnik aplikacjiNieprzezroczystość tła:Tło:DółProcesorWykorzystanie pamięci i procesoraWykorzystanie procesoraNie można uzyskać prawdziwej ścieżki %sNie można otworzyć pliku dziennika: %sNie można otworzyć pliku dziennika czujnika: %s.CelsjuszChip:KolorKolor:KoloryCopyright (C) %s jeanfi@gmail.com Licencja GPLv2: GNU GPL wersja 2 lub nowsza To jest wolne oprogramowanie: możesz je dowolnie modyfikować i rozpowszechniać. NIE MA GWARANCJI w zakresie dozwolonym przez prawo. KrzyweSzczegółyDyskWyświetl czujnik w etykiecie (eksperymentalne)Wyświetl czujnik na liście czujnikówWyświetl czujnik w menuNarysuj krzywą czujnikaEdycja preferencjiEdycja preferencji czujnikówWłącz licznik Unity LauncherWłącz menuWłącz logowanie czujnikówWłącz obsługę ATI ADLWłącz obsługę NVCtrl (NVidia)Włącz obsługę gtop2Włącz obsługę demona hddtempWłącz obsługę libatasmartWłącz obsługę lm-sensorsWłącz obsługę udisks2Włącza tryb debugowania.Włącza tryb debugowania: %dFahrenheitNie powiodło się włączenie logowania czujników.Nie powiodło się utworzenie serwera sieciowego.Nie powiodło się utworzenie katalogu %s: %sNie powiodło się utworzenie wątku do monitorowania czujnikówNie powiodło się załadowanie ikony programu PsensorNie powiodło się załadowanie pliku konfiguracyjnego %s: %sNie powiodło się załadowanie pliku glade %s: %sNie powiodło się zapisanie pliku konfiguracyjnego %s.Alarm prędkości wentylatoraPierwszy plan:GPU z własnościowym sterownikiemWykresZmienna HOME nie jest ustawiona.Żądanie HTTP: %sDysk twardyUkryjUkryj dekorację oknaUkryj okno przy starcieWysoki próg:Id:Procesor IntelInterfejsUtrzymaj okno poniżejUruchom przy starcie sesjiLewoNiski próg:MaxMax:Częstość aktualizacji pomiarów:PomiaryMinMin:Czas trwania monitorowania:Płyta główna, procesor (CPU) i procesor graficzny (GPU)NiedostępneGPU NVIDIANazwaNazwa:Brak wykresówBrak czujników.Ilość kart AMD/ATI: %dIlość aktywnych kart AMD/ATI: %dOpcje:Pozycja tabeli czujników:PreferencjeDostawcyPsensor - kontroler temperaturyStrona internetowa programu PsensorPsensor nie został zbudowany z obsługą ATI ADLPsensor nie został zbudowany z obsługą wskaźnika aplikacji (AppIndicator)Psensor nie został zbudowany z obsługą NVCtrlPsensor nie został zbudowany z obsługą Unity LauncherPsensor nie został zbudowany z obsługą gtop2Psensor nie został zbudowany z obsługą libatasmart Psensor nie został zbudowany z obsługą udisks2Psensor nie został skompilowany z obsługą zdalnego czujnika.Psensor jest aplikacją GTK+ do monitorowania czujników sprzętowychPsensor jest aplikacją GTK+ do monitorowania czujników sprzętowych, w tym temperatury i prędkości wentylatorów.Zamknijobr./minZgłoś błędy do: %s Przywróć pozycję i rozmiar oknaWykonywany skrypt, gdy podniesiony jest alarm:Wybierz kolor czujnikaCzujnikPreferencje czujnikówPlik dziennika czujnika jest już otwarty.Plik dziennika czujnika nie otwarty.Plik dziennika czujnika nie otwarty, nie można zamknąć.CzujnikiCzęstość logowania czujników:PokażGładkie krzyweUruchamianieAlarm temperaturyJednostka temperatury:Zmiany zostaną zatwierdzone po restarcie programu psensorGóraSpróbuj `%s --help', aby uzyskać więcej informacji. Typ:Adres URL: http://localhost:%dNieznanyCzęstość aktualizacji:Użycie: %s [OPCJA]... Procesor VIAWartośćKatalog WWW: %sSerwer sieciowy uruchomiony pod portem: %dŚcieżka serwera sieciowego nie istnieje. Pomoc_Psensorwolna pamięćgettimeofday nie powiodło się.etykietapamięćminut(y)Prawopsensor-server jest serwerem HTTP do zdalnego monitorowania czujników sprzętowych.sekund(y)Contributions: hawkeye116477psensor-1.2.1/po/nl.gmo0000664000175000017500000002407713676133402011701 00000000000000t\ 8 D DO B ^ k6 0 E U ho   * ) *C n     J 6A x "'/ 5Cbh | 0 NZq&  &7Neu y%&LU p|9=e# ( ("Bem&&,>]cl J wAkVOMT`s:wLPoP2. '<d~ T@G  ++. %Fb gt" "."(/747 l   %  - !#5!7Y!!%! !!#!""5"U"h"l"|"""%"""""""##'8#`#h# ###H#F $vS$ $$$%$=%Q%X%(i%'%9%%6%4&:&R&*f&&&&&&& &''%''.' V'Uc' 'z'[sk>]8b:; Ncm?d4IC`j /<t3M@RJ0#OKng=!.qQES)aG6BiXA7+pP^($De%59VWT1,LrYHh*2l"'_ \Z -&foF U --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Failed to retrieve NVIDIA information.%s: Wrong feature type.%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: wrong string: %s.

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.AMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmBackground opacity:Background:Cannot open log file: %sCannot open sensor log file: %s.Chip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Display sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnables debug mode.Enables debug mode: %dFailed to activate logging of sensors.Failed to create Web server.Failed to load Psensor icon.Foreground:GraphHOME variable not set.HTTP Request: %sHide window decorationHide window on startupHigh threshold:Id:InterfaceKeep window belowLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:N/ANameName:No sensors detected.Number of AMD/ATI adapters: %dNumber of active AMD/ATI adapters: %dOptions:Position of sensors table:PreferencesPsensor - Temperature MonitorPsensor HomepagePsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeScript executed when an alarm is raised:SensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowTemperature alertTemperature unit:Try `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... ValueWWW directory: %sWeb server started on port: %d_Help_Psensorgettimeofday failed.minute(s)psensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-20 11:25+0000 Last-Translator: Jean-Philippe Orsini Language-Team: Dutch Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) --sensor-log-file=PATH stel het sensorlogboekbestand in op PATH --sensor-log-interval=S stel de tussenpoze voor het sensorlogboek in op S (seconden) -d, --debug=LEVEL stel het foutopsporingsniveau in, integer tussen 0 en 3 -d, --debug=LEVEL stel het foutopsporingsniveau in, integer tussen 0 en 3 -h, --help toon deze hulptekst en sluit af -v, --version toon versie-infomatie en sluit af -h, --help toon deze hulpinformatie en sluit af -v, --version toon versie-informatie en sluit af -l, --log-file=PATH stel het logboekbestand in op PATH -n, --new-instance forceer het aanmaken van een nieuwe Psensor-toepassing -p,--port=PORT webserverpoort -w,--wdir=DIR map die webserverpagina's bevat -u, --url=URL het webadres van de psensor-server, voorbeeld: http://hostname:3131%Webpagina van %s: <%s> %s: kan waarde van subfunctie %s niet bepalen: %s.%s: Kan verbinding met X11-server niet openen.%s: Kon Nvidia-informatie niet ophalen.%s: verkeerd functietype.%s: kon verbinding niet openen.%s: kon contactpunt niet openen.%s: opstartfout: %s.%s: verkeerde tekenreeks: %s.

Pagina niet gevonden - ga naar Hoofdpagina

Stilzetting van server verzocht

MaxMinEr bestaat reeds een instantie van Psensor.AMD: kan ADL-bibliotheekbestand niet vindenAMD: kan het aantal videokaarten niet bepalen.AMD: kon ADL niet initialiseren.AMD: ontbrekende ADL's API.OverOver PsensorBureaubladmeldingen inschakelenAlarmOndoorzichtigheid van achtergrond:Achtergrond:Kan logboekbestand niet openen: %sKan logboekbestand van sensor niet openen: %s.Chip:KleurKleur:KleurenAuteursrecht (C) %s jeanfi@gmail.com Licentie GPLv2: GNU GPL versie 2 of nieuwer Dit is vrije programmatuur: u mag hem wijzigen en doorgeven. Er zit geen garantie op, voor zover de wet dat toestaat. Sensor tonen in het menu van de ToepassingsindicatorSensor-curve tekenenVoorkeuren bewerkenSensorvoorkeuren bewerkenTeller voor Unity-starter inschakelenMenu inschakelenLogboeken bijhouden inschakelen voor sensorenSchakelt foutopsporingsmodus in.Schakelt foutopsporingsmodus in: %dKon logboeken bijhouden niet inschakelen voor sensoren.Kon geen webserver maken.Kon pictogram van Psensor niet laden.Voorgrond:GrafiekVariabele voor HOME niet ingesteld.HTTP-verzoek: %sVensteromlijsting verbergenVenster bij opstarten verbergenDrempel voor hoog:Id:BedieningsschilHoud venster eronderDrempel voor laag:MaxTussenpoze voor bijwerken van meting:MetingenMinDuur van bewaking:N.v.t.NaamNaam:Geen sensoren bespeurd.Aantal AMD/ATI-videokaarten: %dAantal actieve AMD/ATI-videokaarten: %dOpties:Positie van sensorentabel:VoorkeurenPsensor - TemperatuurbewakerThuispagina van PsensorPsensor os niet gecompileerd met ondersteuning voor sensoren op afstand.Psensor is een GTK+ toepassing voor het bewaken van apparatuursensorenPsensor is een GTK+ toepassing voor het bewaken van apparatuursensoren, inclusief temperaturen en ventilatorsnelheden.AfsluitenRPMMeld fouten aan: %s Vensterpositie en -grootte herstellenScript dat wordt uitgevoerd wanneer er een alarm plaatsvindt:SensorSensorvoorkeurenLogboekbestand van sensor is al geopend.Logboekbestand van sensor niet geopend.Logboekbestand van sensor niet geopend, kan niet sluiten.SensorenTussenpoze voor bijhouden van logboeken voor sensoren:TonenTemperatuurwaarschuwingTemperatuureenheid:Probeer '%s --help' voor meer informatie. Soort:URL: http://localhost:%dOnbekendTussenpoze voor bijwerken:Gebruik: %s [OPTIE]... WaardeWWW-map: %sWebserver gestart op poort: %d_Hulp_Psensorgettimeofday (tijdbepaling) is mislukt.minu(u)t(en)psensor-server is een HTTP-server voor het bewaken van apparatuursensoren op afstand.seconde(n)Launchpad Contributions: Jean-Philippe Orsini https://launchpad.net/~jfi Pjotr12345 https://launchpad.net/~computertippsensor-1.2.1/po/lv.gmo0000664000175000017500000002424213676133402011703 000000000000004L 8 DR D B ^ k~ 0 E Ua h  "*6)a*(>JA6  "'#Kj   6>DJQX]x  &*Qn   -GL[_x % 2>\9m=eKPT h("'/INVhz&~39B W aJo y9QOZH6fs6Z?[o-7,+F#e!VA>  "#!*)T X#d!* # 0 7 ? G 0M ~   (  ! !$,!&Q! x!-!&!#!! ""4"K""^""" """" """'" &#1#6#M# Q# \# f#q###### #!#$80$;i$m$%%%"9%/\%%%(%%%/%(&#0&T& \&g&~&&;&&& & '&'C' K' U'&b' ''' ''Q' (y((1 [;_+=?d&rRP{gJIO"Z #.h(H^3|0]lWG!7<~4be)cMX:wuB}jE o*LxmYvAFU`\ts@qaD,C V %kfnzSQ6pi$9'>yT28N -5K/ --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Failed to retrieve NVIDIA information.%s: Wrong feature type.%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: wrong string: %s.-1

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.AMD CPUAMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmApplication IndicatorBackground opacity:Background:BottomCPUCannot open log file: %sCannot open sensor log file: %s.CelsiusChip:ColorColor:ColorsDiskDisplay sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnables debug mode.Enables debug mode: %dFahrenheitFailed to activate logging of sensors.Failed to create Web server.Failed to load Psensor icon.Foreground:GraphHOME variable not set.HTTP Request: %sHide window decorationHide window on startupHigh threshold:Id:Intel CPUInterfaceKeep window belowLaunch on session startupLeftLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:N/ANVIDIA GPUNameName:No sensors detected.Number of AMD/ATI adapters: %dNumber of active AMD/ATI adapters: %dOptions:Position of sensors table:PreferencesPsensor - Temperature MonitorPsensor HomepagePsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeScript executed when an alarm is raised:SensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowStartupTemperature alertTemperature unit:TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... VIA CPUValueWWW directory: %sWeb server started on port: %d_Help_Psensorgettimeofday failed.minute(s)psensorRightpsensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-20 11:26+0000 Last-Translator: Jean-Philippe Orsini Language-Team: Latvian Language: lv MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) --sensor-log-file=CEĻŠ sensora žurnāla faila ceļš --sensor-log-interval=S iestata sensora žurnāla intervālu uz S (sekundēm) -d, --debug=LĪMENIS iestatīt atkļūdošanas līmeni, vesels skaitlis starp 0 un 3 -d, --debug=LĪMENIS iestatīt atkļūdošanas līmeni, starp 0 un 3 -h, --help rādīt šo palīdzību un iziet -v, --version rādīt versijas informāciju un iziet -h, --help rādīt šo palīdzību un iziet -v, --version rādīt versijas informāciju un iziet -l, --log-file=CEĻŠ žurnalēšanas faila ceļš -n, --new-instance piespiest izveidot jaunu Psensor lietotni -p,--port=PORTS tīmekļa servera ports -w,--wdir=DIR mape ar tīmekļa servera lapām -u, --url=SAITE psensor-server adrese, piemērs: http://saimniekdatoravārds:3131%%s mājas lapa: <%s> %s: nevar iegūt vērtību no apakšīpašības %s: %s.%s: Nevar atvērt savienojumu ar X11 server.%s: Neizdevās saņemt NVIDIA informāciju.%s: nepareis īpašības tips.%s: neizdevās atvērt savienojumu.%s: neizdevās atvērt ligzdu.%s: inicializācijas kļūda: %s.%s: nepareiza virkne: %s.-1

Lapa nav atrasta - dodieties uz galveno lapu

Servera apturēšana pieprasīta

Maks.Min.Psensor instance jau eksistē.AMD CPUAMD: nevar atrast ADL bibliotēku.AMD: nevar saņemt adapteru skaitu.AMD: neizdevās inicializēt ADL.AMD: trūkst ADL programmatūras saskarne.ParPar PsensorAktivizēt darbvirsmas paziņojumusTrauksmeAplikāciju indikatorsFona necaurspīdība:Fons:LejāCPUNevar atvērt žurnāla failu: %sNevar atvērt sensora žurnāla failu: %s.CelsijsMikroshēma:KrāsaKrāsa:KrāsasDisksRādīt sensoru aplikāciju indikatora izvēlnēZīmēt sensora līkniRediģēt iestatījumusRediģēt sensoru iestatījumusAktivizēt Unity palaidēja skaitītājuAktivizēt izvēlniAktivizēt sensora žurnalēšanuAktivizēt atkļūdošanas režīmu.Aktivizē atkļūdošanas režīmu: %dFārenheitsNeizdevās aktivizēt sensoru žurnalēšanu.Neizdevās izveidot tīmekļa serveri.Neizdevās ielādēt Psensor ikonu.Priekšplāns:GrafiksHOME mainīgais nav iestatīts.HTTP pieprasījums: %sSlēpt loga apdariSlēpt logu pieteicoties sistēmāAugsts slieksnis:Id:Intel CPUSaskarneTurēt logu apakšāPalaist pieteicoties sistēmāPa kreisiZems slieksnis:Maks.Mērījumu atjaunināšanas intervāls:MērījumiMin.Pārraudzības ilgums:N/PNVIDIA GPUNosaukumsNosaukums:Sensori nav atklāti.AMD/ATI adapteru skaits: %dAktīvo AMD/ATI adapteru skaits: %dOpcijas:Sensoru tabulas novietojums:IestatījumiPsensor - temperatūras pārraugsPsensor mājas lapaPsensor nav kompilēts ar attālināto sensoru atbalstu.Psensor ir GTK+ lietotne aparatūras sensoru pārraudzībaiPsensor ir GTK+ lietotne aparatūras sensoru pārraudzībai, ieskaitot temperatūras un ventilatoru ātrumus.IzietRPMZiņojiet kļūdas uz: %s. Atjaunot loga pozīciju un izmēruSkrips izpildīts, kad trauksme ir aktivizēta:SensorsSensoru iestatījumiSensora žurnāla fails jau ir atvērts.Sensora žurnāla fails nav atvērts.Sensora žurnāls nav atvērts, nevar aizvērt.SensoriSensoru žurnalēšanas intervāls:RādītPalaišanaTemperatūras trauksmeTemperatūras mērvienība:AugšāMēģiniet `%s --help', lai iegūtu vairāk informācijas. Tips:Saite: http://localhost:%dNezināmsAtjaunināšanas intervāls:Lietošana: %s [OPCIJAS]... VIA CPUVērtībaWWW mape: %sTīmekļa serveris sākts uz porta: %d_Palīdzība_Psensorgettimeofday neizdevās.minūte(s)Pa labipsensor-server ir HTTP serveris aparatūras sensoru attālinātai pārraudzībai.sekunde(s)Launchpad Contributions: Jean-Philippe Orsini https://launchpad.net/~jfi tuxmaniack https://launchpad.net/~tuxmaniackpsensor-1.2.1/po/insert-header.sin0000644000175000017500000000124013353521057014011 00000000000000# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } psensor-1.2.1/po/boldquot.sed0000644000175000017500000000033113353521057013072 00000000000000s/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g s/“/“/g s/”/”/g s/‘/‘/g s/’/’/g psensor-1.2.1/po/zh_CN.gmo0000664000175000017500000002167113676133402012266 00000000000000m@ 8A Dz B ^ ka 0 E UD h   * )D *n   J 6$ [ f "q  '    &EK _kr  8D[o& !8O_ cm !?9P=e.37 Kls"&=C\du J 3=}P?BKQUT2H={^_xz*-!"$KG6!$)Nk) $. 5?F*Do ;Z y   #-C JT jt|  #5 _F      $!!+!-M! {!! !!!.!!!"""0"4" D" e"p""A""",Cac[ ".@^ ERl+I=\O 5V3M8J>K0]*_U`$b2AgGh?S;<eD9 'H17i)Tj&#LX QP(Y6:!-%fdBZ FkWmN4/ --sensor-log-file=PATH set the sensor log file to PATH -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Failed to retrieve NVIDIA information.%s: initialization failure: %s.%s: sk_disk_open() failure: %s.

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.AMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmBackground opacity:Background:BottomCannot open log file: %sCannot open sensor log file: %s.Chip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Display sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnables debug mode.Enables debug mode: %dFailed to activate logging of sensors.Failed to create Web server.Failed to load Psensor icon.Foreground:GraphHOME variable not set.HTTP Request: %sHide window decorationHide window on startupHigh threshold:Id:InterfaceKeep window belowLeftLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:N/AName:No sensors detected.Options:Position of sensors table:PreferencesPsensor - Temperature MonitorPsensor HomepagePsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeSensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsShowTemperature alertTemperature unit:TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... ValueWWW directory: %sWeb server started on port: %d_Helpgettimeofday failed.minute(s)psensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-11 21:24+0000 Last-Translator: Jean-Philippe Orsini Language-Team: Chinese (simplified) Language: zh_CN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) --sensor-log-file=路径 设置监测器日志文件的路径 -d, --debug=LEVEL 设置调试级别,0~3 之间的整数 -d,--debug=LEVEL 设置调试等级,等级为 0 到 3 之间的整数 -h, --help 显示本帮助并退出 -v, --version 显示版本信息并退出 -h, --help 显示这个帮助并退出 -v, --version 显示版本信息并退出 -l, --log-file=PATH 将日志文件设为 PATH -n, --new-instance 强制创建一个新的 Psensor 例程 -p,--port=PORT 网络服务器端口 -w,--wdir=DIR 包括网络服务器页面的目录 -u, --url=URL psensor 服务器 URL 例如:http://hostname:3131%%s 主页:<%s> %s:无法获取子功能%s的值:%s。%s: 无法打开到 X11 服务器的连接。%s: 无法获取 NVIDIA 信息。%s:初始化失败:%s。%s:sk_disk_open() 失败:%s。

未找到页面 - 请访问主页

服务器停止请求

最大值最小值已存在一个 Psensor 例程。AMD:未找到 ADL 库。AMD:无法获取适配器数目。AMD:ADL 初始化出错。AMD:ADL 的 API 丢失。关于关于 Psensor激活桌面气泡提示警告背景透明:背景:底部无法打开日志文件:%s无法打开监测器日志文件:%s。芯片:颜色颜色:颜色版权所有(C) %s jeanfi@gmail.com 协议 GPLv2:GNU GPL 第 2 版或更新的 本软件为自由软件:您可以自由修改并分发。 There is NO WARRANTY, to the extent permitted by law。 在应用指示器菜单中显示监视器绘制监视曲线编辑首选项编辑传感器首选项启用 Unity 启动器计数器启用菜单启用监测器记录启用调试模式。启用调试模式:%d无法激活监测器日志。无法创建网络服务器。无法加载 Psensor 图标。前景:图表未设置 HOME 变量。HTTP 请求:%s隐藏窗口标题栏启动时隐藏窗口高阈值:标识:界面保持在最底层左侧低阈值:最大值测量更新间隔:测量最小值监视持续时长:不可用名称:未检测到传感器。选项:监视设备列表位置:首选项Psensor - 温度监视器Psensor 主页Psensor 不支持远程传感器。Psensor 是一款 GTK+ 硬件监测传感应用程序Psensor 是一款 GTK+ 应用程序,可监测硬件传感器,包括温度与风扇转速。退出转速报告问题至:%s 恢复窗口位置和大小监视设备传感器首选项已经打开监测器日志文件。监测器日志文件未打开。监测器日志未打开,故无法关闭。传感器显示温度报警温度单位:顶部试用‘%s --help’来获得更多信息。 类型:URL: http://localhost:%d未知更新间隔:用法:%s [选项]... 值WWW 目录:%s网络服务器启动端口:%d帮助(_H)获取时间失败。分钟psensor 服务器是用来远程监视硬件的 HTTP 服务器。秒Launchpad Contributions: Jean-Philippe Orsini https://launchpad.net/~jfi Wang Dianjin https://launchpad.net/~tuhaihe tmpplus https://launchpad.net/~tmpplus.7328-deactivatedaccount 大宝 https://launchpad.net/~linux-dabaopsensor-1.2.1/po/Rules-quot0000644000175000017500000000337613353521057012563 00000000000000# Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header psensor-1.2.1/po/fr.po0000664000175000017500000005331513675227773011546 00000000000000# Oriya translations for psensor package. # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-21 09:39+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: French <>\n" "Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 09:40+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, c-format msgid "Failed to create the directory %s: %s" msgstr "" #: src/cfg.c:550 #, c-format msgid "Failed to load configuration file %s: %s" msgstr "" #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "" #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "À propos" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Préférences" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Quitter" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Préférences des capteurs" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - Surveillance des températures" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Aide" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Capteur" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Valeur" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Min" #: src/glade/psensor.glade:258 msgid "Max" msgstr "Max" #: src/glade/psensor.glade:269 msgid "Color" msgstr "Couleur" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Graphe" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Afficher" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "Droite" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "Gauche" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "Haut" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "Bas" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Modifier les préférences" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Cacher les décorations de la fenêtre" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Garder la fenêtre en arrière-plan" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Activer le menu" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Activer le compteur du lanceur de Unity" #: src/glade/psensor-pref.glade:190 #, fuzzy msgid "Psensor has not been build with Unity Launcher support" msgstr "" "Psensor n'a pas été compilé avec le support de surveillance à distance." #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Unité de température :" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Position de la table des capteurs :" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Interface" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Cacher la fenêtre au lancement" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Rétablir la position et la taille de la fenêtre" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Avant-plan :" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Arrière-plan :" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Opacité de l'arrière-plan :" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Couleurs" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Durée de surveillance :" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Intervalle de mise à jour :" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Mesures" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Min" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Max" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "seconde(s)" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "minutes(s)" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Intervalle de mise à jour des mesures :" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Activer la journalisation des capteurs" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Interval de journallisation des capteurs :" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Capteurs" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 #, fuzzy msgid "Psensor has not been build with NVCtrl support" msgstr "" "Psensor n'a pas été compilé avec le support de surveillance à distance." #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 #, fuzzy msgid "Psensor has not been build with ATI ADL support" msgstr "" "Psensor n'a pas été compilé avec le support de surveillance à distance." #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 #, fuzzy msgid "Psensor has not been build with gtop2 support" msgstr "" "Psensor n'a pas été compilé avec le support de surveillance à distance." #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 #, fuzzy msgid "Psensor has not been build with libatasmart support" msgstr "" "Psensor n'a pas été compilé avec le support de surveillance à distance." #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 #, fuzzy msgid "Psensor has not been build with udisks2 support" msgstr "" "Psensor n'a pas été compilé avec le support de surveillance à distance." #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Préférences des capteurs" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Nom :" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Type :" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "N/A" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Puce :" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Nom :" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Id :" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Dessiner la courbe du capteur" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Couleur :" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Activer les notifications du bureau" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Seuil supérieur :" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Seuil inférieur :" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Alarme" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Afficher le capteur dans le menu" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 #, fuzzy msgid "Psensor has not been build with AppIndicator support" msgstr "" "Psensor n'a pas été compilé avec le support de surveillance à distance." #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "Indicateur d'application" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD : impossible de trouver la bibliothèque ADL." #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD : L'interface de programmation ADL est manquante." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD : échec de l'initialisation d'ADL." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD : impossible de récupérer le nombre d'adaptateurs." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Échec de la récupération des information NVIDIA." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "Disque" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s : échec de sk_disk_open() : %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s : échec d'ouverture de l'interface de connexion." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s : échec de l'ouverture de la connexion." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s : mauvaise chaîne: %s." #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s : impossible de récupérer la valeur de la sous-fonction %s: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "" #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "Processeur Intel" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "Processeur graphique NVIDIA" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s : échec de l'initialisation: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "Processeur" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Impossible d'ouvrir le journal: %s" #: src/lib/nvidia.c:69 #, fuzzy, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "Échec de la récupération des information NVIDIA." #: src/lib/nvidia.c:74 #, fuzzy, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "Échec de la récupération des information NVIDIA." #: src/lib/nvidia.c:240 #, fuzzy, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "Échec de la récupération des information NVIDIA." #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s : Impossible d'ouvrir la connexion au serveur X11." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s : Échec de la récupération des information NVIDIA." #: src/lib/nvidia.c:394 #, fuzzy, c-format msgid "%s: Failed to retrieve number of fans." msgstr "Échec de la récupération des information NVIDIA." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "Tr/mn" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "Échec de gettimeofday." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "Variable home non définie." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Le journal des capteurs est déjà ouvert." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "Ne peut ouvrir le journal : %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "Le journal des capteurs n'est pas ouvert." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "Le journal des capteurs n'est pas ouvert, il ne peut être fermé." #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright © %s wpitchoune@gmail.com\n" "License GPLv2 : GNU GPL version 2 ou ultérieure \n" "Ceci est un logiciel libre, vous êtes libre de le modifier et de le \n" "redistribuer.\n" "Ce logiciel n'est accompagné d'ABSOLUMENT AUCUNE GARANTIE, dans les limites\n" "autorisées par la loi.\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Utilisation : %s [OPTION]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor est une application GTK+ pour surveiller les capteurs thermiques et " "les vitesses de ventilateurs." #: src/main.c:79 msgid "Options:" msgstr "Options :" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help afficher cette aide et quitter\n" " -v, --version afficher les informations de version et quitter" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL l'URL de psensor-server, example: http://hostname:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr "" " -n, --new-instance forcer la création d'une nouvelle occurrence de " "l'application Psensor" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL assigner le niveau de débogage, nombre entier entre 0 " "et 3" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Signaler les bogues à: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "Page d'accueil de %s : <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "" "Psensor n'a pas été compilé avec le support de surveillance à distance." #: src/main.c:472 msgid "Enables debug mode." msgstr "Active le mode de débogage." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Essayez « %s --help » pour plus d'informations.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Une instance de Psensor existe déjà." #: src/main.c:539 msgid "Failed to create thread for monitoring sensors" msgstr "" #: src/rsensor.c:115 #, fuzzy, c-format msgid "%s: Fail to connect to: %s" msgstr "Échec de la connexion à : %s" #: src/rsensor.c:152 #, fuzzy, c-format msgid "%s: Invalid content: %s" msgstr "Contenu invalide : %s" #: src/rsensor.c:190 #, fuzzy, c-format msgid "%s: Invalid JSON: %s" msgstr "JSON invalide : %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

L’arrêt du serveur a été demandé

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Page introuvable - Allez à Main page

" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-server est un serveur HTTP pour surveiller à distance les capteurs " "matérielles." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\tafficher cette aide et quitter\n" " -v, --version\t\tafficher les informations de version et quitter" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\tport du serveur Web\n" " -w,--wdir=DIR\t\trépertoire contenant les pages du serveur Web" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL assigne le niveau de débogage, nombre entier entre 0 " "et 3" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=PATH assigner le chemin d’accès au journal" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr " --sensor-log-file=PATH assigne le journal du capteur vers PATH" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" " --sensor-log-interval=S assigne l'intervalle de journalisation du capteur " "à S (secondes)" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "Impossible d'ouvrir le journal: %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "Requête HTTP : %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Activation du mode de déboguage: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Aucun capteur détecté." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Échec de la création du serveur Web." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Le serveur Web a été démarré sur le port : %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW répertoire : %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL : http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Échec de l'activation de la journalisation des capteurs." #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "" "Psensor est une application GTK+ pour surveiller les capteurs thermiques et " "les ventilateurs." #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "Copyright © 2010-2014 jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "À propos de Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " Ubuntu-QC-1 https://launchpad.net/~aobreyss\n" " londumas https://launchpad.net/~helion331990" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Site internet de Psensor" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Échec du chargement de l’icône de Psensor." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 msgid "Select sensor color" msgstr "" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "Échec du chargement de l’icône de Psensor." #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Alerte thermique" #: src/ui_notify.c:79 msgid "Fan speed alert" msgstr "Alerte ventilateur" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Inconnu" #~ msgid "Sensor Information" #~ msgstr "Informations du capteur" psensor-1.2.1/po/uk.gmo0000664000175000017500000001754413676133402011710 00000000000000Uql0B1^tkE?UhD F )Z *    J J U ` '       + 7 P V ] d v       # ) @ Q h              % @ L 9]         &5;Te| J {!q}jZb)dWE?,4l,Wh?wP:Cbz' 8 ( 3?*N-y<L13M9@.(W&k3&@ Y3c / % 3 T'mc  0>? ~)&ZW_$x+$* U/Q<E0&L) 9 >3B*+6I7OF$#,KJPC "?M2H5%S.'A:1( !T-N;4D8GR=@  -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot open connection to X11 server.%s: Failed to retrieve NVIDIA information.%s: failed to open connection.%s: failed to open socket.%s: wrong string: %s.

Page not found - Go to Main page

MaxMinAMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmBackground opacity:Background:Cannot open log file: %sColorColor:ColorsDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnables debug mode.Failed to create Web server.Failed to load Psensor icon.Foreground:GraphHOME variable not set.HTTP Request: %sHide window decorationHide window on startupHigh threshold:Id:InterfaceKeep window belowLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:N/AName:No sensors detected.Options:Position of sensors table:PreferencesPsensor HomepagePsensor has not been compiled with remote sensor support.QuitRPMReport bugs to: %s Restore window position and sizeSensorSensor PreferencesSensorsShowTemperature unit:Try `%s --help' for more information. Type:URL: http://localhost:%dUpdate interval:Usage: %s [OPTION]... ValueWWW directory: %s_Helpgettimeofday failed.minute(s)psensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-11 21:23+0000 Last-Translator: Jean-Philippe Orsini Language-Team: Ukrainian Language: uk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) -d, --debug=РІВЕНЬ встановити рівень налагодження, ціле між 0 та 3 -h, --help показати цю довідку і вийти -v, --version показати версію і вийти -h, --help показати цю довідку і вийти -v, --version показати версію і вийти -n, --new-instance примусово створювати нову копію програми Psensor -p,--port=PORT порт веб-сервера -w,--wdir=DIR директорія для сторінок веб-сервера -u, --url=URL URL psensor-сервера, наприклад: http://hostname:3131%%s домашня сторінка: <%s> %s: Не вдалося встановити з'єднання до сервера X11.%s: Не вдалося отримати інформацію NVIDIA.%s: не вдалося встановити з'єднання.%s: не вдалося відкрити сокет.%s: неправильний рядок: %s.

Сторінка не знайдена - Перейти до Головної сторінки

Макс.Мін.AMD: не вдалося знайти бібліотеку ADL.AMD: не вдалося отримати кількість адаптерів.AMD: не вдалося ініціалізувати ADL.AMD: відсутнє API ADL.Про програмуПро PsensorУвімкнути оповіщенняОповіщенняНепрозорість тла:Тло:Не вдалося відкрити лог-файл: %sКолірКолір:КольориМалювати криву датчикаРедагувати налаштуванняРедагувати налаштування датчикаУвімкнути лічильник на панелі запуску UnityУвімкнути менюВключає режим налагодження.Не вдалося створити веб-сервер.Не вдалося завантажити іконку Psensor.Передній план:ДіаграмаЗмінна HOME не встановлена.HTTP запит: %sСховати каркас вікнаСховати вікно після запускуВищий поріг:Ідентифікатор:Зовнішній виглядТримати вікно позадуНижчий поріг:Макс.Інтервал оновлення замірів:ЗаміриМін.Тривалість спостереженняН/ДНазва:Датчики не знайдені.Опції:Положення таблиці датчиків:НалаштуванняДомашня сторінка PsensorPsensor не був зібраний з підтримкою віддалених датчиків.Вихідоб/хвЗвітуйте про помилки до: %s Відновляти позицію і розмір вікнаДатчикНалаштування датчиківДатчикиПоказатиОдиниця температури:Спробуйте `%s --help' щоб отримати більше інформації. Тип:URL: http://localhost:%dІнтервал оновлення:Використання: %s [КЛЮЧ]... ЗначенняWWW-директорія: %s_Довдікапомилка gettimeofday.хв.psensor-server ‌— це HTTP-сервер для віддаленого моніторингу апаратних датчиків.сек.Launchpad Contributions: Ilya Volchanetskiy https://launchpad.net/~volchanetskiy Jean-Philippe Orsini https://launchpad.net/~jfi VPIP https://launchpad.net/~tymboodpsensor-1.2.1/po/sl.po0000664000175000017500000004045513675227773011556 00000000000000# Slovenian translation for psensor # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-11 21:22+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Slovenian \n" "Language: sl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, c-format msgid "Failed to create the directory %s: %s" msgstr "" #: src/cfg.c:550 #, c-format msgid "Failed to load configuration file %s: %s" msgstr "" #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "" #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "" #: src/glade/psensor.glade:236 msgid "Value" msgstr "" #: src/glade/psensor.glade:247 msgid "Min" msgstr "" #: src/glade/psensor.glade:258 msgid "Max" msgstr "" #: src/glade/psensor.glade:269 msgid "Color" msgstr "" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "" #: src/glade/psensor-pref.glade:190 msgid "Psensor has not been build with Unity Launcher support" msgstr "" #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 msgid "Psensor has not been build with NVCtrl support" msgstr "" #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 msgid "Psensor has not been build with ATI ADL support" msgstr "" #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 msgid "Psensor has not been build with gtop2 support" msgstr "" #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 msgid "Psensor has not been build with libatasmart support" msgstr "" #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 msgid "Psensor has not been build with udisks2 support" msgstr "" #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 msgid "Psensor has not been build with AppIndicator support" msgstr "" #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "" #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "" #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "" #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "" #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, c-format msgid "Failed to get content of file %s." msgstr "" #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "" #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "" #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "" #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "" #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "" #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "" #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "" #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "" #: src/lib/nvidia.c:69 #, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "" #: src/lib/nvidia.c:74 #, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "" #: src/lib/nvidia.c:240 #, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "" #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "" #: src/lib/nvidia.c:394 #, c-format msgid "%s: Failed to retrieve number of fans." msgstr "" #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "" #: src/lib/psensor.c:428 msgid "%" msgstr "" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "" #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "" #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "" #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "" #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "" #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "" #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" #: src/main.c:79 msgid "Options:" msgstr "" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr "" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "" #: src/main.c:472 msgid "Enables debug mode." msgstr "" #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "" #: src/main.c:539 msgid "Failed to create thread for monitoring sensors" msgstr "" #: src/rsensor.c:115 #, c-format msgid "%s: Fail to connect to: %s" msgstr "" #: src/rsensor.c:152 #, c-format msgid "%s: Invalid content: %s" msgstr "" #: src/rsensor.c:190 #, c-format msgid "%s: Invalid JSON: %s" msgstr "" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr "" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr "" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, c-format msgid "Cannot get real path of %s" msgstr "" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "" #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "" #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "" #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "" #: src/ui.c:216 msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "" #: src/ui.c:222 msgid "About Psensor" msgstr "" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " Sasa Batistic https://launchpad.net/~sasa-batistic" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "" #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 msgid "Select sensor color" msgstr "" #: src/ui_appindicator.c:148 #, c-format msgid "Failed to load glade file %s: %s" msgstr "" #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "" #: src/ui_notify.c:79 msgid "Fan speed alert" msgstr "" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "" psensor-1.2.1/po/sr.gmo0000664000175000017500000000317313676133402011706 00000000000000\   '3DI]d&ly%7]q   0 1)< f sH'    %s home page: <%s> AboutAbout PsensorColorColorsEnable menuMaxMinN/AOptions:PreferencesPsensor HomepageQuitReport bugs to: %s SensorSensorsTry `%s --help' for more information. Usage: %s [OPTION]... translator-creditsProject-Id-Version: psensor Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-11 21:25+0000 Last-Translator: Jean-Philippe Orsini Language-Team: Serbian Language: sr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) %s матична страна: <%s> О програмуО ПсензоруУ бојиУ бојиУкљученоНајвишеНајмањеНедоступноОпције:ПоставкеМатична страница ПсензораИзађиПријавите грешку на: %s СензорСензорПокушајте„%s --help“ за више информација. Употреба: %s [ОПЦИЈА]... Launchpad Contributions: Jean-Philippe Orsini https://launchpad.net/~jfi Мирослав Николић https://launchpad.net/~lipekpsensor-1.2.1/po/el.po0000664000175000017500000004007713675227773011540 00000000000000# Greek translations for psensor package. # Copyright (C) 2016 Free Software Foundation, Inc. # This file is distributed under the same license as the psensor package. # , 2016. # msgid "" msgstr "" "Project-Id-Version: psensor 1.2.0\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2016-06-30 17:02+0200\n" "Last-Translator: \n" "Language-Team: Greek\n" "Language: el\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/cfg.c:503 #, c-format msgid "Failed to create the directory %s: %s" msgstr "" #: src/cfg.c:550 #, c-format msgid "Failed to load configuration file %s: %s" msgstr "" #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "" #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "" #: src/glade/psensor.glade:236 msgid "Value" msgstr "" #: src/glade/psensor.glade:247 msgid "Min" msgstr "" #: src/glade/psensor.glade:258 msgid "Max" msgstr "" #: src/glade/psensor.glade:269 msgid "Color" msgstr "" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "" #: src/glade/psensor-pref.glade:190 msgid "Psensor has not been build with Unity Launcher support" msgstr "" #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 msgid "Psensor has not been build with NVCtrl support" msgstr "" #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 msgid "Psensor has not been build with ATI ADL support" msgstr "" #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 msgid "Psensor has not been build with gtop2 support" msgstr "" #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 msgid "Psensor has not been build with libatasmart support" msgstr "" #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 msgid "Psensor has not been build with udisks2 support" msgstr "" #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 msgid "Psensor has not been build with AppIndicator support" msgstr "" #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "" #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "" #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "" #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "" #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, c-format msgid "Failed to get content of file %s." msgstr "" #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "" #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "" #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "" #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "" #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "" #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "" #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "" #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "" #: src/lib/nvidia.c:69 #, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "" #: src/lib/nvidia.c:74 #, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "" #: src/lib/nvidia.c:240 #, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "" #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "" #: src/lib/nvidia.c:394 #, c-format msgid "%s: Failed to retrieve number of fans." msgstr "" #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "" #: src/lib/psensor.c:428 msgid "%" msgstr "" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "" #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "" #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "" #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "" #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "" #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "" #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" #: src/main.c:79 msgid "Options:" msgstr "" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr "" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "" #: src/main.c:472 msgid "Enables debug mode." msgstr "" #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "" #: src/main.c:539 msgid "Failed to create thread for monitoring sensors" msgstr "" #: src/rsensor.c:115 #, c-format msgid "%s: Fail to connect to: %s" msgstr "" #: src/rsensor.c:152 #, c-format msgid "%s: Invalid content: %s" msgstr "" #: src/rsensor.c:190 #, c-format msgid "%s: Invalid JSON: %s" msgstr "" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr "" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr "" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, c-format msgid "Cannot get real path of %s" msgstr "" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "" #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "" #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "" #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "" #: src/ui.c:216 msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "" #: src/ui.c:222 msgid "About Psensor" msgstr "" #: src/ui.c:223 msgid "translator-credits" msgstr "" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "" #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 msgid "Select sensor color" msgstr "" #: src/ui_appindicator.c:148 #, c-format msgid "Failed to load glade file %s: %s" msgstr "" #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "" #: src/ui_notify.c:79 msgid "Fan speed alert" msgstr "" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "" psensor-1.2.1/po/pt_BR.po0000664000175000017500000004731713675227773012152 00000000000000# Portuguese translations for psensor package. # Copyright (C) 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # msgid "" msgstr "" "Project-Id-Version: psensor 0.7.0.x\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-11 21:22+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Brazilian Portuguese\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, fuzzy, c-format msgid "Failed to create the directory %s: %s" msgstr "Falhou ao criar servidor web." #: src/cfg.c:550 #, fuzzy, c-format msgid "Failed to load configuration file %s: %s" msgstr "Falhou ao criar servidor web." #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "" #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "Sobre" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Preferências" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Sair" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Preferências de sensores" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - Monitor de temperatura" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "Ajuda" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Sensor" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Valor" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Min" #: src/glade/psensor.glade:258 msgid "Max" msgstr "Max" #: src/glade/psensor.glade:269 msgid "Color" msgstr "Cor" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Grafo" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Mostrar" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Editar Preferências" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Ocultar decoração da janela" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Manter janela abaixo" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Habilitar menu" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "" #: src/glade/psensor-pref.glade:190 msgid "Psensor has not been build with Unity Launcher support" msgstr "" #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Unidade de temperatura:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Posição da tabela de sensores:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Interface" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Ocultar janela na inicialização" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Restaurar posição e tamanho da janela" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Primeiro plano:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Plano de fundo:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Opacidade do plano de fundo:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Cores" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Duração do monitoramento:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Intervalo de atualização:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Medidas" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Min" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Max" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "segundo(s)" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "minuto(s)" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Intervalo de atualização das medições:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Habilitar registro (log) de sensores" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Intervalo de registro dos sensores:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Sensores" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 msgid "Psensor has not been build with NVCtrl support" msgstr "" #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 msgid "Psensor has not been build with ATI ADL support" msgstr "" #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 msgid "Psensor has not been build with gtop2 support" msgstr "" #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 msgid "Psensor has not been build with libatasmart support" msgstr "" #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 msgid "Psensor has not been build with udisks2 support" msgstr "" #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Editar preferências do sensor" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Nome" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Tipo:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "N/D" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Chip:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Nome:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "ID:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Desenhar curva do sensor" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Cor:" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Ativar notificações de desktop" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Limite superior:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Limite inferior:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Alarme" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 msgid "Psensor has not been build with AppIndicator support" msgstr "" #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: não foi possível encontrar a biblioteca ADL." #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: está faltando a API da ADL." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: falha ao iniciar ADL." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: não foi possível obter número de adaptadores." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "Número de adaptadores AMD/ATI: %d" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "Número de adaptadores AMD/ATI ativos: %d" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Falhou ao criar servidor web." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s: falha em sk_disk_open(): %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: falha em abrir conexão." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: falha em abrir conexão." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "" #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: não foi possível obter valor do sub-recurso %s: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "" #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s: falha na inicialização: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Não é possível abrir arquivo de log: %s" #: src/lib/nvidia.c:69 #, fuzzy, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "Falha ao recuperar informações de NVIDIA." #: src/lib/nvidia.c:74 #, fuzzy, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "Falha ao recuperar informações de NVIDIA." #: src/lib/nvidia.c:240 #, fuzzy, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "Falha ao recuperar informações de NVIDIA." #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Não é possível abrir conexão com o servidor X11." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: Falha ao recuperar informações de NVIDIA." #: src/lib/nvidia.c:394 #, fuzzy, c-format msgid "%s: Failed to retrieve number of fans." msgstr "Falha ao recuperar informações de NVIDIA." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "RPM" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "falha em gettimeofday." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "Variável HOME não configurada." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Arquivo de registro do sensor já está aberto." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "Não é possível abrir arquivo de log do sensor: %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "Arquivo de registros do sensor não foi aberto." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "" #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Uso: %s [OPÇÃO]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor é um aplicativo GTK+ para monitoramento de sensores de hardware, " "incluindo temperatura e velocidade de ventoinhas." #: src/main.c:79 msgid "Options:" msgstr "Opções:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help exibir esta ajuda e sair\n" " -v, --version exibir informação de versão e sair" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL a URL do psensor-server,\n" " exemplo: http://hostname:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr "" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Relatar falhas para: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "Página inicial de %s: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "" #: src/main.c:472 msgid "Enables debug mode." msgstr "Ativar o modo de depuração" #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Utilize `%s --help' para mais informações.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Uma instancia de Psensor já existe." #: src/main.c:539 #, fuzzy msgid "Failed to create thread for monitoring sensors" msgstr "Falhou ao criar servidor web." #: src/rsensor.c:115 #, fuzzy, c-format msgid "%s: Fail to connect to: %s" msgstr "Falha ao conectar: %s" #: src/rsensor.c:152 #, fuzzy, c-format msgid "%s: Invalid content: %s" msgstr "Conteúdo inválido: %s" #: src/rsensor.c:190 #, fuzzy, c-format msgid "%s: Invalid JSON: %s" msgstr "JSON inválido: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Página não encontrada - Ir para a página inicial

" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-server é um servidor HTTP para monitoramento remoto de sensores de " "hardware." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr "" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr "" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "Não é possível abrir arquivo de log: %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "Requisição HTTP: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Habilita modo de depuração: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Nenhum sensor detectado" #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Falhou ao criar servidor web." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Servidor web iniciado na porta: %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "Diretório WWW: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "" #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "Psensor é uma aplicação GTK+ para monitorar sensores de hardware" #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "Copyright(c) 2010-2014 jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "Sobre o Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Celio Alves https://launchpad.net/~celio.alves\n" " Daniel Serafim https://launchpad.net/~daniel-serafim\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " MestreLion https://launchpad.net/~mestrelion\n" " Rafael Neri https://launchpad.net/~rafepel" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Site do Psensor" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Falha ao carregar o ícone do Psensor." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 #, fuzzy msgid "Select sensor color" msgstr "Selecionar cor do primeiro plano" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "Falhou ao criar servidor web." #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Alerta de temperatura" #: src/ui_notify.c:79 #, fuzzy msgid "Fan speed alert" msgstr "Alenta do ventilador" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Desconhecido" #~ msgid "Sensor Information" #~ msgstr "Informações do sensor" psensor-1.2.1/po/sv.po0000664000175000017500000005401113675227773011561 00000000000000# Swedish translations for psensor package. # Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the psensor package. # Jean-Philippe Orsini # Translators: # Josef Andersson , 2014. # Åke Engelbrektson , 2020. # msgid "" msgstr "" "Project-Id-Version: psensor 1.0.0.0\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2020-02-23 08:34+0100\n" "Last-Translator: Åke Engelbrektson \n" "Language-Team: Swedish\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Poedit 2.0.6\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: src/cfg.c:503 #, c-format msgid "Failed to create the directory %s: %s" msgstr "Kunde inte skapa katalogen %s: %s" #: src/cfg.c:550 #, c-format msgid "Failed to load configuration file %s: %s" msgstr "Kunde inte läsa in konfigurationsfilen %s: %s" #: src/cfg.c:575 #, c-format msgid "Failed to save configuration file %s." msgstr "Kunde inte spara konfigurationsfilen %s." #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "Om" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Inställningar" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Avsluta" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Sensorinställningar" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - Temperaturövervakare" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Hjälp" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Sensor" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Värde" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Min" #: src/glade/psensor.glade:258 msgid "Max" msgstr "Max" #: src/glade/psensor.glade:269 msgid "Color" msgstr "Färg" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Diagram" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Visa" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "Höger" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "Vänster" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "Överkant" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "Underkant" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Redigera inställningar" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Dölj fönsterdekoration" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Behåll fönstret underst" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Aktivera meny" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Aktivera räknare för Unity programstartare" #: src/glade/psensor-pref.glade:190 msgid "Psensor has not been build with Unity Launcher support" msgstr "Psensor har inte kompilerats med stöd för Unity Launcher" #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "Celsius" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "Fahrenheit" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Temperaturenhet:" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Sensortabellens position:" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Gränssnitt" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "Starta vid sessionsstart" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Dölj fönstret vid uppstart" #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Återställ fönsterposition och storlek" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "Programstart" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Förgrund:" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Bakgrund:" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Bakgrundsopacitet:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Färger" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Övervakningstid:" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Uppdateringsintervall:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Mätningar" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Min" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Max" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "sekund(er)" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "minut(er)" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "Jämna kurvor" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "Kurvor" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Uppdateringsintervall för mätning:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Aktivera sensorloggning" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Loggintervall för sensor:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "Skript att köra vid larm:" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Sensorer" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "Aktivera stöd för lm-sensors" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "Aktivera stöd för NVCtrl (NVidia)" #: src/glade/psensor-pref.glade:974 msgid "Psensor has not been build with NVCtrl support" msgstr "Psensor har inte kompilerats med stöd för NVCtrl" #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "Aktivera stöd för ATI ADL" #: src/glade/psensor-pref.glade:993 msgid "Psensor has not been build with ATI ADL support" msgstr "Psensor har inte kompilerats med stöd för ATI ADL" #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "Aktivera stöd för gtop2" #: src/glade/psensor-pref.glade:1012 msgid "Psensor has not been build with gtop2 support" msgstr "Psensor har inte kompilerats med stöd för gtop2" #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "Aktivera stöd för hddtemp daemon" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "Aktivera stöd för libatasmart" #: src/glade/psensor-pref.glade:1049 msgid "Psensor has not been build with libatasmart support" msgstr "Psensor har inte kompilerats med stöd för libatasmart" #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "Aktivera stöd för udisks2" #: src/glade/psensor-pref.glade:1068 msgid "Psensor has not been build with udisks2 support" msgstr "Psensor har inte kompilerats med stöd för udisks2" #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "Ändringar tillämpas efter att psensor startats om." #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "Hårddisk" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "CPU- och minnesanvändning" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "GPU med patentskyddad drivrutin" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "Moderkort, CPU och GPU" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "Leverantörer" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Redigera sensorinställningar" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Namn" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Typ:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "Inte tillämpbar" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Chip:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Namn:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "ID:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "Min:" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "Max:" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "Etikett" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "Detaljerad information" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Rita upp sensorkurva" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Färg:" #: src/glade/sensor-edit.glade:448 msgid "Display sensor in the list of sensors" msgstr "Visa sensorn i listan över sensorer" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Aktivera skrivbordsaviseringar" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Högt tröskelvärde:" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "0" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "-1" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Lågt tröskelvärde:" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Larm" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Visa sensor i menyn" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 msgid "Psensor has not been build with AppIndicator support" msgstr "Psensor har inte kompilerats med med stöd för AppIndicator" #: src/glade/sensor-edit.glade:719 msgid "Display sensor in the label (experimental)" msgstr "Visa sensor i etiketten (experimentell)" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "Programindikator" #: src/graph.c:460 msgid "No graphs enabled" msgstr "Inga diagram aktiverade" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: Kan inte hitta ADL-bibliotek." #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: ADL-API saknas." #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: Kunde inte starta ADL." #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: Kan inte hämta antal adaptrar." #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "Antal AMD/ATI-adaptrar: %d" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "Antal aktiva AMD/ATI-adaptrar: %d" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "BCM2835 (troligen en Raspberry PI3) har identifierats" #: src/lib/bcm2835.c:132 #, c-format msgid "Failed to get content of file %s." msgstr "Kunde inte hämta innehåll från filen %s." #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "Disk" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s: sk_disk_open()-fel: %s." #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: Kunde inte öppna socket." #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: Kunde inte öppna anslutning." #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: Fel sträng: %s." #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: Kan inte hämta värdet för underegenskap %s: %s." #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "%s: Fel funktionstyp." #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "Intel CPU" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "AMD CPU" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "NVIDIA GPU" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "VIA CPU" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "ACPI" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s: Startfel: %s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "CPU-belastning" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "CPU" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "Ledigt minne" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "Minne" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Kan inte öppna loggfil: %s" #: src/lib/nvidia.c:69 #, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "%s: Okänt NVIDIA-produktnamn för GPU %d" #: src/lib/nvidia.c:74 #, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "%s: Kunde inte hämta NVIDIA-produktnamn för GPU %d" #: src/lib/nvidia.c:240 #, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "%s: Kunde inte hämta mätning av typ %x för NVIDIA-GPU %d" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Kan inte öppna anslutning till X11-server." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: Kunde inte hämta NVIDIA-information." #: src/lib/nvidia.c:394 #, c-format msgid "%s: Failed to retrieve number of fans." msgstr "%s: Kunde inte identifiera antalet fläktar." #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "RPM" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "gettimeofday misslyckades." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "%s: Kan inte hämta udisks2-klienten" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "HOME-variabel inte inställd." #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Sensorloggfil redan öppen." #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "Kan inte öppna sensorloggfil: %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "Sensorloggfil ej öppen." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "Sensorloggfil ej öppen, kan inte stänga." #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright (C) %s jeanfi@gmail.com\n" "Licens GPLv2: GNU GPL version 2 eller senare \n" "Det här är fri programvara: Du kan fritt modifiera den och distribuera den\n" "Det finns INGEN GARANTI i den omfattning som medges av gällande lag.\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Användning: %s [FLAGGA]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor är ett GTK+-program för att övervaka hårdvarusensorer, inklusive " "temperaturer och fläkthastigheter." #: src/main.c:79 msgid "Options:" msgstr "Alternativ:" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help Visa denna hjälp och avsluta\n" " -v, --version Visa versionsinformation och avsluta" #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL URL för psensor-server,\n" " T.ex. http://värdnamn:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr " -n, --new-instance Tvinga fram ett nytt Psensor-program" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=LEVEL Ställ in felsökningsnivå, heltal mellan nivå 0 och 3" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Rapportera fel till: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s webbplats <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "Psensor har inte kompilerats med stöd för fjärrsensor." #: src/main.c:472 msgid "Enables debug mode." msgstr "Aktivera felsökningsläge." #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Prova \"%s --help\" för mer information.\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Det finns redan en Psensor-instans." #: src/main.c:539 msgid "Failed to create thread for monitoring sensors" msgstr "Kunde inte skapa tråd för övervakning av sensorer" #: src/rsensor.c:115 #, c-format msgid "%s: Fail to connect to: %s" msgstr "%s: Kunde inte ansluta till: %s" #: src/rsensor.c:152 #, c-format msgid "%s: Invalid content: %s" msgstr "%s: Ogiltigt innehåll: %s" #: src/rsensor.c:190 #, c-format msgid "%s: Invalid JSON: %s" msgstr "%s: Ogiltig JSON: %s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

Serverstopp begärt

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Sidan hittades inte - Gå till Huvudsidan

" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-server är en HTTP-server för fjärrövervakning av hårdvarusensorer." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\tVisa denna hjälp och avsluta\n" " -v, --version\t\tVisa versionsinformation och avsluta" #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\tWebbserverport\n" " -w,--wdir=DIR\t\tMapp som innehåller webbserversidor" #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr " -d, --debug=LEVEL Ställ in felsökningnivån mellan 0 and 3" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=PATH Ställ in loggfilen till PATH" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr " --sensor-log-file=PATH Ställ in loggfil för sensor till PATH" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr "" " --sensor-log-interval=S ställ in loggintervall för sensor till S (sekunder)" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "Resursåtkomst nekad %s riktig sökväg är %s" #: src/server/server.c:270 #, c-format msgid "Cannot get real path of %s" msgstr "Kan inte hämta absolut sökväg till %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "HTTP-begäran: %s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Aktiverar felsökningsläge: %d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "Webbservermappen finns inte.\n" #: src/server/server.c:455 msgid "No sensors detected." msgstr "Inga sensorer hittades." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Kunde inte skapa webbserver." #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Webbserver startad på port: %d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "WWW-mapp: %s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Kunde inte aktivera sensorloggning." #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "Psensor är ett GTK+-program för att övervaka hårdvarusensorer" #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "Copyright(c) 2010-2018 jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "Om Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Jean-Philippe Orsini https://launchpad.net/~jfi\n" " Josef Andersson https://launchpad.net/~northar\n" " Åke Engelbrektson https://launchpad.net/~eson" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Psensors webbplats" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Kunde inte läsa in Psensor-ikon." #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "Dölj" #: src/ui_sensorlist.c:305 msgid "Select sensor color" msgstr "Välj sensorfärg" #: src/ui_appindicator.c:148 #, c-format msgid "Failed to load glade file %s: %s" msgstr "Kunde inte läsa in glade-filen %s: %s" #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Temperaturlarm" #: src/ui_notify.c:79 msgid "Fan speed alert" msgstr "Fläkthastighetslarm" #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Okänd" #~ msgid "" #~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU " #~ "temperature." #~ msgstr "" #~ "Proprietär NVIDIA-drivrutin ej använd, eller kan inte hämta NVIDIA GPU-" #~ "temperatur." psensor-1.2.1/po/es.po0000664000175000017500000005375213675227773011553 00000000000000# Spanish translation for psensor # Copyright (c) 2012 Rosetta Contributors and Canonical Ltd 2012 # This file is distributed under the same license as the psensor package. # Maintained by Jean-Philippe Orsini # msgid "" msgstr "" "Project-Id-Version: psensor\n" "Report-Msgid-Bugs-To: jeanfi@gmail.com\n" "POT-Creation-Date: 2020-06-25 21:48+0200\n" "PO-Revision-Date: 2014-09-20 11:26+0000\n" "Last-Translator: Jean-Philippe Orsini \n" "Language-Team: Spanish \n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Launchpad-Export-Date: 2014-09-21 08:56+0000\n" "X-Generator: Launchpad (build 17196)\n" #: src/cfg.c:503 #, fuzzy, c-format msgid "Failed to create the directory %s: %s" msgstr "Fallo al crear el servidor Web" #: src/cfg.c:550 #, fuzzy, c-format msgid "Failed to load configuration file %s: %s" msgstr "Error al activar el registro de sensores" #: src/cfg.c:575 #, fuzzy, c-format msgid "Failed to save configuration file %s." msgstr "Error al activar el registro de sensores" #: src/glade/psensor.glade:6 src/glade/psensor-appindicator.glade:6 msgid "About" msgstr "Acerca de" #: src/glade/psensor.glade:10 src/glade/psensor-appindicator.glade:10 #: src/glade/psensor-appindicator.glade:11 #: src/glade/psensor-appindicator.glade:20 src/ui_sensorlist.c:271 msgid "Preferences" msgstr "Ajustes" #: src/glade/psensor.glade:14 src/glade/psensor-appindicator.glade:24 msgid "Quit" msgstr "Salir" #: src/glade/psensor.glade:18 src/glade/psensor-appindicator.glade:15 #: src/glade/psensor-appindicator.glade:16 #: src/glade/psensor-appindicator.glade:28 msgid "Sensor Preferences" msgstr "Ajustes de los Sensores" #: src/glade/psensor.glade:99 msgid "Psensor - Temperature Monitor" msgstr "Psensor - Monitor de temperatura" #: src/glade/psensor.glade:114 msgid "_Psensor" msgstr "_Psensor" #: src/glade/psensor.glade:161 msgid "_Help" msgstr "_Ayuda" #: src/glade/psensor.glade:225 msgid "Sensor" msgstr "Sensor" #: src/glade/psensor.glade:236 msgid "Value" msgstr "Valor" #: src/glade/psensor.glade:247 msgid "Min" msgstr "Mín" #: src/glade/psensor.glade:258 msgid "Max" msgstr "Máx" #: src/glade/psensor.glade:269 msgid "Color" msgstr "Color" #: src/glade/psensor.glade:280 src/glade/psensor-pref.glade:753 #: src/glade/sensor-edit.glade:480 msgid "Graph" msgstr "Gráfica" #: src/glade/psensor-appindicator.glade:84 msgid "Show" msgstr "Mostrar" #: src/glade/psensor-pref.glade:24 msgctxt "psensor" msgid "Right" msgstr "Derecha" #: src/glade/psensor-pref.glade:27 msgid "Left" msgstr "Izquierda" #: src/glade/psensor-pref.glade:30 msgid "Top" msgstr "Arriba" #: src/glade/psensor-pref.glade:33 msgid "Bottom" msgstr "Abajo" #: src/glade/psensor-pref.glade:60 msgid "Edit Preferences" msgstr "Editar Ajustes" #: src/glade/psensor-pref.glade:126 msgid "Hide window decoration" msgstr "Ocultar el marco de la ventana" #: src/glade/psensor-pref.glade:146 msgid "Keep window below" msgstr "Mantener debajo del resto de ventanas" #: src/glade/psensor-pref.glade:166 msgid "Enable menu" msgstr "Activar menú" #: src/glade/psensor-pref.glade:186 msgid "Enable Unity Launcher counter" msgstr "Inicio retardado al abrir sesión" #: src/glade/psensor-pref.glade:190 #, fuzzy msgid "Psensor has not been build with Unity Launcher support" msgstr "Psensor no ha sido compilado con soporte para sensores remotos." #: src/glade/psensor-pref.glade:215 msgid "Celsius" msgstr "" #: src/glade/psensor-pref.glade:216 msgid "Fahrenheit" msgstr "" #: src/glade/psensor-pref.glade:258 msgid "Temperature unit:" msgstr "Unidad de temperatura" #: src/glade/psensor-pref.glade:275 msgid "Position of sensors table:" msgstr "Ubicación de los valores" #: src/glade/psensor-pref.glade:292 msgid "Interface" msgstr "Interfaz" #: src/glade/psensor-pref.glade:308 msgid "Launch on session startup" msgstr "" #: src/glade/psensor-pref.glade:327 msgid "Hide window on startup" msgstr "Ocultar la ventana de gráficas al iniciar sesión." #: src/glade/psensor-pref.glade:345 msgid "Restore window position and size" msgstr "Restaurar tamaño y posición de la ventana" #: src/glade/psensor-pref.glade:374 msgid "Startup" msgstr "" #: src/glade/psensor-pref.glade:416 msgid "Foreground:" msgstr "Escalas y cuadrícula" #: src/glade/psensor-pref.glade:432 msgid "Background:" msgstr "Fondo de gráfica" #: src/glade/psensor-pref.glade:464 msgid "Background opacity:" msgstr "Opacidad del fondo:" #: src/glade/psensor-pref.glade:480 msgid "Colors" msgstr "Colores" #: src/glade/psensor-pref.glade:500 msgid "Monitoring duration:" msgstr "Intervalo de la gráfica" #: src/glade/psensor-pref.glade:516 msgid "Update interval:" msgstr "Intervalo de actualización:" #: src/glade/psensor-pref.glade:532 msgid "Measures" msgstr "Medidas" #: src/glade/psensor-pref.glade:558 msgid "Min" msgstr "Mín" #: src/glade/psensor-pref.glade:585 msgid "Max" msgstr "Máx" #: src/glade/psensor-pref.glade:636 src/glade/psensor-pref.glade:813 #: src/glade/psensor-pref.glade:881 msgid "second(s)" msgstr "segundo(s)" #: src/glade/psensor-pref.glade:686 msgid "minute(s)" msgstr "minuto(s)" #: src/glade/psensor-pref.glade:702 msgid "Smooth curves" msgstr "" #: src/glade/psensor-pref.glade:728 msgid "Curves" msgstr "" #: src/glade/psensor-pref.glade:780 msgid "Measure update interval:" msgstr "Medir sensores cada:" #: src/glade/psensor-pref.glade:822 msgid "Enable sensors logging" msgstr "Activar registro de sensores" #: src/glade/psensor-pref.glade:866 msgid "Sensors logging interval:" msgstr "Intervalo de registro de sensores:" #: src/glade/psensor-pref.glade:896 msgid "Script executed when an alarm is raised:" msgstr "" #: src/glade/psensor-pref.glade:934 msgid "Sensors" msgstr "Sensores" #: src/glade/psensor-pref.glade:952 msgid "Enable support of lm-sensors" msgstr "" #: src/glade/psensor-pref.glade:970 msgid "Enable support of NVCtrl (NVidia)" msgstr "" #: src/glade/psensor-pref.glade:974 #, fuzzy msgid "Psensor has not been build with NVCtrl support" msgstr "Psensor no ha sido compilado con soporte para sensores remotos." #: src/glade/psensor-pref.glade:989 msgid "Enable support of ATI ADL" msgstr "" #: src/glade/psensor-pref.glade:993 #, fuzzy msgid "Psensor has not been build with ATI ADL support" msgstr "Psensor no ha sido compilado con soporte para sensores remotos." #: src/glade/psensor-pref.glade:1008 msgid "Enable support of gtop2" msgstr "" #: src/glade/psensor-pref.glade:1012 #, fuzzy msgid "Psensor has not been build with gtop2 support" msgstr "Psensor no ha sido compilado con soporte para sensores remotos." #: src/glade/psensor-pref.glade:1027 msgid "Enable support of hddtemp daemon" msgstr "" #: src/glade/psensor-pref.glade:1045 msgid "Enable support of libatasmart" msgstr "" #: src/glade/psensor-pref.glade:1049 #, fuzzy msgid "Psensor has not been build with libatasmart support" msgstr "Psensor no ha sido compilado con soporte para sensores remotos." #: src/glade/psensor-pref.glade:1064 msgid "Enable support of udisks2" msgstr "" #: src/glade/psensor-pref.glade:1068 #, fuzzy msgid "Psensor has not been build with udisks2 support" msgstr "Psensor no ha sido compilado con soporte para sensores remotos." #: src/glade/psensor-pref.glade:1090 msgid "The changes are applied after the restart of psensor." msgstr "" #: src/glade/psensor-pref.glade:1110 msgid "Hard disk drive" msgstr "" #: src/glade/psensor-pref.glade:1131 msgid "CPU and memory usage" msgstr "" #: src/glade/psensor-pref.glade:1152 msgid "GPU with proprietary driver" msgstr "" #: src/glade/psensor-pref.glade:1173 msgid "Motherboard, CPU and GPU" msgstr "" #: src/glade/psensor-pref.glade:1194 msgid "Providers" msgstr "" #: src/glade/sensor-edit.glade:29 msgid "Edit Sensor Preferences" msgstr "Editar Ajustes Sensores" #: src/glade/sensor-edit.glade:97 msgid "Name" msgstr "Nombre" #: src/glade/sensor-edit.glade:164 msgid "Type:" msgstr "Tipo:" #: src/glade/sensor-edit.glade:183 src/glade/sensor-edit.glade:220 #: src/glade/sensor-edit.glade:276 src/glade/sensor-edit.glade:575 #: src/glade/sensor-edit.glade:630 src/lib/psensor.c:430 src/ui_notify.c:81 msgid "N/A" msgstr "No disponible" #: src/glade/sensor-edit.glade:202 msgid "Chip:" msgstr "Chip:" #: src/glade/sensor-edit.glade:239 msgid "Name:" msgstr "Nombre:" #: src/glade/sensor-edit.glade:258 msgid "Id:" msgstr "Identificativo:" #: src/glade/sensor-edit.glade:296 msgid "Min:" msgstr "" #: src/glade/sensor-edit.glade:315 msgid "Max:" msgstr "" #: src/glade/sensor-edit.glade:333 src/glade/sensor-edit.glade:351 msgid "label" msgstr "" #: src/glade/sensor-edit.glade:370 msgid "Details" msgstr "" #: src/glade/sensor-edit.glade:388 msgid "Draw sensor curve" msgstr "Representar el sensor en la gráfica" #: src/glade/sensor-edit.glade:417 msgid "Color:" msgstr "Color:" #: src/glade/sensor-edit.glade:448 #, fuzzy msgid "Display sensor in the list of sensors" msgstr "Mostrar sensor en el menú de aplicaciones" #: src/glade/sensor-edit.glade:499 msgid "Activate desktop notifications" msgstr "Activar notificaciones en el escritorio" #: src/glade/sensor-edit.glade:528 msgid "High threshold:" msgstr "Límite superior" #: src/glade/sensor-edit.glade:550 msgid "0" msgstr "" #: src/glade/sensor-edit.glade:604 msgid "-1" msgstr "" #: src/glade/sensor-edit.glade:656 msgid "Low threshold:" msgstr "Límite inferior" #: src/glade/sensor-edit.glade:678 msgid "Alarm" msgstr "Alarma" #: src/glade/sensor-edit.glade:697 msgid "Display sensor in the menu" msgstr "Mostrar sensor en el menú de aplicaciones" #: src/glade/sensor-edit.glade:701 src/glade/sensor-edit.glade:723 #, fuzzy msgid "Psensor has not been build with AppIndicator support" msgstr "Psensor no ha sido compilado con soporte para sensores remotos." #: src/glade/sensor-edit.glade:719 #, fuzzy msgid "Display sensor in the label (experimental)" msgstr "Mostrar sensor en el menú de aplicaciones" #: src/glade/sensor-edit.glade:752 msgid "Application Indicator" msgstr "Indicador de aplicación" #: src/graph.c:460 msgid "No graphs enabled" msgstr "" #: src/lib/amd.c:171 msgid "AMD: cannot found ADL library." msgstr "AMD: no se ha encontrado la librería ADL" #: src/lib/amd.c:198 msgid "AMD: missing ADL's API." msgstr "AMD: ADL's API perdidos" #: src/lib/amd.c:208 msgid "AMD: failed to initialize ADL." msgstr "AMD: error al iniciar ADL" #: src/lib/amd.c:214 msgid "AMD: cannot get the number of adapters." msgstr "AMD: imposible listar el número de adaptadores" #: src/lib/amd.c:253 #, c-format msgid "Number of AMD/ATI adapters: %d" msgstr "Numero de adaptadores AMD/ATI: %d" #: src/lib/amd.c:254 #, c-format msgid "Number of active AMD/ATI adapters: %d" msgstr "Numero de adaptadores AMD/ATI: %d" #: src/lib/bcm2835.c:91 msgid "The BCM2835 (probably a Raspberry PI3) has been detected" msgstr "" #: src/lib/bcm2835.c:132 #, fuzzy, c-format msgid "Failed to get content of file %s." msgstr "Error al activar el registro de sensores" #: src/lib/hdd_atasmart.c:70 src/lib/hdd_hddtemp.c:125 src/lib/pudisks2.c:193 #: src/lib/pudisks2.c:194 msgid "Disk" msgstr "" #: src/lib/hdd_atasmart.c:153 #, c-format msgid "%s: sk_disk_open() failure: %s." msgstr "%s: sk_disk_open() Error: %s" #: src/lib/hdd_hddtemp.c:62 #, c-format msgid "%s: failed to open socket." msgstr "%s: fallo al desplegar el conector" #: src/lib/hdd_hddtemp.c:75 #, c-format msgid "%s: failed to open connection." msgstr "%s: fallo al establecer conexión" #: src/lib/hdd_hddtemp.c:190 src/lib/hdd_hddtemp.c:270 #, c-format msgid "%s: wrong string: %s." msgstr "%s: argumento erróneo:%s." #: src/lib/lmsensor.c:73 #, c-format msgid "%s: Cannot get value of subfeature %s: %s." msgstr "%s: imposible obtener el valor de subcaracterística %s:%s" #: src/lib/lmsensor.c:174 #, c-format msgid "%s: Wrong feature type." msgstr "" #: src/lib/lmsensor.c:203 msgid "Intel CPU" msgstr "" #: src/lib/lmsensor.c:207 msgid "AMD CPU" msgstr "" #: src/lib/lmsensor.c:209 msgid "NVIDIA GPU" msgstr "" #: src/lib/lmsensor.c:211 msgid "VIA CPU" msgstr "" #: src/lib/lmsensor.c:213 msgid "ACPI" msgstr "" #: src/lib/lmsensor.c:245 #, c-format msgid "%s: initialization failure: %s." msgstr "%s: Fallo de inicialización:%s." #: src/lib/pgtop2.c:42 msgid "CPU usage" msgstr "" #: src/lib/pgtop2.c:47 msgid "CPU" msgstr "" #: src/lib/pgtop2.c:63 msgid "free memory" msgstr "" #: src/lib/pgtop2.c:64 msgid "memory" msgstr "" #: src/lib/plog.c:43 #, c-format msgid "Cannot open log file: %s" msgstr "Imposible abrir el archivo de registro: %s" #: src/lib/nvidia.c:69 #, fuzzy, c-format msgid "%s: Unknown NVIDIA product name for GPU %d" msgstr "Error al obtener la información de NVIDIA" #: src/lib/nvidia.c:74 #, fuzzy, c-format msgid "%s: Failed to retrieve NVIDIA product name for GPU %d" msgstr "Error al obtener la información de NVIDIA" #: src/lib/nvidia.c:240 #, fuzzy, c-format msgid "%s: Failed to retrieve measure of type %x for NVIDIA GPU %d" msgstr "Error al obtener la información de NVIDIA" #: src/lib/nvidia.c:317 #, c-format msgid "%s: Cannot open connection to X11 server." msgstr "%s: Imposible establecer conexión con el servidor X11." #: src/lib/nvidia.c:325 #, c-format msgid "%s: Failed to retrieve NVIDIA information." msgstr "%s: Error al obtener la información de NVIDIA" #: src/lib/nvidia.c:394 #, fuzzy, c-format msgid "%s: Failed to retrieve number of fans." msgstr "Error al obtener la información de NVIDIA" #: src/lib/psensor.c:426 tests/test_psensor_type_to_unit_str.c:62 msgid "RPM" msgstr "RPM" #: src/lib/psensor.c:428 msgid "%" msgstr "%" #: src/lib/pudisks2.c:62 src/ui_notify.c:48 msgid "gettimeofday failed." msgstr "Error en la adquisición del horario." #: src/lib/pudisks2.c:142 #, c-format msgid "%s: cannot get the udisks2 client" msgstr "" #: src/lib/slog.c:87 msgid "HOME variable not set." msgstr "La variable HOME no ha sido definida" #: src/lib/slog.c:96 msgid "Sensor log file already open." msgstr "Ya existe un registro de sensores abierto" #: src/lib/slog.c:105 #, c-format msgid "Cannot open sensor log file: %s." msgstr "No se puede abrir el archivo de registro: %s." #: src/lib/slog.c:140 msgid "Sensor log file not open." msgstr "No se abrió el archivo de registro." #: src/lib/slog.c:196 msgid "Sensor log not open, cannot close." msgstr "¡No existe archivo que cerrar!" #: src/main.c:62 src/server/server.c:89 #, c-format msgid "" "Copyright (C) %s jeanfi@gmail.com\n" "License GPLv2: GNU GPL version 2 or later \n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright (C) %s jeanfi@gmail.com\n" "Licencia GPLv2: GNU GPL versión 2 o posterior \n" "Este programa es software libre: su modificación y difusión está aprobada y " "apoyada por el autor. \n" "No existe NINGUNA GARANTÍA hasta donde la ley lo permita.\n" #: src/main.c:73 src/server/server.c:99 #, c-format msgid "Usage: %s [OPTION]...\n" msgstr "Uso: %s [OPTION]...\n" #: src/main.c:75 msgid "" "Psensor is a GTK+ application for monitoring hardware sensors, including " "temperatures and fan speeds." msgstr "" "Psensor es un programa GTK+ que muestra datos de temperatura y ventiladores " "a través de los sensores de su hardware." #: src/main.c:79 msgid "Options:" msgstr "Opciones" #: src/main.c:80 msgid "" " -h, --help display this help and exit\n" " -v, --version display version information and exit" msgstr "" " -h, --help Muestra esta ayuda. \n" " -v, --versión Muestra información sobre la versión." #: src/main.c:86 msgid "" " -u, --url=URL the URL of the psensor-server,\n" " example: http://hostname:3131" msgstr "" " -u, --url=URL La URL del servidor psensor,\n" " ejemplo: http://hostname:3131" #: src/main.c:89 msgid " -n, --new-instance force the creation of a new Psensor application" msgstr " -n, --new-instance Fuerza el inicio de otro Psensor paralelo" #: src/main.c:92 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=NIVEL Establece el nivel de depuración con un valor entre 0 " "y 3" #: src/main.c:97 src/server/server.c:122 #, c-format msgid "Report bugs to: %s\n" msgstr "Comunicar fallos: %s\n" #: src/main.c:99 src/server/server.c:124 #, c-format msgid "%s home page: <%s>\n" msgstr "%s Página Oficial: <%s>\n" #: src/main.c:400 msgid "Psensor has not been compiled with remote sensor support." msgstr "Psensor no ha sido compilado con soporte para sensores remotos." #: src/main.c:472 msgid "Enables debug mode." msgstr "Activa el modo de depuración" #: src/main.c:484 src/server/server.c:423 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Introducir `%s --ayuda' para obtener más información\n" #: src/main.c:497 msgid "A Psensor instance already exists." msgstr "Ya existe un Psensor en ejecución." #: src/main.c:539 #, fuzzy msgid "Failed to create thread for monitoring sensors" msgstr "Fallo al crear el servidor Web" #: src/rsensor.c:115 #, fuzzy, c-format msgid "%s: Fail to connect to: %s" msgstr "Error al conectar a:%s" #: src/rsensor.c:152 #, fuzzy, c-format msgid "%s: Invalid content: %s" msgstr "Contenido no válido:%s" #: src/rsensor.c:190 #, fuzzy, c-format msgid "%s: Invalid JSON: %s" msgstr "JSON no válido:%s" #: src/server/server.c:59 msgid "

Server stop requested

" msgstr "

El servidor solicitó detenerse

" #: src/server/server.c:65 msgid "" "

Page not found - Go to Main page

" msgstr "" "

Página no encontrada- Ir a Página Principal" #: src/server/server.c:101 msgid "" "psensor-server is an HTTP server for monitoring hardware sensors remotely." msgstr "" "psensor-server es un servidor HTTP para obtener información de los sensores " "de forma remota." #: src/server/server.c:106 msgid "" " -h, --help\t\tdisplay this help and exit\n" " -v, --version\t\tdisplay version information and exit" msgstr "" " -h, --help\t\tMuestra esta ayuda.\n" " -v, --version\t\tMuestra la versión." #: src/server/server.c:110 msgid "" " -p,--port=PORT\twebserver port\n" " -w,--wdir=DIR\t\tdirectory containing webserver pages" msgstr "" " -p,--port=PORT\tPuerto del servidor web. \n" " -w,--wdir=DIR\t\tDirectorio de servidores web." #: src/server/server.c:114 msgid " -d, --debug=LEVEL set the debug level, integer between 0 and 3" msgstr "" " -d, --debug=NIVEL Establece el nivel de depuración con un número de 0 " "a 3" #: src/server/server.c:116 msgid " -l, --log-file=PATH set the log file to PATH" msgstr " -l, --log-file=PATH establece el archivo de registro en PATH" #: src/server/server.c:117 msgid " --sensor-log-file=PATH set the sensor log file to PATH" msgstr " --sensor-log-file=PATH establecer el archivo de registro en PATH" #: src/server/server.c:118 msgid " --sensor-log-interval=S set the sensor log interval to S (seconds)" msgstr " --sensor-log-interval=S registrar sensores cada S (seconds)" #: src/server/server.c:263 #, c-format msgid "Resource access refused %s real path is %s" msgstr "" #: src/server/server.c:270 #, fuzzy, c-format msgid "Cannot get real path of %s" msgstr "Imposible abrir el archivo de registro: %s" #: src/server/server.c:340 #, c-format msgid "HTTP Request: %s" msgstr "Petición HTTP:%s" #: src/server/server.c:403 #, c-format msgid "Enables debug mode: %d" msgstr "Activa el modo de depuración:%d" #: src/server/server.c:432 #, c-format msgid "Webserver directory does not exist.\n" msgstr "" #: src/server/server.c:455 msgid "No sensors detected." msgstr "No se han detectado sensores." #: src/server/server.c:462 msgid "Failed to create Web server." msgstr "Fallo al crear el servidor Web" #: src/server/server.c:466 #, c-format msgid "Web server started on port: %d" msgstr "Servidor web iniciado en el puerto:%d" #: src/server/server.c:467 #, c-format msgid "WWW directory: %s" msgstr "directorio WWW:%s" #: src/server/server.c:468 #, c-format msgid "URL: http://localhost:%d" msgstr "URL: http://localhost:%d" #: src/server/server.c:478 msgid "Failed to activate logging of sensors." msgstr "Error al activar el registro de sensores" #: src/ui.c:213 msgid "Psensor is a GTK+ application for monitoring hardware sensors" msgstr "" "Psensor es una aplicación GTK+ que recoge y muestra información de los " "sensores del hardware." #: src/ui.c:216 #, fuzzy msgid "Copyright(c) 2010-2020 jeanfi@gmail.com" msgstr "Copyright(c) 2010-2014 jeanfi@gmail.com" #: src/ui.c:222 msgid "About Psensor" msgstr "Sobre Psensor" #: src/ui.c:223 msgid "translator-credits" msgstr "" "Launchpad Contributions:\n" " Adolfo Jayme https://launchpad.net/~fitojb\n" " Eduardo Alberto Calvo https://launchpad.net/~edu5800\n" " Javier https://launchpad.net/~buik8roadmaster\n" " Jean-Philippe Orsini https://launchpad.net/~jfi" #: src/ui.c:226 msgid "Psensor Homepage" msgstr "Web de Psensor" #: src/ui.c:360 msgid "Failed to load Psensor icon." msgstr "Error al cargar el icono de Psensor" #: src/ui_sensorlist.c:261 msgid "Hide" msgstr "" #: src/ui_sensorlist.c:305 #, fuzzy msgid "Select sensor color" msgstr "Seleccionar el color del primer plano" #: src/ui_appindicator.c:148 #, fuzzy, c-format msgid "Failed to load glade file %s: %s" msgstr "Error al activar el registro de sensores" #: src/ui_notify.c:77 msgid "Temperature alert" msgstr "Alarma por temperatura." #: src/ui_notify.c:79 #, fuzzy msgid "Fan speed alert" msgstr "Alarma por parada de ventilador." #: src/ui_sensorpref.c:290 src/ui_sensorpref.c:296 src/ui_sensorpref.c:304 msgid "Unknown" msgstr "Desconocido" #~ msgid "lmsensor: lmsensor_psensor_create failure: wrong feature type." #~ msgstr "" #~ "lmsensor: lmsensor_psensor_create Fallo: tipo de funcion equivocada." #~ msgid "Sensor Information" #~ msgstr "Información del sensor" #~ msgid "" #~ "NVIDIA proprietary driver not used or cannot retrieve NVIDIA GPU " #~ "temperature." #~ msgstr "" #~ "Controlador propietario de NVIDIA no activado ó incapaz de obtener la " #~ "temperatura de la GPU" psensor-1.2.1/po/it.gmo0000664000175000017500000002514213676133402011676 00000000000000,< 8 D* Do B ^ kV 0 E U9 h   *)9*cJ6d  "'#BZ `n  ")0.3N`q  &'D ams  "15NW[p t 9=8ev (CJ]{" &6<U]n  J KUuhJW)MMge4I [j["$?8*x1&!;ZtVw=  !)K(S2|"% # C J b y   % 8  !!! !!"'" ?"M"d"$""""" #)#!H#(j# ####&##$1$ 5$ ?$K$f$w$$$($$$$$ $$%%!%#*% N%Y%w%@%A%v &&&&0&1&' ') '(J'3s''!''''"'(-(K(Q( j(v((((((((())")P)) z))4IQ)T~J mF'\Ssi ^1f+ D #w `M&bu?kC6cE!-x,P9BW0XoYgZRq_[p(G<2dv:V eN3AK|$@jn{H*8/.=>L}7y%zaO";]5hrUtl --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Failed to retrieve NVIDIA information.%s: Wrong feature type.%s: failed to open connection.%s: failed to open socket.%s: sk_disk_open() failure: %s.%s: wrong string: %s.-1

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.AMD CPUAMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmApplication IndicatorBackground opacity:Background:BottomCPUCannot open log file: %sCannot open sensor log file: %s.CelsiusChip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. DiskDisplay sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnables debug mode.Enables debug mode: %dFahrenheitFailed to activate logging of sensors.Failed to create Web server.Failed to load Psensor icon.Foreground:GraphHOME variable not set.HTTP Request: %sHide window decorationHide window on startupHigh threshold:Id:Intel CPUInterfaceKeep window belowLaunch on session startupLeftLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:N/ANVIDIA GPUNameName:No sensors detected.Options:Position of sensors table:PreferencesPsensor - Temperature MonitorPsensor HomepagePsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeScript executed when an alarm is raised:SensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowStartupTemperature alertTemperature unit:TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... VIA CPUValueWWW directory: %sWeb server started on port: %d_Help_Psensorgettimeofday failed.minute(s)psensorRightpsensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor 0.7.0.x Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-20 11:24+0000 Last-Translator: Jean-Philippe Orsini Language-Team: Italian Language: it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) --sensor-log-file=PATH imposta il file di registro dei sensori come PATH --sensor-log-interval=S imposta l'intervallo del registro di sensori come S (secondi) -d, --debug=LEVEL imposta il livello di debug, un intero compreso tra 0 e 3 -d, --debug=LEVEL imposta il livello di debug, un intero compreso tra 0 e 3 -h, --help mostra questo help ed esce -v, --version mostra le informazioni sulla versione ed esce -h, --help mostra questo help ed esce -v, --version mostra le informazioni sulla versione ed esce -l, --log-file=PATH imposta il file di log su PATH -n, --new-instance forza la creazione di una nuova applicazione Psensor -p,--port=PORT porta del server web -w,--wdir=DIR directory che contiene le pagine web -u, --url=URL URL del server psensor, esempio: http://hostname:3131%%s home page: <%s> %s: impossibile rilevare il valore della sotto funzione %s: %s.%s: Impossibile connettersi al server X11.%s: Impossibile recuperare informazioni da NVIDIA%s: tipo di funzione errata.%s: impossibile aprire la connessione.%s: impossibile aprire il socket.%s: errore sk_disk_open(): %s.%s: errore di stringa: %s-1

Pagina non trovata - Vai a Pagina principale

Arresto del server richiesto

MassimoMinimoEsiste già un'istanza di PsensorCPU AMDAMD: impossibile trovare la libreria ADLAMD: impossibile rilevare il numero di adattatori.AMD: impossibile inizializzare ADLAMD: impossibile trovare l'API di ADLInformazioni su...Informazioni su PsensorAttiva le notifiche sul desktopAvvisoIndicatore ApplicazioneOpacità dello sfondo:Sfondo:In BassoCPUImpossibile aprire il file di log: %sImpossibile aprire il file di registrazione sensori: %s.CelsiusProcessore:ColoreColore:ColoriCopyright (C) %s jeanfi@gmail.com Licenza GPLv2: GNU GPL versione 2 o successiva Questo è software libero: sei libero di modificarlo e redistribuirlo. NON esiste GARANZIA, per gli scopi permessi dalla legge. DiscoMostra sensore nel menuDisegna curvaModifica le preferenzeModifica preferenze del sensoreAbilita contatore nel Launcher UnityAbilita il menùAbilita registrazione sensoriAbilita la modalità debug.Abilita modalità di debug: %dFahrenheitAttivazione registro dei sensori fallita.Impossibile creare il Web server.Impossibile caricare l'icona di Psensor.Primo piano:GraficoVariabile HOME non impostata.HTTP Request: %sNascondi le decorazioni della finestraNascondi la finestra all'avvioSoglia verso l'altoId:CPU IntelInterfacciaMantieni la finestra sottoLancia all'avvioSinistraSoglia verso il bassoMassimoIntervallo di aggiornamento delle misureMisureMinimoDurata del monitoraggio:N/ACPU NVIDIANomeNome:Nessun sensore rilevato.Opzioni:Posizione della tabella dei sensoriPreferenzePsensor - Monitor temperaturaPsensor HomepagePsensor è stato compilato senza il supporto per sensori remoti.Psensor è un'applicazione GTK+ per monitorare i sensori hardwarePsensor è un'applicazione GTK+ per monitorare i sensori dell'hardware, incluse temperature e velocità delle ventole.EsciRPMSegnalare i bug a: %s Ripristina posizione e dimensione della finestraScript eseguito quando un allarme viene attivato:SensorePreferenze SensoreFile di registazione sensori già aperto.File di registazione sensori non aperto.Registro sensori non aperto, impossibile chiuderlo.SensoriIntervallo registrazione sensori:MostraAvvioAllarme temperaturaUnità di misura della temperaturaIn AltoUsare '%s --help' per maggiori informazioni. Tipo:URL: http://localhost:%dSconosciutoIntervallo di aggiornamento:Uso: %s [OPZIONE]... CPU VIAValoreWWW directory: %sWeb server inizializzato sulla porta: %d_Aiuto_Psensorgettimeofday fallito.minuto/iDestrapsensor-server è un server HTTP per il monitoraggio remoto di sensori hardware.secondo/iLaunchpad Contributions: Andrea Bernini https://launchpad.net/~andrea-bernini Diego Pierotto https://launchpad.net/~gringo Gabriele https://launchpad.net/~deepdown23 Jean-Philippe Orsini https://launchpad.net/~jfipsensor-1.2.1/po/es.gmo0000664000175000017500000002446013676133402011673 00000000000000x( 8) Db D B ^/ k 0 E+ Uq h 0 2 *F )q *    @JV6  "'0Xw   ?EKRYWr &@] z &*CLPeint% 9-=ge  (IPc" & 4:S[l  J AKy^B=QYPGhD@?Y.f: 7F.~!" 0WK@  #) /Jz  '  2*8-c** $!'!6!!N! p!~!! !(!"#""F"\"$e"""3""##%# ?#I#Z#_#t#|## ####!#!#$"$<$ D$e$?t$_$u%%%%+%%%)%$&D&d&"m&&&&&7&' ' $'0'M'b'h'%z'''%' '']' F(Q(QN;l]=D0_("YbjxkwGuF-.U 4c89?&1/  Cs+#[t<:mi I^n!K\2EZo63f@M`*deHAL,Sa$Tq)5'pg%WPV R B>vO7JhXr --sensor-log-file=PATH set the sensor log file to PATH --sensor-log-interval=S set the sensor log interval to S (seconds) -d, --debug=LEVEL set the debug level, integer between 0 and 3 -d, --debug=LEVEL set the debug level, integer between 0 and 3 -h, --help display this help and exit -v, --version display version information and exit -h, --help display this help and exit -v, --version display version information and exit -l, --log-file=PATH set the log file to PATH -n, --new-instance force the creation of a new Psensor application -p,--port=PORT webserver port -w,--wdir=DIR directory containing webserver pages -u, --url=URL the URL of the psensor-server, example: http://hostname:3131%%s home page: <%s> %s: Cannot get value of subfeature %s: %s.%s: Cannot open connection to X11 server.%s: Failed to retrieve NVIDIA information.%s: failed to open connection.%s: failed to open socket.%s: initialization failure: %s.%s: sk_disk_open() failure: %s.%s: wrong string: %s.

Page not found - Go to Main page

Server stop requested

MaxMinA Psensor instance already exists.AMD: cannot found ADL library.AMD: cannot get the number of adapters.AMD: failed to initialize ADL.AMD: missing ADL's API.AboutAbout PsensorActivate desktop notificationsAlarmApplication IndicatorBackground opacity:Background:BottomCannot open log file: %sCannot open sensor log file: %s.Chip:ColorColor:ColorsCopyright (C) %s jeanfi@gmail.com License GPLv2: GNU GPL version 2 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Display sensor in the menuDraw sensor curveEdit PreferencesEdit Sensor PreferencesEnable Unity Launcher counterEnable menuEnable sensors loggingEnables debug mode.Enables debug mode: %dFailed to activate logging of sensors.Failed to create Web server.Failed to load Psensor icon.Foreground:GraphHOME variable not set.HTTP Request: %sHide window decorationHide window on startupHigh threshold:Id:InterfaceKeep window belowLeftLow threshold:MaxMeasure update interval:MeasuresMinMonitoring duration:N/ANameName:No sensors detected.Number of AMD/ATI adapters: %dNumber of active AMD/ATI adapters: %dOptions:Position of sensors table:PreferencesPsensor - Temperature MonitorPsensor HomepagePsensor has not been compiled with remote sensor support.Psensor is a GTK+ application for monitoring hardware sensorsPsensor is a GTK+ application for monitoring hardware sensors, including temperatures and fan speeds.QuitRPMReport bugs to: %s Restore window position and sizeSensorSensor PreferencesSensor log file already open.Sensor log file not open.Sensor log not open, cannot close.SensorsSensors logging interval:ShowTemperature alertTemperature unit:TopTry `%s --help' for more information. Type:URL: http://localhost:%dUnknownUpdate interval:Usage: %s [OPTION]... ValueWWW directory: %sWeb server started on port: %d_Help_Psensorgettimeofday failed.minute(s)psensorRightpsensor-server is an HTTP server for monitoring hardware sensors remotely.second(s)translator-creditsProject-Id-Version: psensor Report-Msgid-Bugs-To: jeanfi@gmail.com PO-Revision-Date: 2014-09-20 11:26+0000 Last-Translator: Jean-Philippe Orsini Language-Team: Spanish Language: es MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Launchpad-Export-Date: 2014-09-21 08:56+0000 X-Generator: Launchpad (build 17196) --sensor-log-file=PATH establecer el archivo de registro en PATH --sensor-log-interval=S registrar sensores cada S (seconds) -d, --debug=NIVEL Establece el nivel de depuración con un número de 0 a 3 -d, --debug=NIVEL Establece el nivel de depuración con un valor entre 0 y 3 -h, --help Muestra esta ayuda. -v, --version Muestra la versión. -h, --help Muestra esta ayuda. -v, --versión Muestra información sobre la versión. -l, --log-file=PATH establece el archivo de registro en PATH -n, --new-instance Fuerza el inicio de otro Psensor paralelo -p,--port=PORT Puerto del servidor web. -w,--wdir=DIR Directorio de servidores web. -u, --url=URL La URL del servidor psensor, ejemplo: http://hostname:3131%%s Página Oficial: <%s> %s: imposible obtener el valor de subcaracterística %s:%s%s: Imposible establecer conexión con el servidor X11.%s: Error al obtener la información de NVIDIA%s: fallo al establecer conexión%s: fallo al desplegar el conector%s: Fallo de inicialización:%s.%s: sk_disk_open() Error: %s%s: argumento erróneo:%s.

Página no encontrada- Ir a Página Principal

El servidor solicitó detenerse

MáxMínYa existe un Psensor en ejecución.AMD: no se ha encontrado la librería ADLAMD: imposible listar el número de adaptadoresAMD: error al iniciar ADLAMD: ADL's API perdidosAcerca deSobre PsensorActivar notificaciones en el escritorioAlarmaIndicador de aplicaciónOpacidad del fondo:Fondo de gráficaAbajoImposible abrir el archivo de registro: %sNo se puede abrir el archivo de registro: %s.Chip:ColorColor:ColoresCopyright (C) %s jeanfi@gmail.com Licencia GPLv2: GNU GPL versión 2 o posterior Este programa es software libre: su modificación y difusión está aprobada y apoyada por el autor. No existe NINGUNA GARANTÍA hasta donde la ley lo permita. Mostrar sensor en el menú de aplicacionesRepresentar el sensor en la gráficaEditar AjustesEditar Ajustes SensoresInicio retardado al abrir sesiónActivar menúActivar registro de sensoresActiva el modo de depuraciónActiva el modo de depuración:%dError al activar el registro de sensoresFallo al crear el servidor WebError al cargar el icono de PsensorEscalas y cuadrículaGráficaLa variable HOME no ha sido definidaPetición HTTP:%sOcultar el marco de la ventanaOcultar la ventana de gráficas al iniciar sesión.Límite superiorIdentificativo:InterfazMantener debajo del resto de ventanasIzquierdaLímite inferiorMáxMedir sensores cada:MedidasMínIntervalo de la gráficaNo disponibleNombreNombre:No se han detectado sensores.Numero de adaptadores AMD/ATI: %dNumero de adaptadores AMD/ATI: %dOpcionesUbicación de los valoresAjustesPsensor - Monitor de temperaturaWeb de PsensorPsensor no ha sido compilado con soporte para sensores remotos.Psensor es una aplicación GTK+ que recoge y muestra información de los sensores del hardware.Psensor es un programa GTK+ que muestra datos de temperatura y ventiladores a través de los sensores de su hardware.SalirRPMComunicar fallos: %s Restaurar tamaño y posición de la ventanaSensorAjustes de los SensoresYa existe un registro de sensores abiertoNo se abrió el archivo de registro.¡No existe archivo que cerrar!SensoresIntervalo de registro de sensores:MostrarAlarma por temperatura.Unidad de temperaturaArribaIntroducir `%s --ayuda' para obtener más información Tipo:URL: http://localhost:%dDesconocidoIntervalo de actualización:Uso: %s [OPTION]... Valordirectorio WWW:%sServidor web iniciado en el puerto:%d_Ayuda_PsensorError en la adquisición del horario.minuto(s)Derechapsensor-server es un servidor HTTP para obtener información de los sensores de forma remota.segundo(s)Launchpad Contributions: Adolfo Jayme https://launchpad.net/~fitojb Eduardo Alberto Calvo https://launchpad.net/~edu5800 Javier https://launchpad.net/~buik8roadmaster Jean-Philippe Orsini https://launchpad.net/~jfipsensor-1.2.1/www/0000775000175000017500000000000013676133431011042 500000000000000psensor-1.2.1/www/jqplot.js0000644000175000017500000161727513353521057012647 00000000000000/** * Title: jqPlot Charts * * Pure JavaScript plotting plugin for jQuery. * * About: Version * * version: 1.0.8 * revision: 1250 * * About: Copyright & License * * Copyright (c) 2009-2013 Chris Leonello * jqPlot is currently available for use in all personal or commercial projects * under both the MIT and GPL version 2.0 licenses. This means that you can * choose the license that best suits your project and use it accordingly. * * See and contained within this distribution for further information. * * The author would appreciate an email letting him know of any substantial * use of jqPlot. You can reach the author at: chris at jqplot dot com * or see http://www.jqplot.com/info.php. This is, of course, not required. * * If you are feeling kind and generous, consider supporting the project by * making a donation at: http://www.jqplot.com/donate.php. * * sprintf functions contained in jqplot.sprintf.js by Ash Searle: * * version 2007.04.27 * author Ash Searle * http://hexmen.com/blog/2007/03/printf-sprintf/ * http://hexmen.com/js/sprintf.js * The author (Ash Searle) has placed this code in the public domain: * "This code is unrestricted: you are free to use it however you like." * * * About: Introduction * * jqPlot requires jQuery (1.4+ required for certain features). jQuery 1.4.2 is included in the distribution. * To use jqPlot include jQuery, the jqPlot jQuery plugin, the jqPlot css file and optionally * the excanvas script for IE support in your web page: * * > * > * > * > * * jqPlot can be customized by overriding the defaults of any of the objects which make * up the plot. The general usage of jqplot is: * * > chart = $.jqplot('targetElemId', [dataArray,...], {optionsObject}); * * The options available to jqplot are detailed in in the jqPlotOptions.txt file. * * An actual call to $.jqplot() may look like the * examples below: * * > chart = $.jqplot('chartdiv', [[[1, 2],[3,5.12],[5,13.1],[7,33.6],[9,85.9],[11,219.9]]]); * * or * * > dataArray = [34,12,43,55,77]; * > chart = $.jqplot('targetElemId', [dataArray, ...], {title:'My Plot', axes:{yaxis:{min:20, max:100}}}); * * For more inforrmation, see . * * About: Usage * * See * * About: Available Options * * See for a list of options available thorugh the options object (not complete yet!) * * About: Options Usage * * See * * About: Changes * * See * */ (function($) { // make sure undefined is undefined var undefined; $.fn.emptyForce = function() { for ( var i = 0, elem; (elem = $(this)[i]) != null; i++ ) { // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { $.cleanData( elem.getElementsByTagName("*") ); } // Remove any remaining nodes if ($.jqplot.use_excanvas) { elem.outerHTML = ""; } else { while ( elem.firstChild ) { elem.removeChild( elem.firstChild ); } } elem = null; } return $(this); }; $.fn.removeChildForce = function(parent) { while ( parent.firstChild ) { this.removeChildForce( parent.firstChild ); parent.removeChild( parent.firstChild ); } }; $.fn.jqplot = function() { var datas = []; var options = []; // see how many data arrays we have for (var i=0, l=arguments.length; i'+msg+''); $('#'+target).addClass('jqplot-error'); document.getElementById(target).style.background = $.jqplot.config.errorBackground; document.getElementById(target).style.border = $.jqplot.config.errorBorder; document.getElementById(target).style.fontFamily = $.jqplot.config.errorFontFamily; document.getElementById(target).style.fontSize = $.jqplot.config.errorFontSize; document.getElementById(target).style.fontStyle = $.jqplot.config.errorFontStyle; document.getElementById(target).style.fontWeight = $.jqplot.config.errorFontWeight; } } else { plot.init(target, _data, _options); plot.draw(); plot.themeEngine.init.call(plot); return plot; } }; $.jqplot.version = "1.0.8"; $.jqplot.revision = "1250"; $.jqplot.targetCounter = 1; // canvas manager to reuse canvases on the plot. // Should help solve problem of canvases not being freed and // problem of waiting forever for firefox to decide to free memory. $.jqplot.CanvasManager = function() { // canvases are managed globally so that they can be reused // across plots after they have been freed if (typeof $.jqplot.CanvasManager.canvases == 'undefined') { $.jqplot.CanvasManager.canvases = []; $.jqplot.CanvasManager.free = []; } var myCanvases = []; this.getCanvas = function() { var canvas; var makeNew = true; if (!$.jqplot.use_excanvas) { for (var i = 0, l = $.jqplot.CanvasManager.canvases.length; i < l; i++) { if ($.jqplot.CanvasManager.free[i] === true) { makeNew = false; canvas = $.jqplot.CanvasManager.canvases[i]; // $(canvas).removeClass('jqplot-canvasManager-free').addClass('jqplot-canvasManager-inuse'); $.jqplot.CanvasManager.free[i] = false; myCanvases.push(i); break; } } } if (makeNew) { canvas = document.createElement('canvas'); myCanvases.push($.jqplot.CanvasManager.canvases.length); $.jqplot.CanvasManager.canvases.push(canvas); $.jqplot.CanvasManager.free.push(false); } return canvas; }; // this method has to be used after settings the dimesions // on the element returned by getCanvas() this.initCanvas = function(canvas) { if ($.jqplot.use_excanvas) { return window.G_vmlCanvasManager.initElement(canvas); } return canvas; }; this.freeAllCanvases = function() { for (var i = 0, l=myCanvases.length; i < l; i++) { this.freeCanvas(myCanvases[i]); } myCanvases = []; }; this.freeCanvas = function(idx) { if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { // excanvas can't be reused, but properly unset window.G_vmlCanvasManager.uninitElement($.jqplot.CanvasManager.canvases[idx]); $.jqplot.CanvasManager.canvases[idx] = null; } else { var canvas = $.jqplot.CanvasManager.canvases[idx]; canvas.getContext('2d').clearRect(0, 0, canvas.width, canvas.height); $(canvas).unbind().removeAttr('class').removeAttr('style'); // Style attributes seemed to be still hanging around. wierd. Some ticks // still retained a left: 0px attribute after reusing a canvas. $(canvas).css({left: '', top: '', position: ''}); // setting size to 0 may save memory of unused canvases? canvas.width = 0; canvas.height = 0; $.jqplot.CanvasManager.free[idx] = true; } }; }; // Convienence function that won't hang IE or FF without FireBug. $.jqplot.log = function() { if (window.console) { window.console.log.apply(window.console, arguments); } }; $.jqplot.config = { addDomReference: false, enablePlugins:false, defaultHeight:300, defaultWidth:400, UTCAdjust:false, timezoneOffset: new Date(new Date().getTimezoneOffset() * 60000), errorMessage: '', errorBackground: '', errorBorder: '', errorFontFamily: '', errorFontSize: '', errorFontStyle: '', errorFontWeight: '', catchErrors: false, defaultTickFormatString: "%.1f", defaultColors: [ "#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"], defaultNegativeColors: [ "#498991", "#C08840", "#9F9274", "#546D61", "#646C4A", "#6F6621", "#6E3F5F", "#4F64B0", "#A89050", "#C45923", "#187399", "#945381", "#959E5C", "#C7AF7B", "#478396", "#907294"], dashLength: 4, gapLength: 4, dotGapLength: 2.5, srcLocation: 'jqplot/src/', pluginLocation: 'jqplot/src/plugins/' }; $.jqplot.arrayMax = function( array ){ return Math.max.apply( Math, array ); }; $.jqplot.arrayMin = function( array ){ return Math.min.apply( Math, array ); }; $.jqplot.enablePlugins = $.jqplot.config.enablePlugins; // canvas related tests taken from modernizer: // Copyright (c) 2009 - 2010 Faruk Ates. // http://www.modernizr.com $.jqplot.support_canvas = function() { if (typeof $.jqplot.support_canvas.result == 'undefined') { $.jqplot.support_canvas.result = !!document.createElement('canvas').getContext; } return $.jqplot.support_canvas.result; }; $.jqplot.support_canvas_text = function() { if (typeof $.jqplot.support_canvas_text.result == 'undefined') { if (window.G_vmlCanvasManager !== undefined && window.G_vmlCanvasManager._version > 887) { $.jqplot.support_canvas_text.result = true; } else { $.jqplot.support_canvas_text.result = !!(document.createElement('canvas').getContext && typeof document.createElement('canvas').getContext('2d').fillText == 'function'); } } return $.jqplot.support_canvas_text.result; }; $.jqplot.use_excanvas = ((!$.support.boxModel || !$.support.objectAll || !$support.leadingWhitespace) && !$.jqplot.support_canvas()) ? true : false; /** * * Hooks: jqPlot Pugin Hooks * * $.jqplot.preInitHooks - called before initialization. * $.jqplot.postInitHooks - called after initialization. * $.jqplot.preParseOptionsHooks - called before user options are parsed. * $.jqplot.postParseOptionsHooks - called after user options are parsed. * $.jqplot.preDrawHooks - called before plot draw. * $.jqplot.postDrawHooks - called after plot draw. * $.jqplot.preDrawSeriesHooks - called before each series is drawn. * $.jqplot.postDrawSeriesHooks - called after each series is drawn. * $.jqplot.preDrawLegendHooks - called before the legend is drawn. * $.jqplot.addLegendRowHooks - called at the end of legend draw, so plugins * can add rows to the legend table. * $.jqplot.preSeriesInitHooks - called before series is initialized. * $.jqplot.postSeriesInitHooks - called after series is initialized. * $.jqplot.preParseSeriesOptionsHooks - called before series related options * are parsed. * $.jqplot.postParseSeriesOptionsHooks - called after series related options * are parsed. * $.jqplot.eventListenerHooks - called at the end of plot drawing, binds * listeners to the event canvas which lays on top of the grid area. * $.jqplot.preDrawSeriesShadowHooks - called before series shadows are drawn. * $.jqplot.postDrawSeriesShadowHooks - called after series shadows are drawn. * */ $.jqplot.preInitHooks = []; $.jqplot.postInitHooks = []; $.jqplot.preParseOptionsHooks = []; $.jqplot.postParseOptionsHooks = []; $.jqplot.preDrawHooks = []; $.jqplot.postDrawHooks = []; $.jqplot.preDrawSeriesHooks = []; $.jqplot.postDrawSeriesHooks = []; $.jqplot.preDrawLegendHooks = []; $.jqplot.addLegendRowHooks = []; $.jqplot.preSeriesInitHooks = []; $.jqplot.postSeriesInitHooks = []; $.jqplot.preParseSeriesOptionsHooks = []; $.jqplot.postParseSeriesOptionsHooks = []; $.jqplot.eventListenerHooks = []; $.jqplot.preDrawSeriesShadowHooks = []; $.jqplot.postDrawSeriesShadowHooks = []; // A superclass holding some common properties and methods. $.jqplot.ElemContainer = function() { this._elem; this._plotWidth; this._plotHeight; this._plotDimensions = {height:null, width:null}; }; $.jqplot.ElemContainer.prototype.createElement = function(el, offsets, clss, cssopts, attrib) { this._offsets = offsets; var klass = clss || 'jqplot'; var elem = document.createElement(el); this._elem = $(elem); this._elem.addClass(klass); this._elem.css(cssopts); this._elem.attr(attrib); // avoid memory leak; elem = null; return this._elem; }; $.jqplot.ElemContainer.prototype.getWidth = function() { if (this._elem) { return this._elem.outerWidth(true); } else { return null; } }; $.jqplot.ElemContainer.prototype.getHeight = function() { if (this._elem) { return this._elem.outerHeight(true); } else { return null; } }; $.jqplot.ElemContainer.prototype.getPosition = function() { if (this._elem) { return this._elem.position(); } else { return {top:null, left:null, bottom:null, right:null}; } }; $.jqplot.ElemContainer.prototype.getTop = function() { return this.getPosition().top; }; $.jqplot.ElemContainer.prototype.getLeft = function() { return this.getPosition().left; }; $.jqplot.ElemContainer.prototype.getBottom = function() { return this._elem.css('bottom'); }; $.jqplot.ElemContainer.prototype.getRight = function() { return this._elem.css('right'); }; /** * Class: Axis * An individual axis object. Cannot be instantiated directly, but created * by the Plot object. Axis properties can be set or overridden by the * options passed in from the user. * */ function Axis(name) { $.jqplot.ElemContainer.call(this); // Group: Properties // // Axes options are specified within an axes object at the top level of the // plot options like so: // > { // > axes: { // > xaxis: {min: 5}, // > yaxis: {min: 2, max: 8, numberTicks:4}, // > x2axis: {pad: 1.5}, // > y2axis: {ticks:[22, 44, 66, 88]} // > } // > } // There are 2 x axes, 'xaxis' and 'x2axis', and // 9 yaxes, 'yaxis', 'y2axis'. 'y3axis', ... Any or all of which may be specified. this.name = name; this._series = []; // prop: show // Wether to display the axis on the graph. this.show = false; // prop: tickRenderer // A class of a rendering engine for creating the ticks labels displayed on the plot, // See <$.jqplot.AxisTickRenderer>. this.tickRenderer = $.jqplot.AxisTickRenderer; // prop: tickOptions // Options that will be passed to the tickRenderer, see <$.jqplot.AxisTickRenderer> options. this.tickOptions = {}; // prop: labelRenderer // A class of a rendering engine for creating an axis label. this.labelRenderer = $.jqplot.AxisLabelRenderer; // prop: labelOptions // Options passed to the label renderer. this.labelOptions = {}; // prop: label // Label for the axis this.label = null; // prop: showLabel // true to show the axis label. this.showLabel = true; // prop: min // minimum value of the axis (in data units, not pixels). this.min = null; // prop: max // maximum value of the axis (in data units, not pixels). this.max = null; // prop: autoscale // DEPRECATED // the default scaling algorithm produces superior results. this.autoscale = false; // prop: pad // Padding to extend the range above and below the data bounds. // The data range is multiplied by this factor to determine minimum and maximum axis bounds. // A value of 0 will be interpreted to mean no padding, and pad will be set to 1.0. this.pad = 1.2; // prop: padMax // Padding to extend the range above data bounds. // The top of the data range is multiplied by this factor to determine maximum axis bounds. // A value of 0 will be interpreted to mean no padding, and padMax will be set to 1.0. this.padMax = null; // prop: padMin // Padding to extend the range below data bounds. // The bottom of the data range is multiplied by this factor to determine minimum axis bounds. // A value of 0 will be interpreted to mean no padding, and padMin will be set to 1.0. this.padMin = null; // prop: ticks // 1D [val, val, ...] or 2D [[val, label], [val, label], ...] array of ticks for the axis. // If no label is specified, the value is formatted into an appropriate label. this.ticks = []; // prop: numberTicks // Desired number of ticks. Default is to compute automatically. this.numberTicks; // prop: tickInterval // number of units between ticks. Mutually exclusive with numberTicks. this.tickInterval; // prop: renderer // A class of a rendering engine that handles tick generation, // scaling input data to pixel grid units and drawing the axis element. this.renderer = $.jqplot.LinearAxisRenderer; // prop: rendererOptions // renderer specific options. See <$.jqplot.LinearAxisRenderer> for options. this.rendererOptions = {}; // prop: showTicks // Wether to show the ticks (both marks and labels) or not. // Will not override showMark and showLabel options if specified on the ticks themselves. this.showTicks = true; // prop: showTickMarks // Wether to show the tick marks (line crossing grid) or not. // Overridden by showTicks and showMark option of tick itself. this.showTickMarks = true; // prop: showMinorTicks // Wether or not to show minor ticks. This is renderer dependent. this.showMinorTicks = true; // prop: drawMajorGridlines // True to draw gridlines for major axis ticks. this.drawMajorGridlines = true; // prop: drawMinorGridlines // True to draw gridlines for minor ticks. this.drawMinorGridlines = false; // prop: drawMajorTickMarks // True to draw tick marks for major axis ticks. this.drawMajorTickMarks = true; // prop: drawMinorTickMarks // True to draw tick marks for minor ticks. This is renderer dependent. this.drawMinorTickMarks = true; // prop: useSeriesColor // Use the color of the first series associated with this axis for the // tick marks and line bordering this axis. this.useSeriesColor = false; // prop: borderWidth // width of line stroked at the border of the axis. Defaults // to the width of the grid boarder. this.borderWidth = null; // prop: borderColor // color of the border adjacent to the axis. Defaults to grid border color. this.borderColor = null; // prop: scaleToHiddenSeries // True to include hidden series when computing axes bounds and scaling. this.scaleToHiddenSeries = false; // minimum and maximum values on the axis. this._dataBounds = {min:null, max:null}; // statistics (min, max, mean) as well as actual data intervals for each series attached to axis. // holds collection of {intervals:[], min:, max:, mean: } objects for each series on axis. this._intervalStats = []; // pixel position from the top left of the min value and max value on the axis. this._offsets = {min:null, max:null}; this._ticks=[]; this._label = null; // prop: syncTicks // true to try and synchronize tick spacing across multiple axes so that ticks and // grid lines line up. This has an impact on autoscaling algorithm, however. // In general, autoscaling an individual axis will work better if it does not // have to sync ticks. this.syncTicks = null; // prop: tickSpacing // Approximate pixel spacing between ticks on graph. Used during autoscaling. // This number will be an upper bound, actual spacing will be less. this.tickSpacing = 75; // Properties to hold the original values for min, max, ticks, tickInterval and numberTicks // so they can be restored if altered by plugins. this._min = null; this._max = null; this._tickInterval = null; this._numberTicks = null; this.__ticks = null; // hold original user options. this._options = {}; } Axis.prototype = new $.jqplot.ElemContainer(); Axis.prototype.constructor = Axis; Axis.prototype.init = function() { if ($.isFunction(this.renderer)) { this.renderer = new this.renderer(); } // set the axis name this.tickOptions.axis = this.name; // if showMark or showLabel tick options not specified, use value of axis option. // showTicks overrides showTickMarks. if (this.tickOptions.showMark == null) { this.tickOptions.showMark = this.showTicks; } if (this.tickOptions.showMark == null) { this.tickOptions.showMark = this.showTickMarks; } if (this.tickOptions.showLabel == null) { this.tickOptions.showLabel = this.showTicks; } if (this.label == null || this.label == '') { this.showLabel = false; } else { this.labelOptions.label = this.label; } if (this.showLabel == false) { this.labelOptions.show = false; } // set the default padMax, padMin if not specified // special check, if no padding desired, padding // should be set to 1.0 if (this.pad == 0) { this.pad = 1.0; } if (this.padMax == 0) { this.padMax = 1.0; } if (this.padMin == 0) { this.padMin = 1.0; } if (this.padMax == null) { this.padMax = (this.pad-1)/2 + 1; } if (this.padMin == null) { this.padMin = (this.pad-1)/2 + 1; } // now that padMin and padMax are correctly set, reset pad in case user has supplied // padMin and/or padMax this.pad = this.padMax + this.padMin - 1; if (this.min != null || this.max != null) { this.autoscale = false; } // if not set, sync ticks for y axes but not x by default. if (this.syncTicks == null && this.name.indexOf('y') > -1) { this.syncTicks = true; } else if (this.syncTicks == null){ this.syncTicks = false; } this.renderer.init.call(this, this.rendererOptions); }; Axis.prototype.draw = function(ctx, plot) { // Memory Leaks patch if (this.__ticks) { this.__ticks = null; } return this.renderer.draw.call(this, ctx, plot); }; Axis.prototype.set = function() { this.renderer.set.call(this); }; Axis.prototype.pack = function(pos, offsets) { if (this.show) { this.renderer.pack.call(this, pos, offsets); } // these properties should all be available now. if (this._min == null) { this._min = this.min; this._max = this.max; this._tickInterval = this.tickInterval; this._numberTicks = this.numberTicks; this.__ticks = this._ticks; } }; // reset the axis back to original values if it has been scaled, zoomed, etc. Axis.prototype.reset = function() { this.renderer.reset.call(this); }; Axis.prototype.resetScale = function(opts) { $.extend(true, this, {min: null, max: null, numberTicks: null, tickInterval: null, _ticks: [], ticks: []}, opts); this.resetDataBounds(); }; Axis.prototype.resetDataBounds = function() { // Go through all the series attached to this axis and find // the min/max bounds for this axis. var db = this._dataBounds; db.min = null; db.max = null; var l, s, d; // check for when to force min 0 on bar series plots. var doforce = (this.show) ? true : false; for (var i=0; i db.max) || db.max == null) { db.max = d[j][0]; } } else { if ((d[j][minyidx] != null && d[j][minyidx] < db.min) || db.min == null) { db.min = d[j][minyidx]; } if ((d[j][maxyidx] != null && d[j][maxyidx] > db.max) || db.max == null) { db.max = d[j][maxyidx]; } } } // Hack to not pad out bottom of bar plots unless user has specified a padding. // every series will have a chance to set doforce to false. once it is set to // false, it cannot be reset to true. // If any series attached to axis is not a bar, wont force 0. if (doforce && s.renderer.constructor !== $.jqplot.BarRenderer) { doforce = false; } else if (doforce && this._options.hasOwnProperty('forceTickAt0') && this._options.forceTickAt0 == false) { doforce = false; } else if (doforce && s.renderer.constructor === $.jqplot.BarRenderer) { if (s.barDirection == 'vertical' && this.name != 'xaxis' && this.name != 'x2axis') { if (this._options.pad != null || this._options.padMin != null) { doforce = false; } } else if (s.barDirection == 'horizontal' && (this.name == 'xaxis' || this.name == 'x2axis')) { if (this._options.pad != null || this._options.padMin != null) { doforce = false; } } } } } if (doforce && this.renderer.constructor === $.jqplot.LinearAxisRenderer && db.min >= 0) { this.padMin = 1.0; this.forceTickAt0 = true; } }; /** * Class: Legend * Legend object. Cannot be instantiated directly, but created * by the Plot object. Legend properties can be set or overridden by the * options passed in from the user. */ function Legend(options) { $.jqplot.ElemContainer.call(this); // Group: Properties // prop: show // Wether to display the legend on the graph. this.show = false; // prop: location // Placement of the legend. one of the compass directions: nw, n, ne, e, se, s, sw, w this.location = 'ne'; // prop: labels // Array of labels to use. By default the renderer will look for labels on the series. // Labels specified in this array will override labels specified on the series. this.labels = []; // prop: showLabels // true to show the label text on the legend. this.showLabels = true; // prop: showSwatch // true to show the color swatches on the legend. this.showSwatches = true; // prop: placement // "insideGrid" places legend inside the grid area of the plot. // "outsideGrid" places the legend outside the grid but inside the plot container, // shrinking the grid to accomodate the legend. // "inside" synonym for "insideGrid", // "outside" places the legend ouside the grid area, but does not shrink the grid which // can cause the legend to overflow the plot container. this.placement = "insideGrid"; // prop: xoffset // DEPRECATED. Set the margins on the legend using the marginTop, marginLeft, etc. // properties or via CSS margin styling of the .jqplot-table-legend class. this.xoffset = 0; // prop: yoffset // DEPRECATED. Set the margins on the legend using the marginTop, marginLeft, etc. // properties or via CSS margin styling of the .jqplot-table-legend class. this.yoffset = 0; // prop: border // css spec for the border around the legend box. this.border; // prop: background // css spec for the background of the legend box. this.background; // prop: textColor // css color spec for the legend text. this.textColor; // prop: fontFamily // css font-family spec for the legend text. this.fontFamily; // prop: fontSize // css font-size spec for the legend text. this.fontSize ; // prop: rowSpacing // css padding-top spec for the rows in the legend. this.rowSpacing = '0.5em'; // renderer // A class that will create a DOM object for the legend, // see <$.jqplot.TableLegendRenderer>. this.renderer = $.jqplot.TableLegendRenderer; // prop: rendererOptions // renderer specific options passed to the renderer. this.rendererOptions = {}; // prop: predraw // Wether to draw the legend before the series or not. // Used with series specific legend renderers for pie, donut, mekko charts, etc. this.preDraw = false; // prop: marginTop // CSS margin for the legend DOM element. This will set an element // CSS style for the margin which will override any style sheet setting. // The default will be taken from the stylesheet. this.marginTop = null; // prop: marginRight // CSS margin for the legend DOM element. This will set an element // CSS style for the margin which will override any style sheet setting. // The default will be taken from the stylesheet. this.marginRight = null; // prop: marginBottom // CSS margin for the legend DOM element. This will set an element // CSS style for the margin which will override any style sheet setting. // The default will be taken from the stylesheet. this.marginBottom = null; // prop: marginLeft // CSS margin for the legend DOM element. This will set an element // CSS style for the margin which will override any style sheet setting. // The default will be taken from the stylesheet. this.marginLeft = null; // prop: escapeHtml // True to escape special characters with their html entity equivalents // in legend text. "<" becomes < and so on, so html tags are not rendered. this.escapeHtml = false; this._series = []; $.extend(true, this, options); } Legend.prototype = new $.jqplot.ElemContainer(); Legend.prototype.constructor = Legend; Legend.prototype.setOptions = function(options) { $.extend(true, this, options); // Try to emulate deprecated behaviour // if user has specified xoffset or yoffset, copy these to // the margin properties. if (this.placement == 'inside') { this.placement = 'insideGrid'; } if (this.xoffset >0) { if (this.placement == 'insideGrid') { switch (this.location) { case 'nw': case 'w': case 'sw': if (this.marginLeft == null) { this.marginLeft = this.xoffset + 'px'; } this.marginRight = '0px'; break; case 'ne': case 'e': case 'se': default: if (this.marginRight == null) { this.marginRight = this.xoffset + 'px'; } this.marginLeft = '0px'; break; } } else if (this.placement == 'outside') { switch (this.location) { case 'nw': case 'w': case 'sw': if (this.marginRight == null) { this.marginRight = this.xoffset + 'px'; } this.marginLeft = '0px'; break; case 'ne': case 'e': case 'se': default: if (this.marginLeft == null) { this.marginLeft = this.xoffset + 'px'; } this.marginRight = '0px'; break; } } this.xoffset = 0; } if (this.yoffset >0) { if (this.placement == 'outside') { switch (this.location) { case 'sw': case 's': case 'se': if (this.marginTop == null) { this.marginTop = this.yoffset + 'px'; } this.marginBottom = '0px'; break; case 'ne': case 'n': case 'nw': default: if (this.marginBottom == null) { this.marginBottom = this.yoffset + 'px'; } this.marginTop = '0px'; break; } } else if (this.placement == 'insideGrid') { switch (this.location) { case 'sw': case 's': case 'se': if (this.marginBottom == null) { this.marginBottom = this.yoffset + 'px'; } this.marginTop = '0px'; break; case 'ne': case 'n': case 'nw': default: if (this.marginTop == null) { this.marginTop = this.yoffset + 'px'; } this.marginBottom = '0px'; break; } } this.yoffset = 0; } // TO-DO: // Handle case where offsets are < 0. // }; Legend.prototype.init = function() { if ($.isFunction(this.renderer)) { this.renderer = new this.renderer(); } this.renderer.init.call(this, this.rendererOptions); }; Legend.prototype.draw = function(offsets, plot) { for (var i=0; i<$.jqplot.preDrawLegendHooks.length; i++){ $.jqplot.preDrawLegendHooks[i].call(this, offsets); } return this.renderer.draw.call(this, offsets, plot); }; Legend.prototype.pack = function(offsets) { this.renderer.pack.call(this, offsets); }; /** * Class: Title * Plot Title object. Cannot be instantiated directly, but created * by the Plot object. Title properties can be set or overridden by the * options passed in from the user. * * Parameters: * text - text of the title. */ function Title(text) { $.jqplot.ElemContainer.call(this); // Group: Properties // prop: text // text of the title; this.text = text; // prop: show // whether or not to show the title this.show = true; // prop: fontFamily // css font-family spec for the text. this.fontFamily; // prop: fontSize // css font-size spec for the text. this.fontSize ; // prop: textAlign // css text-align spec for the text. this.textAlign; // prop: textColor // css color spec for the text. this.textColor; // prop: renderer // A class for creating a DOM element for the title, // see <$.jqplot.DivTitleRenderer>. this.renderer = $.jqplot.DivTitleRenderer; // prop: rendererOptions // renderer specific options passed to the renderer. this.rendererOptions = {}; // prop: escapeHtml // True to escape special characters with their html entity equivalents // in title text. "<" becomes < and so on, so html tags are not rendered. this.escapeHtml = false; } Title.prototype = new $.jqplot.ElemContainer(); Title.prototype.constructor = Title; Title.prototype.init = function() { if ($.isFunction(this.renderer)) { this.renderer = new this.renderer(); } this.renderer.init.call(this, this.rendererOptions); }; Title.prototype.draw = function(width) { return this.renderer.draw.call(this, width); }; Title.prototype.pack = function() { this.renderer.pack.call(this); }; /** * Class: Series * An individual data series object. Cannot be instantiated directly, but created * by the Plot object. Series properties can be set or overridden by the * options passed in from the user. */ function Series(options) { options = options || {}; $.jqplot.ElemContainer.call(this); // Group: Properties // Properties will be assigned from a series array at the top level of the // options. If you had two series and wanted to change the color and line // width of the first and set the second to use the secondary y axis with // no shadow and supply custom labels for each: // > { // > series:[ // > {color: '#ff4466', lineWidth: 5, label:'good line'}, // > {yaxis: 'y2axis', shadow: false, label:'bad line'} // > ] // > } // prop: show // whether or not to draw the series. this.show = true; // prop: xaxis // which x axis to use with this series, either 'xaxis' or 'x2axis'. this.xaxis = 'xaxis'; this._xaxis; // prop: yaxis // which y axis to use with this series, either 'yaxis' or 'y2axis'. this.yaxis = 'yaxis'; this._yaxis; this.gridBorderWidth = 2.0; // prop: renderer // A class of a renderer which will draw the series, // see <$.jqplot.LineRenderer>. this.renderer = $.jqplot.LineRenderer; // prop: rendererOptions // Options to pass on to the renderer. this.rendererOptions = {}; this.data = []; this.gridData = []; // prop: label // Line label to use in the legend. this.label = ''; // prop: showLabel // true to show label for this series in the legend. this.showLabel = true; // prop: color // css color spec for the series this.color; // prop: negativeColor // css color spec used for filled (area) plots that are filled to zero and // the "useNegativeColors" option is true. this.negativeColor; // prop: lineWidth // width of the line in pixels. May have different meanings depending on renderer. this.lineWidth = 2.5; // prop: lineJoin // Canvas lineJoin style between segments of series. this.lineJoin = 'round'; // prop: lineCap // Canvas lineCap style at ends of line. this.lineCap = 'round'; // prop: linePattern // line pattern 'dashed', 'dotted', 'solid', some combination // of '-' and '.' characters such as '.-.' or a numerical array like // [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line, // [1, 10, 20, 10] to draw a dot-dash line, and so on. this.linePattern = 'solid'; this.shadow = true; // prop: shadowAngle // Shadow angle in degrees this.shadowAngle = 45; // prop: shadowOffset // Shadow offset from line in pixels this.shadowOffset = 1.25; // prop: shadowDepth // Number of times shadow is stroked, each stroke offset shadowOffset from the last. this.shadowDepth = 3; // prop: shadowAlpha // Alpha channel transparency of shadow. 0 = transparent. this.shadowAlpha = '0.1'; // prop: breakOnNull // Wether line segments should be be broken at null value. // False will join point on either side of line. this.breakOnNull = false; // prop: markerRenderer // A class of a renderer which will draw marker (e.g. circle, square, ...) at the data points, // see <$.jqplot.MarkerRenderer>. this.markerRenderer = $.jqplot.MarkerRenderer; // prop: markerOptions // renderer specific options to pass to the markerRenderer, // see <$.jqplot.MarkerRenderer>. this.markerOptions = {}; // prop: showLine // whether to actually draw the line or not. Series will still be renderered, even if no line is drawn. this.showLine = true; // prop: showMarker // whether or not to show the markers at the data points. this.showMarker = true; // prop: index // 0 based index of this series in the plot series array. this.index; // prop: fill // true or false, whether to fill under lines or in bars. // May not be implemented in all renderers. this.fill = false; // prop: fillColor // CSS color spec to use for fill under line. Defaults to line color. this.fillColor; // prop: fillAlpha // Alpha transparency to apply to the fill under the line. // Use this to adjust alpha separate from fill color. this.fillAlpha; // prop: fillAndStroke // If true will stroke the line (with color this.color) as well as fill under it. // Applies only when fill is true. this.fillAndStroke = false; // prop: disableStack // true to not stack this series with other series in the plot. // To render properly, non-stacked series must come after any stacked series // in the plot's data series array. So, the plot's data series array would look like: // > [stackedSeries1, stackedSeries2, ..., nonStackedSeries1, nonStackedSeries2, ...] // disableStack will put a gap in the stacking order of series, and subsequent // stacked series will not fill down through the non-stacked series and will // most likely not stack properly on top of the non-stacked series. this.disableStack = false; // _stack is set by the Plot if the plot is a stacked chart. // will stack lines or bars on top of one another to build a "mountain" style chart. // May not be implemented in all renderers. this._stack = false; // prop: neighborThreshold // how close or far (in pixels) the cursor must be from a point marker to detect the point. this.neighborThreshold = 4; // prop: fillToZero // true will force bar and filled series to fill toward zero on the fill Axis. this.fillToZero = false; // prop: fillToValue // fill a filled series to this value on the fill axis. // Works in conjunction with fillToZero, so that must be true. this.fillToValue = 0; // prop: fillAxis // Either 'x' or 'y'. Which axis to fill the line toward if fillToZero is true. // 'y' means fill up/down to 0 on the y axis for this series. this.fillAxis = 'y'; // prop: useNegativeColors // true to color negative values differently in filled and bar charts. this.useNegativeColors = true; this._stackData = []; // _plotData accounts for stacking. If plots not stacked, _plotData and data are same. If // stacked, _plotData is accumulation of stacking data. this._plotData = []; // _plotValues hold the individual x and y values that will be plotted for this series. this._plotValues = {x:[], y:[]}; // statistics about the intervals between data points. Used for auto scaling. this._intervals = {x:{}, y:{}}; // data from the previous series, for stacked charts. this._prevPlotData = []; this._prevGridData = []; this._stackAxis = 'y'; this._primaryAxis = '_xaxis'; // give each series a canvas to draw on. This should allow for redrawing speedups. this.canvas = new $.jqplot.GenericCanvas(); this.shadowCanvas = new $.jqplot.GenericCanvas(); this.plugins = {}; // sum of y values in this series. this._sumy = 0; this._sumx = 0; this._type = ''; } Series.prototype = new $.jqplot.ElemContainer(); Series.prototype.constructor = Series; Series.prototype.init = function(index, gridbw, plot) { // weed out any null values in the data. this.index = index; this.gridBorderWidth = gridbw; var d = this.data; var temp = [], i, l; for (i=0, l=d.length; i. this.renderer = $.jqplot.CanvasGridRenderer; // prop: rendererOptions // Options to pass on to the renderer, // see <$.jqplot.CanvasGridRenderer>. this.rendererOptions = {}; this._offsets = {top:null, bottom:null, left:null, right:null}; } Grid.prototype = new $.jqplot.ElemContainer(); Grid.prototype.constructor = Grid; Grid.prototype.init = function() { if ($.isFunction(this.renderer)) { this.renderer = new this.renderer(); } this.renderer.init.call(this, this.rendererOptions); }; Grid.prototype.createElement = function(offsets,plot) { this._offsets = offsets; return this.renderer.createElement.call(this, plot); }; Grid.prototype.draw = function() { this.renderer.draw.call(this); }; $.jqplot.GenericCanvas = function() { $.jqplot.ElemContainer.call(this); this._ctx; }; $.jqplot.GenericCanvas.prototype = new $.jqplot.ElemContainer(); $.jqplot.GenericCanvas.prototype.constructor = $.jqplot.GenericCanvas; $.jqplot.GenericCanvas.prototype.createElement = function(offsets, clss, plotDimensions, plot) { this._offsets = offsets; var klass = 'jqplot'; if (clss != undefined) { klass = clss; } var elem; elem = plot.canvasManager.getCanvas(); // if new plotDimensions supplied, use them. if (plotDimensions != null) { this._plotDimensions = plotDimensions; } elem.width = this._plotDimensions.width - this._offsets.left - this._offsets.right; elem.height = this._plotDimensions.height - this._offsets.top - this._offsets.bottom; this._elem = $(elem); this._elem.css({ position: 'absolute', left: this._offsets.left, top: this._offsets.top }); this._elem.addClass(klass); elem = plot.canvasManager.initCanvas(elem); elem = null; return this._elem; }; $.jqplot.GenericCanvas.prototype.setContext = function() { this._ctx = this._elem.get(0).getContext("2d"); return this._ctx; }; // Memory Leaks patch $.jqplot.GenericCanvas.prototype.resetCanvas = function() { if (this._elem) { if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { window.G_vmlCanvasManager.uninitElement(this._elem.get(0)); } //this._elem.remove(); this._elem.emptyForce(); } this._ctx = null; }; $.jqplot.HooksManager = function () { this.hooks =[]; this.args = []; }; $.jqplot.HooksManager.prototype.addOnce = function(fn, args) { args = args || []; var havehook = false; for (var i=0, l=this.hooks.length; i { // > axesDefaults:{min:0}, // > series:[{color:'#6633dd'}], // > title: 'A Plot' // > } // // prop: animate // True to animate the series on initial plot draw (renderer dependent). // Actual animation functionality must be supported in the renderer. this.animate = false; // prop: animateReplot // True to animate series after a call to the replot() method. // Use with caution! Replots can happen very frequently under // certain circumstances (e.g. resizing, dragging points) and // animation in these situations can cause problems. this.animateReplot = false; // prop: axes // up to 4 axes are supported, each with its own options, // See for axis specific options. this.axes = {xaxis: new Axis('xaxis'), yaxis: new Axis('yaxis'), x2axis: new Axis('x2axis'), y2axis: new Axis('y2axis'), y3axis: new Axis('y3axis'), y4axis: new Axis('y4axis'), y5axis: new Axis('y5axis'), y6axis: new Axis('y6axis'), y7axis: new Axis('y7axis'), y8axis: new Axis('y8axis'), y9axis: new Axis('y9axis'), yMidAxis: new Axis('yMidAxis')}; this.baseCanvas = new $.jqplot.GenericCanvas(); // true to intercept right click events and fire a 'jqplotRightClick' event. // this will also block the context menu. this.captureRightClick = false; // prop: data // user's data. Data should *NOT* be specified in the options object, // but be passed in as the second argument to the $.jqplot() function. // The data property is described here soley for reference. // The data should be in the form of an array of 2D or 1D arrays like // > [ [[x1, y1], [x2, y2],...], [y1, y2, ...] ]. this.data = []; // prop: dataRenderer // A callable which can be used to preprocess data passed into the plot. // Will be called with 3 arguments: the plot data, a reference to the plot, // and the value of dataRendererOptions. this.dataRenderer; // prop: dataRendererOptions // Options that will be passed to the dataRenderer. // Can be of any type. this.dataRendererOptions; this.defaults = { // prop: axesDefaults // default options that will be applied to all axes. // see for axes options. axesDefaults: {}, axes: {xaxis:{}, yaxis:{}, x2axis:{}, y2axis:{}, y3axis:{}, y4axis:{}, y5axis:{}, y6axis:{}, y7axis:{}, y8axis:{}, y9axis:{}, yMidAxis:{}}, // prop: seriesDefaults // default options that will be applied to all series. // see for series options. seriesDefaults: {}, series:[] }; // prop: defaultAxisStart // 1-D data series are internally converted into 2-D [x,y] data point arrays // by jqPlot. This is the default starting value for the missing x or y value. // The added data will be a monotonically increasing series (e.g. [1, 2, 3, ...]) // starting at this value. this.defaultAxisStart = 1; // this.doCustomEventBinding = true; // prop: drawIfHidden // True to execute the draw method even if the plot target is hidden. // Generally, this should be false. Most plot elements will not be sized/ // positioned correclty if renderered into a hidden container. To render into // a hidden container, call the replot method when the container is shown. this.drawIfHidden = false; this.eventCanvas = new $.jqplot.GenericCanvas(); // prop: fillBetween // Fill between 2 line series in a plot. // Options object: // { // series1: first index (0 based) of series in fill // series2: second index (0 based) of series in fill // color: color of fill [default fillColor of series1] // baseSeries: fill will be drawn below this series (0 based index) // fill: false to turn off fill [default true]. // } this.fillBetween = { series1: null, series2: null, color: null, baseSeries: 0, fill: true }; // prop; fontFamily // css spec for the font-family attribute. Default for the entire plot. this.fontFamily; // prop: fontSize // css spec for the font-size attribute. Default for the entire plot. this.fontSize; // prop: grid // See for grid specific options. this.grid = new Grid(); // prop: legend // see <$.jqplot.TableLegendRenderer> this.legend = new Legend(); // prop: noDataIndicator // Options to set up a mock plot with a data loading indicator if no data is specified. this.noDataIndicator = { show: false, indicator: 'Loading Data...', axes: { xaxis: { min: 0, max: 10, tickInterval: 2, show: true }, yaxis: { min: 0, max: 12, tickInterval: 3, show: true } } }; // prop: negativeSeriesColors // colors to use for portions of the line below zero. this.negativeSeriesColors = $.jqplot.config.defaultNegativeColors; // container to hold all of the merged options. Convienence for plugins. this.options = {}; this.previousSeriesStack = []; // Namespace to hold plugins. Generally non-renderer plugins add themselves to here. this.plugins = {}; // prop: series // Array of series object options. // see for series specific options. this.series = []; // array of series indices. Keep track of order // which series canvases are displayed, lowest // to highest, back to front. this.seriesStack = []; // prop: seriesColors // Ann array of CSS color specifications that will be applied, in order, // to the series in the plot. Colors will wrap around so, if their // are more series than colors, colors will be reused starting at the // beginning. For pie charts, this specifies the colors of the slices. this.seriesColors = $.jqplot.config.defaultColors; // prop: sortData // false to not sort the data passed in by the user. // Many bar, stacked and other graphs as well as many plugins depend on // having sorted data. this.sortData = true; // prop: stackSeries // true or false, creates a stack or "mountain" plot. // Not all series renderers may implement this option. this.stackSeries = false; // a shortcut for axis syncTicks options. Not implemented yet. this.syncXTicks = true; // a shortcut for axis syncTicks options. Not implemented yet. this.syncYTicks = true; // the jquery object for the dom target. this.target = null; // The id of the dom element to render the plot into this.targetId = null; // prop textColor // css spec for the css color attribute. Default for the entire plot. this.textColor; // prop: title // Title object. See for specific options. As a shortcut, you // can specify the title option as just a string like: title: 'My Plot' // and this will create a new title object with the specified text. this.title = new Title(); // Count how many times the draw method has been called while the plot is visible. // Mostly used to test if plot has never been dran (=0), has been successfully drawn // into a visible container once (=1) or draw more than once into a visible container. // Can use this in tests to see if plot has been visibly drawn at least one time. // After plot has been visibly drawn once, it generally doesn't need redrawing if its // container is hidden and shown. this._drawCount = 0; // sum of y values for all series in plot. // used in mekko chart. this._sumy = 0; this._sumx = 0; // array to hold the cumulative stacked series data. // used to ajust the individual series data, which won't have access to other // series data. this._stackData = []; // array that holds the data to be plotted. This will be the series data // merged with the the appropriate data from _stackData according to the stackAxis. this._plotData = []; this._width = null; this._height = null; this._plotDimensions = {height:null, width:null}; this._gridPadding = {top:null, right:null, bottom:null, left:null}; this._defaultGridPadding = {top:10, right:10, bottom:23, left:10}; this._addDomReference = $.jqplot.config.addDomReference; this.preInitHooks = new $.jqplot.HooksManager(); this.postInitHooks = new $.jqplot.HooksManager(); this.preParseOptionsHooks = new $.jqplot.HooksManager(); this.postParseOptionsHooks = new $.jqplot.HooksManager(); this.preDrawHooks = new $.jqplot.HooksManager(); this.postDrawHooks = new $.jqplot.HooksManager(); this.preDrawSeriesHooks = new $.jqplot.HooksManager(); this.postDrawSeriesHooks = new $.jqplot.HooksManager(); this.preDrawLegendHooks = new $.jqplot.HooksManager(); this.addLegendRowHooks = new $.jqplot.HooksManager(); this.preSeriesInitHooks = new $.jqplot.HooksManager(); this.postSeriesInitHooks = new $.jqplot.HooksManager(); this.preParseSeriesOptionsHooks = new $.jqplot.HooksManager(); this.postParseSeriesOptionsHooks = new $.jqplot.HooksManager(); this.eventListenerHooks = new $.jqplot.EventListenerManager(); this.preDrawSeriesShadowHooks = new $.jqplot.HooksManager(); this.postDrawSeriesShadowHooks = new $.jqplot.HooksManager(); this.colorGenerator = new $.jqplot.ColorGenerator(); this.negativeColorGenerator = new $.jqplot.ColorGenerator(); this.canvasManager = new $.jqplot.CanvasManager(); this.themeEngine = new $.jqplot.ThemeEngine(); var seriesColorsIndex = 0; // Group: methods // // method: init // sets the plot target, checks data and applies user // options to plot. this.init = function(target, data, options) { options = options || {}; for (var i=0; i<$.jqplot.preInitHooks.length; i++) { $.jqplot.preInitHooks[i].call(this, target, data, options); } for (var i=0; i<this.preInitHooks.hooks.length; i++) { this.preInitHooks.hooks[i].call(this, target, data, options); } this.targetId = '#'+target; this.target = $('#'+target); ////// // Add a reference to plot ////// if (this._addDomReference) { this.target.data('jqplot', this); } // remove any error class that may be stuck on target. this.target.removeClass('jqplot-error'); if (!this.target.get(0)) { throw new Error("No plot target specified"); } // make sure the target is positioned by some means and set css if (this.target.css('position') == 'static') { this.target.css('position', 'relative'); } if (!this.target.hasClass('jqplot-target')) { this.target.addClass('jqplot-target'); } // if no height or width specified, use a default. if (!this.target.height()) { var h; if (options && options.height) { h = parseInt(options.height, 10); } else if (this.target.attr('data-height')) { h = parseInt(this.target.attr('data-height'), 10); } else { h = parseInt($.jqplot.config.defaultHeight, 10); } this._height = h; this.target.css('height', h+'px'); } else { this._height = h = this.target.height(); } if (!this.target.width()) { var w; if (options && options.width) { w = parseInt(options.width, 10); } else if (this.target.attr('data-width')) { w = parseInt(this.target.attr('data-width'), 10); } else { w = parseInt($.jqplot.config.defaultWidth, 10); } this._width = w; this.target.css('width', w+'px'); } else { this._width = w = this.target.width(); } for (var i=0, l=_axisNames.length; i<l; i++) { this.axes[_axisNames[i]] = new Axis(_axisNames[i]); } this._plotDimensions.height = this._height; this._plotDimensions.width = this._width; this.grid._plotDimensions = this._plotDimensions; this.title._plotDimensions = this._plotDimensions; this.baseCanvas._plotDimensions = this._plotDimensions; this.eventCanvas._plotDimensions = this._plotDimensions; this.legend._plotDimensions = this._plotDimensions; if (this._height <=0 || this._width <=0 || !this._height || !this._width) { throw new Error("Canvas dimension not set"); } if (options.dataRenderer && $.isFunction(options.dataRenderer)) { if (options.dataRendererOptions) { this.dataRendererOptions = options.dataRendererOptions; } this.dataRenderer = options.dataRenderer; data = this.dataRenderer(data, this, this.dataRendererOptions); } if (options.noDataIndicator && $.isPlainObject(options.noDataIndicator)) { $.extend(true, this.noDataIndicator, options.noDataIndicator); } if (data == null || $.isArray(data) == false || data.length == 0 || $.isArray(data[0]) == false || data[0].length == 0) { if (this.noDataIndicator.show == false) { throw new Error("No data specified"); } else { // have to be descructive here in order for plot to not try and render series. // This means that $.jqplot() will have to be called again when there is data. //delete options.series; for (var ax in this.noDataIndicator.axes) { for (var prop in this.noDataIndicator.axes[ax]) { this.axes[ax][prop] = this.noDataIndicator.axes[ax][prop]; } } this.postDrawHooks.add(function() { var eh = this.eventCanvas.getHeight(); var ew = this.eventCanvas.getWidth(); var temp = $('<div class="jqplot-noData-container" style="position:absolute;"></div>'); this.target.append(temp); temp.height(eh); temp.width(ew); temp.css('top', this.eventCanvas._offsets.top); temp.css('left', this.eventCanvas._offsets.left); var temp2 = $('<div class="jqplot-noData-contents" style="text-align:center; position:relative; margin-left:auto; margin-right:auto;"></div>'); temp.append(temp2); temp2.html(this.noDataIndicator.indicator); var th = temp2.height(); var tw = temp2.width(); temp2.height(th); temp2.width(tw); temp2.css('top', (eh - th)/2 + 'px'); }); } } // make a copy of the data this.data = $.extend(true, [], data); this.parseOptions(options); if (this.textColor) { this.target.css('color', this.textColor); } if (this.fontFamily) { this.target.css('font-family', this.fontFamily); } if (this.fontSize) { this.target.css('font-size', this.fontSize); } this.title.init(); this.legend.init(); this._sumy = 0; this._sumx = 0; this.computePlotData(); for (var i=0; i<this.series.length; i++) { // set default stacking order for series canvases this.seriesStack.push(i); this.previousSeriesStack.push(i); this.series[i].shadowCanvas._plotDimensions = this._plotDimensions; this.series[i].canvas._plotDimensions = this._plotDimensions; for (var j=0; j<$.jqplot.preSeriesInitHooks.length; j++) { $.jqplot.preSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); } for (var j=0; j<this.preSeriesInitHooks.hooks.length; j++) { this.preSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); } // this.populatePlotData(this.series[i], i); this.series[i]._plotDimensions = this._plotDimensions; this.series[i].init(i, this.grid.borderWidth, this); for (var j=0; j<$.jqplot.postSeriesInitHooks.length; j++) { $.jqplot.postSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); } for (var j=0; j<this.postSeriesInitHooks.hooks.length; j++) { this.postSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); } this._sumy += this.series[i]._sumy; this._sumx += this.series[i]._sumx; } var name, axis; for (var i=0, l=_axisNames.length; i<l; i++) { name = _axisNames[i]; axis = this.axes[name]; axis._plotDimensions = this._plotDimensions; axis.init(); if (this.axes[name].borderColor == null) { if (name.charAt(0) !== 'x' && axis.useSeriesColor === true && axis.show) { axis.borderColor = axis._series[0].color; } else { axis.borderColor = this.grid.borderColor; } } } if (this.sortData) { sortData(this.series); } this.grid.init(); this.grid._axes = this.axes; this.legend._series = this.series; for (var i=0; i<$.jqplot.postInitHooks.length; i++) { $.jqplot.postInitHooks[i].call(this, target, this.data, options); } for (var i=0; i<this.postInitHooks.hooks.length; i++) { this.postInitHooks.hooks[i].call(this, target, this.data, options); } }; // method: resetAxesScale // Reset the specified axes min, max, numberTicks and tickInterval properties to null // or reset these properties on all axes if no list of axes is provided. // // Parameters: // axes - Boolean to reset or not reset all axes or an array or object of axis names to reset. this.resetAxesScale = function(axes, options) { var opts = options || {}; var ax = axes || this.axes; if (ax === true) { ax = this.axes; } if ($.isArray(ax)) { for (var i = 0; i < ax.length; i++) { this.axes[ax[i]].resetScale(opts[ax[i]]); } } else if (typeof(ax) === 'object') { for (var name in ax) { this.axes[name].resetScale(opts[name]); } } }; // method: reInitialize // reinitialize plot for replotting. // not called directly. this.reInitialize = function (data, opts) { // Plot should be visible and have a height and width. // If plot doesn't have height and width for some // reason, set it by other means. Plot must not have // a display:none attribute, however. var options = $.extend(true, {}, this.options, opts); var target = this.targetId.substr(1); var tdata = (data == null) ? this.data : data; for (var i=0; i<$.jqplot.preInitHooks.length; i++) { $.jqplot.preInitHooks[i].call(this, target, tdata, options); } for (var i=0; i<this.preInitHooks.hooks.length; i++) { this.preInitHooks.hooks[i].call(this, target, tdata, options); } this._height = this.target.height(); this._width = this.target.width(); if (this._height <=0 || this._width <=0 || !this._height || !this._width) { throw new Error("Target dimension not set"); } this._plotDimensions.height = this._height; this._plotDimensions.width = this._width; this.grid._plotDimensions = this._plotDimensions; this.title._plotDimensions = this._plotDimensions; this.baseCanvas._plotDimensions = this._plotDimensions; this.eventCanvas._plotDimensions = this._plotDimensions; this.legend._plotDimensions = this._plotDimensions; var name, t, j, axis; for (var i=0, l=_axisNames.length; i<l; i++) { name = _axisNames[i]; axis = this.axes[name]; // Memory Leaks patch : clear ticks elements t = axis._ticks; for (var j = 0, tlen = t.length; j < tlen; j++) { var el = t[j]._elem; if (el) { // if canvas renderer if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { window.G_vmlCanvasManager.uninitElement(el.get(0)); } el.emptyForce(); el = null; t._elem = null; } } t = null; delete axis.ticks; delete axis._ticks; this.axes[name] = new Axis(name); this.axes[name]._plotWidth = this._width; this.axes[name]._plotHeight = this._height; } if (data) { if (options.dataRenderer && $.isFunction(options.dataRenderer)) { if (options.dataRendererOptions) { this.dataRendererOptions = options.dataRendererOptions; } this.dataRenderer = options.dataRenderer; data = this.dataRenderer(data, this, this.dataRendererOptions); } // make a copy of the data this.data = $.extend(true, [], data); } if (opts) { this.parseOptions(options); } this.title._plotWidth = this._width; if (this.textColor) { this.target.css('color', this.textColor); } if (this.fontFamily) { this.target.css('font-family', this.fontFamily); } if (this.fontSize) { this.target.css('font-size', this.fontSize); } this.title.init(); this.legend.init(); this._sumy = 0; this._sumx = 0; this.seriesStack = []; this.previousSeriesStack = []; this.computePlotData(); for (var i=0, l=this.series.length; i<l; i++) { // set default stacking order for series canvases this.seriesStack.push(i); this.previousSeriesStack.push(i); this.series[i].shadowCanvas._plotDimensions = this._plotDimensions; this.series[i].canvas._plotDimensions = this._plotDimensions; for (var j=0; j<$.jqplot.preSeriesInitHooks.length; j++) { $.jqplot.preSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); } for (var j=0; j<this.preSeriesInitHooks.hooks.length; j++) { this.preSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); } // this.populatePlotData(this.series[i], i); this.series[i]._plotDimensions = this._plotDimensions; this.series[i].init(i, this.grid.borderWidth, this); for (var j=0; j<$.jqplot.postSeriesInitHooks.length; j++) { $.jqplot.postSeriesInitHooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); } for (var j=0; j<this.postSeriesInitHooks.hooks.length; j++) { this.postSeriesInitHooks.hooks[j].call(this.series[i], target, this.data, this.options.seriesDefaults, this.options.series[i], this); } this._sumy += this.series[i]._sumy; this._sumx += this.series[i]._sumx; } for (var i=0, l=_axisNames.length; i<l; i++) { name = _axisNames[i]; axis = this.axes[name]; axis._plotDimensions = this._plotDimensions; axis.init(); if (axis.borderColor == null) { if (name.charAt(0) !== 'x' && axis.useSeriesColor === true && axis.show) { axis.borderColor = axis._series[0].color; } else { axis.borderColor = this.grid.borderColor; } } } if (this.sortData) { sortData(this.series); } this.grid.init(); this.grid._axes = this.axes; this.legend._series = this.series; for (var i=0, l=$.jqplot.postInitHooks.length; i<l; i++) { $.jqplot.postInitHooks[i].call(this, target, this.data, options); } for (var i=0, l=this.postInitHooks.hooks.length; i<l; i++) { this.postInitHooks.hooks[i].call(this, target, this.data, options); } }; // method: quickInit // // Quick reinitialization plot for replotting. // Does not parse options ore recreate axes and series. // not called directly. this.quickInit = function () { // Plot should be visible and have a height and width. // If plot doesn't have height and width for some // reason, set it by other means. Plot must not have // a display:none attribute, however. this._height = this.target.height(); this._width = this.target.width(); if (this._height <=0 || this._width <=0 || !this._height || !this._width) { throw new Error("Target dimension not set"); } this._plotDimensions.height = this._height; this._plotDimensions.width = this._width; this.grid._plotDimensions = this._plotDimensions; this.title._plotDimensions = this._plotDimensions; this.baseCanvas._plotDimensions = this._plotDimensions; this.eventCanvas._plotDimensions = this._plotDimensions; this.legend._plotDimensions = this._plotDimensions; for (var n in this.axes) { this.axes[n]._plotWidth = this._width; this.axes[n]._plotHeight = this._height; } this.title._plotWidth = this._width; if (this.textColor) { this.target.css('color', this.textColor); } if (this.fontFamily) { this.target.css('font-family', this.fontFamily); } if (this.fontSize) { this.target.css('font-size', this.fontSize); } this._sumy = 0; this._sumx = 0; this.computePlotData(); for (var i=0; i<this.series.length; i++) { // this.populatePlotData(this.series[i], i); if (this.series[i]._type === 'line' && this.series[i].renderer.bands.show) { this.series[i].renderer.initBands.call(this.series[i], this.series[i].renderer.options, this); } this.series[i]._plotDimensions = this._plotDimensions; this.series[i].canvas._plotDimensions = this._plotDimensions; //this.series[i].init(i, this.grid.borderWidth); this._sumy += this.series[i]._sumy; this._sumx += this.series[i]._sumx; } var name; for (var j=0; j<12; j++) { name = _axisNames[j]; // Memory Leaks patch : clear ticks elements var t = this.axes[name]._ticks; for (var i = 0; i < t.length; i++) { var el = t[i]._elem; if (el) { // if canvas renderer if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { window.G_vmlCanvasManager.uninitElement(el.get(0)); } el.emptyForce(); el = null; t._elem = null; } } t = null; this.axes[name]._plotDimensions = this._plotDimensions; this.axes[name]._ticks = []; // this.axes[name].renderer.init.call(this.axes[name], {}); } if (this.sortData) { sortData(this.series); } this.grid._axes = this.axes; this.legend._series = this.series; }; // sort the series data in increasing order. function sortData(series) { var d, sd, pd, ppd, ret; for (var i=0; i<series.length; i++) { var check; var bat = [series[i].data, series[i]._stackData, series[i]._plotData, series[i]._prevPlotData]; for (var n=0; n<4; n++) { check = true; d = bat[n]; if (series[i]._stackAxis == 'x') { for (var j = 0; j < d.length; j++) { if (typeof(d[j][1]) != "number") { check = false; break; } } if (check) { d.sort(function(a,b) { return a[1] - b[1]; }); } } else { for (var j = 0; j < d.length; j++) { if (typeof(d[j][0]) != "number") { check = false; break; } } if (check) { d.sort(function(a,b) { return a[0] - b[0]; }); } } } } } this.computePlotData = function() { this._plotData = []; this._stackData = []; var series, index, l; for (index=0, l=this.series.length; index<l; index++) { series = this.series[index]; this._plotData.push([]); this._stackData.push([]); var cd = series.data; this._plotData[index] = $.extend(true, [], cd); this._stackData[index] = $.extend(true, [], cd); series._plotData = this._plotData[index]; series._stackData = this._stackData[index]; var plotValues = {x:[], y:[]}; if (this.stackSeries && !series.disableStack) { series._stack = true; /////////////////////////// // have to check for nulls /////////////////////////// var sidx = (series._stackAxis === 'x') ? 0 : 1; for (var k=0, cdl=cd.length; k<cdl; k++) { var temp = cd[k][sidx]; if (temp == null) { temp = 0; } this._plotData[index][k][sidx] = temp; this._stackData[index][k][sidx] = temp; if (index > 0) { for (var j=index; j--;) { var prevval = this._plotData[j][k][sidx]; // only need to sum up the stack axis column of data // and only sum if it is of same sign. // if previous series isn't same sign, keep looking // at earlier series untill we find one of same sign. if (temp * prevval >= 0) { this._plotData[index][k][sidx] += prevval; this._stackData[index][k][sidx] += prevval; break; } } } } } else { for (var i=0; i<series.data.length; i++) { plotValues.x.push(series.data[i][0]); plotValues.y.push(series.data[i][1]); } this._stackData.push(series.data); this.series[index]._stackData = series.data; this._plotData.push(series.data); series._plotData = series.data; series._plotValues = plotValues; } if (index>0) { series._prevPlotData = this.series[index-1]._plotData; } series._sumy = 0; series._sumx = 0; for (i=series.data.length-1; i>-1; i--) { series._sumy += series.data[i][1]; series._sumx += series.data[i][0]; } } }; // populate the _stackData and _plotData arrays for the plot and the series. this.populatePlotData = function(series, index) { // if a stacked chart, compute the stacked data this._plotData = []; this._stackData = []; series._stackData = []; series._plotData = []; var plotValues = {x:[], y:[]}; if (this.stackSeries && !series.disableStack) { series._stack = true; var sidx = (series._stackAxis === 'x') ? 0 : 1; // var idx = sidx ? 0 : 1; // push the current data into stackData //this._stackData.push(this.series[i].data); var temp = $.extend(true, [], series.data); // create the data that will be plotted for this series var plotdata = $.extend(true, [], series.data); var tempx, tempy, dval, stackval, comparator; // for first series, nothing to add to stackData. for (var j=0; j<index; j++) { var cd = this.series[j].data; for (var k=0; k<cd.length; k++) { dval = cd[k]; tempx = (dval[0] != null) ? dval[0] : 0; tempy = (dval[1] != null) ? dval[1] : 0; temp[k][0] += tempx; temp[k][1] += tempy; stackval = (sidx) ? tempy : tempx; // only need to sum up the stack axis column of data // and only sum if it is of same sign. if (series.data[k][sidx] * stackval >= 0) { plotdata[k][sidx] += stackval; } } } for (var i=0; i<plotdata.length; i++) { plotValues.x.push(plotdata[i][0]); plotValues.y.push(plotdata[i][1]); } this._plotData.push(plotdata); this._stackData.push(temp); series._stackData = temp; series._plotData = plotdata; series._plotValues = plotValues; } else { for (var i=0; i<series.data.length; i++) { plotValues.x.push(series.data[i][0]); plotValues.y.push(series.data[i][1]); } this._stackData.push(series.data); this.series[index]._stackData = series.data; this._plotData.push(series.data); series._plotData = series.data; series._plotValues = plotValues; } if (index>0) { series._prevPlotData = this.series[index-1]._plotData; } series._sumy = 0; series._sumx = 0; for (i=series.data.length-1; i>-1; i--) { series._sumy += series.data[i][1]; series._sumx += series.data[i][0]; } }; // function to safely return colors from the color array and wrap around at the end. this.getNextSeriesColor = (function(t) { var idx = 0; var sc = t.seriesColors; return function () { if (idx < sc.length) { return sc[idx++]; } else { idx = 0; return sc[idx++]; } }; })(this); this.parseOptions = function(options){ for (var i=0; i<this.preParseOptionsHooks.hooks.length; i++) { this.preParseOptionsHooks.hooks[i].call(this, options); } for (var i=0; i<$.jqplot.preParseOptionsHooks.length; i++) { $.jqplot.preParseOptionsHooks[i].call(this, options); } this.options = $.extend(true, {}, this.defaults, options); var opts = this.options; this.animate = opts.animate; this.animateReplot = opts.animateReplot; this.stackSeries = opts.stackSeries; if ($.isPlainObject(opts.fillBetween)) { var temp = ['series1', 'series2', 'color', 'baseSeries', 'fill'], tempi; for (var i=0, l=temp.length; i<l; i++) { tempi = temp[i]; if (opts.fillBetween[tempi] != null) { this.fillBetween[tempi] = opts.fillBetween[tempi]; } } } if (opts.seriesColors) { this.seriesColors = opts.seriesColors; } if (opts.negativeSeriesColors) { this.negativeSeriesColors = opts.negativeSeriesColors; } if (opts.captureRightClick) { this.captureRightClick = opts.captureRightClick; } this.defaultAxisStart = (options && options.defaultAxisStart != null) ? options.defaultAxisStart : this.defaultAxisStart; this.colorGenerator.setColors(this.seriesColors); this.negativeColorGenerator.setColors(this.negativeSeriesColors); // var cg = new this.colorGenerator(this.seriesColors); // var ncg = new this.colorGenerator(this.negativeSeriesColors); // this._gridPadding = this.options.gridPadding; $.extend(true, this._gridPadding, opts.gridPadding); this.sortData = (opts.sortData != null) ? opts.sortData : this.sortData; for (var i=0; i<12; i++) { var n = _axisNames[i]; var axis = this.axes[n]; axis._options = $.extend(true, {}, opts.axesDefaults, opts.axes[n]); $.extend(true, axis, opts.axesDefaults, opts.axes[n]); axis._plotWidth = this._width; axis._plotHeight = this._height; } // if (this.data.length == 0) { // this.data = []; // for (var i=0; i<this.options.series.length; i++) { // this.data.push(this.options.series.data); // } // } var normalizeData = function(data, dir, start) { // return data as an array of point arrays, // in form [[x1,y1...], [x2,y2...], ...] var temp = []; var i, l; dir = dir || 'vertical'; if (!$.isArray(data[0])) { // we have a series of scalars. One line with just y values. // turn the scalar list of data into a data array of form: // [[1, data[0]], [2, data[1]], ...] for (i=0, l=data.length; i<l; i++) { if (dir == 'vertical') { temp.push([start + i, data[i]]); } else { temp.push([data[i], start+i]); } } } else { // we have a properly formatted data series, copy it. $.extend(true, temp, data); } return temp; }; var colorIndex = 0; this.series = []; for (var i=0; i<this.data.length; i++) { var sopts = $.extend(true, {index: i}, {seriesColors:this.seriesColors, negativeSeriesColors:this.negativeSeriesColors}, this.options.seriesDefaults, this.options.series[i], {rendererOptions:{animation:{show: this.animate}}}); // pass in options in case something needs set prior to initialization. var temp = new Series(sopts); for (var j=0; j<$.jqplot.preParseSeriesOptionsHooks.length; j++) { $.jqplot.preParseSeriesOptionsHooks[j].call(temp, this.options.seriesDefaults, this.options.series[i]); } for (var j=0; j<this.preParseSeriesOptionsHooks.hooks.length; j++) { this.preParseSeriesOptionsHooks.hooks[j].call(temp, this.options.seriesDefaults, this.options.series[i]); } // Now go back and apply the options to the series. Really should just do this during initializaiton, but don't want to // mess up preParseSeriesOptionsHooks at this point. $.extend(true, temp, sopts); var dir = 'vertical'; if (temp.renderer === $.jqplot.BarRenderer && temp.rendererOptions && temp.rendererOptions.barDirection == 'horizontal') { dir = 'horizontal'; temp._stackAxis = 'x'; temp._primaryAxis = '_yaxis'; } temp.data = normalizeData(this.data[i], dir, this.defaultAxisStart); switch (temp.xaxis) { case 'xaxis': temp._xaxis = this.axes.xaxis; break; case 'x2axis': temp._xaxis = this.axes.x2axis; break; default: break; } temp._yaxis = this.axes[temp.yaxis]; temp._xaxis._series.push(temp); temp._yaxis._series.push(temp); if (temp.show) { temp._xaxis.show = true; temp._yaxis.show = true; } else { if (temp._xaxis.scaleToHiddenSeries) { temp._xaxis.show = true; } if (temp._yaxis.scaleToHiddenSeries) { temp._yaxis.show = true; } } // // parse the renderer options and apply default colors if not provided // if (!temp.color && temp.show != false) { // temp.color = cg.next(); // colorIndex = cg.getIndex() - 1;; // } // if (!temp.negativeColor && temp.show != false) { // temp.negativeColor = ncg.get(colorIndex); // ncg.setIndex(colorIndex); // } if (!temp.label) { temp.label = 'Series '+ (i+1).toString(); } // temp.rendererOptions.show = temp.show; // $.extend(true, temp.renderer, {color:this.seriesColors[i]}, this.rendererOptions); this.series.push(temp); for (var j=0; j<$.jqplot.postParseSeriesOptionsHooks.length; j++) { $.jqplot.postParseSeriesOptionsHooks[j].call(this.series[i], this.options.seriesDefaults, this.options.series[i]); } for (var j=0; j<this.postParseSeriesOptionsHooks.hooks.length; j++) { this.postParseSeriesOptionsHooks.hooks[j].call(this.series[i], this.options.seriesDefaults, this.options.series[i]); } } // copy the grid and title options into this object. $.extend(true, this.grid, this.options.grid); // if axis border properties aren't set, set default. for (var i=0, l=_axisNames.length; i<l; i++) { var n = _axisNames[i]; var axis = this.axes[n]; if (axis.borderWidth == null) { axis.borderWidth =this.grid.borderWidth; } } if (typeof this.options.title == 'string') { this.title.text = this.options.title; } else if (typeof this.options.title == 'object') { $.extend(true, this.title, this.options.title); } this.title._plotWidth = this._width; this.legend.setOptions(this.options.legend); for (var i=0; i<$.jqplot.postParseOptionsHooks.length; i++) { $.jqplot.postParseOptionsHooks[i].call(this, options); } for (var i=0; i<this.postParseOptionsHooks.hooks.length; i++) { this.postParseOptionsHooks.hooks[i].call(this, options); } }; // method: destroy // Releases all resources occupied by the plot this.destroy = function() { this.canvasManager.freeAllCanvases(); if (this.eventCanvas && this.eventCanvas._elem) { this.eventCanvas._elem.unbind(); } // Couple of posts on Stack Overflow indicate that empty() doesn't // always cear up the dom and release memory. Sometimes setting // innerHTML property to null is needed. Particularly on IE, may // have to directly set it to null, bypassing $. this.target.empty(); this.target[0].innerHTML = ''; }; // method: replot // Does a reinitialization of the plot followed by // a redraw. Method could be used to interactively // change plot characteristics and then replot. // // Parameters: // options - Options used for replotting. // // Properties: // clear - false to not clear (empty) the plot container before replotting (default: true). // resetAxes - true to reset all axes min, max, numberTicks and tickInterval setting so axes will rescale themselves. // optionally pass in list of axes to reset (e.g. ['xaxis', 'y2axis']) (default: false). this.replot = function(options) { var opts = options || {}; var data = opts.data || null; var clear = (opts.clear === false) ? false : true; var resetAxes = opts.resetAxes || false; delete opts.data; delete opts.clear; delete opts.resetAxes; this.target.trigger('jqplotPreReplot'); if (clear) { this.destroy(); } // if have data or other options, full reinit. // otherwise, quickinit. if (data || !$.isEmptyObject(opts)) { this.reInitialize(data, opts); } else { this.quickInit(); } if (resetAxes) { this.resetAxesScale(resetAxes, opts.axes); } this.draw(); this.target.trigger('jqplotPostReplot'); }; // method: redraw // Empties the plot target div and redraws the plot. // This enables plot data and properties to be changed // and then to comletely clear the plot and redraw. // redraw *will not* reinitialize any plot elements. // That is, axes will not be autoscaled and defaults // will not be reapplied to any plot elements. redraw // is used primarily with zooming. // // Parameters: // clear - false to not clear (empty) the plot container before redrawing (default: true). this.redraw = function(clear) { clear = (clear != null) ? clear : true; this.target.trigger('jqplotPreRedraw'); if (clear) { this.canvasManager.freeAllCanvases(); this.eventCanvas._elem.unbind(); // Dont think I bind any events to the target, this shouldn't be necessary. // It will remove user's events. // this.target.unbind(); this.target.empty(); } for (var ax in this.axes) { this.axes[ax]._ticks = []; } this.computePlotData(); // for (var i=0; i<this.series.length; i++) { // this.populatePlotData(this.series[i], i); // } this._sumy = 0; this._sumx = 0; for (var i=0, tsl = this.series.length; i<tsl; i++) { this._sumy += this.series[i]._sumy; this._sumx += this.series[i]._sumx; } this.draw(); this.target.trigger('jqplotPostRedraw'); }; // method: draw // Draws all elements of the plot into the container. // Does not clear the container before drawing. this.draw = function(){ if (this.drawIfHidden || this.target.is(':visible')) { this.target.trigger('jqplotPreDraw'); var i, j, l, tempseries; for (i=0, l=$.jqplot.preDrawHooks.length; i<l; i++) { $.jqplot.preDrawHooks[i].call(this); } for (i=0, l=this.preDrawHooks.hooks.length; i<l; i++) { this.preDrawHooks.hooks[i].apply(this, this.preDrawSeriesHooks.args[i]); } // create an underlying canvas to be used for special features. this.target.append(this.baseCanvas.createElement({left:0, right:0, top:0, bottom:0}, 'jqplot-base-canvas', null, this)); this.baseCanvas.setContext(); this.target.append(this.title.draw()); this.title.pack({top:0, left:0}); // make room for the legend between the grid and the edge. // pass a dummy offsets object and a reference to the plot. var legendElem = this.legend.draw({}, this); var gridPadding = {top:0, left:0, bottom:0, right:0}; if (this.legend.placement == "outsideGrid") { // temporarily append the legend to get dimensions this.target.append(legendElem); switch (this.legend.location) { case 'n': gridPadding.top += this.legend.getHeight(); break; case 's': gridPadding.bottom += this.legend.getHeight(); break; case 'ne': case 'e': case 'se': gridPadding.right += this.legend.getWidth(); break; case 'nw': case 'w': case 'sw': gridPadding.left += this.legend.getWidth(); break; default: // same as 'ne' gridPadding.right += this.legend.getWidth(); break; } legendElem = legendElem.detach(); } var ax = this.axes; var name; // draw the yMidAxis first, so xaxis of pyramid chart can adjust itself if needed. for (i=0; i<12; i++) { name = _axisNames[i]; this.target.append(ax[name].draw(this.baseCanvas._ctx, this)); ax[name].set(); } if (ax.yaxis.show) { gridPadding.left += ax.yaxis.getWidth(); } var ra = ['y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis']; var rapad = [0, 0, 0, 0, 0, 0, 0, 0]; var gpr = 0; var n; for (n=0; n<8; n++) { if (ax[ra[n]].show) { gpr += ax[ra[n]].getWidth(); rapad[n] = gpr; } } gridPadding.right += gpr; if (ax.x2axis.show) { gridPadding.top += ax.x2axis.getHeight(); } if (this.title.show) { gridPadding.top += this.title.getHeight(); } if (ax.xaxis.show) { gridPadding.bottom += ax.xaxis.getHeight(); } // end of gridPadding adjustments. // if user passed in gridDimensions option, check against calculated gridPadding if (this.options.gridDimensions && $.isPlainObject(this.options.gridDimensions)) { var gdw = parseInt(this.options.gridDimensions.width, 10) || 0; var gdh = parseInt(this.options.gridDimensions.height, 10) || 0; var widthAdj = (this._width - gridPadding.left - gridPadding.right - gdw)/2; var heightAdj = (this._height - gridPadding.top - gridPadding.bottom - gdh)/2; if (heightAdj >= 0 && widthAdj >= 0) { gridPadding.top += heightAdj; gridPadding.bottom += heightAdj; gridPadding.left += widthAdj; gridPadding.right += widthAdj; } } var arr = ['top', 'bottom', 'left', 'right']; for (var n in arr) { if (this._gridPadding[arr[n]] == null && gridPadding[arr[n]] > 0) { this._gridPadding[arr[n]] = gridPadding[arr[n]]; } else if (this._gridPadding[arr[n]] == null) { this._gridPadding[arr[n]] = this._defaultGridPadding[arr[n]]; } } var legendPadding = this._gridPadding; if (this.legend.placement === 'outsideGrid') { legendPadding = {top:this.title.getHeight(), left: 0, right: 0, bottom: 0}; if (this.legend.location === 's') { legendPadding.left = this._gridPadding.left; legendPadding.right = this._gridPadding.right; } } ax.xaxis.pack({position:'absolute', bottom:this._gridPadding.bottom - ax.xaxis.getHeight(), left:0, width:this._width}, {min:this._gridPadding.left, max:this._width - this._gridPadding.right}); ax.yaxis.pack({position:'absolute', top:0, left:this._gridPadding.left - ax.yaxis.getWidth(), height:this._height}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top}); ax.x2axis.pack({position:'absolute', top:this._gridPadding.top - ax.x2axis.getHeight(), left:0, width:this._width}, {min:this._gridPadding.left, max:this._width - this._gridPadding.right}); for (i=8; i>0; i--) { ax[ra[i-1]].pack({position:'absolute', top:0, right:this._gridPadding.right - rapad[i-1]}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top}); } var ltemp = (this._width - this._gridPadding.left - this._gridPadding.right)/2.0 + this._gridPadding.left - ax.yMidAxis.getWidth()/2.0; ax.yMidAxis.pack({position:'absolute', top:0, left:ltemp, zIndex:9, textAlign: 'center'}, {min:this._height - this._gridPadding.bottom, max: this._gridPadding.top}); this.target.append(this.grid.createElement(this._gridPadding, this)); this.grid.draw(); var series = this.series; var seriesLength = series.length; // put the shadow canvases behind the series canvases so shadows don't overlap on stacked bars. for (i=0, l=seriesLength; i<l; i++) { // draw series in order of stacking. This affects only // order in which canvases are added to dom. j = this.seriesStack[i]; this.target.append(series[j].shadowCanvas.createElement(this._gridPadding, 'jqplot-series-shadowCanvas', null, this)); series[j].shadowCanvas.setContext(); series[j].shadowCanvas._elem.data('seriesIndex', j); } for (i=0, l=seriesLength; i<l; i++) { // draw series in order of stacking. This affects only // order in which canvases are added to dom. j = this.seriesStack[i]; this.target.append(series[j].canvas.createElement(this._gridPadding, 'jqplot-series-canvas', null, this)); series[j].canvas.setContext(); series[j].canvas._elem.data('seriesIndex', j); } // Need to use filled canvas to capture events in IE. // Also, canvas seems to block selection of other elements in document on FF. this.target.append(this.eventCanvas.createElement(this._gridPadding, 'jqplot-event-canvas', null, this)); this.eventCanvas.setContext(); this.eventCanvas._ctx.fillStyle = 'rgba(0,0,0,0)'; this.eventCanvas._ctx.fillRect(0,0,this.eventCanvas._ctx.canvas.width, this.eventCanvas._ctx.canvas.height); // bind custom event handlers to regular events. this.bindCustomEvents(); // draw legend before series if the series needs to know the legend dimensions. if (this.legend.preDraw) { this.eventCanvas._elem.before(legendElem); this.legend.pack(legendPadding); if (this.legend._elem) { this.drawSeries({legendInfo:{location:this.legend.location, placement:this.legend.placement, width:this.legend.getWidth(), height:this.legend.getHeight(), xoffset:this.legend.xoffset, yoffset:this.legend.yoffset}}); } else { this.drawSeries(); } } else { // draw series before legend this.drawSeries(); if (seriesLength) { $(series[seriesLength-1].canvas._elem).after(legendElem); } this.legend.pack(legendPadding); } // register event listeners on the overlay canvas for (var i=0, l=$.jqplot.eventListenerHooks.length; i<l; i++) { // in the handler, this will refer to the eventCanvas dom element. // make sure there are references back into plot objects. this.eventCanvas._elem.bind($.jqplot.eventListenerHooks[i][0], {plot:this}, $.jqplot.eventListenerHooks[i][1]); } // register event listeners on the overlay canvas for (var i=0, l=this.eventListenerHooks.hooks.length; i<l; i++) { // in the handler, this will refer to the eventCanvas dom element. // make sure there are references back into plot objects. this.eventCanvas._elem.bind(this.eventListenerHooks.hooks[i][0], {plot:this}, this.eventListenerHooks.hooks[i][1]); } var fb = this.fillBetween; if (fb.fill && fb.series1 !== fb.series2 && fb.series1 < seriesLength && fb.series2 < seriesLength && series[fb.series1]._type === 'line' && series[fb.series2]._type === 'line') { this.doFillBetweenLines(); } for (var i=0, l=$.jqplot.postDrawHooks.length; i<l; i++) { $.jqplot.postDrawHooks[i].call(this); } for (var i=0, l=this.postDrawHooks.hooks.length; i<l; i++) { this.postDrawHooks.hooks[i].apply(this, this.postDrawHooks.args[i]); } if (this.target.is(':visible')) { this._drawCount += 1; } var temps, tempr, sel, _els; // ughh. ideally would hide all series then show them. for (i=0, l=seriesLength; i<l; i++) { temps = series[i]; tempr = temps.renderer; sel = '.jqplot-point-label.jqplot-series-'+i; if (tempr.animation && tempr.animation._supported && tempr.animation.show && (this._drawCount < 2 || this.animateReplot)) { _els = this.target.find(sel); _els.stop(true, true).hide(); temps.canvas._elem.stop(true, true).hide(); temps.shadowCanvas._elem.stop(true, true).hide(); temps.canvas._elem.jqplotEffect('blind', {mode: 'show', direction: tempr.animation.direction}, tempr.animation.speed); temps.shadowCanvas._elem.jqplotEffect('blind', {mode: 'show', direction: tempr.animation.direction}, tempr.animation.speed); _els.fadeIn(tempr.animation.speed*0.8); } } _els = null; this.target.trigger('jqplotPostDraw', [this]); } }; jqPlot.prototype.doFillBetweenLines = function () { var fb = this.fillBetween; var sid1 = fb.series1; var sid2 = fb.series2; // first series should always be lowest index var id1 = (sid1 < sid2) ? sid1 : sid2; var id2 = (sid2 > sid1) ? sid2 : sid1; var series1 = this.series[id1]; var series2 = this.series[id2]; if (series2.renderer.smooth) { var tempgd = series2.renderer._smoothedData.slice(0).reverse(); } else { var tempgd = series2.gridData.slice(0).reverse(); } if (series1.renderer.smooth) { var gd = series1.renderer._smoothedData.concat(tempgd); } else { var gd = series1.gridData.concat(tempgd); } var color = (fb.color !== null) ? fb.color : this.series[sid1].fillColor; var baseSeries = (fb.baseSeries !== null) ? fb.baseSeries : id1; // now apply a fill to the shape on the lower series shadow canvas, // so it is behind both series. var sr = this.series[baseSeries].renderer.shapeRenderer; var opts = {fillStyle: color, fill: true, closePath: true}; sr.draw(series1.shadowCanvas._ctx, gd, opts); }; this.bindCustomEvents = function() { this.eventCanvas._elem.bind('click', {plot:this}, this.onClick); this.eventCanvas._elem.bind('dblclick', {plot:this}, this.onDblClick); this.eventCanvas._elem.bind('mousedown', {plot:this}, this.onMouseDown); this.eventCanvas._elem.bind('mousemove', {plot:this}, this.onMouseMove); this.eventCanvas._elem.bind('mouseenter', {plot:this}, this.onMouseEnter); this.eventCanvas._elem.bind('mouseleave', {plot:this}, this.onMouseLeave); if (this.captureRightClick) { this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onRightClick); this.eventCanvas._elem.get(0).oncontextmenu = function() { return false; }; } else { this.eventCanvas._elem.bind('mouseup', {plot:this}, this.onMouseUp); } }; function getEventPosition(ev) { var plot = ev.data.plot; var go = plot.eventCanvas._elem.offset(); var gridPos = {x:ev.pageX - go.left, y:ev.pageY - go.top}; var dataPos = {xaxis:null, yaxis:null, x2axis:null, y2axis:null, y3axis:null, y4axis:null, y5axis:null, y6axis:null, y7axis:null, y8axis:null, y9axis:null, yMidAxis:null}; var an = ['xaxis', 'yaxis', 'x2axis', 'y2axis', 'y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis']; var ax = plot.axes; var n, axis; for (n=11; n>0; n--) { axis = an[n-1]; if (ax[axis].show) { dataPos[axis] = ax[axis].series_p2u(gridPos[axis.charAt(0)]); } } return {offsets:go, gridPos:gridPos, dataPos:dataPos}; } // function to check if event location is over a area area function checkIntersection(gridpos, plot) { var series = plot.series; var i, j, k, s, r, x, y, theta, sm, sa, minang, maxang; var d0, d, p, pp, points, bw, hp; var threshold, t; for (k=plot.seriesStack.length-1; k>=0; k--) { i = plot.seriesStack[k]; s = series[i]; hp = s._highlightThreshold; switch (s.renderer.constructor) { case $.jqplot.BarRenderer: x = gridpos.x; y = gridpos.y; for (j=0; j<s._barPoints.length; j++) { points = s._barPoints[j]; p = s.gridData[j]; if (x>points[0][0] && x<points[2][0] && y>points[2][1] && y<points[0][1]) { return {seriesIndex:s.index, pointIndex:j, gridData:p, data:s.data[j], points:s._barPoints[j]}; } } break; case $.jqplot.PyramidRenderer: x = gridpos.x; y = gridpos.y; for (j=0; j<s._barPoints.length; j++) { points = s._barPoints[j]; p = s.gridData[j]; if (x > points[0][0] + hp[0][0] && x < points[2][0] + hp[2][0] && y > points[2][1] && y < points[0][1]) { return {seriesIndex:s.index, pointIndex:j, gridData:p, data:s.data[j], points:s._barPoints[j]}; } } break; case $.jqplot.DonutRenderer: sa = s.startAngle/180*Math.PI; x = gridpos.x - s._center[0]; y = gridpos.y - s._center[1]; r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); if (x > 0 && -y >= 0) { theta = 2*Math.PI - Math.atan(-y/x); } else if (x > 0 && -y < 0) { theta = -Math.atan(-y/x); } else if (x < 0) { theta = Math.PI - Math.atan(-y/x); } else if (x == 0 && -y > 0) { theta = 3*Math.PI/2; } else if (x == 0 && -y < 0) { theta = Math.PI/2; } else if (x == 0 && y == 0) { theta = 0; } if (sa) { theta -= sa; if (theta < 0) { theta += 2*Math.PI; } else if (theta > 2*Math.PI) { theta -= 2*Math.PI; } } sm = s.sliceMargin/180*Math.PI; if (r < s._radius && r > s._innerRadius) { for (j=0; j<s.gridData.length; j++) { minang = (j>0) ? s.gridData[j-1][1]+sm : sm; maxang = s.gridData[j][1]; if (theta > minang && theta < maxang) { return {seriesIndex:s.index, pointIndex:j, gridData:[gridpos.x,gridpos.y], data:s.data[j]}; } } } break; case $.jqplot.PieRenderer: sa = s.startAngle/180*Math.PI; x = gridpos.x - s._center[0]; y = gridpos.y - s._center[1]; r = Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2)); if (x > 0 && -y >= 0) { theta = 2*Math.PI - Math.atan(-y/x); } else if (x > 0 && -y < 0) { theta = -Math.atan(-y/x); } else if (x < 0) { theta = Math.PI - Math.atan(-y/x); } else if (x == 0 && -y > 0) { theta = 3*Math.PI/2; } else if (x == 0 && -y < 0) { theta = Math.PI/2; } else if (x == 0 && y == 0) { theta = 0; } if (sa) { theta -= sa; if (theta < 0) { theta += 2*Math.PI; } else if (theta > 2*Math.PI) { theta -= 2*Math.PI; } } sm = s.sliceMargin/180*Math.PI; if (r < s._radius) { for (j=0; j<s.gridData.length; j++) { minang = (j>0) ? s.gridData[j-1][1]+sm : sm; maxang = s.gridData[j][1]; if (theta > minang && theta < maxang) { return {seriesIndex:s.index, pointIndex:j, gridData:[gridpos.x,gridpos.y], data:s.data[j]}; } } } break; case $.jqplot.BubbleRenderer: x = gridpos.x; y = gridpos.y; var ret = null; if (s.show) { for (var j=0; j<s.gridData.length; j++) { p = s.gridData[j]; d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) ); if (d <= p[2] && (d <= d0 || d0 == null)) { d0 = d; ret = {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; } } if (ret != null) { return ret; } } break; case $.jqplot.FunnelRenderer: x = gridpos.x; y = gridpos.y; var v = s._vertices, vfirst = v[0], vlast = v[v.length-1], lex, rex, cv; // equations of right and left sides, returns x, y values given height of section (y value and 2 points) function findedge (l, p1 , p2) { var m = (p1[1] - p2[1])/(p1[0] - p2[0]); var b = p1[1] - m*p1[0]; var y = l + p1[1]; return [(y - b)/m, y]; } // check each section lex = findedge(y, vfirst[0], vlast[3]); rex = findedge(y, vfirst[1], vlast[2]); for (j=0; j<v.length; j++) { cv = v[j]; if (y >= cv[0][1] && y <= cv[3][1] && x >= lex[0] && x <= rex[0]) { return {seriesIndex:s.index, pointIndex:j, gridData:null, data:s.data[j]}; } } break; case $.jqplot.LineRenderer: x = gridpos.x; y = gridpos.y; r = s.renderer; if (s.show) { if ((s.fill || (s.renderer.bands.show && s.renderer.bands.fill)) && (!plot.plugins.highlighter || !plot.plugins.highlighter.show)) { // first check if it is in bounding box var inside = false; if (x>s._boundingBox[0][0] && x<s._boundingBox[1][0] && y>s._boundingBox[1][1] && y<s._boundingBox[0][1]) { // now check the crossing number var numPoints = s._areaPoints.length; var ii; var j = numPoints-1; for(var ii=0; ii < numPoints; ii++) { var vertex1 = [s._areaPoints[ii][0], s._areaPoints[ii][1]]; var vertex2 = [s._areaPoints[j][0], s._areaPoints[j][1]]; if (vertex1[1] < y && vertex2[1] >= y || vertex2[1] < y && vertex1[1] >= y) { if (vertex1[0] + (y - vertex1[1]) / (vertex2[1] - vertex1[1]) * (vertex2[0] - vertex1[0]) < x) { inside = !inside; } } j = ii; } } if (inside) { return {seriesIndex:i, pointIndex:null, gridData:s.gridData, data:s.data, points:s._areaPoints}; } break; } else { t = s.markerRenderer.size/2+s.neighborThreshold; threshold = (t > 0) ? t : 0; for (var j=0; j<s.gridData.length; j++) { p = s.gridData[j]; // neighbor looks different to OHLC chart. if (r.constructor == $.jqplot.OHLCRenderer) { if (r.candleStick) { var yp = s._yaxis.series_u2p; if (x >= p[0]-r._bodyWidth/2 && x <= p[0]+r._bodyWidth/2 && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) { return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; } } // if an open hi low close chart else if (!r.hlc){ var yp = s._yaxis.series_u2p; if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) { return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; } } // a hi low close chart else { var yp = s._yaxis.series_u2p; if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][1]) && y <= yp(s.data[j][2])) { return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; } } } else if (p[0] != null && p[1] != null){ d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) ); if (d <= threshold && (d <= d0 || d0 == null)) { d0 = d; return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; } } } } } break; default: x = gridpos.x; y = gridpos.y; r = s.renderer; if (s.show) { t = s.markerRenderer.size/2+s.neighborThreshold; threshold = (t > 0) ? t : 0; for (var j=0; j<s.gridData.length; j++) { p = s.gridData[j]; // neighbor looks different to OHLC chart. if (r.constructor == $.jqplot.OHLCRenderer) { if (r.candleStick) { var yp = s._yaxis.series_u2p; if (x >= p[0]-r._bodyWidth/2 && x <= p[0]+r._bodyWidth/2 && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) { return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; } } // if an open hi low close chart else if (!r.hlc){ var yp = s._yaxis.series_u2p; if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][2]) && y <= yp(s.data[j][3])) { return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; } } // a hi low close chart else { var yp = s._yaxis.series_u2p; if (x >= p[0]-r._tickLength && x <= p[0]+r._tickLength && y >= yp(s.data[j][1]) && y <= yp(s.data[j][2])) { return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; } } } else { d = Math.sqrt( (x-p[0]) * (x-p[0]) + (y-p[1]) * (y-p[1]) ); if (d <= threshold && (d <= d0 || d0 == null)) { d0 = d; return {seriesIndex: i, pointIndex:j, gridData:p, data:s.data[j]}; } } } } break; } } return null; } this.onClick = function(ev) { // Event passed in is normalized and will have data attribute. // Event passed out is unnormalized. var positions = getEventPosition(ev); var p = ev.data.plot; var neighbor = checkIntersection(positions.gridPos, p); var evt = $.Event('jqplotClick'); evt.pageX = ev.pageX; evt.pageY = ev.pageY; $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); }; this.onDblClick = function(ev) { // Event passed in is normalized and will have data attribute. // Event passed out is unnormalized. var positions = getEventPosition(ev); var p = ev.data.plot; var neighbor = checkIntersection(positions.gridPos, p); var evt = $.Event('jqplotDblClick'); evt.pageX = ev.pageX; evt.pageY = ev.pageY; $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); }; this.onMouseDown = function(ev) { var positions = getEventPosition(ev); var p = ev.data.plot; var neighbor = checkIntersection(positions.gridPos, p); var evt = $.Event('jqplotMouseDown'); evt.pageX = ev.pageX; evt.pageY = ev.pageY; $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); }; this.onMouseUp = function(ev) { var positions = getEventPosition(ev); var evt = $.Event('jqplotMouseUp'); evt.pageX = ev.pageX; evt.pageY = ev.pageY; $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, ev.data.plot]); }; this.onRightClick = function(ev) { var positions = getEventPosition(ev); var p = ev.data.plot; var neighbor = checkIntersection(positions.gridPos, p); if (p.captureRightClick) { if (ev.which == 3) { var evt = $.Event('jqplotRightClick'); evt.pageX = ev.pageX; evt.pageY = ev.pageY; $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); } else { var evt = $.Event('jqplotMouseUp'); evt.pageX = ev.pageX; evt.pageY = ev.pageY; $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); } } }; this.onMouseMove = function(ev) { var positions = getEventPosition(ev); var p = ev.data.plot; var neighbor = checkIntersection(positions.gridPos, p); var evt = $.Event('jqplotMouseMove'); evt.pageX = ev.pageX; evt.pageY = ev.pageY; $(this).trigger(evt, [positions.gridPos, positions.dataPos, neighbor, p]); }; this.onMouseEnter = function(ev) { var positions = getEventPosition(ev); var p = ev.data.plot; var evt = $.Event('jqplotMouseEnter'); evt.pageX = ev.pageX; evt.pageY = ev.pageY; evt.relatedTarget = ev.relatedTarget; $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, p]); }; this.onMouseLeave = function(ev) { var positions = getEventPosition(ev); var p = ev.data.plot; var evt = $.Event('jqplotMouseLeave'); evt.pageX = ev.pageX; evt.pageY = ev.pageY; evt.relatedTarget = ev.relatedTarget; $(this).trigger(evt, [positions.gridPos, positions.dataPos, null, p]); }; // method: drawSeries // Redraws all or just one series on the plot. No axis scaling // is performed and no other elements on the plot are redrawn. // options is an options object to pass on to the series renderers. // It can be an empty object {}. idx is the series index // to redraw if only one series is to be redrawn. this.drawSeries = function(options, idx){ var i, series, ctx; // if only one argument passed in and it is a number, use it ad idx. idx = (typeof(options) === "number" && idx == null) ? options : idx; options = (typeof(options) === "object") ? options : {}; // draw specified series if (idx != undefined) { series = this.series[idx]; ctx = series.shadowCanvas._ctx; ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); series.drawShadow(ctx, options, this); ctx = series.canvas._ctx; ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); series.draw(ctx, options, this); if (series.renderer.constructor == $.jqplot.BezierCurveRenderer) { if (idx < this.series.length - 1) { this.drawSeries(idx+1); } } } else { // if call series drawShadow method first, in case all series shadows // should be drawn before any series. This will ensure, like for // stacked bar plots, that shadows don't overlap series. for (i=0; i<this.series.length; i++) { // first clear the canvas series = this.series[i]; ctx = series.shadowCanvas._ctx; ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); series.drawShadow(ctx, options, this); ctx = series.canvas._ctx; ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height); series.draw(ctx, options, this); } } options = idx = i = series = ctx = null; }; // method: moveSeriesToFront // This method requires jQuery 1.4+ // Moves the specified series canvas in front of all other series canvases. // This effectively "draws" the specified series on top of all other series, // although it is performed through DOM manipulation, no redrawing is performed. // // Parameters: // idx - 0 based index of the series to move. This will be the index of the series // as it was first passed into the jqplot function. this.moveSeriesToFront = function (idx) { idx = parseInt(idx, 10); var stackIndex = $.inArray(idx, this.seriesStack); // if already in front, return if (stackIndex == -1) { return; } if (stackIndex == this.seriesStack.length -1) { this.previousSeriesStack = this.seriesStack.slice(0); return; } var opidx = this.seriesStack[this.seriesStack.length -1]; var serelem = this.series[idx].canvas._elem.detach(); var shadelem = this.series[idx].shadowCanvas._elem.detach(); this.series[opidx].shadowCanvas._elem.after(shadelem); this.series[opidx].canvas._elem.after(serelem); this.previousSeriesStack = this.seriesStack.slice(0); this.seriesStack.splice(stackIndex, 1); this.seriesStack.push(idx); }; // method: moveSeriesToBack // This method requires jQuery 1.4+ // Moves the specified series canvas behind all other series canvases. // // Parameters: // idx - 0 based index of the series to move. This will be the index of the series // as it was first passed into the jqplot function. this.moveSeriesToBack = function (idx) { idx = parseInt(idx, 10); var stackIndex = $.inArray(idx, this.seriesStack); // if already in back, return if (stackIndex == 0 || stackIndex == -1) { return; } var opidx = this.seriesStack[0]; var serelem = this.series[idx].canvas._elem.detach(); var shadelem = this.series[idx].shadowCanvas._elem.detach(); this.series[opidx].shadowCanvas._elem.before(shadelem); this.series[opidx].canvas._elem.before(serelem); this.previousSeriesStack = this.seriesStack.slice(0); this.seriesStack.splice(stackIndex, 1); this.seriesStack.unshift(idx); }; // method: restorePreviousSeriesOrder // This method requires jQuery 1.4+ // Restore the series canvas order to its previous state. // Useful to put a series back where it belongs after moving // it to the front. this.restorePreviousSeriesOrder = function () { var i, j, serelem, shadelem, temp, move, keep; // if no change, return. if (this.seriesStack == this.previousSeriesStack) { return; } for (i=1; i<this.previousSeriesStack.length; i++) { move = this.previousSeriesStack[i]; keep = this.previousSeriesStack[i-1]; serelem = this.series[move].canvas._elem.detach(); shadelem = this.series[move].shadowCanvas._elem.detach(); this.series[keep].shadowCanvas._elem.after(shadelem); this.series[keep].canvas._elem.after(serelem); } temp = this.seriesStack.slice(0); this.seriesStack = this.previousSeriesStack.slice(0); this.previousSeriesStack = temp; }; // method: restoreOriginalSeriesOrder // This method requires jQuery 1.4+ // Restore the series canvas order to its original order // when the plot was created. this.restoreOriginalSeriesOrder = function () { var i, j, arr=[], serelem, shadelem; for (i=0; i<this.series.length; i++) { arr.push(i); } if (this.seriesStack == arr) { return; } this.previousSeriesStack = this.seriesStack.slice(0); this.seriesStack = arr; for (i=1; i<this.seriesStack.length; i++) { serelem = this.series[i].canvas._elem.detach(); shadelem = this.series[i].shadowCanvas._elem.detach(); this.series[i-1].shadowCanvas._elem.after(shadelem); this.series[i-1].canvas._elem.after(serelem); } }; this.activateTheme = function (name) { this.themeEngine.activate(this, name); }; } // conpute a highlight color or array of highlight colors from given colors. $.jqplot.computeHighlightColors = function(colors) { var ret; if ($.isArray(colors)) { ret = []; for (var i=0; i<colors.length; i++){ var rgba = $.jqplot.getColorComponents(colors[i]); var newrgb = [rgba[0], rgba[1], rgba[2]]; var sum = newrgb[0] + newrgb[1] + newrgb[2]; for (var j=0; j<3; j++) { // when darkening, lowest color component can be is 60. newrgb[j] = (sum > 660) ? newrgb[j] * 0.85 : 0.73 * newrgb[j] + 90; newrgb[j] = parseInt(newrgb[j], 10); (newrgb[j] > 255) ? 255 : newrgb[j]; } // newrgb[3] = (rgba[3] > 0.4) ? rgba[3] * 0.4 : rgba[3] * 1.5; // newrgb[3] = (rgba[3] > 0.5) ? 0.8 * rgba[3] - .1 : rgba[3] + 0.2; newrgb[3] = 0.3 + 0.35 * rgba[3]; ret.push('rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+newrgb[3]+')'); } } else { var rgba = $.jqplot.getColorComponents(colors); var newrgb = [rgba[0], rgba[1], rgba[2]]; var sum = newrgb[0] + newrgb[1] + newrgb[2]; for (var j=0; j<3; j++) { // when darkening, lowest color component can be is 60. // newrgb[j] = (sum > 570) ? newrgb[j] * 0.8 : newrgb[j] + 0.3 * (255 - newrgb[j]); // newrgb[j] = parseInt(newrgb[j], 10); newrgb[j] = (sum > 660) ? newrgb[j] * 0.85 : 0.73 * newrgb[j] + 90; newrgb[j] = parseInt(newrgb[j], 10); (newrgb[j] > 255) ? 255 : newrgb[j]; } // newrgb[3] = (rgba[3] > 0.4) ? rgba[3] * 0.4 : rgba[3] * 1.5; // newrgb[3] = (rgba[3] > 0.5) ? 0.8 * rgba[3] - .1 : rgba[3] + 0.2; newrgb[3] = 0.3 + 0.35 * rgba[3]; ret = 'rgba('+newrgb[0]+','+newrgb[1]+','+newrgb[2]+','+newrgb[3]+')'; } return ret; }; $.jqplot.ColorGenerator = function(colors) { colors = colors || $.jqplot.config.defaultColors; var idx = 0; this.next = function () { if (idx < colors.length) { return colors[idx++]; } else { idx = 0; return colors[idx++]; } }; this.previous = function () { if (idx > 0) { return colors[idx--]; } else { idx = colors.length-1; return colors[idx]; } }; // get a color by index without advancing pointer. this.get = function(i) { var idx = i - colors.length * Math.floor(i/colors.length); return colors[idx]; }; this.setColors = function(c) { colors = c; }; this.reset = function() { idx = 0; }; this.getIndex = function() { return idx; }; this.setIndex = function(index) { idx = index; }; }; // convert a hex color string to rgb string. // h - 3 or 6 character hex string, with or without leading # // a - optional alpha $.jqplot.hex2rgb = function(h, a) { h = h.replace('#', ''); if (h.length == 3) { h = h.charAt(0)+h.charAt(0)+h.charAt(1)+h.charAt(1)+h.charAt(2)+h.charAt(2); } var rgb; rgb = 'rgba('+parseInt(h.slice(0,2), 16)+', '+parseInt(h.slice(2,4), 16)+', '+parseInt(h.slice(4,6), 16); if (a) { rgb += ', '+a; } rgb += ')'; return rgb; }; // convert an rgb color spec to a hex spec. ignore any alpha specification. $.jqplot.rgb2hex = function(s) { var pat = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *(?:, *[0-9.]*)?\)/; var m = s.match(pat); var h = '#'; for (var i=1; i<4; i++) { var temp; if (m[i].search(/%/) != -1) { temp = parseInt(255*m[i]/100, 10).toString(16); if (temp.length == 1) { temp = '0'+temp; } } else { temp = parseInt(m[i], 10).toString(16); if (temp.length == 1) { temp = '0'+temp; } } h += temp; } return h; }; // given a css color spec, return an rgb css color spec $.jqplot.normalize2rgb = function(s, a) { if (s.search(/^ *rgba?\(/) != -1) { return s; } else if (s.search(/^ *#?[0-9a-fA-F]?[0-9a-fA-F]/) != -1) { return $.jqplot.hex2rgb(s, a); } else { throw new Error('Invalid color spec'); } }; // extract the r, g, b, a color components out of a css color spec. $.jqplot.getColorComponents = function(s) { // check to see if a color keyword. s = $.jqplot.colorKeywordMap[s] || s; var rgb = $.jqplot.normalize2rgb(s); var pat = /rgba?\( *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *, *([0-9]{1,3}\.?[0-9]*%?) *,? *([0-9.]* *)?\)/; var m = rgb.match(pat); var ret = []; for (var i=1; i<4; i++) { if (m[i].search(/%/) != -1) { ret[i-1] = parseInt(255*m[i]/100, 10); } else { ret[i-1] = parseInt(m[i], 10); } } ret[3] = parseFloat(m[4]) ? parseFloat(m[4]) : 1.0; return ret; }; $.jqplot.colorKeywordMap = { aliceblue: 'rgb(240, 248, 255)', antiquewhite: 'rgb(250, 235, 215)', aqua: 'rgb( 0, 255, 255)', aquamarine: 'rgb(127, 255, 212)', azure: 'rgb(240, 255, 255)', beige: 'rgb(245, 245, 220)', bisque: 'rgb(255, 228, 196)', black: 'rgb( 0, 0, 0)', blanchedalmond: 'rgb(255, 235, 205)', blue: 'rgb( 0, 0, 255)', blueviolet: 'rgb(138, 43, 226)', brown: 'rgb(165, 42, 42)', burlywood: 'rgb(222, 184, 135)', cadetblue: 'rgb( 95, 158, 160)', chartreuse: 'rgb(127, 255, 0)', chocolate: 'rgb(210, 105, 30)', coral: 'rgb(255, 127, 80)', cornflowerblue: 'rgb(100, 149, 237)', cornsilk: 'rgb(255, 248, 220)', crimson: 'rgb(220, 20, 60)', cyan: 'rgb( 0, 255, 255)', darkblue: 'rgb( 0, 0, 139)', darkcyan: 'rgb( 0, 139, 139)', darkgoldenrod: 'rgb(184, 134, 11)', darkgray: 'rgb(169, 169, 169)', darkgreen: 'rgb( 0, 100, 0)', darkgrey: 'rgb(169, 169, 169)', darkkhaki: 'rgb(189, 183, 107)', darkmagenta: 'rgb(139, 0, 139)', darkolivegreen: 'rgb( 85, 107, 47)', darkorange: 'rgb(255, 140, 0)', darkorchid: 'rgb(153, 50, 204)', darkred: 'rgb(139, 0, 0)', darksalmon: 'rgb(233, 150, 122)', darkseagreen: 'rgb(143, 188, 143)', darkslateblue: 'rgb( 72, 61, 139)', darkslategray: 'rgb( 47, 79, 79)', darkslategrey: 'rgb( 47, 79, 79)', darkturquoise: 'rgb( 0, 206, 209)', darkviolet: 'rgb(148, 0, 211)', deeppink: 'rgb(255, 20, 147)', deepskyblue: 'rgb( 0, 191, 255)', dimgray: 'rgb(105, 105, 105)', dimgrey: 'rgb(105, 105, 105)', dodgerblue: 'rgb( 30, 144, 255)', firebrick: 'rgb(178, 34, 34)', floralwhite: 'rgb(255, 250, 240)', forestgreen: 'rgb( 34, 139, 34)', fuchsia: 'rgb(255, 0, 255)', gainsboro: 'rgb(220, 220, 220)', ghostwhite: 'rgb(248, 248, 255)', gold: 'rgb(255, 215, 0)', goldenrod: 'rgb(218, 165, 32)', gray: 'rgb(128, 128, 128)', grey: 'rgb(128, 128, 128)', green: 'rgb( 0, 128, 0)', greenyellow: 'rgb(173, 255, 47)', honeydew: 'rgb(240, 255, 240)', hotpink: 'rgb(255, 105, 180)', indianred: 'rgb(205, 92, 92)', indigo: 'rgb( 75, 0, 130)', ivory: 'rgb(255, 255, 240)', khaki: 'rgb(240, 230, 140)', lavender: 'rgb(230, 230, 250)', lavenderblush: 'rgb(255, 240, 245)', lawngreen: 'rgb(124, 252, 0)', lemonchiffon: 'rgb(255, 250, 205)', lightblue: 'rgb(173, 216, 230)', lightcoral: 'rgb(240, 128, 128)', lightcyan: 'rgb(224, 255, 255)', lightgoldenrodyellow: 'rgb(250, 250, 210)', lightgray: 'rgb(211, 211, 211)', lightgreen: 'rgb(144, 238, 144)', lightgrey: 'rgb(211, 211, 211)', lightpink: 'rgb(255, 182, 193)', lightsalmon: 'rgb(255, 160, 122)', lightseagreen: 'rgb( 32, 178, 170)', lightskyblue: 'rgb(135, 206, 250)', lightslategray: 'rgb(119, 136, 153)', lightslategrey: 'rgb(119, 136, 153)', lightsteelblue: 'rgb(176, 196, 222)', lightyellow: 'rgb(255, 255, 224)', lime: 'rgb( 0, 255, 0)', limegreen: 'rgb( 50, 205, 50)', linen: 'rgb(250, 240, 230)', magenta: 'rgb(255, 0, 255)', maroon: 'rgb(128, 0, 0)', mediumaquamarine: 'rgb(102, 205, 170)', mediumblue: 'rgb( 0, 0, 205)', mediumorchid: 'rgb(186, 85, 211)', mediumpurple: 'rgb(147, 112, 219)', mediumseagreen: 'rgb( 60, 179, 113)', mediumslateblue: 'rgb(123, 104, 238)', mediumspringgreen: 'rgb( 0, 250, 154)', mediumturquoise: 'rgb( 72, 209, 204)', mediumvioletred: 'rgb(199, 21, 133)', midnightblue: 'rgb( 25, 25, 112)', mintcream: 'rgb(245, 255, 250)', mistyrose: 'rgb(255, 228, 225)', moccasin: 'rgb(255, 228, 181)', navajowhite: 'rgb(255, 222, 173)', navy: 'rgb( 0, 0, 128)', oldlace: 'rgb(253, 245, 230)', olive: 'rgb(128, 128, 0)', olivedrab: 'rgb(107, 142, 35)', orange: 'rgb(255, 165, 0)', orangered: 'rgb(255, 69, 0)', orchid: 'rgb(218, 112, 214)', palegoldenrod: 'rgb(238, 232, 170)', palegreen: 'rgb(152, 251, 152)', paleturquoise: 'rgb(175, 238, 238)', palevioletred: 'rgb(219, 112, 147)', papayawhip: 'rgb(255, 239, 213)', peachpuff: 'rgb(255, 218, 185)', peru: 'rgb(205, 133, 63)', pink: 'rgb(255, 192, 203)', plum: 'rgb(221, 160, 221)', powderblue: 'rgb(176, 224, 230)', purple: 'rgb(128, 0, 128)', red: 'rgb(255, 0, 0)', rosybrown: 'rgb(188, 143, 143)', royalblue: 'rgb( 65, 105, 225)', saddlebrown: 'rgb(139, 69, 19)', salmon: 'rgb(250, 128, 114)', sandybrown: 'rgb(244, 164, 96)', seagreen: 'rgb( 46, 139, 87)', seashell: 'rgb(255, 245, 238)', sienna: 'rgb(160, 82, 45)', silver: 'rgb(192, 192, 192)', skyblue: 'rgb(135, 206, 235)', slateblue: 'rgb(106, 90, 205)', slategray: 'rgb(112, 128, 144)', slategrey: 'rgb(112, 128, 144)', snow: 'rgb(255, 250, 250)', springgreen: 'rgb( 0, 255, 127)', steelblue: 'rgb( 70, 130, 180)', tan: 'rgb(210, 180, 140)', teal: 'rgb( 0, 128, 128)', thistle: 'rgb(216, 191, 216)', tomato: 'rgb(255, 99, 71)', turquoise: 'rgb( 64, 224, 208)', violet: 'rgb(238, 130, 238)', wheat: 'rgb(245, 222, 179)', white: 'rgb(255, 255, 255)', whitesmoke: 'rgb(245, 245, 245)', yellow: 'rgb(255, 255, 0)', yellowgreen: 'rgb(154, 205, 50)' }; // class: $.jqplot.AxisLabelRenderer // Renderer to place labels on the axes. $.jqplot.AxisLabelRenderer = function(options) { // Group: Properties $.jqplot.ElemContainer.call(this); // name of the axis associated with this tick this.axis; // prop: show // whether or not to show the tick (mark and label). this.show = true; // prop: label // The text or html for the label. this.label = ''; this.fontFamily = null; this.fontSize = null; this.textColor = null; this._elem; // prop: escapeHTML // true to escape HTML entities in the label. this.escapeHTML = false; $.extend(true, this, options); }; $.jqplot.AxisLabelRenderer.prototype = new $.jqplot.ElemContainer(); $.jqplot.AxisLabelRenderer.prototype.constructor = $.jqplot.AxisLabelRenderer; $.jqplot.AxisLabelRenderer.prototype.init = function(options) { $.extend(true, this, options); }; $.jqplot.AxisLabelRenderer.prototype.draw = function(ctx, plot) { // Memory Leaks patch if (this._elem) { this._elem.emptyForce(); this._elem = null; } this._elem = $('<div style="position:absolute;" class="jqplot-'+this.axis+'-label"></div>'); if (Number(this.label)) { this._elem.css('white-space', 'nowrap'); } if (!this.escapeHTML) { this._elem.html(this.label); } else { this._elem.text(this.label); } if (this.fontFamily) { this._elem.css('font-family', this.fontFamily); } if (this.fontSize) { this._elem.css('font-size', this.fontSize); } if (this.textColor) { this._elem.css('color', this.textColor); } return this._elem; }; $.jqplot.AxisLabelRenderer.prototype.pack = function() { }; // class: $.jqplot.AxisTickRenderer // A "tick" object showing the value of a tick/gridline on the plot. $.jqplot.AxisTickRenderer = function(options) { // Group: Properties $.jqplot.ElemContainer.call(this); // prop: mark // tick mark on the axis. One of 'inside', 'outside', 'cross', '' or null. this.mark = 'outside'; // name of the axis associated with this tick this.axis; // prop: showMark // whether or not to show the mark on the axis. this.showMark = true; // prop: showGridline // whether or not to draw the gridline on the grid at this tick. this.showGridline = true; // prop: isMinorTick // if this is a minor tick. this.isMinorTick = false; // prop: size // Length of the tick beyond the grid in pixels. // DEPRECATED: This has been superceeded by markSize this.size = 4; // prop: markSize // Length of the tick marks in pixels. For 'cross' style, length // will be stoked above and below axis, so total length will be twice this. this.markSize = 6; // prop: show // whether or not to show the tick (mark and label). // Setting this to false requires more testing. It is recommended // to set showLabel and showMark to false instead. this.show = true; // prop: showLabel // whether or not to show the label. this.showLabel = true; this.label = null; this.value = null; this._styles = {}; // prop: formatter // A class of a formatter for the tick text. sprintf by default. this.formatter = $.jqplot.DefaultTickFormatter; // prop: prefix // String to prepend to the tick label. // Prefix is prepended to the formatted tick label. this.prefix = ''; // prop: suffix // String to append to the tick label. // Suffix is appended to the formatted tick label. this.suffix = ''; // prop: formatString // string passed to the formatter. this.formatString = ''; // prop: fontFamily // css spec for the font-family css attribute. this.fontFamily; // prop: fontSize // css spec for the font-size css attribute. this.fontSize; // prop: textColor // css spec for the color attribute. this.textColor; // prop: escapeHTML // true to escape HTML entities in the label. this.escapeHTML = false; this._elem; this._breakTick = false; $.extend(true, this, options); }; $.jqplot.AxisTickRenderer.prototype.init = function(options) { $.extend(true, this, options); }; $.jqplot.AxisTickRenderer.prototype = new $.jqplot.ElemContainer(); $.jqplot.AxisTickRenderer.prototype.constructor = $.jqplot.AxisTickRenderer; $.jqplot.AxisTickRenderer.prototype.setTick = function(value, axisName, isMinor) { this.value = value; this.axis = axisName; if (isMinor) { this.isMinorTick = true; } return this; }; $.jqplot.AxisTickRenderer.prototype.draw = function() { if (this.label === null) { this.label = this.prefix + this.formatter(this.formatString, this.value) + this.suffix; } var style = {position: 'absolute'}; if (Number(this.label)) { style['whitSpace'] = 'nowrap'; } // Memory Leaks patch if (this._elem) { this._elem.emptyForce(); this._elem = null; } this._elem = $(document.createElement('div')); this._elem.addClass("jqplot-"+this.axis+"-tick"); if (!this.escapeHTML) { this._elem.html(this.label); } else { this._elem.text(this.label); } this._elem.css(style); for (var s in this._styles) { this._elem.css(s, this._styles[s]); } if (this.fontFamily) { this._elem.css('font-family', this.fontFamily); } if (this.fontSize) { this._elem.css('font-size', this.fontSize); } if (this.textColor) { this._elem.css('color', this.textColor); } if (this._breakTick) { this._elem.addClass('jqplot-breakTick'); } return this._elem; }; $.jqplot.DefaultTickFormatter = function (format, val) { if (typeof val == 'number') { if (!format) { format = $.jqplot.config.defaultTickFormatString; } return $.jqplot.sprintf(format, val); } else { return String(val); } }; $.jqplot.PercentTickFormatter = function (format, val) { if (typeof val == 'number') { val = 100 * val; if (!format) { format = $.jqplot.config.defaultTickFormatString; } return $.jqplot.sprintf(format, val); } else { return String(val); } }; $.jqplot.AxisTickRenderer.prototype.pack = function() { }; // Class: $.jqplot.CanvasGridRenderer // The default jqPlot grid renderer, creating a grid on a canvas element. // The renderer has no additional options beyond the <Grid> class. $.jqplot.CanvasGridRenderer = function(){ this.shadowRenderer = new $.jqplot.ShadowRenderer(); }; // called with context of Grid object $.jqplot.CanvasGridRenderer.prototype.init = function(options) { this._ctx; $.extend(true, this, options); // set the shadow renderer options var sopts = {lineJoin:'miter', lineCap:'round', fill:false, isarc:false, angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.shadowWidth, closePath:false, strokeStyle:this.shadowColor}; this.renderer.shadowRenderer.init(sopts); }; // called with context of Grid. $.jqplot.CanvasGridRenderer.prototype.createElement = function(plot) { var elem; // Memory Leaks patch if (this._elem) { if ($.jqplot.use_excanvas && window.G_vmlCanvasManager.uninitElement !== undefined) { elem = this._elem.get(0); window.G_vmlCanvasManager.uninitElement(elem); elem = null; } this._elem.emptyForce(); this._elem = null; } elem = plot.canvasManager.getCanvas(); var w = this._plotDimensions.width; var h = this._plotDimensions.height; elem.width = w; elem.height = h; this._elem = $(elem); this._elem.addClass('jqplot-grid-canvas'); this._elem.css({ position: 'absolute', left: 0, top: 0 }); elem = plot.canvasManager.initCanvas(elem); this._top = this._offsets.top; this._bottom = h - this._offsets.bottom; this._left = this._offsets.left; this._right = w - this._offsets.right; this._width = this._right - this._left; this._height = this._bottom - this._top; // avoid memory leak elem = null; return this._elem; }; $.jqplot.CanvasGridRenderer.prototype.draw = function() { this._ctx = this._elem.get(0).getContext("2d"); var ctx = this._ctx; var axes = this._axes; // Add the grid onto the grid canvas. This is the bottom most layer. ctx.save(); ctx.clearRect(0, 0, this._plotDimensions.width, this._plotDimensions.height); ctx.fillStyle = this.backgroundColor || this.background; ctx.fillRect(this._left, this._top, this._width, this._height); ctx.save(); ctx.lineJoin = 'miter'; ctx.lineCap = 'butt'; ctx.lineWidth = this.gridLineWidth; ctx.strokeStyle = this.gridLineColor; var b, e, s, m; var ax = ['xaxis', 'yaxis', 'x2axis', 'y2axis']; for (var i=4; i>0; i--) { var name = ax[i-1]; var axis = axes[name]; var ticks = axis._ticks; var numticks = ticks.length; if (axis.show) { if (axis.drawBaseline) { var bopts = {}; if (axis.baselineWidth !== null) { bopts.lineWidth = axis.baselineWidth; } if (axis.baselineColor !== null) { bopts.strokeStyle = axis.baselineColor; } switch (name) { case 'xaxis': drawLine (this._left, this._bottom, this._right, this._bottom, bopts); break; case 'yaxis': drawLine (this._left, this._bottom, this._left, this._top, bopts); break; case 'x2axis': drawLine (this._left, this._bottom, this._right, this._bottom, bopts); break; case 'y2axis': drawLine (this._right, this._bottom, this._right, this._top, bopts); break; } } for (var j=numticks; j>0; j--) { var t = ticks[j-1]; if (t.show) { var pos = Math.round(axis.u2p(t.value)) + 0.5; switch (name) { case 'xaxis': // draw the grid line if we should if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) { drawLine(pos, this._top, pos, this._bottom); } // draw the mark if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) { s = t.markSize; m = t.mark; var pos = Math.round(axis.u2p(t.value)) + 0.5; switch (m) { case 'outside': b = this._bottom; e = this._bottom+s; break; case 'inside': b = this._bottom-s; e = this._bottom; break; case 'cross': b = this._bottom-s; e = this._bottom+s; break; default: b = this._bottom; e = this._bottom+s; break; } // draw the shadow if (this.shadow) { this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false}); } // draw the line drawLine(pos, b, pos, e); } break; case 'yaxis': // draw the grid line if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) { drawLine(this._right, pos, this._left, pos); } // draw the mark if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) { s = t.markSize; m = t.mark; var pos = Math.round(axis.u2p(t.value)) + 0.5; switch (m) { case 'outside': b = this._left-s; e = this._left; break; case 'inside': b = this._left; e = this._left+s; break; case 'cross': b = this._left-s; e = this._left+s; break; default: b = this._left-s; e = this._left; break; } // draw the shadow if (this.shadow) { this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false}); } drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor}); } break; case 'x2axis': // draw the grid line if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) { drawLine(pos, this._bottom, pos, this._top); } // draw the mark if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) { s = t.markSize; m = t.mark; var pos = Math.round(axis.u2p(t.value)) + 0.5; switch (m) { case 'outside': b = this._top-s; e = this._top; break; case 'inside': b = this._top; e = this._top+s; break; case 'cross': b = this._top-s; e = this._top+s; break; default: b = this._top-s; e = this._top; break; } // draw the shadow if (this.shadow) { this.renderer.shadowRenderer.draw(ctx, [[pos,b],[pos,e]], {lineCap:'butt', lineWidth:this.gridLineWidth, offset:this.gridLineWidth*0.75, depth:2, fill:false, closePath:false}); } drawLine(pos, b, pos, e); } break; case 'y2axis': // draw the grid line if (t.showGridline && this.drawGridlines && ((!t.isMinorTick && axis.drawMajorGridlines) || (t.isMinorTick && axis.drawMinorGridlines)) ) { drawLine(this._left, pos, this._right, pos); } // draw the mark if (t.showMark && t.mark && ((!t.isMinorTick && axis.drawMajorTickMarks) || (t.isMinorTick && axis.drawMinorTickMarks)) ) { s = t.markSize; m = t.mark; var pos = Math.round(axis.u2p(t.value)) + 0.5; switch (m) { case 'outside': b = this._right; e = this._right+s; break; case 'inside': b = this._right-s; e = this._right; break; case 'cross': b = this._right-s; e = this._right+s; break; default: b = this._right; e = this._right+s; break; } // draw the shadow if (this.shadow) { this.renderer.shadowRenderer.draw(ctx, [[b, pos], [e, pos]], {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false}); } drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor}); } break; default: break; } } } t = null; } axis = null; ticks = null; } // Now draw grid lines for additional y axes ////// // TO DO: handle yMidAxis ////// ax = ['y3axis', 'y4axis', 'y5axis', 'y6axis', 'y7axis', 'y8axis', 'y9axis', 'yMidAxis']; for (var i=7; i>0; i--) { var axis = axes[ax[i-1]]; var ticks = axis._ticks; if (axis.show) { var tn = ticks[axis.numberTicks-1]; var t0 = ticks[0]; var left = axis.getLeft(); var points = [[left, tn.getTop() + tn.getHeight()/2], [left, t0.getTop() + t0.getHeight()/2 + 1.0]]; // draw the shadow if (this.shadow) { this.renderer.shadowRenderer.draw(ctx, points, {lineCap:'butt', fill:false, closePath:false}); } // draw the line drawLine(points[0][0], points[0][1], points[1][0], points[1][1], {lineCap:'butt', strokeStyle:axis.borderColor, lineWidth:axis.borderWidth}); // draw the tick marks for (var j=ticks.length; j>0; j--) { var t = ticks[j-1]; s = t.markSize; m = t.mark; var pos = Math.round(axis.u2p(t.value)) + 0.5; if (t.showMark && t.mark) { switch (m) { case 'outside': b = left; e = left+s; break; case 'inside': b = left-s; e = left; break; case 'cross': b = left-s; e = left+s; break; default: b = left; e = left+s; break; } points = [[b,pos], [e,pos]]; // draw the shadow if (this.shadow) { this.renderer.shadowRenderer.draw(ctx, points, {lineCap:'butt', lineWidth:this.gridLineWidth*1.5, offset:this.gridLineWidth*0.75, fill:false, closePath:false}); } // draw the line drawLine(b, pos, e, pos, {strokeStyle:axis.borderColor}); } t = null; } t0 = null; } axis = null; ticks = null; } ctx.restore(); function drawLine(bx, by, ex, ey, opts) { ctx.save(); opts = opts || {}; if (opts.lineWidth == null || opts.lineWidth != 0){ $.extend(true, ctx, opts); ctx.beginPath(); ctx.moveTo(bx, by); ctx.lineTo(ex, ey); ctx.stroke(); ctx.restore(); } } if (this.shadow) { var points = [[this._left, this._bottom], [this._right, this._bottom], [this._right, this._top]]; this.renderer.shadowRenderer.draw(ctx, points); } // Now draw border around grid. Use axis border definitions. start at // upper left and go clockwise. if (this.borderWidth != 0 && this.drawBorder) { drawLine (this._left, this._top, this._right, this._top, {lineCap:'round', strokeStyle:axes.x2axis.borderColor, lineWidth:axes.x2axis.borderWidth}); drawLine (this._right, this._top, this._right, this._bottom, {lineCap:'round', strokeStyle:axes.y2axis.borderColor, lineWidth:axes.y2axis.borderWidth}); drawLine (this._right, this._bottom, this._left, this._bottom, {lineCap:'round', strokeStyle:axes.xaxis.borderColor, lineWidth:axes.xaxis.borderWidth}); drawLine (this._left, this._bottom, this._left, this._top, {lineCap:'round', strokeStyle:axes.yaxis.borderColor, lineWidth:axes.yaxis.borderWidth}); } // ctx.lineWidth = this.borderWidth; // ctx.strokeStyle = this.borderColor; // ctx.strokeRect(this._left, this._top, this._width, this._height); ctx.restore(); ctx = null; axes = null; }; // Class: $.jqplot.DivTitleRenderer // The default title renderer for jqPlot. This class has no options beyond the <Title> class. $.jqplot.DivTitleRenderer = function() { }; $.jqplot.DivTitleRenderer.prototype.init = function(options) { $.extend(true, this, options); }; $.jqplot.DivTitleRenderer.prototype.draw = function() { // Memory Leaks patch if (this._elem) { this._elem.emptyForce(); this._elem = null; } var r = this.renderer; var elem = document.createElement('div'); this._elem = $(elem); this._elem.addClass('jqplot-title'); if (!this.text) { this.show = false; this._elem.height(0); this._elem.width(0); } else if (this.text) { var color; if (this.color) { color = this.color; } else if (this.textColor) { color = this.textColor; } // don't trust that a stylesheet is present, set the position. var styles = {position:'absolute', top:'0px', left:'0px'}; if (this._plotWidth) { styles['width'] = this._plotWidth+'px'; } if (this.fontSize) { styles['fontSize'] = this.fontSize; } if (typeof this.textAlign === 'string') { styles['textAlign'] = this.textAlign; } else { styles['textAlign'] = 'center'; } if (color) { styles['color'] = color; } if (this.paddingBottom) { styles['paddingBottom'] = this.paddingBottom; } if (this.fontFamily) { styles['fontFamily'] = this.fontFamily; } this._elem.css(styles); if (this.escapeHtml) { this._elem.text(this.text); } else { this._elem.html(this.text); } // styletext += (this._plotWidth) ? 'width:'+this._plotWidth+'px;' : ''; // styletext += (this.fontSize) ? 'font-size:'+this.fontSize+';' : ''; // styletext += (this.textAlign) ? 'text-align:'+this.textAlign+';' : 'text-align:center;'; // styletext += (color) ? 'color:'+color+';' : ''; // styletext += (this.paddingBottom) ? 'padding-bottom:'+this.paddingBottom+';' : ''; // this._elem = $('<div class="jqplot-title" style="'+styletext+'">'+this.text+'</div>'); // if (this.fontFamily) { // this._elem.css('font-family', this.fontFamily); // } } elem = null; return this._elem; }; $.jqplot.DivTitleRenderer.prototype.pack = function() { // nothing to do here }; var dotlen = 0.1; $.jqplot.LinePattern = function (ctx, pattern) { var defaultLinePatterns = { dotted: [ dotlen, $.jqplot.config.dotGapLength ], dashed: [ $.jqplot.config.dashLength, $.jqplot.config.gapLength ], solid: null }; if (typeof pattern === 'string') { if (pattern[0] === '.' || pattern[0] === '-') { var s = pattern; pattern = []; for (var i=0, imax=s.length; i<imax; i++) { if (s[i] === '.') { pattern.push( dotlen ); } else if (s[i] === '-') { pattern.push( $.jqplot.config.dashLength ); } else { continue; } pattern.push( $.jqplot.config.gapLength ); } } else { pattern = defaultLinePatterns[pattern]; } } if (!(pattern && pattern.length)) { return ctx; } var patternIndex = 0; var patternDistance = pattern[0]; var px = 0; var py = 0; var pathx0 = 0; var pathy0 = 0; var moveTo = function (x, y) { ctx.moveTo( x, y ); px = x; py = y; pathx0 = x; pathy0 = y; }; var lineTo = function (x, y) { var scale = ctx.lineWidth; var dx = x - px; var dy = y - py; var dist = Math.sqrt(dx*dx+dy*dy); if ((dist > 0) && (scale > 0)) { dx /= dist; dy /= dist; while (true) { var dp = scale * patternDistance; if (dp < dist) { px += dp * dx; py += dp * dy; if ((patternIndex & 1) == 0) { ctx.lineTo( px, py ); } else { ctx.moveTo( px, py ); } dist -= dp; patternIndex++; if (patternIndex >= pattern.length) { patternIndex = 0; } patternDistance = pattern[patternIndex]; } else { px = x; py = y; if ((patternIndex & 1) == 0) { ctx.lineTo( px, py ); } else { ctx.moveTo( px, py ); } patternDistance -= dist / scale; break; } } } }; var beginPath = function () { ctx.beginPath(); }; var closePath = function () { lineTo( pathx0, pathy0 ); }; return { moveTo: moveTo, lineTo: lineTo, beginPath: beginPath, closePath: closePath }; }; // Class: $.jqplot.LineRenderer // The default line renderer for jqPlot, this class has no options beyond the <Series> class. // Draws series as a line. $.jqplot.LineRenderer = function(){ this.shapeRenderer = new $.jqplot.ShapeRenderer(); this.shadowRenderer = new $.jqplot.ShadowRenderer(); }; // called with scope of series. $.jqplot.LineRenderer.prototype.init = function(options, plot) { // Group: Properties // options = options || {}; this._type='line'; this.renderer.animation = { show: false, direction: 'left', speed: 2500, _supported: true }; // prop: smooth // True to draw a smoothed (interpolated) line through the data points // with automatically computed number of smoothing points. // Set to an integer number > 2 to specify number of smoothing points // to use between each data point. this.renderer.smooth = false; // true or a number > 2 for smoothing. this.renderer.tension = null; // null to auto compute or a number typically > 6. Fewer points requires higher tension. // prop: constrainSmoothing // True to use a more accurate smoothing algorithm that will // not overshoot any data points. False to allow overshoot but // produce a smoother looking line. this.renderer.constrainSmoothing = true; // this is smoothed data in grid coordinates, like gridData this.renderer._smoothedData = []; // this is smoothed data in plot units (plot coordinates), like plotData. this.renderer._smoothedPlotData = []; this.renderer._hiBandGridData = []; this.renderer._lowBandGridData = []; this.renderer._hiBandSmoothedData = []; this.renderer._lowBandSmoothedData = []; // prop: bandData // Data used to draw error bands or confidence intervals above/below a line. // // bandData can be input in 3 forms. jqPlot will figure out which is the // low band line and which is the high band line for all forms: // // A 2 dimensional array like [[yl1, yl2, ...], [yu1, yu2, ...]] where // [yl1, yl2, ...] are y values of the lower line and // [yu1, yu2, ...] are y values of the upper line. // In this case there must be the same number of y data points as data points // in the series and the bands will inherit the x values of the series. // // A 2 dimensional array like [[[xl1, yl1], [xl2, yl2], ...], [[xh1, yh1], [xh2, yh2], ...]] // where [xl1, yl1] are x,y data points for the lower line and // [xh1, yh1] are x,y data points for the high line. // x values do not have to correspond to the x values of the series and can // be of any arbitrary length. // // Can be of form [[yl1, yu1], [yl2, yu2], [yl3, yu3], ...] where // there must be 3 or more arrays and there must be the same number of arrays // as there are data points in the series. In this case, // [yl1, yu1] specifies the lower and upper y values for the 1st // data point and so on. The bands will inherit the x // values from the series. this.renderer.bandData = []; // Group: bands // Banding around line, e.g error bands or confidence intervals. this.renderer.bands = { // prop: show // true to show the bands. If bandData or interval is // supplied, show will be set to true by default. show: false, hiData: [], lowData: [], // prop: color // color of lines at top and bottom of bands [default: series color]. color: this.color, // prop: showLines // True to show lines at top and bottom of bands [default: false]. showLines: false, // prop: fill // True to fill area between bands [default: true]. fill: true, // prop: fillColor // css color spec for filled area. [default: series color]. fillColor: null, _min: null, _max: null, // prop: interval // User specified interval above and below line for bands [default: '3%'']. // Can be a value like 3 or a string like '3%' // or an upper/lower array like [1, -2] or ['2%', '-1.5%'] interval: '3%' }; var lopts = {highlightMouseOver: options.highlightMouseOver, highlightMouseDown: options.highlightMouseDown, highlightColor: options.highlightColor}; delete (options.highlightMouseOver); delete (options.highlightMouseDown); delete (options.highlightColor); $.extend(true, this.renderer, options); this.renderer.options = options; // if we are given some band data, and bands aren't explicity set to false in options, turn them on. if (this.renderer.bandData.length > 1 && (!options.bands || options.bands.show == null)) { this.renderer.bands.show = true; } // if we are given an interval, and bands aren't explicity set to false in options, turn them on. else if (options.bands && options.bands.show == null && options.bands.interval != null) { this.renderer.bands.show = true; } // if plot is filled, turn off bands. if (this.fill) { this.renderer.bands.show = false; } if (this.renderer.bands.show) { this.renderer.initBands.call(this, this.renderer.options, plot); } // smoothing is not compatible with stacked lines, disable if (this._stack) { this.renderer.smooth = false; } // set the shape renderer options var opts = {lineJoin:this.lineJoin, lineCap:this.lineCap, fill:this.fill, isarc:false, strokeStyle:this.color, fillStyle:this.fillColor, lineWidth:this.lineWidth, linePattern:this.linePattern, closePath:this.fill}; this.renderer.shapeRenderer.init(opts); var shadow_offset = options.shadowOffset; // set the shadow renderer options if (shadow_offset == null) { // scale the shadowOffset to the width of the line. if (this.lineWidth > 2.5) { shadow_offset = 1.25 * (1 + (Math.atan((this.lineWidth/2.5))/0.785398163 - 1)*0.6); // var shadow_offset = this.shadowOffset; } // for skinny lines, don't make such a big shadow. else { shadow_offset = 1.25 * Math.atan((this.lineWidth/2.5))/0.785398163; } } var sopts = {lineJoin:this.lineJoin, lineCap:this.lineCap, fill:this.fill, isarc:false, angle:this.shadowAngle, offset:shadow_offset, alpha:this.shadowAlpha, depth:this.shadowDepth, lineWidth:this.lineWidth, linePattern:this.linePattern, closePath:this.fill}; this.renderer.shadowRenderer.init(sopts); this._areaPoints = []; this._boundingBox = [[],[]]; if (!this.isTrendline && this.fill || this.renderer.bands.show) { // Group: Properties // // prop: highlightMouseOver // True to highlight area on a filled plot when moused over. // This must be false to enable highlightMouseDown to highlight when clicking on an area on a filled plot. this.highlightMouseOver = true; // prop: highlightMouseDown // True to highlight when a mouse button is pressed over an area on a filled plot. // This will be disabled if highlightMouseOver is true. this.highlightMouseDown = false; // prop: highlightColor // color to use when highlighting an area on a filled plot. this.highlightColor = null; // if user has passed in highlightMouseDown option and not set highlightMouseOver, disable highlightMouseOver if (lopts.highlightMouseDown && lopts.highlightMouseOver == null) { lopts.highlightMouseOver = false; } $.extend(true, this, {highlightMouseOver: lopts.highlightMouseOver, highlightMouseDown: lopts.highlightMouseDown, highlightColor: lopts.highlightColor}); if (!this.highlightColor) { var fc = (this.renderer.bands.show) ? this.renderer.bands.fillColor : this.fillColor; this.highlightColor = $.jqplot.computeHighlightColors(fc); } // turn off (disable) the highlighter plugin if (this.highlighter) { this.highlighter.show = false; } } if (!this.isTrendline && plot) { plot.plugins.lineRenderer = {}; plot.postInitHooks.addOnce(postInit); plot.postDrawHooks.addOnce(postPlotDraw); plot.eventListenerHooks.addOnce('jqplotMouseMove', handleMove); plot.eventListenerHooks.addOnce('jqplotMouseDown', handleMouseDown); plot.eventListenerHooks.addOnce('jqplotMouseUp', handleMouseUp); plot.eventListenerHooks.addOnce('jqplotClick', handleClick); plot.eventListenerHooks.addOnce('jqplotRightClick', handleRightClick); } }; $.jqplot.LineRenderer.prototype.initBands = function(options, plot) { // use bandData if no data specified in bands option //var bd = this.renderer.bandData; var bd = options.bandData || []; var bands = this.renderer.bands; bands.hiData = []; bands.lowData = []; var data = this.data; bands._max = null; bands._min = null; // If 2 arrays, and each array greater than 2 elements, assume it is hi and low data bands of y values. if (bd.length == 2) { // Do we have an array of x,y values? // like [[[1,1], [2,4], [3,3]], [[1,3], [2,6], [3,5]]] if ($.isArray(bd[0][0])) { // since an arbitrary array of points, spin through all of them to determine max and min lines. var p; var bdminidx = 0, bdmaxidx = 0; for (var i = 0, l = bd[0].length; i<l; i++) { p = bd[0][i]; if ((p[1] != null && p[1] > bands._max) || bands._max == null) { bands._max = p[1]; } if ((p[1] != null && p[1] < bands._min) || bands._min == null) { bands._min = p[1]; } } for (var i = 0, l = bd[1].length; i<l; i++) { p = bd[1][i]; if ((p[1] != null && p[1] > bands._max) || bands._max == null) { bands._max = p[1]; bdmaxidx = 1; } if ((p[1] != null && p[1] < bands._min) || bands._min == null) { bands._min = p[1]; bdminidx = 1; } } if (bdmaxidx === bdminidx) { bands.show = false; } bands.hiData = bd[bdmaxidx]; bands.lowData = bd[bdminidx]; } // else data is arrays of y values // like [[1,4,3], [3,6,5]] // must have same number of band data points as points in series else if (bd[0].length === data.length && bd[1].length === data.length) { var hi = (bd[0][0] > bd[1][0]) ? 0 : 1; var low = (hi) ? 0 : 1; for (var i=0, l=data.length; i < l; i++) { bands.hiData.push([data[i][0], bd[hi][i]]); bands.lowData.push([data[i][0], bd[low][i]]); } } // we don't have proper data array, don't show bands. else { bands.show = false; } } // if more than 2 arrays, have arrays of [ylow, yhi] values. // note, can't distinguish case of [[ylow, yhi], [ylow, yhi]] from [[ylow, ylow], [yhi, yhi]] // this is assumed to be of the latter form. else if (bd.length > 2 && !$.isArray(bd[0][0])) { var hi = (bd[0][0] > bd[0][1]) ? 0 : 1; var low = (hi) ? 0 : 1; for (var i=0, l=bd.length; i<l; i++) { bands.hiData.push([data[i][0], bd[i][hi]]); bands.lowData.push([data[i][0], bd[i][low]]); } } // don't have proper data, auto calculate else { var intrv = bands.interval; var a = null; var b = null; var afunc = null; var bfunc = null; if ($.isArray(intrv)) { a = intrv[0]; b = intrv[1]; } else { a = intrv; } if (isNaN(a)) { // we have a string if (a.charAt(a.length - 1) === '%') { afunc = 'multiply'; a = parseFloat(a)/100 + 1; } } else { a = parseFloat(a); afunc = 'add'; } if (b !== null && isNaN(b)) { // we have a string if (b.charAt(b.length - 1) === '%') { bfunc = 'multiply'; b = parseFloat(b)/100 + 1; } } else if (b !== null) { b = parseFloat(b); bfunc = 'add'; } if (a !== null) { if (b === null) { b = -a; bfunc = afunc; if (bfunc === 'multiply') { b += 2; } } // make sure a always applies to hi band. if (a < b) { var temp = a; a = b; b = temp; temp = afunc; afunc = bfunc; bfunc = temp; } for (var i=0, l = data.length; i < l; i++) { switch (afunc) { case 'add': bands.hiData.push([data[i][0], data[i][1] + a]); break; case 'multiply': bands.hiData.push([data[i][0], data[i][1] * a]); break; } switch (bfunc) { case 'add': bands.lowData.push([data[i][0], data[i][1] + b]); break; case 'multiply': bands.lowData.push([data[i][0], data[i][1] * b]); break; } } } else { bands.show = false; } } var hd = bands.hiData; var ld = bands.lowData; for (var i = 0, l = hd.length; i<l; i++) { if ((hd[i][1] != null && hd[i][1] > bands._max) || bands._max == null) { bands._max = hd[i][1]; } } for (var i = 0, l = ld.length; i<l; i++) { if ((ld[i][1] != null && ld[i][1] < bands._min) || bands._min == null) { bands._min = ld[i][1]; } } // one last check for proper data // these don't apply any more since allowing arbitrary x,y values // if (bands.hiData.length != bands.lowData.length) { // bands.show = false; // } // if (bands.hiData.length != this.data.length) { // bands.show = false; // } if (bands.fillColor === null) { var c = $.jqplot.getColorComponents(bands.color); // now adjust alpha to differentiate fill c[3] = c[3] * 0.5; bands.fillColor = 'rgba(' + c[0] +', '+ c[1] +', '+ c[2] +', '+ c[3] + ')'; } }; function getSteps (d, f) { return (3.4182054+f) * Math.pow(d, -0.3534992); } function computeSteps (d1, d2) { var s = Math.sqrt(Math.pow((d2[0]- d1[0]), 2) + Math.pow ((d2[1] - d1[1]), 2)); return 5.7648 * Math.log(s) + 7.4456; } function tanh (x) { var a = (Math.exp(2*x) - 1) / (Math.exp(2*x) + 1); return a; } ////////// // computeConstrainedSmoothedData // An implementation of the constrained cubic spline interpolation // method as presented in: // // Kruger, CJC, Constrained Cubic Spine Interpolation for Chemical Engineering Applications // http://www.korf.co.uk/spline.pdf // // The implementation below borrows heavily from the sample Visual Basic // implementation by CJC Kruger found in http://www.korf.co.uk/spline.xls // ///////// // called with scope of series function computeConstrainedSmoothedData (gd) { var smooth = this.renderer.smooth; var dim = this.canvas.getWidth(); var xp = this._xaxis.series_p2u; var yp = this._yaxis.series_p2u; var steps =null; var _steps = null; var dist = gd.length/dim; var _smoothedData = []; var _smoothedPlotData = []; if (!isNaN(parseFloat(smooth))) { steps = parseFloat(smooth); } else { steps = getSteps(dist, 0.5); } var yy = []; var xx = []; for (var i=0, l = gd.length; i<l; i++) { yy.push(gd[i][1]); xx.push(gd[i][0]); } function dxx(x1, x0) { if (x1 - x0 == 0) { return Math.pow(10,10); } else { return x1 - x0; } } var A, B, C, D; // loop through each line segment. Have # points - 1 line segments. Nmber segments starting at 1. var nmax = gd.length - 1; for (var num = 1, gdl = gd.length; num<gdl; num++) { var gxx = []; var ggxx = []; // point at each end of segment. for (var j = 0; j < 2; j++) { var i = num - 1 + j; // point number, 0 to # points. if (i == 0 || i == nmax) { gxx[j] = Math.pow(10, 10); } else if (yy[i+1] - yy[i] == 0 || yy[i] - yy[i-1] == 0) { gxx[j] = 0; } else if (((xx[i+1] - xx[i]) / (yy[i+1] - yy[i]) + (xx[i] - xx[i-1]) / (yy[i] - yy[i-1])) == 0 ) { gxx[j] = 0; } else if ( (yy[i+1] - yy[i]) * (yy[i] - yy[i-1]) < 0 ) { gxx[j] = 0; } else { gxx[j] = 2 / (dxx(xx[i + 1], xx[i]) / (yy[i + 1] - yy[i]) + dxx(xx[i], xx[i - 1]) / (yy[i] - yy[i - 1])); } } // Reset first derivative (slope) at first and last point if (num == 1) { // First point has 0 2nd derivative gxx[0] = 3 / 2 * (yy[1] - yy[0]) / dxx(xx[1], xx[0]) - gxx[1] / 2; } else if (num == nmax) { // Last point has 0 2nd derivative gxx[1] = 3 / 2 * (yy[nmax] - yy[nmax - 1]) / dxx(xx[nmax], xx[nmax - 1]) - gxx[0] / 2; } // Calc second derivative at points ggxx[0] = -2 * (gxx[1] + 2 * gxx[0]) / dxx(xx[num], xx[num - 1]) + 6 * (yy[num] - yy[num - 1]) / Math.pow(dxx(xx[num], xx[num - 1]), 2); ggxx[1] = 2 * (2 * gxx[1] + gxx[0]) / dxx(xx[num], xx[num - 1]) - 6 * (yy[num] - yy[num - 1]) / Math.pow(dxx(xx[num], xx[num - 1]), 2); // Calc constants for cubic interpolation D = 1 / 6 * (ggxx[1] - ggxx[0]) / dxx(xx[num], xx[num - 1]); C = 1 / 2 * (xx[num] * ggxx[0] - xx[num - 1] * ggxx[1]) / dxx(xx[num], xx[num - 1]); B = (yy[num] - yy[num - 1] - C * (Math.pow(xx[num], 2) - Math.pow(xx[num - 1], 2)) - D * (Math.pow(xx[num], 3) - Math.pow(xx[num - 1], 3))) / dxx(xx[num], xx[num - 1]); A = yy[num - 1] - B * xx[num - 1] - C * Math.pow(xx[num - 1], 2) - D * Math.pow(xx[num - 1], 3); var increment = (xx[num] - xx[num - 1]) / steps; var temp, tempx; for (var j = 0, l = steps; j < l; j++) { temp = []; tempx = xx[num - 1] + j * increment; temp.push(tempx); temp.push(A + B * tempx + C * Math.pow(tempx, 2) + D * Math.pow(tempx, 3)); _smoothedData.push(temp); _smoothedPlotData.push([xp(temp[0]), yp(temp[1])]); } } _smoothedData.push(gd[i]); _smoothedPlotData.push([xp(gd[i][0]), yp(gd[i][1])]); return [_smoothedData, _smoothedPlotData]; } /////// // computeHermiteSmoothedData // A hermite spline smoothing of the plot data. // This implementation is derived from the one posted // by krypin on the jqplot-users mailing list: // // http://groups.google.com/group/jqplot-users/browse_thread/thread/748be6a445723cea?pli=1 // // with a blog post: // // http://blog.statscollector.com/a-plugin-renderer-for-jqplot-to-draw-a-hermite-spline/ // // and download of the original plugin: // // http://blog.statscollector.com/wp-content/uploads/2010/02/jqplot.hermiteSplineRenderer.js ////////// // called with scope of series function computeHermiteSmoothedData (gd) { var smooth = this.renderer.smooth; var tension = this.renderer.tension; var dim = this.canvas.getWidth(); var xp = this._xaxis.series_p2u; var yp = this._yaxis.series_p2u; var steps =null; var _steps = null; var a = null; var a1 = null; var a2 = null; var slope = null; var slope2 = null; var temp = null; var t, s, h1, h2, h3, h4; var TiX, TiY, Ti1X, Ti1Y; var pX, pY, p; var sd = []; var spd = []; var dist = gd.length/dim; var min, max, stretch, scale, shift; var _smoothedData = []; var _smoothedPlotData = []; if (!isNaN(parseFloat(smooth))) { steps = parseFloat(smooth); } else { steps = getSteps(dist, 0.5); } if (!isNaN(parseFloat(tension))) { tension = parseFloat(tension); } for (var i=0, l = gd.length-1; i < l; i++) { if (tension === null) { slope = Math.abs((gd[i+1][1] - gd[i][1]) / (gd[i+1][0] - gd[i][0])); min = 0.3; max = 0.6; stretch = (max - min)/2.0; scale = 2.5; shift = -1.4; temp = slope/scale + shift; a1 = stretch * tanh(temp) - stretch * tanh(shift) + min; // if have both left and right line segments, will use minimum tension. if (i > 0) { slope2 = Math.abs((gd[i][1] - gd[i-1][1]) / (gd[i][0] - gd[i-1][0])); } temp = slope2/scale + shift; a2 = stretch * tanh(temp) - stretch * tanh(shift) + min; a = (a1 + a2)/2.0; } else { a = tension; } for (t=0; t < steps; t++) { s = t / steps; h1 = (1 + 2*s)*Math.pow((1-s),2); h2 = s*Math.pow((1-s),2); h3 = Math.pow(s,2)*(3-2*s); h4 = Math.pow(s,2)*(s-1); if (gd[i-1]) { TiX = a * (gd[i+1][0] - gd[i-1][0]); TiY = a * (gd[i+1][1] - gd[i-1][1]); } else { TiX = a * (gd[i+1][0] - gd[i][0]); TiY = a * (gd[i+1][1] - gd[i][1]); } if (gd[i+2]) { Ti1X = a * (gd[i+2][0] - gd[i][0]); Ti1Y = a * (gd[i+2][1] - gd[i][1]); } else { Ti1X = a * (gd[i+1][0] - gd[i][0]); Ti1Y = a * (gd[i+1][1] - gd[i][1]); } pX = h1*gd[i][0] + h3*gd[i+1][0] + h2*TiX + h4*Ti1X; pY = h1*gd[i][1] + h3*gd[i+1][1] + h2*TiY + h4*Ti1Y; p = [pX, pY]; _smoothedData.push(p); _smoothedPlotData.push([xp(pX), yp(pY)]); } } _smoothedData.push(gd[l]); _smoothedPlotData.push([xp(gd[l][0]), yp(gd[l][1])]); return [_smoothedData, _smoothedPlotData]; } // setGridData // converts the user data values to grid coordinates and stores them // in the gridData array. // Called with scope of a series. $.jqplot.LineRenderer.prototype.setGridData = function(plot) { // recalculate the grid data var xp = this._xaxis.series_u2p; var yp = this._yaxis.series_u2p; var data = this._plotData; var pdata = this._prevPlotData; this.gridData = []; this._prevGridData = []; this.renderer._smoothedData = []; this.renderer._smoothedPlotData = []; this.renderer._hiBandGridData = []; this.renderer._lowBandGridData = []; this.renderer._hiBandSmoothedData = []; this.renderer._lowBandSmoothedData = []; var bands = this.renderer.bands; var hasNull = false; for (var i=0, l=data.length; i < l; i++) { // if not a line series or if no nulls in data, push the converted point onto the array. if (data[i][0] != null && data[i][1] != null) { this.gridData.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1])]); } // else if there is a null, preserve it. else if (data[i][0] == null) { hasNull = true; this.gridData.push([null, yp.call(this._yaxis, data[i][1])]); } else if (data[i][1] == null) { hasNull = true; this.gridData.push([xp.call(this._xaxis, data[i][0]), null]); } // if not a line series or if no nulls in data, push the converted point onto the array. if (pdata[i] != null && pdata[i][0] != null && pdata[i][1] != null) { this._prevGridData.push([xp.call(this._xaxis, pdata[i][0]), yp.call(this._yaxis, pdata[i][1])]); } // else if there is a null, preserve it. else if (pdata[i] != null && pdata[i][0] == null) { this._prevGridData.push([null, yp.call(this._yaxis, pdata[i][1])]); } else if (pdata[i] != null && pdata[i][0] != null && pdata[i][1] == null) { this._prevGridData.push([xp.call(this._xaxis, pdata[i][0]), null]); } } // don't do smoothing or bands on broken lines. if (hasNull) { this.renderer.smooth = false; if (this._type === 'line') { bands.show = false; } } if (this._type === 'line' && bands.show) { for (var i=0, l=bands.hiData.length; i<l; i++) { this.renderer._hiBandGridData.push([xp.call(this._xaxis, bands.hiData[i][0]), yp.call(this._yaxis, bands.hiData[i][1])]); } for (var i=0, l=bands.lowData.length; i<l; i++) { this.renderer._lowBandGridData.push([xp.call(this._xaxis, bands.lowData[i][0]), yp.call(this._yaxis, bands.lowData[i][1])]); } } // calculate smoothed data if enough points and no nulls if (this._type === 'line' && this.renderer.smooth && this.gridData.length > 2) { var ret; if (this.renderer.constrainSmoothing) { ret = computeConstrainedSmoothedData.call(this, this.gridData); this.renderer._smoothedData = ret[0]; this.renderer._smoothedPlotData = ret[1]; if (bands.show) { ret = computeConstrainedSmoothedData.call(this, this.renderer._hiBandGridData); this.renderer._hiBandSmoothedData = ret[0]; ret = computeConstrainedSmoothedData.call(this, this.renderer._lowBandGridData); this.renderer._lowBandSmoothedData = ret[0]; } ret = null; } else { ret = computeHermiteSmoothedData.call(this, this.gridData); this.renderer._smoothedData = ret[0]; this.renderer._smoothedPlotData = ret[1]; if (bands.show) { ret = computeHermiteSmoothedData.call(this, this.renderer._hiBandGridData); this.renderer._hiBandSmoothedData = ret[0]; ret = computeHermiteSmoothedData.call(this, this.renderer._lowBandGridData); this.renderer._lowBandSmoothedData = ret[0]; } ret = null; } } }; // makeGridData // converts any arbitrary data values to grid coordinates and // returns them. This method exists so that plugins can use a series' // linerenderer to generate grid data points without overwriting the // grid data associated with that series. // Called with scope of a series. $.jqplot.LineRenderer.prototype.makeGridData = function(data, plot) { // recalculate the grid data var xp = this._xaxis.series_u2p; var yp = this._yaxis.series_u2p; var gd = []; var pgd = []; this.renderer._smoothedData = []; this.renderer._smoothedPlotData = []; this.renderer._hiBandGridData = []; this.renderer._lowBandGridData = []; this.renderer._hiBandSmoothedData = []; this.renderer._lowBandSmoothedData = []; var bands = this.renderer.bands; var hasNull = false; for (var i=0; i<data.length; i++) { // if not a line series or if no nulls in data, push the converted point onto the array. if (data[i][0] != null && data[i][1] != null) { gd.push([xp.call(this._xaxis, data[i][0]), yp.call(this._yaxis, data[i][1])]); } // else if there is a null, preserve it. else if (data[i][0] == null) { hasNull = true; gd.push([null, yp.call(this._yaxis, data[i][1])]); } else if (data[i][1] == null) { hasNull = true; gd.push([xp.call(this._xaxis, data[i][0]), null]); } } // don't do smoothing or bands on broken lines. if (hasNull) { this.renderer.smooth = false; if (this._type === 'line') { bands.show = false; } } if (this._type === 'line' && bands.show) { for (var i=0, l=bands.hiData.length; i<l; i++) { this.renderer._hiBandGridData.push([xp.call(this._xaxis, bands.hiData[i][0]), yp.call(this._yaxis, bands.hiData[i][1])]); } for (var i=0, l=bands.lowData.length; i<l; i++) { this.renderer._lowBandGridData.push([xp.call(this._xaxis, bands.lowData[i][0]), yp.call(this._yaxis, bands.lowData[i][1])]); } } if (this._type === 'line' && this.renderer.smooth && gd.length > 2) { var ret; if (this.renderer.constrainSmoothing) { ret = computeConstrainedSmoothedData.call(this, gd); this.renderer._smoothedData = ret[0]; this.renderer._smoothedPlotData = ret[1]; if (bands.show) { ret = computeConstrainedSmoothedData.call(this, this.renderer._hiBandGridData); this.renderer._hiBandSmoothedData = ret[0]; ret = computeConstrainedSmoothedData.call(this, this.renderer._lowBandGridData); this.renderer._lowBandSmoothedData = ret[0]; } ret = null; } else { ret = computeHermiteSmoothedData.call(this, gd); this.renderer._smoothedData = ret[0]; this.renderer._smoothedPlotData = ret[1]; if (bands.show) { ret = computeHermiteSmoothedData.call(this, this.renderer._hiBandGridData); this.renderer._hiBandSmoothedData = ret[0]; ret = computeHermiteSmoothedData.call(this, this.renderer._lowBandGridData); this.renderer._lowBandSmoothedData = ret[0]; } ret = null; } } return gd; }; // called within scope of series. $.jqplot.LineRenderer.prototype.draw = function(ctx, gd, options, plot) { var i; // get a copy of the options, so we don't modify the original object. var opts = $.extend(true, {}, options); var shadow = (opts.shadow != undefined) ? opts.shadow : this.shadow; var showLine = (opts.showLine != undefined) ? opts.showLine : this.showLine; var fill = (opts.fill != undefined) ? opts.fill : this.fill; var fillAndStroke = (opts.fillAndStroke != undefined) ? opts.fillAndStroke : this.fillAndStroke; var xmin, ymin, xmax, ymax; ctx.save(); if (gd.length) { if (showLine) { // if we fill, we'll have to add points to close the curve. if (fill) { if (this.fillToZero) { // have to break line up into shapes at axis crossings var negativeColor = this.negativeColor; if (! this.useNegativeColors) { negativeColor = opts.fillStyle; } var isnegative = false; var posfs = opts.fillStyle; // if stoking line as well as filling, get a copy of line data. if (fillAndStroke) { var fasgd = gd.slice(0); } // if not stacked, fill down to axis if (this.index == 0 || !this._stack) { var tempgd = []; var pd = (this.renderer.smooth) ? this.renderer._smoothedPlotData : this._plotData; this._areaPoints = []; var pyzero = this._yaxis.series_u2p(this.fillToValue); var pxzero = this._xaxis.series_u2p(this.fillToValue); opts.closePath = true; if (this.fillAxis == 'y') { tempgd.push([gd[0][0], pyzero]); this._areaPoints.push([gd[0][0], pyzero]); for (var i=0; i<gd.length-1; i++) { tempgd.push(gd[i]); this._areaPoints.push(gd[i]); // do we have an axis crossing? if (pd[i][1] * pd[i+1][1] <= 0) { if (pd[i][1] < 0) { isnegative = true; opts.fillStyle = negativeColor; } else { isnegative = false; opts.fillStyle = posfs; } var xintercept = gd[i][0] + (gd[i+1][0] - gd[i][0]) * (pyzero-gd[i][1])/(gd[i+1][1] - gd[i][1]); tempgd.push([xintercept, pyzero]); this._areaPoints.push([xintercept, pyzero]); // now draw this shape and shadow. if (shadow) { this.renderer.shadowRenderer.draw(ctx, tempgd, opts); } this.renderer.shapeRenderer.draw(ctx, tempgd, opts); // now empty temp array and continue tempgd = [[xintercept, pyzero]]; // this._areaPoints = [[xintercept, pyzero]]; } } if (pd[gd.length-1][1] < 0) { isnegative = true; opts.fillStyle = negativeColor; } else { isnegative = false; opts.fillStyle = posfs; } tempgd.push(gd[gd.length-1]); this._areaPoints.push(gd[gd.length-1]); tempgd.push([gd[gd.length-1][0], pyzero]); this._areaPoints.push([gd[gd.length-1][0], pyzero]); } // now draw the last area. if (shadow) { this.renderer.shadowRenderer.draw(ctx, tempgd, opts); } this.renderer.shapeRenderer.draw(ctx, tempgd, opts); // var gridymin = this._yaxis.series_u2p(0); // // IE doesn't return new length on unshift // gd.unshift([gd[0][0], gridymin]); // len = gd.length; // gd.push([gd[len - 1][0], gridymin]); } // if stacked, fill to line below else { var prev = this._prevGridData; for (var i=prev.length; i>0; i--) { gd.push(prev[i-1]); // this._areaPoints.push(prev[i-1]); } if (shadow) { this.renderer.shadowRenderer.draw(ctx, gd, opts); } this._areaPoints = gd; this.renderer.shapeRenderer.draw(ctx, gd, opts); } } ///////////////////////// // Not filled to zero //////////////////////// else { // if stoking line as well as filling, get a copy of line data. if (fillAndStroke) { var fasgd = gd.slice(0); } // if not stacked, fill down to axis if (this.index == 0 || !this._stack) { // var gridymin = this._yaxis.series_u2p(this._yaxis.min) - this.gridBorderWidth / 2; var gridymin = ctx.canvas.height; // IE doesn't return new length on unshift gd.unshift([gd[0][0], gridymin]); var len = gd.length; gd.push([gd[len - 1][0], gridymin]); } // if stacked, fill to line below else { var prev = this._prevGridData; for (var i=prev.length; i>0; i--) { gd.push(prev[i-1]); } } this._areaPoints = gd; if (shadow) { this.renderer.shadowRenderer.draw(ctx, gd, opts); } this.renderer.shapeRenderer.draw(ctx, gd, opts); } if (fillAndStroke) { var fasopts = $.extend(true, {}, opts, {fill:false, closePath:false}); this.renderer.shapeRenderer.draw(ctx, fasgd, fasopts); ////////// // TODO: figure out some way to do shadows nicely // if (shadow) { // this.renderer.shadowRenderer.draw(ctx, fasgd, fasopts); // } // now draw the markers if (this.markerRenderer.show) { if (this.renderer.smooth) { fasgd = this.gridData; } for (i=0; i<fasgd.length; i++) { this.markerRenderer.draw(fasgd[i][0], fasgd[i][1], ctx, opts.markerOptions); } } } } else { if (this.renderer.bands.show) { var bdat; var bopts = $.extend(true, {}, opts); if (this.renderer.bands.showLines) { bdat = (this.renderer.smooth) ? this.renderer._hiBandSmoothedData : this.renderer._hiBandGridData; this.renderer.shapeRenderer.draw(ctx, bdat, opts); bdat = (this.renderer.smooth) ? this.renderer._lowBandSmoothedData : this.renderer._lowBandGridData; this.renderer.shapeRenderer.draw(ctx, bdat, bopts); } if (this.renderer.bands.fill) { if (this.renderer.smooth) { bdat = this.renderer._hiBandSmoothedData.concat(this.renderer._lowBandSmoothedData.reverse()); } else { bdat = this.renderer._hiBandGridData.concat(this.renderer._lowBandGridData.reverse()); } this._areaPoints = bdat; bopts.closePath = true; bopts.fill = true; bopts.fillStyle = this.renderer.bands.fillColor; this.renderer.shapeRenderer.draw(ctx, bdat, bopts); } } if (shadow) { this.renderer.shadowRenderer.draw(ctx, gd, opts); } this.renderer.shapeRenderer.draw(ctx, gd, opts); } } // calculate the bounding box var xmin = xmax = ymin = ymax = null; for (i=0; i<this._areaPoints.length; i++) { var p = this._areaPoints[i]; if (xmin > p[0] || xmin == null) { xmin = p[0]; } if (ymax < p[1] || ymax == null) { ymax = p[1]; } if (xmax < p[0] || xmax == null) { xmax = p[0]; } if (ymin > p[1] || ymin == null) { ymin = p[1]; } } if (this.type === 'line' && this.renderer.bands.show) { ymax = this._yaxis.series_u2p(this.renderer.bands._min); ymin = this._yaxis.series_u2p(this.renderer.bands._max); } this._boundingBox = [[xmin, ymax], [xmax, ymin]]; // now draw the markers if (this.markerRenderer.show && !fill) { if (this.renderer.smooth) { gd = this.gridData; } for (i=0; i<gd.length; i++) { if (gd[i][0] != null && gd[i][1] != null) { this.markerRenderer.draw(gd[i][0], gd[i][1], ctx, opts.markerOptions); } } } } ctx.restore(); }; $.jqplot.LineRenderer.prototype.drawShadow = function(ctx, gd, options) { // This is a no-op, shadows drawn with lines. }; // called with scope of plot. // make sure to not leave anything highlighted. function postInit(target, data, options) { for (var i=0; i<this.series.length; i++) { if (this.series[i].renderer.constructor == $.jqplot.LineRenderer) { // don't allow mouseover and mousedown at same time. if (this.series[i].highlightMouseOver) { this.series[i].highlightMouseDown = false; } } } } // called within context of plot // create a canvas which we can draw on. // insert it before the eventCanvas, so eventCanvas will still capture events. function postPlotDraw() { // Memory Leaks patch if (this.plugins.lineRenderer && this.plugins.lineRenderer.highlightCanvas) { this.plugins.lineRenderer.highlightCanvas.resetCanvas(); this.plugins.lineRenderer.highlightCanvas = null; } this.plugins.lineRenderer.highlightedSeriesIndex = null; this.plugins.lineRenderer.highlightCanvas = new $.jqplot.GenericCanvas(); this.eventCanvas._elem.before(this.plugins.lineRenderer.highlightCanvas.createElement(this._gridPadding, 'jqplot-lineRenderer-highlight-canvas', this._plotDimensions, this)); this.plugins.lineRenderer.highlightCanvas.setContext(); this.eventCanvas._elem.bind('mouseleave', {plot:this}, function (ev) { unhighlight(ev.data.plot); }); } function highlight (plot, sidx, pidx, points) { var s = plot.series[sidx]; var canvas = plot.plugins.lineRenderer.highlightCanvas; canvas._ctx.clearRect(0,0,canvas._ctx.canvas.width, canvas._ctx.canvas.height); s._highlightedPoint = pidx; plot.plugins.lineRenderer.highlightedSeriesIndex = sidx; var opts = {fillStyle: s.highlightColor}; if (s.type === 'line' && s.renderer.bands.show) { opts.fill = true; opts.closePath = true; } s.renderer.shapeRenderer.draw(canvas._ctx, points, opts); canvas = null; } function unhighlight (plot) { var canvas = plot.plugins.lineRenderer.highlightCanvas; canvas._ctx.clearRect(0,0, canvas._ctx.canvas.width, canvas._ctx.canvas.height); for (var i=0; i<plot.series.length; i++) { plot.series[i]._highlightedPoint = null; } plot.plugins.lineRenderer.highlightedSeriesIndex = null; plot.target.trigger('jqplotDataUnhighlight'); canvas = null; } function handleMove(ev, gridpos, datapos, neighbor, plot) { if (neighbor) { var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; var evt1 = jQuery.Event('jqplotDataMouseOver'); evt1.pageX = ev.pageX; evt1.pageY = ev.pageY; plot.target.trigger(evt1, ins); if (plot.series[ins[0]].highlightMouseOver && !(ins[0] == plot.plugins.lineRenderer.highlightedSeriesIndex)) { var evt = jQuery.Event('jqplotDataHighlight'); evt.which = ev.which; evt.pageX = ev.pageX; evt.pageY = ev.pageY; plot.target.trigger(evt, ins); highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points); } } else if (neighbor == null) { unhighlight (plot); } } function handleMouseDown(ev, gridpos, datapos, neighbor, plot) { if (neighbor) { var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; if (plot.series[ins[0]].highlightMouseDown && !(ins[0] == plot.plugins.lineRenderer.highlightedSeriesIndex)) { var evt = jQuery.Event('jqplotDataHighlight'); evt.which = ev.which; evt.pageX = ev.pageX; evt.pageY = ev.pageY; plot.target.trigger(evt, ins); highlight (plot, neighbor.seriesIndex, neighbor.pointIndex, neighbor.points); } } else if (neighbor == null) { unhighlight (plot); } } function handleMouseUp(ev, gridpos, datapos, neighbor, plot) { var idx = plot.plugins.lineRenderer.highlightedSeriesIndex; if (idx != null && plot.series[idx].highlightMouseDown) { unhighlight(plot); } } function handleClick(ev, gridpos, datapos, neighbor, plot) { if (neighbor) { var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; var evt = jQuery.Event('jqplotDataClick'); evt.which = ev.which; evt.pageX = ev.pageX; evt.pageY = ev.pageY; plot.target.trigger(evt, ins); } } function handleRightClick(ev, gridpos, datapos, neighbor, plot) { if (neighbor) { var ins = [neighbor.seriesIndex, neighbor.pointIndex, neighbor.data]; var idx = plot.plugins.lineRenderer.highlightedSeriesIndex; if (idx != null && plot.series[idx].highlightMouseDown) { unhighlight(plot); } var evt = jQuery.Event('jqplotDataRightClick'); evt.which = ev.which; evt.pageX = ev.pageX; evt.pageY = ev.pageY; plot.target.trigger(evt, ins); } } // class: $.jqplot.LinearAxisRenderer // The default jqPlot axis renderer, creating a numeric axis. $.jqplot.LinearAxisRenderer = function() { }; // called with scope of axis object. $.jqplot.LinearAxisRenderer.prototype.init = function(options){ // prop: breakPoints // EXPERIMENTAL!! Use at your own risk! // Works only with linear axes and the default tick renderer. // Array of [start, stop] points to create a broken axis. // Broken axes have a "jump" in them, which is an immediate // transition from a smaller value to a larger value. // Currently, axis ticks MUST be manually assigned if using breakPoints // by using the axis ticks array option. this.breakPoints = null; // prop: breakTickLabel // Label to use at the axis break if breakPoints are specified. this.breakTickLabel = "≈"; // prop: drawBaseline // True to draw the axis baseline. this.drawBaseline = true; // prop: baselineWidth // width of the baseline in pixels. this.baselineWidth = null; // prop: baselineColor // CSS color spec for the baseline. this.baselineColor = null; // prop: forceTickAt0 // This will ensure that there is always a tick mark at 0. // If data range is strictly positive or negative, // this will force 0 to be inside the axis bounds unless // the appropriate axis pad (pad, padMin or padMax) is set // to 0, then this will force an axis min or max value at 0. // This has know effect when any of the following options // are set: autoscale, min, max, numberTicks or tickInterval. this.forceTickAt0 = false; // prop: forceTickAt100 // This will ensure that there is always a tick mark at 100. // If data range is strictly above or below 100, // this will force 100 to be inside the axis bounds unless // the appropriate axis pad (pad, padMin or padMax) is set // to 0, then this will force an axis min or max value at 100. // This has know effect when any of the following options // are set: autoscale, min, max, numberTicks or tickInterval. this.forceTickAt100 = false; // prop: tickInset // Controls the amount to inset the first and last ticks from // the edges of the grid, in multiples of the tick interval. // 0 is no inset, 0.5 is one half a tick interval, 1 is a full // tick interval, etc. this.tickInset = 0; // prop: minorTicks // Number of ticks to add between "major" ticks. // Major ticks are ticks supplied by user or auto computed. // Minor ticks cannot be created by user. this.minorTicks = 0; // prop: alignTicks // true to align tick marks across opposed axes // such as from the y2axis to yaxis. this.alignTicks = false; this._autoFormatString = ''; this._overrideFormatString = false; this._scalefact = 1.0; $.extend(true, this, options); if (this.breakPoints) { if (!$.isArray(this.breakPoints)) { this.breakPoints = null; } else if (this.breakPoints.length < 2 || this.breakPoints[1] <= this.breakPoints[0]) { this.breakPoints = null; } } if (this.numberTicks != null && this.numberTicks < 2) { this.numberTicks = 2; } this.resetDataBounds(); }; // called with scope of axis $.jqplot.LinearAxisRenderer.prototype.draw = function(ctx, plot) { if (this.show) { // populate the axis label and value properties. // createTicks is a method on the renderer, but // call it within the scope of the axis. this.renderer.createTicks.call(this, plot); // fill a div with axes labels in the right direction. // Need to pregenerate each axis to get its bounds and // position it and the labels correctly on the plot. var dim=0; var temp; // Added for theming. if (this._elem) { // Memory Leaks patch //this._elem.empty(); this._elem.emptyForce(); this._elem = null; } this._elem = $(document.createElement('div')); this._elem.addClass('jqplot-axis jqplot-'+this.name); this._elem.css('position', 'absolute'); if (this.name == 'xaxis' || this.name == 'x2axis') { this._elem.width(this._plotDimensions.width); } else { this._elem.height(this._plotDimensions.height); } // create a _label object. this.labelOptions.axis = this.name; this._label = new this.labelRenderer(this.labelOptions); if (this._label.show) { var elem = this._label.draw(ctx, plot); elem.appendTo(this._elem); elem = null; } var t = this._ticks; var tick; for (var i=0; i<t.length; i++) { tick = t[i]; if (tick.show && tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) { this._elem.append(tick.draw(ctx, plot)); } } tick = null; t = null; } return this._elem; }; // called with scope of an axis $.jqplot.LinearAxisRenderer.prototype.reset = function() { this.min = this._options.min; this.max = this._options.max; this.tickInterval = this._options.tickInterval; this.numberTicks = this._options.numberTicks; this._autoFormatString = ''; if (this._overrideFormatString && this.tickOptions && this.tickOptions.formatString) { this.tickOptions.formatString = ''; } // this._ticks = this.__ticks; }; // called with scope of axis $.jqplot.LinearAxisRenderer.prototype.set = function() { var dim = 0; var temp; var w = 0; var h = 0; var lshow = (this._label == null) ? false : this._label.show; if (this.show) { var t = this._ticks; var tick; for (var i=0; i<t.length; i++) { tick = t[i]; if (!tick._breakTick && tick.show && tick.showLabel && (!tick.isMinorTick || this.showMinorTicks)) { if (this.name == 'xaxis' || this.name == 'x2axis') { temp = tick._elem.outerHeight(true); } else { temp = tick._elem.outerWidth(true); } if (temp > dim) { dim = temp; } } } tick = null; t = null; if (lshow) { w = this._label._elem.outerWidth(true); h = this._label._elem.outerHeight(true); } if (this.name == 'xaxis') { dim = dim + h; this._elem.css({'height':dim+'px', left:'0px', bottom:'0px'}); } else if (this.name == 'x2axis') { dim = dim + h; this._elem.css({'height':dim+'px', left:'0px', top:'0px'}); } else if (this.name == 'yaxis') { dim = dim + w; this._elem.css({'width':dim+'px', left:'0px', top:'0px'}); if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { this._label._elem.css('width', w+'px'); } } else { dim = dim + w; this._elem.css({'width':dim+'px', right:'0px', top:'0px'}); if (lshow && this._label.constructor == $.jqplot.AxisLabelRenderer) { this._label._elem.css('width', w+'px'); } } } }; // called with scope of axis $.jqplot.LinearAxisRenderer.prototype.createTicks = function(plot) { // we're are operating on an axis here var ticks = this._ticks; var userTicks = this.ticks; var name = this.name; // databounds were set on axis initialization. var db = this._dataBounds; var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height; var interval; var min, max; var pos1, pos2; var tt, i; // get a copy of user's settings for min/max. var userMin = this.min; var userMax = this.max; var userNT = this.numberTicks; var userTI = this.tickInterval; var threshold = 30; this._scalefact = (Math.max(dim, threshold+1) - threshold)/300.0; // if we already have ticks, use them. // ticks must be in order of increasing value. if (userTicks.length) { // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed for (i=0; i<userTicks.length; i++){ var ut = userTicks[i]; var t = new this.tickRenderer(this.tickOptions); if ($.isArray(ut)) { t.value = ut[0]; if (this.breakPoints) { if (ut[0] == this.breakPoints[0]) { t.label = this.breakTickLabel; t._breakTick = true; t.showGridline = false; t.showMark = false; } else if (ut[0] > this.breakPoints[0] && ut[0] <= this.breakPoints[1]) { t.show = false; t.showGridline = false; t.label = ut[1]; } else { t.label = ut[1]; } } else { t.label = ut[1]; } t.setTick(ut[0], this.name); this._ticks.push(t); } else if ($.isPlainObject(ut)) { $.extend(true, t, ut); t.axis = this.name; this._ticks.push(t); } else { t.value = ut; if (this.breakPoints) { if (ut == this.breakPoints[0]) { t.label = this.breakTickLabel; t._breakTick = true; t.showGridline = false; t.showMark = false; } else if (ut > this.breakPoints[0] && ut <= this.breakPoints[1]) { t.show = false; t.showGridline = false; } } t.setTick(ut, this.name); this._ticks.push(t); } } this.numberTicks = userTicks.length; this.min = this._ticks[0].value; this.max = this._ticks[this.numberTicks-1].value; this.tickInterval = (this.max - this.min) / (this.numberTicks - 1); } // we don't have any ticks yet, let's make some! else { if (name == 'xaxis' || name == 'x2axis') { dim = this._plotDimensions.width; } else { dim = this._plotDimensions.height; } var _numberTicks = this.numberTicks; // if aligning this axis, use number of ticks from previous axis. // Do I need to reset somehow if alignTicks is changed and then graph is replotted?? if (this.alignTicks) { if (this.name === 'x2axis' && plot.axes.xaxis.show) { _numberTicks = plot.axes.xaxis.numberTicks; } else if (this.name.charAt(0) === 'y' && this.name !== 'yaxis' && this.name !== 'yMidAxis' && plot.axes.yaxis.show) { _numberTicks = plot.axes.yaxis.numberTicks; } } min = ((this.min != null) ? this.min : db.min); max = ((this.max != null) ? this.max : db.max); var range = max - min; var rmin, rmax; var temp; if (this.tickOptions == null || !this.tickOptions.formatString) { this._overrideFormatString = true; } // Doing complete autoscaling if (this.min == null || this.max == null && this.tickInterval == null && !this.autoscale) { // Check if user must have tick at 0 or 100 and ensure they are in range. // The autoscaling algorithm will always place ticks at 0 and 100 if they are in range. if (this.forceTickAt0) { if (min > 0) { min = 0; } if (max < 0) { max = 0; } } if (this.forceTickAt100) { if (min > 100) { min = 100; } if (max < 100) { max = 100; } } var keepMin = false, keepMax = false; if (this.min != null) { keepMin = true; } else if (this.max != null) { keepMax = true; } // var threshold = 30; // var tdim = Math.max(dim, threshold+1); // this._scalefact = (tdim-threshold)/300.0; var ret = $.jqplot.LinearTickGenerator(min, max, this._scalefact, _numberTicks, keepMin, keepMax); // calculate a padded max and min, points should be less than these // so that they aren't too close to the edges of the plot. // User can adjust how much padding is allowed with pad, padMin and PadMax options. // If min or max is set, don't pad that end of axis. var tumin = (this.min != null) ? min : min + range*(this.padMin - 1); var tumax = (this.max != null) ? max : max - range*(this.padMax - 1); // if they're equal, we shouldn't have to do anything, right? // if (min <=tumin || max >= tumax) { if (min <tumin || max > tumax) { tumin = (this.min != null) ? min : min - range*(this.padMin - 1); tumax = (this.max != null) ? max : max + range*(this.padMax - 1); ret = $.jqplot.LinearTickGenerator(tumin, tumax, this._scalefact, _numberTicks, keepMin, keepMax); } this.min = ret[0]; this.max = ret[1]; // if numberTicks specified, it should return the same. this.numberTicks = ret[2]; this._autoFormatString = ret[3]; this.tickInterval = ret[4]; } // User has specified some axis scale related option, can use auto algorithm else { // if min and max are same, space them out a bit if (min == max) { var adj = 0.05; if (min > 0) { adj = Math.max(Math.log(min)/Math.LN10, 0.05); } min -= adj; max += adj; } // autoscale. Can't autoscale if min or max is supplied. // Will use numberTicks and tickInterval if supplied. Ticks // across multiple axes may not line up depending on how // bars are to be plotted. if (this.autoscale && this.min == null && this.max == null) { var rrange, ti, margin; var forceMinZero = false; var forceZeroLine = false; var intervals = {min:null, max:null, average:null, stddev:null}; // if any series are bars, or if any are fill to zero, and if this // is the axis to fill toward, check to see if we can start axis at zero. for (var i=0; i<this._series.length; i++) { var s = this._series[i]; var faname = (s.fillAxis == 'x') ? s._xaxis.name : s._yaxis.name; // check to see if this is the fill axis if (this.name == faname) { var vals = s._plotValues[s.fillAxis]; var vmin = vals[0]; var vmax = vals[0]; for (var j=1; j<vals.length; j++) { if (vals[j] < vmin) { vmin = vals[j]; } else if (vals[j] > vmax) { vmax = vals[j]; } } var dp = (vmax - vmin) / vmax; // is this sries a bar? if (s.renderer.constructor == $.jqplot.BarRenderer) { // if no negative values and could also check range. if (vmin >= 0 && (s.fillToZero || dp > 0.1)) { forceMinZero = true; } else { forceMinZero = false; if (s.fill && s.fillToZero && vmin < 0 && vmax > 0) { forceZeroLine = true; } else { forceZeroLine = false; } } } // if not a bar and filling, use appropriate method. else if (s.fill) { if (vmin >= 0 && (s.fillToZero || dp > 0.1)) { forceMinZero = true; } else if (vmin < 0 && vmax > 0 && s.fillToZero) { forceMinZero = false; forceZeroLine = true; } else { forceMinZero = false; forceZeroLine = false; } } // if not a bar and not filling, only change existing state // if it doesn't make sense else if (vmin < 0) { forceMinZero = false; } } } // check if we need make axis min at 0. if (forceMinZero) { // compute number of ticks this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing); this.min = 0; userMin = 0; // what order is this range? // what tick interval does that give us? ti = max/(this.numberTicks-1); temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10))); if (ti/temp == parseInt(ti/temp, 10)) { ti += temp; } this.tickInterval = Math.ceil(ti/temp) * temp; this.max = this.tickInterval * (this.numberTicks - 1); } // check if we need to make sure there is a tick at 0. else if (forceZeroLine) { // compute number of ticks this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing); var ntmin = Math.ceil(Math.abs(min)/range*(this.numberTicks-1)); var ntmax = this.numberTicks - 1 - ntmin; ti = Math.max(Math.abs(min/ntmin), Math.abs(max/ntmax)); temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10))); this.tickInterval = Math.ceil(ti/temp) * temp; this.max = this.tickInterval * ntmax; this.min = -this.tickInterval * ntmin; } // if nothing else, do autoscaling which will try to line up ticks across axes. else { if (this.numberTicks == null){ if (this.tickInterval) { this.numberTicks = 3 + Math.ceil(range / this.tickInterval); } else { this.numberTicks = 2 + Math.ceil((dim-(this.tickSpacing-1))/this.tickSpacing); } } if (this.tickInterval == null) { // get a tick interval ti = range/(this.numberTicks - 1); if (ti < 1) { temp = Math.pow(10, Math.abs(Math.floor(Math.log(ti)/Math.LN10))); } else { temp = 1; } this.tickInterval = Math.ceil(ti*temp*this.pad)/temp; } else { temp = 1 / this.tickInterval; } // try to compute a nicer, more even tick interval // temp = Math.pow(10, Math.floor(Math.log(ti)/Math.LN10)); // this.tickInterval = Math.ceil(ti/temp) * temp; rrange = this.tickInterval * (this.numberTicks - 1); margin = (rrange - range)/2; if (this.min == null) { this.min = Math.floor(temp*(min-margin))/temp; } if (this.max == null) { this.max = this.min + rrange; } } // Compute a somewhat decent format string if it is needed. // get precision of interval and determine a format string. var sf = $.jqplot.getSignificantFigures(this.tickInterval); var fstr; // if we have only a whole number, use integer formatting if (sf.digitsLeft >= sf.significantDigits) { fstr = '%d'; } else { var temp = Math.max(0, 5 - sf.digitsLeft); temp = Math.min(temp, sf.digitsRight); fstr = '%.'+ temp + 'f'; } this._autoFormatString = fstr; } // Use the default algorithm which pads each axis to make the chart // centered nicely on the grid. else { rmin = (this.min != null) ? this.min : min - range*(this.padMin - 1); rmax = (this.max != null) ? this.max : max + range*(this.padMax - 1); range = rmax - rmin; if (this.numberTicks == null){ // if tickInterval is specified by user, we will ignore computed maximum. // max will be equal or greater to fit even # of ticks. if (this.tickInterval != null) { this.numberTicks = Math.ceil((rmax - rmin)/this.tickInterval)+1; } else if (dim > 100) { this.numberTicks = parseInt(3+(dim-100)/75, 10); } else { this.numberTicks = 2; } } if (this.tickInterval == null) { this.tickInterval = range / (this.numberTicks-1); } if (this.max == null) { rmax = rmin + this.tickInterval*(this.numberTicks - 1); } if (this.min == null) { rmin = rmax - this.tickInterval*(this.numberTicks - 1); } // get precision of interval and determine a format string. var sf = $.jqplot.getSignificantFigures(this.tickInterval); var fstr; // if we have only a whole number, use integer formatting if (sf.digitsLeft >= sf.significantDigits) { fstr = '%d'; } else { var temp = Math.max(0, 5 - sf.digitsLeft); temp = Math.min(temp, sf.digitsRight); fstr = '%.'+ temp + 'f'; } this._autoFormatString = fstr; this.min = rmin; this.max = rmax; } if (this.renderer.constructor == $.jqplot.LinearAxisRenderer && this._autoFormatString == '') { // fix for misleading tick display with small range and low precision. range = this.max - this.min; // figure out precision var temptick = new this.tickRenderer(this.tickOptions); // use the tick formatString or, the default. var fs = temptick.formatString || $.jqplot.config.defaultTickFormatString; var fs = fs.match($.jqplot.sprintf.regex)[0]; var precision = 0; if (fs) { if (fs.search(/[fFeEgGpP]/) > -1) { var m = fs.match(/\%\.(\d{0,})?[eEfFgGpP]/); if (m) { precision = parseInt(m[1], 10); } else { precision = 6; } } else if (fs.search(/[di]/) > -1) { precision = 0; } // fact will be <= 1; var fact = Math.pow(10, -precision); if (this.tickInterval < fact) { // need to correct underrange if (userNT == null && userTI == null) { this.tickInterval = fact; if (userMax == null && userMin == null) { // this.min = Math.floor((this._dataBounds.min - this.tickInterval)/fact) * fact; this.min = Math.floor(this._dataBounds.min/fact) * fact; if (this.min == this._dataBounds.min) { this.min = this._dataBounds.min - this.tickInterval; } // this.max = Math.ceil((this._dataBounds.max + this.tickInterval)/fact) * fact; this.max = Math.ceil(this._dataBounds.max/fact) * fact; if (this.max == this._dataBounds.max) { this.max = this._dataBounds.max + this.tickInterval; } var n = (this.max - this.min)/this.tickInterval; n = n.toFixed(11); n = Math.ceil(n); this.numberTicks = n + 1; } else if (userMax == null) { // add one tick for top of range. var n = (this._dataBounds.max - this.min) / this.tickInterval; n = n.toFixed(11); this.numberTicks = Math.ceil(n) + 2; this.max = this.min + this.tickInterval * (this.numberTicks-1); } else if (userMin == null) { // add one tick for bottom of range. var n = (this.max - this._dataBounds.min) / this.tickInterval; n = n.toFixed(11); this.numberTicks = Math.ceil(n) + 2; this.min = this.max - this.tickInterval * (this.numberTicks-1); } else { // calculate a number of ticks so max is within axis scale this.numberTicks = Math.ceil((userMax - userMin)/this.tickInterval) + 1; // if user's min and max don't fit evenly in ticks, adjust. // This takes care of cases such as user min set to 0, max set to 3.5 but tick // format string set to %d (integer ticks) this.min = Math.floor(userMin*Math.pow(10, precision))/Math.pow(10, precision); this.max = Math.ceil(userMax*Math.pow(10, precision))/Math.pow(10, precision); // this.max = this.min + this.tickInterval*(this.numberTicks-1); this.numberTicks = Math.ceil((this.max - this.min)/this.tickInterval) + 1; } } } } } } if (this._overrideFormatString && this._autoFormatString != '') { this.tickOptions = this.tickOptions || {}; this.tickOptions.formatString = this._autoFormatString; } var t, to; for (var i=0; i<this.numberTicks; i++){ tt = this.min + i * this.tickInterval; t = new this.tickRenderer(this.tickOptions); // var t = new $.jqplot.AxisTickRenderer(this.tickOptions); t.setTick(tt, this.name); this._ticks.push(t); if (i < this.numberTicks - 1) { for (var j=0; j<this.minorTicks; j++) { tt += this.tickInterval/(this.minorTicks+1); to = $.extend(true, {}, this.tickOptions, {name:this.name, value:tt, label:'', isMinorTick:true}); t = new this.tickRenderer(to); this._ticks.push(t); } } t = null; } } if (this.tickInset) { this.min = this.min - this.tickInset * this.tickInterval; this.max = this.max + this.tickInset * this.tickInterval; } ticks = null; }; // Used to reset just the values of the ticks and then repack, which will // recalculate the positioning functions. It is assuemd that the // number of ticks is the same and the values of the new array are at the // proper interval. // This method needs to be called with the scope of an axis object, like: // // > plot.axes.yaxis.renderer.resetTickValues.call(plot.axes.yaxis, yarr); // $.jqplot.LinearAxisRenderer.prototype.resetTickValues = function(opts) { if ($.isArray(opts) && opts.length == this._ticks.length) { var t; for (var i=0; i<opts.length; i++) { t = this._ticks[i]; t.value = opts[i]; t.label = t.formatter(t.formatString, opts[i]); t.label = t.prefix + t.label; t._elem.html(t.label); } t = null; this.min = $.jqplot.arrayMin(opts); this.max = $.jqplot.arrayMax(opts); this.pack(); } // Not implemented yet. // else if ($.isPlainObject(opts)) { // // } }; // called with scope of axis $.jqplot.LinearAxisRenderer.prototype.pack = function(pos, offsets) { // Add defaults for repacking from resetTickValues function. pos = pos || {}; offsets = offsets || this._offsets; var ticks = this._ticks; var max = this.max; var min = this.min; var offmax = offsets.max; var offmin = offsets.min; var lshow = (this._label == null) ? false : this._label.show; for (var p in pos) { this._elem.css(p, pos[p]); } this._offsets = offsets; // pixellength will be + for x axes and - for y axes becasue pixels always measured from top left. var pixellength = offmax - offmin; var unitlength = max - min; // point to unit and unit to point conversions references to Plot DOM element top left corner. if (this.breakPoints) { unitlength = unitlength - this.breakPoints[1] + this.breakPoints[0]; this.p2u = function(p){ return (p - offmin) * unitlength / pixellength + min; }; this.u2p = function(u){ if (u > this.breakPoints[0] && u < this.breakPoints[1]){ u = this.breakPoints[0]; } if (u <= this.breakPoints[0]) { return (u - min) * pixellength / unitlength + offmin; } else { return (u - this.breakPoints[1] + this.breakPoints[0] - min) * pixellength / unitlength + offmin; } }; if (this.name.charAt(0) == 'x'){ this.series_u2p = function(u){ if (u > this.breakPoints[0] && u < this.breakPoints[1]){ u = this.breakPoints[0]; } if (u <= this.breakPoints[0]) { return (u - min) * pixellength / unitlength; } else { return (u - this.breakPoints[1] + this.breakPoints[0] - min) * pixellength / unitlength; } }; this.series_p2u = function(p){ return p * unitlength / pixellength + min; }; } else { this.series_u2p = function(u){ if (u > this.breakPoints[0] && u < this.breakPoints[1]){ u = this.breakPoints[0]; } if (u >= this.breakPoints[1]) { return (u - max) * pixellength / unitlength; } else { return (u + this.breakPoints[1] - this.breakPoints[0] - max) * pixellength / unitlength; } }; this.series_p2u = function(p){ return p * unitlength / pixellength + max; }; } } else { this.p2u = function(p){ return (p - offmin) * unitlength / pixellength + min; }; this.u2p = function(u){ return (u - min) * pixellength / unitlength + offmin; }; if (this.name == 'xaxis' || this.name == 'x2axis'){ this.series_u2p = function(u){ return (u - min) * pixellength / unitlength; }; this.series_p2u = function(p){ return p * unitlength / pixellength + min; }; } else { this.series_u2p = function(u){ return (u - max) * pixellength / unitlength; }; this.series_p2u = function(p){ return p * unitlength / pixellength + max; }; } } if (this.show) { if (this.name == 'xaxis' || this.name == 'x2axis') { for (var i=0; i<ticks.length; i++) { var t = ticks[i]; if (t.show && t.showLabel) { var shim; if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { // will need to adjust auto positioning based on which axis this is. var temp = (this.name == 'xaxis') ? 1 : -1; switch (t.labelPosition) { case 'auto': // position at end if (temp * t.angle < 0) { shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; } // position at start else { shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; } break; case 'end': shim = -t.getWidth() + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; break; case 'start': shim = -t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; break; case 'middle': shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; break; default: shim = -t.getWidth()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; break; } } else { shim = -t.getWidth()/2; } var val = this.u2p(t.value) + shim + 'px'; t._elem.css('left', val); t.pack(); } } if (lshow) { var w = this._label._elem.outerWidth(true); this._label._elem.css('left', offmin + pixellength/2 - w/2 + 'px'); if (this.name == 'xaxis') { this._label._elem.css('bottom', '0px'); } else { this._label._elem.css('top', '0px'); } this._label.pack(); } } else { for (var i=0; i<ticks.length; i++) { var t = ticks[i]; if (t.show && t.showLabel) { var shim; if (t.constructor == $.jqplot.CanvasAxisTickRenderer && t.angle) { // will need to adjust auto positioning based on which axis this is. var temp = (this.name == 'yaxis') ? 1 : -1; switch (t.labelPosition) { case 'auto': // position at end case 'end': if (temp * t.angle < 0) { shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; } else { shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; } break; case 'start': if (t.angle > 0) { shim = -t._textRenderer.height * Math.cos(-t._textRenderer.angle) / 2; } else { shim = -t.getHeight() + t._textRenderer.height * Math.cos(t._textRenderer.angle) / 2; } break; case 'middle': // if (t.angle > 0) { // shim = -t.getHeight()/2 + t._textRenderer.height * Math.sin(-t._textRenderer.angle) / 2; // } // else { // shim = -t.getHeight()/2 - t._textRenderer.height * Math.sin(t._textRenderer.angle) / 2; // } shim = -t.getHeight()/2; break; default: shim = -t.getHeight()/2; break; } } else { shim = -t.getHeight()/2; } var val = this.u2p(t.value) + shim + 'px'; t._elem.css('top', val); t.pack(); } } if (lshow) { var h = this._label._elem.outerHeight(true); this._label._elem.css('top', offmax - pixellength/2 - h/2 + 'px'); if (this.name == 'yaxis') { this._label._elem.css('left', '0px'); } else { this._label._elem.css('right', '0px'); } this._label.pack(); } } } ticks = null; }; /** * The following code was generaously given to me a while back by Scott Prahl. * He did a good job at computing axes min, max and number of ticks for the * case where the user has not set any scale related parameters (tickInterval, * numberTicks, min or max). I had ignored this use case for a long time, * focusing on the more difficult case where user has set some option controlling * tick generation. Anyway, about time I got this into jqPlot. * Thanks Scott!! */ /** * Copyright (c) 2010 Scott Prahl * The next three routines are currently available for use in all personal * or commercial projects under both the MIT and GPL version 2.0 licenses. * This means that you can choose the license that best suits your project * and use it accordingly. */ // A good format string depends on the interval. If the interval is greater // than 1 then there is no need to show any decimal digits. If it is < 1.0, then // use the magnitude of the interval to determine the number of digits to show. function bestFormatString (interval) { var fstr; interval = Math.abs(interval); if (interval >= 10) { fstr = '%d'; } else if (interval > 1) { if (interval === parseInt(interval, 10)) { fstr = '%d'; } else { fstr = '%.1f'; } } else { var expv = -Math.floor(Math.log(interval)/Math.LN10); fstr = '%.' + expv + 'f'; } return fstr; } var _factors = [0.1, 0.2, 0.3, 0.4, 0.5, 0.8, 1, 2, 3, 4, 5]; var _getLowerFactor = function(f) { var i = _factors.indexOf(f); if (i > 0) { return _factors[i-1]; } else { return _factors[_factors.length - 1] / 100; } }; var _getHigherFactor = function(f) { var i = _factors.indexOf(f); if (i < _factors.length-1) { return _factors[i+1]; } else { return _factors[0] * 100; } }; // Given a fixed minimum and maximum and a target number ot ticks // figure out the best interval and // return min, max, number ticks, format string and tick interval function bestConstrainedInterval(min, max, nttarget) { // run through possible number to ticks and see which interval is best var low = Math.floor(nttarget/2); var hi = Math.ceil(nttarget*1.5); var badness = Number.MAX_VALUE; var r = (max - min); var temp; var sd; var bestNT; var gsf = $.jqplot.getSignificantFigures; var fsd; var fs; var currentNT; var bestPrec; for (var i=0, l=hi-low+1; i<l; i++) { currentNT = low + i; temp = r/(currentNT-1); sd = gsf(temp); temp = Math.abs(nttarget - currentNT) + sd.digitsRight; if (temp < badness) { badness = temp; bestNT = currentNT; bestPrec = sd.digitsRight; } else if (temp === badness) { // let nicer ticks trump number ot ticks if (sd.digitsRight < bestPrec) { bestNT = currentNT; bestPrec = sd.digitsRight; } } } fsd = Math.max(bestPrec, Math.max(gsf(min).digitsRight, gsf(max).digitsRight)); if (fsd === 0) { fs = '%d'; } else { fs = '%.' + fsd + 'f'; } temp = r / (bestNT - 1); // min, max, number ticks, format string, tick interval return [min, max, bestNT, fs, temp]; } // This will return an interval of form 2 * 10^n, 5 * 10^n or 10 * 10^n // it is based soley on the range and number of ticks. So if user specifies // number of ticks, use this. function bestInterval(range, numberTicks) { numberTicks = numberTicks || 7; var minimum = range / (numberTicks - 1); var magnitude = Math.pow(10, Math.floor(Math.log(minimum) / Math.LN10)); var residual = minimum / magnitude; var interval; // "nicest" ranges are 1, 2, 5 or powers of these. // for magnitudes below 1, only allow these. if (magnitude < 1) { if (residual > 5) { interval = 10 * magnitude; } else if (residual > 2) { interval = 5 * magnitude; } else if (residual > 1) { interval = 2 * magnitude; } else { interval = magnitude; } } // for large ranges (whole integers), allow intervals like 3, 4 or powers of these. // this helps a lot with poor choices for number of ticks. else { if (residual > 5) { interval = 10 * magnitude; } else if (residual > 4) { interval = 5 * magnitude; } else if (residual > 3) { interval = 4 * magnitude; } else if (residual > 2) { interval = 3 * magnitude; } else if (residual > 1) { interval = 2 * magnitude; } else { interval = magnitude; } } return interval; } // This will return an interval of form 2 * 10^n, 5 * 10^n or 10 * 10^n // it is based soley on the range of data, number of ticks must be computed later. function bestLinearInterval(range, scalefact) { scalefact = scalefact || 1; var expv = Math.floor(Math.log(range)/Math.LN10); var magnitude = Math.pow(10, expv); // 0 < f < 10 var f = range / magnitude; var fact; // for large plots, scalefact will decrease f and increase number of ticks. // for small plots, scalefact will increase f and decrease number of ticks. f = f/scalefact; // for large plots, smaller interval, more ticks. if (f<=0.38) { fact = 0.1; } else if (f<=1.6) { fact = 0.2; } else if (f<=4.0) { fact = 0.5; } else if (f<=8.0) { fact = 1.0; } // for very small plots, larger interval, less ticks in number ticks else if (f<=16.0) { fact = 2; } else { fact = 5; } return fact*magnitude; } function bestLinearComponents(range, scalefact) { var expv = Math.floor(Math.log(range)/Math.LN10); var magnitude = Math.pow(10, expv); // 0 < f < 10 var f = range / magnitude; var interval; var fact; // for large plots, scalefact will decrease f and increase number of ticks. // for small plots, scalefact will increase f and decrease number of ticks. f = f/scalefact; // for large plots, smaller interval, more ticks. if (f<=0.38) { fact = 0.1; } else if (f<=1.6) { fact = 0.2; } else if (f<=4.0) { fact = 0.5; } else if (f<=8.0) { fact = 1.0; } // for very small plots, larger interval, less ticks in number ticks else if (f<=16.0) { fact = 2; } // else if (f<=20.0) { // fact = 3; // } // else if (f<=24.0) { // fact = 4; // } else { fact = 5; } interval = fact * magnitude; return [interval, fact, magnitude]; } // Given the min and max for a dataset, return suitable endpoints // for the graphing, a good number for the number of ticks, and a // format string so that extraneous digits are not displayed. // returned is an array containing [min, max, nTicks, format] $.jqplot.LinearTickGenerator = function(axis_min, axis_max, scalefact, numberTicks, keepMin, keepMax) { // Set to preserve EITHER min OR max. // If min is preserved, max must be free. keepMin = (keepMin === null) ? false : keepMin; keepMax = (keepMax === null || keepMin) ? false : keepMax; // if endpoints are equal try to include zero otherwise include one if (axis_min === axis_max) { axis_max = (axis_max) ? 0 : 1; } scalefact = scalefact || 1.0; // make sure range is positive if (axis_max < axis_min) { var a = axis_max; axis_max = axis_min; axis_min = a; } var r = []; var ss = bestLinearInterval(axis_max - axis_min, scalefact); var gsf = $.jqplot.getSignificantFigures; if (numberTicks == null) { // Figure out the axis min, max and number of ticks // the min and max will be some multiple of the tick interval, // 1*10^n, 2*10^n or 5*10^n. This gaurantees that, if the // axis min is negative, 0 will be a tick. if (!keepMin && !keepMax) { r[0] = Math.floor(axis_min / ss) * ss; // min r[1] = Math.ceil(axis_max / ss) * ss; // max r[2] = Math.round((r[1]-r[0])/ss+1.0); // number of ticks r[3] = bestFormatString(ss); // format string r[4] = ss; // tick Interval } else if (keepMin) { r[0] = axis_min; // min r[2] = Math.ceil((axis_max - axis_min) / ss + 1.0); // number of ticks r[1] = axis_min + (r[2] - 1) * ss; // max var digitsMin = gsf(axis_min).digitsRight; var digitsSS = gsf(ss).digitsRight; if (digitsMin < digitsSS) { r[3] = bestFormatString(ss); // format string } else { r[3] = '%.' + digitsMin + 'f'; } r[4] = ss; // tick Interval } else if (keepMax) { r[1] = axis_max; // max r[2] = Math.ceil((axis_max - axis_min) / ss + 1.0); // number of ticks r[0] = axis_max - (r[2] - 1) * ss; // min var digitsMax = gsf(axis_max).digitsRight; var digitsSS = gsf(ss).digitsRight; if (digitsMax < digitsSS) { r[3] = bestFormatString(ss); // format string } else { r[3] = '%.' + digitsMax + 'f'; } r[4] = ss; // tick Interval } } else { var tempr = []; // Figure out the axis min, max and number of ticks // the min and max will be some multiple of the tick interval, // 1*10^n, 2*10^n or 5*10^n. This gaurantees that, if the // axis min is negative, 0 will be a tick. tempr[0] = Math.floor(axis_min / ss) * ss; // min tempr[1] = Math.ceil(axis_max / ss) * ss; // max tempr[2] = Math.round((tempr[1]-tempr[0])/ss+1.0); // number of ticks tempr[3] = bestFormatString(ss); // format string tempr[4] = ss; // tick Interval // first, see if we happen to get the right number of ticks if (tempr[2] === numberTicks) { r = tempr; } else { var newti = bestInterval(tempr[1] - tempr[0], numberTicks); r[0] = tempr[0]; // min r[2] = numberTicks; // number of ticks r[4] = newti; // tick interval r[3] = bestFormatString(newti); // format string r[1] = r[0] + (r[2] - 1) * r[4]; // max } } return r; }; $.jqplot.LinearTickGenerator.bestLinearInterval = bestLinearInterval; $.jqplot.LinearTickGenerator.bestInterval = bestInterval; $.jqplot.LinearTickGenerator.bestLinearComponents = bestLinearComponents; $.jqplot.LinearTickGenerator.bestConstrainedInterval = bestConstrainedInterval; // class: $.jqplot.MarkerRenderer // The default jqPlot marker renderer, rendering the points on the line. $.jqplot.MarkerRenderer = function(options){ // Group: Properties // prop: show // whether or not to show the marker. this.show = true; // prop: style // One of diamond, circle, square, x, plus, dash, filledDiamond, filledCircle, filledSquare this.style = 'filledCircle'; // prop: lineWidth // size of the line for non-filled markers. this.lineWidth = 2; // prop: size // Size of the marker (diameter or circle, length of edge of square, etc.) this.size = 9.0; // prop: color // color of marker. Will be set to color of series by default on init. this.color = '#666666'; // prop: shadow // whether or not to draw a shadow on the line this.shadow = true; // prop: shadowAngle // Shadow angle in degrees this.shadowAngle = 45; // prop: shadowOffset // Shadow offset from line in pixels this.shadowOffset = 1; // prop: shadowDepth // Number of times shadow is stroked, each stroke offset shadowOffset from the last. this.shadowDepth = 3; // prop: shadowAlpha // Alpha channel transparency of shadow. 0 = transparent. this.shadowAlpha = '0.07'; // prop: shadowRenderer // Renderer that will draws the shadows on the marker. this.shadowRenderer = new $.jqplot.ShadowRenderer(); // prop: shapeRenderer // Renderer that will draw the marker. this.shapeRenderer = new $.jqplot.ShapeRenderer(); $.extend(true, this, options); }; $.jqplot.MarkerRenderer.prototype.init = function(options) { $.extend(true, this, options); var sdopt = {angle:this.shadowAngle, offset:this.shadowOffset, alpha:this.shadowAlpha, lineWidth:this.lineWidth, depth:this.shadowDepth, closePath:true}; if (this.style.indexOf('filled') != -1) { sdopt.fill = true; } if (this.style.indexOf('ircle') != -1) { sdopt.isarc = true; sdopt.closePath = false; } this.shadowRenderer.init(sdopt); var shopt = {fill:false, isarc:false, strokeStyle:this.color, fillStyle:this.color, lineWidth:this.lineWidth, closePath:true}; if (this.style.indexOf('filled') != -1) { shopt.fill = true; } if (this.style.indexOf('ircle') != -1) { shopt.isarc = true; shopt.closePath = false; } this.shapeRenderer.init(shopt); }; $.jqplot.MarkerRenderer.prototype.drawDiamond = function(x, y, ctx, fill, options) { var stretch = 1.2; var dx = this.size/2/stretch; var dy = this.size/2*stretch; var points = [[x-dx, y], [x, y+dy], [x+dx, y], [x, y-dy]]; if (this.shadow) { this.shadowRenderer.draw(ctx, points); } this.shapeRenderer.draw(ctx, points, options); }; $.jqplot.MarkerRenderer.prototype.drawPlus = function(x, y, ctx, fill, options) { var stretch = 1.0; var dx = this.size/2*stretch; var dy = this.size/2*stretch; var points1 = [[x, y-dy], [x, y+dy]]; var points2 = [[x+dx, y], [x-dx, y]]; var opts = $.extend(true, {}, this.options, {closePath:false}); if (this.shadow) { this.shadowRenderer.draw(ctx, points1, {closePath:false}); this.shadowRenderer.draw(ctx, points2, {closePath:false}); } this.shapeRenderer.draw(ctx, points1, opts); this.shapeRenderer.draw(ctx, points2, opts); }; $.jqplot.MarkerRenderer.prototype.drawX = function(x, y, ctx, fill, options) { var stretch = 1.0; var dx = this.size/2*stretch; var dy = this.size/2*stretch; var opts = $.extend(true, {}, this.options, {closePath:false}); var points1 = [[x-dx, y-dy], [x+dx, y+dy]]; var points2 = [[x-dx, y+dy], [x+dx, y-dy]]; if (this.shadow) { this.shadowRenderer.draw(ctx, points1, {closePath:false}); this.shadowRenderer.draw(ctx, points2, {closePath:false}); } this.shapeRenderer.draw(ctx, points1, opts); this.shapeRenderer.draw(ctx, points2, opts); }; $.jqplot.MarkerRenderer.prototype.drawDash = function(x, y, ctx, fill, options) { var stretch = 1.0; var dx = this.size/2*stretch; var dy = this.size/2*stretch; var points = [[x-dx, y], [x+dx, y]]; if (this.shadow) { this.shadowRenderer.draw(ctx, points); } this.shapeRenderer.draw(ctx, points, options); }; $.jqplot.MarkerRenderer.prototype.drawLine = function(p1, p2, ctx, fill, options) { var points = [p1, p2]; if (this.shadow) { this.shadowRenderer.draw(ctx, points); } this.shapeRenderer.draw(ctx, points, options); }; $.jqplot.MarkerRenderer.prototype.drawSquare = function(x, y, ctx, fill, options) { var stretch = 1.0; var dx = this.size/2/stretch; var dy = this.size/2*stretch; var points = [[x-dx, y-dy], [x-dx, y+dy], [x+dx, y+dy], [x+dx, y-dy]]; if (this.shadow) { this.shadowRenderer.draw(ctx, points); } this.shapeRenderer.draw(ctx, points, options); }; $.jqplot.MarkerRenderer.prototype.drawCircle = function(x, y, ctx, fill, options) { var radius = this.size/2; var end = 2*Math.PI; var points = [x, y, radius, 0, end, true]; if (this.shadow) { this.shadowRenderer.draw(ctx, points); } this.shapeRenderer.draw(ctx, points, options); }; $.jqplot.MarkerRenderer.prototype.draw = function(x, y, ctx, options) { options = options || {}; // hack here b/c shape renderer uses canvas based color style options // and marker uses css style names. if (options.show == null || options.show != false) { if (options.color && !options.fillStyle) { options.fillStyle = options.color; } if (options.color && !options.strokeStyle) { options.strokeStyle = options.color; } switch (this.style) { case 'diamond': this.drawDiamond(x,y,ctx, false, options); break; case 'filledDiamond': this.drawDiamond(x,y,ctx, true, options); break; case 'circle': this.drawCircle(x,y,ctx, false, options); break; case 'filledCircle': this.drawCircle(x,y,ctx, true, options); break; case 'square': this.drawSquare(x,y,ctx, false, options); break; case 'filledSquare': this.drawSquare(x,y,ctx, true, options); break; case 'x': this.drawX(x,y,ctx, true, options); break; case 'plus': this.drawPlus(x,y,ctx, true, options); break; case 'dash': this.drawDash(x,y,ctx, true, options); break; case 'line': this.drawLine(x, y, ctx, false, options); break; default: this.drawDiamond(x,y,ctx, false, options); break; } } }; // class: $.jqplot.shadowRenderer // The default jqPlot shadow renderer, rendering shadows behind shapes. $.jqplot.ShadowRenderer = function(options){ // Group: Properties // prop: angle // Angle of the shadow in degrees. Measured counter-clockwise from the x axis. this.angle = 45; // prop: offset // Pixel offset at the given shadow angle of each shadow stroke from the last stroke. this.offset = 1; // prop: alpha // alpha transparency of shadow stroke. this.alpha = 0.07; // prop: lineWidth // width of the shadow line stroke. this.lineWidth = 1.5; // prop: lineJoin // How line segments of the shadow are joined. this.lineJoin = 'miter'; // prop: lineCap // how ends of the shadow line are rendered. this.lineCap = 'round'; // prop; closePath // whether line path segment is closed upon itself. this.closePath = false; // prop: fill // whether to fill the shape. this.fill = false; // prop: depth // how many times the shadow is stroked. Each stroke will be offset by offset at angle degrees. this.depth = 3; this.strokeStyle = 'rgba(0,0,0,0.1)'; // prop: isarc // whether the shadow is an arc or not. this.isarc = false; $.extend(true, this, options); }; $.jqplot.ShadowRenderer.prototype.init = function(options) { $.extend(true, this, options); }; // function: draw // draws an transparent black (i.e. gray) shadow. // // ctx - canvas drawing context // points - array of points or [x, y, radius, start angle (rad), end angle (rad)] $.jqplot.ShadowRenderer.prototype.draw = function(ctx, points, options) { ctx.save(); var opts = (options != null) ? options : {}; var fill = (opts.fill != null) ? opts.fill : this.fill; var fillRect = (opts.fillRect != null) ? opts.fillRect : this.fillRect; var closePath = (opts.closePath != null) ? opts.closePath : this.closePath; var offset = (opts.offset != null) ? opts.offset : this.offset; var alpha = (opts.alpha != null) ? opts.alpha : this.alpha; var depth = (opts.depth != null) ? opts.depth : this.depth; var isarc = (opts.isarc != null) ? opts.isarc : this.isarc; var linePattern = (opts.linePattern != null) ? opts.linePattern : this.linePattern; ctx.lineWidth = (opts.lineWidth != null) ? opts.lineWidth : this.lineWidth; ctx.lineJoin = (opts.lineJoin != null) ? opts.lineJoin : this.lineJoin; ctx.lineCap = (opts.lineCap != null) ? opts.lineCap : this.lineCap; ctx.strokeStyle = opts.strokeStyle || this.strokeStyle || 'rgba(0,0,0,'+alpha+')'; ctx.fillStyle = opts.fillStyle || this.fillStyle || 'rgba(0,0,0,'+alpha+')'; for (var j=0; j<depth; j++) { var ctxPattern = $.jqplot.LinePattern(ctx, linePattern); ctx.translate(Math.cos(this.angle*Math.PI/180)*offset, Math.sin(this.angle*Math.PI/180)*offset); ctxPattern.beginPath(); if (isarc) { ctx.arc(points[0], points[1], points[2], points[3], points[4], true); } else if (fillRect) { if (fillRect) { ctx.fillRect(points[0], points[1], points[2], points[3]); } } else if (points && points.length){ var move = true; for (var i=0; i<points.length; i++) { // skip to the first non-null point and move to it. if (points[i][0] != null && points[i][1] != null) { if (move) { ctxPattern.moveTo(points[i][0], points[i][1]); move = false; } else { ctxPattern.lineTo(points[i][0], points[i][1]); } } else { move = true; } } } if (closePath) { ctxPattern.closePath(); } if (fill) { ctx.fill(); } else { ctx.stroke(); } } ctx.restore(); }; // class: $.jqplot.shapeRenderer // The default jqPlot shape renderer. Given a set of points will // plot them and either stroke a line (fill = false) or fill them (fill = true). // If a filled shape is desired, closePath = true must also be set to close // the shape. $.jqplot.ShapeRenderer = function(options){ this.lineWidth = 1.5; // prop: linePattern // line pattern 'dashed', 'dotted', 'solid', some combination // of '-' and '.' characters such as '.-.' or a numerical array like // [draw, skip, draw, skip, ...] such as [1, 10] to draw a dotted line, // [1, 10, 20, 10] to draw a dot-dash line, and so on. this.linePattern = 'solid'; // prop: lineJoin // How line segments of the shadow are joined. this.lineJoin = 'miter'; // prop: lineCap // how ends of the shadow line are rendered. this.lineCap = 'round'; // prop; closePath // whether line path segment is closed upon itself. this.closePath = false; // prop: fill // whether to fill the shape. this.fill = false; // prop: isarc // whether the shadow is an arc or not. this.isarc = false; // prop: fillRect // true to draw shape as a filled rectangle. this.fillRect = false; // prop: strokeRect // true to draw shape as a stroked rectangle. this.strokeRect = false; // prop: clearRect // true to cear a rectangle. this.clearRect = false; // prop: strokeStyle // css color spec for the stoke style this.strokeStyle = '#999999'; // prop: fillStyle // css color spec for the fill style. this.fillStyle = '#999999'; $.extend(true, this, options); }; $.jqplot.ShapeRenderer.prototype.init = function(options) { $.extend(true, this, options); }; // function: draw // draws the shape. // // ctx - canvas drawing context // points - array of points for shapes or // [x, y, width, height] for rectangles or // [x, y, radius, start angle (rad), end angle (rad)] for circles and arcs. $.jqplot.ShapeRenderer.prototype.draw = function(ctx, points, options) { ctx.save(); var opts = (options != null) ? options : {}; var fill = (opts.fill != null) ? opts.fill : this.fill; var closePath = (opts.closePath != null) ? opts.closePath : this.closePath; var fillRect = (opts.fillRect != null) ? opts.fillRect : this.fillRect; var strokeRect = (opts.strokeRect != null) ? opts.strokeRect : this.strokeRect; var clearRect = (opts.clearRect != null) ? opts.clearRect : this.clearRect; var isarc = (opts.isarc != null) ? opts.isarc : this.isarc; var linePattern = (opts.linePattern != null) ? opts.linePattern : this.linePattern; var ctxPattern = $.jqplot.LinePattern(ctx, linePattern); ctx.lineWidth = opts.lineWidth || this.lineWidth; ctx.lineJoin = opts.lineJoin || this.lineJoin; ctx.lineCap = opts.lineCap || this.lineCap; ctx.strokeStyle = (opts.strokeStyle || opts.color) || this.strokeStyle; ctx.fillStyle = opts.fillStyle || this.fillStyle; ctx.beginPath(); if (isarc) { ctx.arc(points[0], points[1], points[2], points[3], points[4], true); if (closePath) { ctx.closePath(); } if (fill) { ctx.fill(); } else { ctx.stroke(); } ctx.restore(); return; } else if (clearRect) { ctx.clearRect(points[0], points[1], points[2], points[3]); ctx.restore(); return; } else if (fillRect || strokeRect) { if (fillRect) { ctx.fillRect(points[0], points[1], points[2], points[3]); } if (strokeRect) { ctx.strokeRect(points[0], points[1], points[2], points[3]); ctx.restore(); return; } } else if (points && points.length){ var move = true; for (var i=0; i<points.length; i++) { // skip to the first non-null point and move to it. if (points[i][0] != null && points[i][1] != null) { if (move) { ctxPattern.moveTo(points[i][0], points[i][1]); move = false; } else { ctxPattern.lineTo(points[i][0], points[i][1]); } } else { move = true; } } if (closePath) { ctxPattern.closePath(); } if (fill) { ctx.fill(); } else { ctx.stroke(); } } ctx.restore(); }; // class $.jqplot.TableLegendRenderer // The default legend renderer for jqPlot. $.jqplot.TableLegendRenderer = function(){ // }; $.jqplot.TableLegendRenderer.prototype.init = function(options) { $.extend(true, this, options); }; $.jqplot.TableLegendRenderer.prototype.addrow = function (label, color, pad, reverse) { var rs = (pad) ? this.rowSpacing+'px' : '0px'; var tr; var td; var elem; var div0; var div1; elem = document.createElement('tr'); tr = $(elem); tr.addClass('jqplot-table-legend'); elem = null; if (reverse){ tr.prependTo(this._elem); } else{ tr.appendTo(this._elem); } if (this.showSwatches) { td = $(document.createElement('td')); td.addClass('jqplot-table-legend jqplot-table-legend-swatch'); td.css({textAlign: 'center', paddingTop: rs}); div0 = $(document.createElement('div')); div0.addClass('jqplot-table-legend-swatch-outline'); div1 = $(document.createElement('div')); div1.addClass('jqplot-table-legend-swatch'); div1.css({backgroundColor: color, borderColor: color}); tr.append(td.append(div0.append(div1))); // $('<td class="jqplot-table-legend" style="text-align:center;padding-top:'+rs+';">'+ // '<div><div class="jqplot-table-legend-swatch" style="background-color:'+color+';border-color:'+color+';"></div>'+ // '</div></td>').appendTo(tr); } if (this.showLabels) { td = $(document.createElement('td')); td.addClass('jqplot-table-legend jqplot-table-legend-label'); td.css('paddingTop', rs); tr.append(td); // elem = $('<td class="jqplot-table-legend" style="padding-top:'+rs+';"></td>'); // elem.appendTo(tr); if (this.escapeHtml) { td.text(label); } else { td.html(label); } } td = null; div0 = null; div1 = null; tr = null; elem = null; }; // called with scope of legend $.jqplot.TableLegendRenderer.prototype.draw = function() { if (this._elem) { this._elem.emptyForce(); this._elem = null; } if (this.show) { var series = this._series; // make a table. one line label per row. var elem = document.createElement('table'); this._elem = $(elem); this._elem.addClass('jqplot-table-legend'); var ss = {position:'absolute'}; if (this.background) { ss['background'] = this.background; } if (this.border) { ss['border'] = this.border; } if (this.fontSize) { ss['fontSize'] = this.fontSize; } if (this.fontFamily) { ss['fontFamily'] = this.fontFamily; } if (this.textColor) { ss['textColor'] = this.textColor; } if (this.marginTop != null) { ss['marginTop'] = this.marginTop; } if (this.marginBottom != null) { ss['marginBottom'] = this.marginBottom; } if (this.marginLeft != null) { ss['marginLeft'] = this.marginLeft; } if (this.marginRight != null) { ss['marginRight'] = this.marginRight; } var pad = false, reverse = false, s; for (var i = 0; i< series.length; i++) { s = series[i]; if (s._stack || s.renderer.constructor == $.jqplot.BezierCurveRenderer){ reverse = true; } if (s.show && s.showLabel) { var lt = this.labels[i] || s.label.toString(); if (lt) { var color = s.color; if (reverse && i < series.length - 1){ pad = true; } else if (reverse && i == series.length - 1){ pad = false; } this.renderer.addrow.call(this, lt, color, pad, reverse); pad = true; } // let plugins add more rows to legend. Used by trend line plugin. for (var j=0; j<$.jqplot.addLegendRowHooks.length; j++) { var item = $.jqplot.addLegendRowHooks[j].call(this, s); if (item) { this.renderer.addrow.call(this, item.label, item.color, pad); pad = true; } } lt = null; } } } return this._elem; }; $.jqplot.TableLegendRenderer.prototype.pack = function(offsets) { if (this.show) { if (this.placement == 'insideGrid') { switch (this.location) { case 'nw': var a = offsets.left; var b = offsets.top; this._elem.css('left', a); this._elem.css('top', b); break; case 'n': var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; var b = offsets.top; this._elem.css('left', a); this._elem.css('top', b); break; case 'ne': var a = offsets.right; var b = offsets.top; this._elem.css({right:a, top:b}); break; case 'e': var a = offsets.right; var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; this._elem.css({right:a, top:b}); break; case 'se': var a = offsets.right; var b = offsets.bottom; this._elem.css({right:a, bottom:b}); break; case 's': var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; var b = offsets.bottom; this._elem.css({left:a, bottom:b}); break; case 'sw': var a = offsets.left; var b = offsets.bottom; this._elem.css({left:a, bottom:b}); break; case 'w': var a = offsets.left; var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; this._elem.css({left:a, top:b}); break; default: // same as 'se' var a = offsets.right; var b = offsets.bottom; this._elem.css({right:a, bottom:b}); break; } } else if (this.placement == 'outside'){ switch (this.location) { case 'nw': var a = this._plotDimensions.width - offsets.left; var b = offsets.top; this._elem.css('right', a); this._elem.css('top', b); break; case 'n': var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; var b = this._plotDimensions.height - offsets.top; this._elem.css('left', a); this._elem.css('bottom', b); break; case 'ne': var a = this._plotDimensions.width - offsets.right; var b = offsets.top; this._elem.css({left:a, top:b}); break; case 'e': var a = this._plotDimensions.width - offsets.right; var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; this._elem.css({left:a, top:b}); break; case 'se': var a = this._plotDimensions.width - offsets.right; var b = offsets.bottom; this._elem.css({left:a, bottom:b}); break; case 's': var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; var b = this._plotDimensions.height - offsets.bottom; this._elem.css({left:a, top:b}); break; case 'sw': var a = this._plotDimensions.width - offsets.left; var b = offsets.bottom; this._elem.css({right:a, bottom:b}); break; case 'w': var a = this._plotDimensions.width - offsets.left; var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; this._elem.css({right:a, top:b}); break; default: // same as 'se' var a = offsets.right; var b = offsets.bottom; this._elem.css({right:a, bottom:b}); break; } } else { switch (this.location) { case 'nw': this._elem.css({left:0, top:offsets.top}); break; case 'n': var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; this._elem.css({left: a, top:offsets.top}); break; case 'ne': this._elem.css({right:0, top:offsets.top}); break; case 'e': var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; this._elem.css({right:offsets.right, top:b}); break; case 'se': this._elem.css({right:offsets.right, bottom:offsets.bottom}); break; case 's': var a = (offsets.left + (this._plotDimensions.width - offsets.right))/2 - this.getWidth()/2; this._elem.css({left: a, bottom:offsets.bottom}); break; case 'sw': this._elem.css({left:offsets.left, bottom:offsets.bottom}); break; case 'w': var b = (offsets.top + (this._plotDimensions.height - offsets.bottom))/2 - this.getHeight()/2; this._elem.css({left:offsets.left, top:b}); break; default: // same as 'se' this._elem.css({right:offsets.right, bottom:offsets.bottom}); break; } } } }; /** * Class: $.jqplot.ThemeEngine * Theme Engine provides a programatic way to change some of the more * common jqplot styling options such as fonts, colors and grid options. * A theme engine instance is created with each plot. The theme engine * manages a collection of themes which can be modified, added to, or * applied to the plot. * * The themeEngine class is not instantiated directly. * When a plot is initialized, the current plot options are scanned * an a default theme named "Default" is created. This theme is * used as the basis for other themes added to the theme engine and * is always available. * * A theme is a simple javascript object with styling parameters for * various entities of the plot. A theme has the form: * * * > { * > _name:f "Default", * > target: { * > backgroundColor: "transparent" * > }, * > legend: { * > textColor: null, * > fontFamily: null, * > fontSize: null, * > border: null, * > background: null * > }, * > title: { * > textColor: "rgb(102, 102, 102)", * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif", * > fontSize: "19.2px", * > textAlign: "center" * > }, * > seriesStyles: {}, * > series: [{ * > color: "#4bb2c5", * > lineWidth: 2.5, * > linePattern: "solid", * > shadow: true, * > fillColor: "#4bb2c5", * > showMarker: true, * > markerOptions: { * > color: "#4bb2c5", * > show: true, * > style: 'filledCircle', * > lineWidth: 1.5, * > size: 4, * > shadow: true * > } * > }], * > grid: { * > drawGridlines: true, * > gridLineColor: "#cccccc", * > gridLineWidth: 1, * > backgroundColor: "#fffdf6", * > borderColor: "#999999", * > borderWidth: 2, * > shadow: true * > }, * > axesStyles: { * > label: {}, * > ticks: {} * > }, * > axes: { * > xaxis: { * > borderColor: "#999999", * > borderWidth: 2, * > ticks: { * > show: true, * > showGridline: true, * > showLabel: true, * > showMark: true, * > size: 4, * > textColor: "", * > whiteSpace: "nowrap", * > fontSize: "12px", * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif" * > }, * > label: { * > textColor: "rgb(102, 102, 102)", * > whiteSpace: "normal", * > fontSize: "14.6667px", * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif", * > fontWeight: "400" * > } * > }, * > yaxis: { * > borderColor: "#999999", * > borderWidth: 2, * > ticks: { * > show: true, * > showGridline: true, * > showLabel: true, * > showMark: true, * > size: 4, * > textColor: "", * > whiteSpace: "nowrap", * > fontSize: "12px", * > fontFamily: "'Trebuchet MS',Arial,Helvetica,sans-serif" * > }, * > label: { * > textColor: null, * > whiteSpace: null, * > fontSize: null, * > fontFamily: null, * > fontWeight: null * > } * > }, * > x2axis: {... * > }, * > ... * > y9axis: {... * > } * > } * > } * * "seriesStyles" is a style object that will be applied to all series in the plot. * It will forcibly override any styles applied on the individual series. "axesStyles" is * a style object that will be applied to all axes in the plot. It will also forcibly * override any styles on the individual axes. * * The example shown above has series options for a line series. Options for other * series types are shown below: * * Bar Series: * * > { * > color: "#4bb2c5", * > seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"], * > lineWidth: 2.5, * > shadow: true, * > barPadding: 2, * > barMargin: 10, * > barWidth: 15.09375, * > highlightColors: ["rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)", "rgb(129,201,214)"] * > } * * Pie Series: * * > { * > seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"], * > padding: 20, * > sliceMargin: 0, * > fill: true, * > shadow: true, * > startAngle: 0, * > lineWidth: 2.5, * > highlightColors: ["rgb(129,201,214)", "rgb(240,189,104)", "rgb(214,202,165)", "rgb(137,180,158)", "rgb(168,180,137)", "rgb(180,174,89)", "rgb(180,113,161)", "rgb(129,141,236)", "rgb(227,205,120)", "rgb(255,138,76)", "rgb(76,169,219)", "rgb(215,126,190)", "rgb(220,232,135)", "rgb(200,167,96)", "rgb(103,202,235)", "rgb(208,154,215)"] * > } * * Funnel Series: * * > { * > color: "#4bb2c5", * > lineWidth: 2, * > shadow: true, * > padding: { * > top: 20, * > right: 20, * > bottom: 20, * > left: 20 * > }, * > sectionMargin: 6, * > seriesColors: ["#4bb2c5", "#EAA228", "#c5b47f", "#579575", "#839557", "#958c12", "#953579", "#4b5de4", "#d8b83f", "#ff5800", "#0085cc", "#c747a3", "#cddf54", "#FBD178", "#26B4E3", "#bd70c7"], * > highlightColors: ["rgb(147,208,220)", "rgb(242,199,126)", "rgb(220,210,178)", "rgb(154,191,172)", "rgb(180,191,154)", "rgb(191,186,112)", "rgb(191,133,174)", "rgb(147,157,238)", "rgb(231,212,139)", "rgb(255,154,102)", "rgb(102,181,224)", "rgb(221,144,199)", "rgb(225,235,152)", "rgb(200,167,96)", "rgb(124,210,238)", "rgb(215,169,221)"] * > } * */ $.jqplot.ThemeEngine = function(){ // Group: Properties // // prop: themes // hash of themes managed by the theme engine. // Indexed by theme name. this.themes = {}; // prop: activeTheme // Pointer to currently active theme this.activeTheme=null; }; // called with scope of plot $.jqplot.ThemeEngine.prototype.init = function() { // get the Default theme from the current plot settings. var th = new $.jqplot.Theme({_name:'Default'}); var n, i, nn; for (n in th.target) { if (n == "textColor") { th.target[n] = this.target.css('color'); } else { th.target[n] = this.target.css(n); } } if (this.title.show && this.title._elem) { for (n in th.title) { if (n == "textColor") { th.title[n] = this.title._elem.css('color'); } else { th.title[n] = this.title._elem.css(n); } } } for (n in th.grid) { th.grid[n] = this.grid[n]; } if (th.grid.backgroundColor == null && this.grid.background != null) { th.grid.backgroundColor = this.grid.background; } if (this.legend.show && this.legend._elem) { for (n in th.legend) { if (n == 'textColor') { th.legend[n] = this.legend._elem.css('color'); } else { th.legend[n] = this.legend._elem.css(n); } } } var s; for (i=0; i<this.series.length; i++) { s = this.series[i]; if (s.renderer.constructor == $.jqplot.LineRenderer) { th.series.push(new LineSeriesProperties()); } else if (s.renderer.constructor == $.jqplot.BarRenderer) { th.series.push(new BarSeriesProperties()); } else if (s.renderer.constructor == $.jqplot.PieRenderer) { th.series.push(new PieSeriesProperties()); } else if (s.renderer.constructor == $.jqplot.DonutRenderer) { th.series.push(new DonutSeriesProperties()); } else if (s.renderer.constructor == $.jqplot.FunnelRenderer) { th.series.push(new FunnelSeriesProperties()); } else if (s.renderer.constructor == $.jqplot.MeterGaugeRenderer) { th.series.push(new MeterSeriesProperties()); } else { th.series.push({}); } for (n in th.series[i]) { th.series[i][n] = s[n]; } } var a, ax; for (n in this.axes) { ax = this.axes[n]; a = th.axes[n] = new AxisProperties(); a.borderColor = ax.borderColor; a.borderWidth = ax.borderWidth; if (ax._ticks && ax._ticks[0]) { for (nn in a.ticks) { if (ax._ticks[0].hasOwnProperty(nn)) { a.ticks[nn] = ax._ticks[0][nn]; } else if (ax._ticks[0]._elem){ a.ticks[nn] = ax._ticks[0]._elem.css(nn); } } } if (ax._label && ax._label.show) { for (nn in a.label) { // a.label[nn] = ax._label._elem.css(nn); if (ax._label[nn]) { a.label[nn] = ax._label[nn]; } else if (ax._label._elem){ if (nn == 'textColor') { a.label[nn] = ax._label._elem.css('color'); } else { a.label[nn] = ax._label._elem.css(nn); } } } } } this.themeEngine._add(th); this.themeEngine.activeTheme = this.themeEngine.themes[th._name]; }; /** * Group: methods * * method: get * * Get and return the named theme or the active theme if no name given. * * parameter: * * name - name of theme to get. * * returns: * * Theme instance of given name. */ $.jqplot.ThemeEngine.prototype.get = function(name) { if (!name) { // return the active theme return this.activeTheme; } else { return this.themes[name]; } }; function numericalOrder(a,b) { return a-b; } /** * method: getThemeNames * * Return the list of theme names in this manager in alpha-numerical order. * * parameter: * * None * * returns: * * A the list of theme names in this manager in alpha-numerical order. */ $.jqplot.ThemeEngine.prototype.getThemeNames = function() { var tn = []; for (var n in this.themes) { tn.push(n); } return tn.sort(numericalOrder); }; /** * method: getThemes * * Return a list of themes in alpha-numerical order by name. * * parameter: * * None * * returns: * * A list of themes in alpha-numerical order by name. */ $.jqplot.ThemeEngine.prototype.getThemes = function() { var tn = []; var themes = []; for (var n in this.themes) { tn.push(n); } tn.sort(numericalOrder); for (var i=0; i<tn.length; i++) { themes.push(this.themes[tn[i]]); } return themes; }; $.jqplot.ThemeEngine.prototype.activate = function(plot, name) { // sometimes need to redraw whole plot. var redrawPlot = false; if (!name && this.activeTheme && this.activeTheme._name) { name = this.activeTheme._name; } if (!this.themes.hasOwnProperty(name)) { throw new Error("No theme of that name"); } else { var th = this.themes[name]; this.activeTheme = th; var val, checkBorderColor = false, checkBorderWidth = false; var arr = ['xaxis', 'x2axis', 'yaxis', 'y2axis']; for (i=0; i<arr.length; i++) { var ax = arr[i]; if (th.axesStyles.borderColor != null) { plot.axes[ax].borderColor = th.axesStyles.borderColor; } if (th.axesStyles.borderWidth != null) { plot.axes[ax].borderWidth = th.axesStyles.borderWidth; } } for (var axname in plot.axes) { var axis = plot.axes[axname]; if (axis.show) { var thaxis = th.axes[axname] || {}; var thaxstyle = th.axesStyles; var thax = $.jqplot.extend(true, {}, thaxis, thaxstyle); val = (th.axesStyles.borderColor != null) ? th.axesStyles.borderColor : thax.borderColor; if (thax.borderColor != null) { axis.borderColor = thax.borderColor; redrawPlot = true; } val = (th.axesStyles.borderWidth != null) ? th.axesStyles.borderWidth : thax.borderWidth; if (thax.borderWidth != null) { axis.borderWidth = thax.borderWidth; redrawPlot = true; } if (axis._ticks && axis._ticks[0]) { for (var nn in thax.ticks) { // val = null; // if (th.axesStyles.ticks && th.axesStyles.ticks[nn] != null) { // val = th.axesStyles.ticks[nn]; // } // else if (thax.ticks[nn] != null){ // val = thax.ticks[nn] // } val = thax.ticks[nn]; if (val != null) { axis.tickOptions[nn] = val; axis._ticks = []; redrawPlot = true; } } } if (axis._label && axis._label.show) { for (var nn in thax.label) { // val = null; // if (th.axesStyles.label && th.axesStyles.label[nn] != null) { // val = th.axesStyles.label[nn]; // } // else if (thax.label && thax.label[nn] != null){ // val = thax.label[nn] // } val = thax.label[nn]; if (val != null) { axis.labelOptions[nn] = val; redrawPlot = true; } } } } } for (var n in th.grid) { if (th.grid[n] != null) { plot.grid[n] = th.grid[n]; } } if (!redrawPlot) { plot.grid.draw(); } if (plot.legend.show) { for (n in th.legend) { if (th.legend[n] != null) { plot.legend[n] = th.legend[n]; } } } if (plot.title.show) { for (n in th.title) { if (th.title[n] != null) { plot.title[n] = th.title[n]; } } } var i; for (i=0; i<th.series.length; i++) { var opts = {}; var redrawSeries = false; for (n in th.series[i]) { val = (th.seriesStyles[n] != null) ? th.seriesStyles[n] : th.series[i][n]; if (val != null) { opts[n] = val; if (n == 'color') { plot.series[i].renderer.shapeRenderer.fillStyle = val; plot.series[i].renderer.shapeRenderer.strokeStyle = val; plot.series[i][n] = val; } else if ((n == 'lineWidth') || (n == 'linePattern')) { plot.series[i].renderer.shapeRenderer[n] = val; plot.series[i][n] = val; } else if (n == 'markerOptions') { merge (plot.series[i].markerOptions, val); merge (plot.series[i].markerRenderer, val); } else { plot.series[i][n] = val; } redrawPlot = true; } } } if (redrawPlot) { plot.target.empty(); plot.draw(); } for (n in th.target) { if (th.target[n] != null) { plot.target.css(n, th.target[n]); } } } }; $.jqplot.ThemeEngine.prototype._add = function(theme, name) { if (name) { theme._name = name; } if (!theme._name) { theme._name = Date.parse(new Date()); } if (!this.themes.hasOwnProperty(theme._name)) { this.themes[theme._name] = theme; } else { throw new Error("jqplot.ThemeEngine Error: Theme already in use"); } }; // method remove // Delete the named theme, return true on success, false on failure. /** * method: remove * * Remove the given theme from the themeEngine. * * parameters: * * name - name of the theme to remove. * * returns: * * true on success, false on failure. */ $.jqplot.ThemeEngine.prototype.remove = function(name) { if (name == 'Default') { return false; } return delete this.themes[name]; }; /** * method: newTheme * * Create a new theme based on the default theme, adding it the themeEngine. * * parameters: * * name - name of the new theme. * obj - optional object of styles to be applied to this new theme. * * returns: * * new Theme object. */ $.jqplot.ThemeEngine.prototype.newTheme = function(name, obj) { if (typeof(name) == 'object') { obj = obj || name; name = null; } if (obj && obj._name) { name = obj._name; } else { name = name || Date.parse(new Date()); } // var th = new $.jqplot.Theme(name); var th = this.copy(this.themes['Default']._name, name); $.jqplot.extend(th, obj); return th; }; // function clone(obj) { // return eval(obj.toSource()); // } function clone(obj){ if(obj == null || typeof(obj) != 'object'){ return obj; } var temp = new obj.constructor(); for(var key in obj){ temp[key] = clone(obj[key]); } return temp; } $.jqplot.clone = clone; function merge(obj1, obj2) { if (obj2 == null || typeof(obj2) != 'object') { return; } for (var key in obj2) { if (key == 'highlightColors') { obj1[key] = clone(obj2[key]); } if (obj2[key] != null && typeof(obj2[key]) == 'object') { if (!obj1.hasOwnProperty(key)) { obj1[key] = {}; } merge(obj1[key], obj2[key]); } else { obj1[key] = obj2[key]; } } } $.jqplot.merge = merge; // Use the jQuery 1.3.2 extend function since behaviour in jQuery 1.4 seems problematic $.jqplot.extend = function() { // copy reference to target object var target = arguments[0] || {}, i = 1, length = arguments.length, deep = false, options; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !toString.call(target) === "[object Function]" ) { target = {}; } for ( ; i < length; i++ ){ // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( var name in options ) { var src = target[ name ], copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging object values if ( deep && copy && typeof copy === "object" && !copy.nodeType ) { target[ name ] = $.jqplot.extend( deep, // Never move original objects, clone them src || ( copy.length != null ? [ ] : { } ) , copy ); } // Don't bring in undefined values else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; /** * method: rename * * Rename a theme. * * parameters: * * oldName - current name of the theme. * newName - desired name of the theme. * * returns: * * new Theme object. */ $.jqplot.ThemeEngine.prototype.rename = function (oldName, newName) { if (oldName == 'Default' || newName == 'Default') { throw new Error ("jqplot.ThemeEngine Error: Cannot rename from/to Default"); } if (this.themes.hasOwnProperty(newName)) { throw new Error ("jqplot.ThemeEngine Error: New name already in use."); } else if (this.themes.hasOwnProperty(oldName)) { var th = this.copy (oldName, newName); this.remove(oldName); return th; } throw new Error("jqplot.ThemeEngine Error: Old name or new name invalid"); }; /** * method: copy * * Create a copy of an existing theme in the themeEngine, adding it the themeEngine. * * parameters: * * sourceName - name of the existing theme. * targetName - name of the copy. * obj - optional object of style parameter to apply to the new theme. * * returns: * * new Theme object. */ $.jqplot.ThemeEngine.prototype.copy = function (sourceName, targetName, obj) { if (targetName == 'Default') { throw new Error ("jqplot.ThemeEngine Error: Cannot copy over Default theme"); } if (!this.themes.hasOwnProperty(sourceName)) { var s = "jqplot.ThemeEngine Error: Source name invalid"; throw new Error(s); } if (this.themes.hasOwnProperty(targetName)) { var s = "jqplot.ThemeEngine Error: Target name invalid"; throw new Error(s); } else { var th = clone(this.themes[sourceName]); th._name = targetName; $.jqplot.extend(true, th, obj); this._add(th); return th; } }; $.jqplot.Theme = function(name, obj) { if (typeof(name) == 'object') { obj = obj || name; name = null; } name = name || Date.parse(new Date()); this._name = name; this.target = { backgroundColor: null }; this.legend = { textColor: null, fontFamily: null, fontSize: null, border: null, background: null }; this.title = { textColor: null, fontFamily: null, fontSize: null, textAlign: null }; this.seriesStyles = {}; this.series = []; this.grid = { drawGridlines: null, gridLineColor: null, gridLineWidth: null, backgroundColor: null, borderColor: null, borderWidth: null, shadow: null }; this.axesStyles = {label:{}, ticks:{}}; this.axes = {}; if (typeof(obj) == 'string') { this._name = obj; } else if(typeof(obj) == 'object') { $.jqplot.extend(true, this, obj); } }; var AxisProperties = function() { this.borderColor = null; this.borderWidth = null; this.ticks = new AxisTicks(); this.label = new AxisLabel(); }; var AxisTicks = function() { this.show = null; this.showGridline = null; this.showLabel = null; this.showMark = null; this.size = null; this.textColor = null; this.whiteSpace = null; this.fontSize = null; this.fontFamily = null; }; var AxisLabel = function() { this.textColor = null; this.whiteSpace = null; this.fontSize = null; this.fontFamily = null; this.fontWeight = null; }; var LineSeriesProperties = function() { this.color=null; this.lineWidth=null; this.linePattern=null; this.shadow=null; this.fillColor=null; this.showMarker=null; this.markerOptions = new MarkerOptions(); }; var MarkerOptions = function() { this.show = null; this.style = null; this.lineWidth = null; this.size = null; this.color = null; this.shadow = null; }; var BarSeriesProperties = function() { this.color=null; this.seriesColors=null; this.lineWidth=null; this.shadow=null; this.barPadding=null; this.barMargin=null; this.barWidth=null; this.highlightColors=null; }; var PieSeriesProperties = function() { this.seriesColors=null; this.padding=null; this.sliceMargin=null; this.fill=null; this.shadow=null; this.startAngle=null; this.lineWidth=null; this.highlightColors=null; }; var DonutSeriesProperties = function() { this.seriesColors=null; this.padding=null; this.sliceMargin=null; this.fill=null; this.shadow=null; this.startAngle=null; this.lineWidth=null; this.innerDiameter=null; this.thickness=null; this.ringMargin=null; this.highlightColors=null; }; var FunnelSeriesProperties = function() { this.color=null; this.lineWidth=null; this.shadow=null; this.padding=null; this.sectionMargin=null; this.seriesColors=null; this.highlightColors=null; }; var MeterSeriesProperties = function() { this.padding=null; this.backgroundColor=null; this.ringColor=null; this.tickColor=null; this.ringWidth=null; this.intervalColors=null; this.intervalInnerRadius=null; this.intervalOuterRadius=null; this.hubRadius=null; this.needleThickness=null; this.needlePad=null; }; $.fn.jqplotChildText = function() { return $(this).contents().filter(function() { return this.nodeType == 3; // Node.TEXT_NODE not defined in I7 }).text(); }; // Returns font style as abbreviation for "font" property. $.fn.jqplotGetComputedFontStyle = function() { var css = window.getComputedStyle ? window.getComputedStyle(this[0], "") : this[0].currentStyle; var attrs = css['font-style'] ? ['font-style', 'font-weight', 'font-size', 'font-family'] : ['fontStyle', 'fontWeight', 'fontSize', 'fontFamily']; var style = []; for (var i=0 ; i < attrs.length; ++i) { var attr = String(css[attrs[i]]); if (attr && attr != 'normal') { style.push(attr); } } return style.join(' '); }; /** * Namespace: $.fn * jQuery namespace to attach functions to jQuery elements. * */ $.fn.jqplotToImageCanvas = function(options) { options = options || {}; var x_offset = (options.x_offset == null) ? 0 : options.x_offset; var y_offset = (options.y_offset == null) ? 0 : options.y_offset; var backgroundColor = (options.backgroundColor == null) ? 'rgb(255,255,255)' : options.backgroundColor; if ($(this).width() == 0 || $(this).height() == 0) { return null; } // excanvas and hence IE < 9 do not support toDataURL and cannot export images. if ($.jqplot.use_excanvas) { return null; } var newCanvas = document.createElement("canvas"); var h = $(this).outerHeight(true); var w = $(this).outerWidth(true); var offs = $(this).offset(); var plotleft = offs.left; var plottop = offs.top; var transx = 0, transy = 0; // have to check if any elements are hanging outside of plot area before rendering, // since changing width of canvas will erase canvas. var clses = ['jqplot-table-legend', 'jqplot-xaxis-tick', 'jqplot-x2axis-tick', 'jqplot-yaxis-tick', 'jqplot-y2axis-tick', 'jqplot-y3axis-tick', 'jqplot-y4axis-tick', 'jqplot-y5axis-tick', 'jqplot-y6axis-tick', 'jqplot-y7axis-tick', 'jqplot-y8axis-tick', 'jqplot-y9axis-tick', 'jqplot-xaxis-label', 'jqplot-x2axis-label', 'jqplot-yaxis-label', 'jqplot-y2axis-label', 'jqplot-y3axis-label', 'jqplot-y4axis-label', 'jqplot-y5axis-label', 'jqplot-y6axis-label', 'jqplot-y7axis-label', 'jqplot-y8axis-label', 'jqplot-y9axis-label' ]; var temptop, templeft, tempbottom, tempright; for (var i = 0; i < clses.length; i++) { $(this).find('.'+clses[i]).each(function() { temptop = $(this).offset().top - plottop; templeft = $(this).offset().left - plotleft; tempright = templeft + $(this).outerWidth(true) + transx; tempbottom = temptop + $(this).outerHeight(true) + transy; if (templeft < -transx) { w = w - transx - templeft; transx = -templeft; } if (temptop < -transy) { h = h - transy - temptop; transy = - temptop; } if (tempright > w) { w = tempright; } if (tempbottom > h) { h = tempbottom; } }); } newCanvas.width = w + Number(x_offset); newCanvas.height = h + Number(y_offset); var newContext = newCanvas.getContext("2d"); newContext.save(); newContext.fillStyle = backgroundColor; newContext.fillRect(0,0, newCanvas.width, newCanvas.height); newContext.restore(); newContext.translate(transx, transy); newContext.textAlign = 'left'; newContext.textBaseline = 'top'; function getLineheight(el) { var lineheight = parseInt($(el).css('line-height'), 10); if (isNaN(lineheight)) { lineheight = parseInt($(el).css('font-size'), 10) * 1.2; } return lineheight; } function writeWrappedText (el, context, text, left, top, canvasWidth) { var lineheight = getLineheight(el); var tagwidth = $(el).innerWidth(); var tagheight = $(el).innerHeight(); var words = text.split(/\s+/); var wl = words.length; var w = ''; var breaks = []; var temptop = top; var templeft = left; for (var i=0; i<wl; i++) { w += words[i]; if (context.measureText(w).width > tagwidth) { breaks.push(i); w = ''; i--; } } if (breaks.length === 0) { // center text if necessary if ($(el).css('textAlign') === 'center') { templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx; } context.fillText(text, templeft, top); } else { w = words.slice(0, breaks[0]).join(' '); // center text if necessary if ($(el).css('textAlign') === 'center') { templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx; } context.fillText(w, templeft, temptop); temptop += lineheight; for (var i=1, l=breaks.length; i<l; i++) { w = words.slice(breaks[i-1], breaks[i]).join(' '); // center text if necessary if ($(el).css('textAlign') === 'center') { templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx; } context.fillText(w, templeft, temptop); temptop += lineheight; } w = words.slice(breaks[i-1], words.length).join(' '); // center text if necessary if ($(el).css('textAlign') === 'center') { templeft = left + (canvasWidth - context.measureText(w).width)/2 - transx; } context.fillText(w, templeft, temptop); } } function _jqpToImage(el, x_offset, y_offset) { var tagname = el.tagName.toLowerCase(); var p = $(el).position(); var css = window.getComputedStyle ? window.getComputedStyle(el, "") : el.currentStyle; // for IE < 9 var left = x_offset + p.left + parseInt(css.marginLeft, 10) + parseInt(css.borderLeftWidth, 10) + parseInt(css.paddingLeft, 10); var top = y_offset + p.top + parseInt(css.marginTop, 10) + parseInt(css.borderTopWidth, 10)+ parseInt(css.paddingTop, 10); var w = newCanvas.width; // var left = x_offset + p.left + $(el).css('marginLeft') + $(el).css('borderLeftWidth') // somehow in here, for divs within divs, the width of the inner div should be used instead of the canvas. if ((tagname == 'div' || tagname == 'span') && !$(el).hasClass('jqplot-highlighter-tooltip')) { $(el).children().each(function() { _jqpToImage(this, left, top); }); var text = $(el).jqplotChildText(); if (text) { newContext.font = $(el).jqplotGetComputedFontStyle(); newContext.fillStyle = $(el).css('color'); writeWrappedText(el, newContext, text, left, top, w); } } // handle the standard table legend else if (tagname === 'table' && $(el).hasClass('jqplot-table-legend')) { newContext.strokeStyle = $(el).css('border-top-color'); newContext.fillStyle = $(el).css('background-color'); newContext.fillRect(left, top, $(el).innerWidth(), $(el).innerHeight()); if (parseInt($(el).css('border-top-width'), 10) > 0) { newContext.strokeRect(left, top, $(el).innerWidth(), $(el).innerHeight()); } // find all the swatches $(el).find('div.jqplot-table-legend-swatch-outline').each(function() { // get the first div and stroke it var elem = $(this); newContext.strokeStyle = elem.css('border-top-color'); var l = left + elem.position().left; var t = top + elem.position().top; newContext.strokeRect(l, t, elem.innerWidth(), elem.innerHeight()); // now fill the swatch l += parseInt(elem.css('padding-left'), 10); t += parseInt(elem.css('padding-top'), 10); var h = elem.innerHeight() - 2 * parseInt(elem.css('padding-top'), 10); var w = elem.innerWidth() - 2 * parseInt(elem.css('padding-left'), 10); var swatch = elem.children('div.jqplot-table-legend-swatch'); newContext.fillStyle = swatch.css('background-color'); newContext.fillRect(l, t, w, h); }); // now add text $(el).find('td.jqplot-table-legend-label').each(function(){ var elem = $(this); var l = left + elem.position().left; var t = top + elem.position().top + parseInt(elem.css('padding-top'), 10); newContext.font = elem.jqplotGetComputedFontStyle(); newContext.fillStyle = elem.css('color'); writeWrappedText(elem, newContext, elem.text(), l, t, w); }); var elem = null; } else if (tagname == 'canvas') { newContext.drawImage(el, left, top); } } $(this).children().each(function() { _jqpToImage(this, x_offset, y_offset); }); return newCanvas; }; // return the raw image data string. // Should work on canvas supporting browsers. $.fn.jqplotToImageStr = function(options) { var imgCanvas = $(this).jqplotToImageCanvas(options); if (imgCanvas) { return imgCanvas.toDataURL("image/png"); } else { return null; } }; // return a DOM <img> element and return it. // Should work on canvas supporting browsers. $.fn.jqplotToImageElem = function(options) { var elem = document.createElement("img"); var str = $(this).jqplotToImageStr(options); elem.src = str; return elem; }; // return a string for an <img> element and return it. // Should work on canvas supporting browsers. $.fn.jqplotToImageElemStr = function(options) { var str = '<img src='+$(this).jqplotToImageStr(options)+' />'; return str; }; // Not guaranteed to work, even on canvas supporting browsers due to // limitations with location.href and browser support. $.fn.jqplotSaveImage = function() { var imgData = $(this).jqplotToImageStr({}); if (imgData) { window.location.href = imgData.replace("image/png", "image/octet-stream"); } }; // Not guaranteed to work, even on canvas supporting browsers due to // limitations with window.open and arbitrary data. $.fn.jqplotViewImage = function() { var imgStr = $(this).jqplotToImageElemStr({}); var imgData = $(this).jqplotToImageStr({}); if (imgStr) { var w = window.open(''); w.document.open("image/png"); w.document.write(imgStr); w.document.close(); w = null; } }; /** * @description * <p>Object with extended date parsing and formatting capabilities. * This library borrows many concepts and ideas from the Date Instance * Methods by Ken Snyder along with some parts of Ken's actual code.</p> * * <p>jsDate takes a different approach by not extending the built-in * Date Object, improving date parsing, allowing for multiple formatting * syntaxes and multiple and more easily expandable localization.</p> * * @author Chris Leonello * @date #date# * @version #VERSION# * @copyright (c) 2010-2013 Chris Leonello * jsDate is currently available for use in all personal or commercial projects * under both the MIT and GPL version 2.0 licenses. This means that you can * choose the license that best suits your project and use it accordingly. * * <p>Ken's original Date Instance Methods and copyright notice:</p> * <pre> * Ken Snyder (ken d snyder at gmail dot com) * 2008-09-10 * version 2.0.2 (http://kendsnyder.com/sandbox/date/) * Creative Commons Attribution License 3.0 (http://creativecommons.org/licenses/by/3.0/) * </pre> * * @class * @name jsDate * @param {String | Number | Array | Date Object | Options Object} arguments Optional arguments, either a parsable date/time string, * a JavaScript timestamp, an array of numbers of form [year, month, day, hours, minutes, seconds, milliseconds], * a Date object, or an options object of form {syntax: "perl", date:some Date} where all options are optional. */ var jsDate = function () { this.syntax = jsDate.config.syntax; this._type = "jsDate"; this.proxy = new Date(); this.options = {}; this.locale = jsDate.regional.getLocale(); this.formatString = ''; this.defaultCentury = jsDate.config.defaultCentury; switch ( arguments.length ) { case 0: break; case 1: // other objects either won't have a _type property or, // if they do, it shouldn't be set to "jsDate", so // assume it is an options argument. if (get_type(arguments[0]) == "[object Object]" && arguments[0]._type != "jsDate") { var opts = this.options = arguments[0]; this.syntax = opts.syntax || this.syntax; this.defaultCentury = opts.defaultCentury || this.defaultCentury; this.proxy = jsDate.createDate(opts.date); } else { this.proxy = jsDate.createDate(arguments[0]); } break; default: var a = []; for ( var i=0; i<arguments.length; i++ ) { a.push(arguments[i]); } // this should be the current date/time? this.proxy = new Date(); this.proxy.setFullYear.apply( this.proxy, a.slice(0,3) ); if ( a.slice(3).length ) { this.proxy.setHours.apply( this.proxy, a.slice(3) ); } break; } }; /** * @namespace Configuration options that will be used as defaults for all instances on the page. * @property {String} defaultLocale The default locale to use [en]. * @property {String} syntax The default syntax to use [perl]. * @property {Number} defaultCentury The default centry for 2 digit dates. */ jsDate.config = { defaultLocale: 'en', syntax: 'perl', defaultCentury: 1900 }; /** * Add an arbitrary amount to the currently stored date * * @param {Number} number * @param {String} unit * @returns {jsDate} */ jsDate.prototype.add = function(number, unit) { var factor = multipliers[unit] || multipliers.day; if (typeof factor == 'number') { this.proxy.setTime(this.proxy.getTime() + (factor * number)); } else { factor.add(this, number); } return this; }; /** * Create a new jqplot.date object with the same date * * @returns {jsDate} */ jsDate.prototype.clone = function() { return new jsDate(this.proxy.getTime()); }; /** * Get the UTC TimeZone Offset of this date in milliseconds. * * @returns {Number} */ jsDate.prototype.getUtcOffset = function() { return this.proxy.getTimezoneOffset() * 60000; }; /** * Find the difference between this jsDate and another date. * * @param {String| Number| Array| jsDate Object| Date Object} dateObj * @param {String} unit * @param {Boolean} allowDecimal * @returns {Number} Number of units difference between dates. */ jsDate.prototype.diff = function(dateObj, unit, allowDecimal) { // ensure we have a Date object dateObj = new jsDate(dateObj); if (dateObj === null) { return null; } // get the multiplying factor integer or factor function var factor = multipliers[unit] || multipliers.day; if (typeof factor == 'number') { // multiply var unitDiff = (this.proxy.getTime() - dateObj.proxy.getTime()) / factor; } else { // run function var unitDiff = factor.diff(this.proxy, dateObj.proxy); } // if decimals are not allowed, round toward zero return (allowDecimal ? unitDiff : Math[unitDiff > 0 ? 'floor' : 'ceil'](unitDiff)); }; /** * Get the abbreviated name of the current week day * * @returns {String} */ jsDate.prototype.getAbbrDayName = function() { return jsDate.regional[this.locale]["dayNamesShort"][this.proxy.getDay()]; }; /** * Get the abbreviated name of the current month * * @returns {String} */ jsDate.prototype.getAbbrMonthName = function() { return jsDate.regional[this.locale]["monthNamesShort"][this.proxy.getMonth()]; }; /** * Get UPPER CASE AM or PM for the current time * * @returns {String} */ jsDate.prototype.getAMPM = function() { return this.proxy.getHours() >= 12 ? 'PM' : 'AM'; }; /** * Get lower case am or pm for the current time * * @returns {String} */ jsDate.prototype.getAmPm = function() { return this.proxy.getHours() >= 12 ? 'pm' : 'am'; }; /** * Get the century (19 for 20th Century) * * @returns {Integer} Century (19 for 20th century). */ jsDate.prototype.getCentury = function() { return parseInt(this.proxy.getFullYear()/100, 10); }; /** * Implements Date functionality */ jsDate.prototype.getDate = function() { return this.proxy.getDate(); }; /** * Implements Date functionality */ jsDate.prototype.getDay = function() { return this.proxy.getDay(); }; /** * Get the Day of week 1 (Monday) thru 7 (Sunday) * * @returns {Integer} Day of week 1 (Monday) thru 7 (Sunday) */ jsDate.prototype.getDayOfWeek = function() { var dow = this.proxy.getDay(); return dow===0?7:dow; }; /** * Get the day of the year * * @returns {Integer} 1 - 366, day of the year */ jsDate.prototype.getDayOfYear = function() { var d = this.proxy; var ms = d - new Date('' + d.getFullYear() + '/1/1 GMT'); ms += d.getTimezoneOffset()*60000; d = null; return parseInt(ms/60000/60/24, 10)+1; }; /** * Get the name of the current week day * * @returns {String} */ jsDate.prototype.getDayName = function() { return jsDate.regional[this.locale]["dayNames"][this.proxy.getDay()]; }; /** * Get the week number of the given year, starting with the first Sunday as the first week * @returns {Integer} Week number (13 for the 13th full week of the year). */ jsDate.prototype.getFullWeekOfYear = function() { var d = this.proxy; var doy = this.getDayOfYear(); var rdow = 6-d.getDay(); var woy = parseInt((doy+rdow)/7, 10); return woy; }; /** * Implements Date functionality */ jsDate.prototype.getFullYear = function() { return this.proxy.getFullYear(); }; /** * Get the GMT offset in hours and minutes (e.g. +06:30) * * @returns {String} */ jsDate.prototype.getGmtOffset = function() { // divide the minutes offset by 60 var hours = this.proxy.getTimezoneOffset() / 60; // decide if we are ahead of or behind GMT var prefix = hours < 0 ? '+' : '-'; // remove the negative sign if any hours = Math.abs(hours); // add the +/- to the padded number of hours to : to the padded minutes return prefix + addZeros(Math.floor(hours), 2) + ':' + addZeros((hours % 1) * 60, 2); }; /** * Implements Date functionality */ jsDate.prototype.getHours = function() { return this.proxy.getHours(); }; /** * Get the current hour on a 12-hour scheme * * @returns {Integer} */ jsDate.prototype.getHours12 = function() { var hours = this.proxy.getHours(); return hours > 12 ? hours - 12 : (hours == 0 ? 12 : hours); }; jsDate.prototype.getIsoWeek = function() { var d = this.proxy; var woy = this.getWeekOfYear(); var dow1_1 = (new Date('' + d.getFullYear() + '/1/1')).getDay(); // First week is 01 and not 00 as in the case of %U and %W, // so we add 1 to the final result except if day 1 of the year // is a Monday (then %W returns 01). // We also need to subtract 1 if the day 1 of the year is // Friday-Sunday, so the resulting equation becomes: var idow = woy + (dow1_1 > 4 || dow1_1 <= 1 ? 0 : 1); if(idow == 53 && (new Date('' + d.getFullYear() + '/12/31')).getDay() < 4) { idow = 1; } else if(idow === 0) { d = new jsDate(new Date('' + (d.getFullYear()-1) + '/12/31')); idow = d.getIsoWeek(); } d = null; return idow; }; /** * Implements Date functionality */ jsDate.prototype.getMilliseconds = function() { return this.proxy.getMilliseconds(); }; /** * Implements Date functionality */ jsDate.prototype.getMinutes = function() { return this.proxy.getMinutes(); }; /** * Implements Date functionality */ jsDate.prototype.getMonth = function() { return this.proxy.getMonth(); }; /** * Get the name of the current month * * @returns {String} */ jsDate.prototype.getMonthName = function() { return jsDate.regional[this.locale]["monthNames"][this.proxy.getMonth()]; }; /** * Get the number of the current month, 1-12 * * @returns {Integer} */ jsDate.prototype.getMonthNumber = function() { return this.proxy.getMonth() + 1; }; /** * Implements Date functionality */ jsDate.prototype.getSeconds = function() { return this.proxy.getSeconds(); }; /** * Return a proper two-digit year integer * * @returns {Integer} */ jsDate.prototype.getShortYear = function() { return this.proxy.getYear() % 100; }; /** * Implements Date functionality */ jsDate.prototype.getTime = function() { return this.proxy.getTime(); }; /** * Get the timezone abbreviation * * @returns {String} Abbreviation for the timezone */ jsDate.prototype.getTimezoneAbbr = function() { return this.proxy.toString().replace(/^.*\(([^)]+)\)$/, '$1'); }; /** * Get the browser-reported name for the current timezone (e.g. MDT, Mountain Daylight Time) * * @returns {String} */ jsDate.prototype.getTimezoneName = function() { var match = /(?:\((.+)\)$| ([A-Z]{3}) )/.exec(this.toString()); return match[1] || match[2] || 'GMT' + this.getGmtOffset(); }; /** * Implements Date functionality */ jsDate.prototype.getTimezoneOffset = function() { return this.proxy.getTimezoneOffset(); }; /** * Get the week number of the given year, starting with the first Monday as the first week * @returns {Integer} Week number (13 for the 13th week of the year). */ jsDate.prototype.getWeekOfYear = function() { var doy = this.getDayOfYear(); var rdow = 7 - this.getDayOfWeek(); var woy = parseInt((doy+rdow)/7, 10); return woy; }; /** * Get the current date as a Unix timestamp * * @returns {Integer} */ jsDate.prototype.getUnix = function() { return Math.round(this.proxy.getTime() / 1000, 0); }; /** * Implements Date functionality */ jsDate.prototype.getYear = function() { return this.proxy.getYear(); }; /** * Return a date one day ahead (or any other unit) * * @param {String} unit Optional, year | month | day | week | hour | minute | second | millisecond * @returns {jsDate} */ jsDate.prototype.next = function(unit) { unit = unit || 'day'; return this.clone().add(1, unit); }; /** * Set the jsDate instance to a new date. * * @param {String | Number | Array | Date Object | jsDate Object | Options Object} arguments Optional arguments, * either a parsable date/time string, * a JavaScript timestamp, an array of numbers of form [year, month, day, hours, minutes, seconds, milliseconds], * a Date object, jsDate Object or an options object of form {syntax: "perl", date:some Date} where all options are optional. */ jsDate.prototype.set = function() { switch ( arguments.length ) { case 0: this.proxy = new Date(); break; case 1: // other objects either won't have a _type property or, // if they do, it shouldn't be set to "jsDate", so // assume it is an options argument. if (get_type(arguments[0]) == "[object Object]" && arguments[0]._type != "jsDate") { var opts = this.options = arguments[0]; this.syntax = opts.syntax || this.syntax; this.defaultCentury = opts.defaultCentury || this.defaultCentury; this.proxy = jsDate.createDate(opts.date); } else { this.proxy = jsDate.createDate(arguments[0]); } break; default: var a = []; for ( var i=0; i<arguments.length; i++ ) { a.push(arguments[i]); } // this should be the current date/time this.proxy = new Date(); this.proxy.setFullYear.apply( this.proxy, a.slice(0,3) ); if ( a.slice(3).length ) { this.proxy.setHours.apply( this.proxy, a.slice(3) ); } break; } return this; }; /** * Sets the day of the month for a specified date according to local time. * @param {Integer} dayValue An integer from 1 to 31, representing the day of the month. */ jsDate.prototype.setDate = function(n) { this.proxy.setDate(n); return this; }; /** * Sets the full year for a specified date according to local time. * @param {Integer} yearValue The numeric value of the year, for example, 1995. * @param {Integer} monthValue Optional, between 0 and 11 representing the months January through December. * @param {Integer} dayValue Optional, between 1 and 31 representing the day of the month. If you specify the dayValue parameter, you must also specify the monthValue. */ jsDate.prototype.setFullYear = function() { this.proxy.setFullYear.apply(this.proxy, arguments); return this; }; /** * Sets the hours for a specified date according to local time. * * @param {Integer} hoursValue An integer between 0 and 23, representing the hour. * @param {Integer} minutesValue Optional, An integer between 0 and 59, representing the minutes. * @param {Integer} secondsValue Optional, An integer between 0 and 59, representing the seconds. * If you specify the secondsValue parameter, you must also specify the minutesValue. * @param {Integer} msValue Optional, A number between 0 and 999, representing the milliseconds. * If you specify the msValue parameter, you must also specify the minutesValue and secondsValue. */ jsDate.prototype.setHours = function() { this.proxy.setHours.apply(this.proxy, arguments); return this; }; /** * Implements Date functionality */ jsDate.prototype.setMilliseconds = function(n) { this.proxy.setMilliseconds(n); return this; }; /** * Implements Date functionality */ jsDate.prototype.setMinutes = function() { this.proxy.setMinutes.apply(this.proxy, arguments); return this; }; /** * Implements Date functionality */ jsDate.prototype.setMonth = function() { this.proxy.setMonth.apply(this.proxy, arguments); return this; }; /** * Implements Date functionality */ jsDate.prototype.setSeconds = function() { this.proxy.setSeconds.apply(this.proxy, arguments); return this; }; /** * Implements Date functionality */ jsDate.prototype.setTime = function(n) { this.proxy.setTime(n); return this; }; /** * Implements Date functionality */ jsDate.prototype.setYear = function() { this.proxy.setYear.apply(this.proxy, arguments); return this; }; /** * Provide a formatted string representation of this date. * * @param {String} formatString A format string. * See: {@link jsDate.formats}. * @returns {String} Date String. */ jsDate.prototype.strftime = function(formatString) { formatString = formatString || this.formatString || jsDate.regional[this.locale]['formatString']; return jsDate.strftime(this, formatString, this.syntax); }; /** * Return a String representation of this jsDate object. * @returns {String} Date string. */ jsDate.prototype.toString = function() { return this.proxy.toString(); }; /** * Convert the current date to an 8-digit integer (%Y%m%d) * * @returns {Integer} */ jsDate.prototype.toYmdInt = function() { return (this.proxy.getFullYear() * 10000) + (this.getMonthNumber() * 100) + this.proxy.getDate(); }; /** * @namespace Holds localizations for month/day names. * <p>jsDate attempts to detect locale when loaded and defaults to 'en'. * If a localization is detected which is not available, jsDate defaults to 'en'. * Additional localizations can be added after jsDate loads. After adding a localization, * call the jsDate.regional.getLocale() method. Currently, en, fr and de are defined.</p> * * <p>Localizations must be an object and have the following properties defined: monthNames, monthNamesShort, dayNames, dayNamesShort and Localizations are added like:</p> * <pre class="code"> * jsDate.regional['en'] = { * monthNames : 'January February March April May June July August September October November December'.split(' '), * monthNamesShort : 'Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec'.split(' '), * dayNames : 'Sunday Monday Tuesday Wednesday Thursday Friday Saturday'.split(' '), * dayNamesShort : 'Sun Mon Tue Wed Thu Fri Sat'.split(' ') * }; * </pre> * <p>After adding localizations, call <code>jsDate.regional.getLocale();</code> to update the locale setting with the * new localizations.</p> */ jsDate.regional = { 'en': { monthNames: ['January','February','March','April','May','June','July','August','September','October','November','December'], monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun','Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], formatString: '%Y-%m-%d %H:%M:%S' }, 'fr': { monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin','Juillet','Août','Septembre','Octobre','Novembre','Décembre'], monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun','Jul','Aoû','Sep','Oct','Nov','Déc'], dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'], dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'], formatString: '%Y-%m-%d %H:%M:%S' }, 'de': { monthNames: ['Januar','Februar','März','April','Mai','Juni','Juli','August','September','Oktober','November','Dezember'], monthNamesShort: ['Jan','Feb','Mär','Apr','Mai','Jun','Jul','Aug','Sep','Okt','Nov','Dez'], dayNames: ['Sonntag','Montag','Dienstag','Mittwoch','Donnerstag','Freitag','Samstag'], dayNamesShort: ['So','Mo','Di','Mi','Do','Fr','Sa'], formatString: '%Y-%m-%d %H:%M:%S' }, 'es': { monthNames: ['Enero','Febrero','Marzo','Abril','Mayo','Junio', 'Julio','Agosto','Septiembre','Octubre','Noviembre','Diciembre'], monthNamesShort: ['Ene','Feb','Mar','Abr','May','Jun', 'Jul','Ago','Sep','Oct','Nov','Dic'], dayNames: ['Domingo','Lunes','Martes','Miércoles','Jueves','Viernes','Sábado'], dayNamesShort: ['Dom','Lun','Mar','Mié','Juv','Vie','Sáb'], formatString: '%Y-%m-%d %H:%M:%S' }, 'ru': { monthNames: ['Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'], monthNamesShort: ['Янв','Фев','Мар','Апр','Май','Июн','Июл','Авг','Сен','Окт','Ноя','Дек'], dayNames: ['воскресенье','понедельник','вторник','среда','четверг','пятница','суббота'], dayNamesShort: ['вск','пнд','втр','срд','чтв','птн','сбт'], formatString: '%Y-%m-%d %H:%M:%S' }, 'ar': { monthNames: ['كانون الثاني', 'شباط', 'آذار', 'نيسان', 'آذار', 'حزيران','تموز', 'آب', 'أيلول', 'تشرين الأول', 'تشرين الثاني', 'كانون الأول'], monthNamesShort: ['1','2','3','4','5','6','7','8','9','10','11','12'], dayNames: ['السبت', 'الأحد', 'الاثنين', 'الثلاثاء', 'الأربعاء', 'الخميس', 'الجمعة'], dayNamesShort: ['سبت', 'أحد', 'اثنين', 'ثلاثاء', 'أربعاء', 'خميس', 'جمعة'], formatString: '%Y-%m-%d %H:%M:%S' }, 'pt': { monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho','Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'], dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], formatString: '%Y-%m-%d %H:%M:%S' }, 'pt-BR': { monthNames: ['Janeiro','Fevereiro','Março','Abril','Maio','Junho', 'Julho','Agosto','Setembro','Outubro','Novembro','Dezembro'], monthNamesShort: ['Jan','Fev','Mar','Abr','Mai','Jun','Jul','Ago','Set','Out','Nov','Dez'], dayNames: ['Domingo','Segunda-feira','Terça-feira','Quarta-feira','Quinta-feira','Sexta-feira','Sábado'], dayNamesShort: ['Dom','Seg','Ter','Qua','Qui','Sex','Sáb'], formatString: '%Y-%m-%d %H:%M:%S' }, 'pl': { monthNames: ['Styczeń','Luty','Marzec','Kwiecień','Maj','Czerwiec','Lipiec','Sierpień','Wrzesień','Październik','Listopad','Grudzień'], monthNamesShort: ['Sty', 'Lut', 'Mar', 'Kwi', 'Maj', 'Cze','Lip', 'Sie', 'Wrz', 'Paź', 'Lis', 'Gru'], dayNames: ['Niedziela', 'Poniedziałek', 'Wtorek', 'Środa', 'Czwartek', 'Piątek', 'Sobota'], dayNamesShort: ['Ni', 'Pn', 'Wt', 'Śr', 'Cz', 'Pt', 'Sb'], formatString: '%Y-%m-%d %H:%M:%S' }, 'nl': { monthNames: ['Januari','Februari','Maart','April','Mei','Juni','July','Augustus','September','Oktober','November','December'], monthNamesShort: ['Jan','Feb','Mar','Apr','Mei','Jun','Jul','Aug','Sep','Okt','Nov','Dec'], dayNames:','['Zondag','Maandag','Dinsdag','Woensdag','Donderdag','Vrijdag','Zaterdag'], dayNamesShort: ['Zo','Ma','Di','Wo','Do','Vr','Za'], formatString: '%Y-%m-%d %H:%M:%S' }, 'sv': { monthNames: ['januari','februari','mars','april','maj','juni','juli','augusti','september','oktober','november','december'], monthNamesShort: ['jan','feb','mar','apr','maj','jun','jul','aug','sep','okt','nov','dec'], dayNames: ['söndag','måndag','tisdag','onsdag','torsdag','fredag','lördag'], dayNamesShort: ['sön','mån','tis','ons','tor','fre','lör'], formatString: '%Y-%m-%d %H:%M:%S' } }; // Set english variants to 'en' jsDate.regional['en-US'] = jsDate.regional['en-GB'] = jsDate.regional['en']; /** * Try to determine the users locale based on the lang attribute of the html page. Defaults to 'en' * if it cannot figure out a locale of if the locale does not have a localization defined. * @returns {String} locale */ jsDate.regional.getLocale = function () { var l = jsDate.config.defaultLocale; if ( document && document.getElementsByTagName('html') && document.getElementsByTagName('html')[0].lang ) { l = document.getElementsByTagName('html')[0].lang; if (!jsDate.regional.hasOwnProperty(l)) { l = jsDate.config.defaultLocale; } } return l; }; // ms in day var day = 24 * 60 * 60 * 1000; // padd a number with zeros var addZeros = function(num, digits) { num = String(num); var i = digits - num.length; var s = String(Math.pow(10, i)).slice(1); return s.concat(num); }; // representations used for calculating differences between dates. // This borrows heavily from Ken Snyder's work. var multipliers = { millisecond: 1, second: 1000, minute: 60 * 1000, hour: 60 * 60 * 1000, day: day, week: 7 * day, month: { // add a number of months add: function(d, number) { // add any years needed (increments of 12) multipliers.year.add(d, Math[number > 0 ? 'floor' : 'ceil'](number / 12)); // ensure that we properly wrap betwen December and January // 11 % 12 = 11 // 12 % 12 = 0 var prevMonth = d.getMonth() + (number % 12); if (prevMonth == 12) { prevMonth = 0; d.setYear(d.getFullYear() + 1); } else if (prevMonth == -1) { prevMonth = 11; d.setYear(d.getFullYear() - 1); } d.setMonth(prevMonth); }, // get the number of months between two Date objects (decimal to the nearest day) diff: function(d1, d2) { // get the number of years var diffYears = d1.getFullYear() - d2.getFullYear(); // get the number of remaining months var diffMonths = d1.getMonth() - d2.getMonth() + (diffYears * 12); // get the number of remaining days var diffDays = d1.getDate() - d2.getDate(); // return the month difference with the days difference as a decimal return diffMonths + (diffDays / 30); } }, year: { // add a number of years add: function(d, number) { d.setYear(d.getFullYear() + Math[number > 0 ? 'floor' : 'ceil'](number)); }, // get the number of years between two Date objects (decimal to the nearest day) diff: function(d1, d2) { return multipliers.month.diff(d1, d2) / 12; } } }; // // Alias each multiplier with an 's' to allow 'year' and 'years' for example. // This comes from Ken Snyders work. // for (var unit in multipliers) { if (unit.substring(unit.length - 1) != 's') { // IE will iterate newly added properties :| multipliers[unit + 's'] = multipliers[unit]; } } // // take a jsDate instance and a format code and return the formatted value. // This is a somewhat modified version of Ken Snyder's method. // var format = function(d, code, syntax) { // if shorcut codes are used, recursively expand those. if (jsDate.formats[syntax]["shortcuts"][code]) { return jsDate.strftime(d, jsDate.formats[syntax]["shortcuts"][code], syntax); } else { // get the format code function and addZeros() argument var getter = (jsDate.formats[syntax]["codes"][code] || '').split('.'); var nbr = d['get' + getter[0]] ? d['get' + getter[0]]() : ''; if (getter[1]) { nbr = addZeros(nbr, getter[1]); } return nbr; } }; /** * @static * Static function for convert a date to a string according to a given format. Also acts as namespace for strftime format codes. * <p>strftime formatting can be accomplished without creating a jsDate object by calling jsDate.strftime():</p> * <pre class="code"> * var formattedDate = jsDate.strftime('Feb 8, 2006 8:48:32', '%Y-%m-%d %H:%M:%S'); * </pre> * @param {String | Number | Array | jsDate Object | Date Object} date A parsable date string, JavaScript time stamp, Array of form [year, month, day, hours, minutes, seconds, milliseconds], jsDate Object or Date object. * @param {String} formatString String with embedded date formatting codes. * See: {@link jsDate.formats}. * @param {String} syntax Optional syntax to use [default perl]. * @param {String} locale Optional locale to use. * @returns {String} Formatted representation of the date. */ // // Logic as implemented here is very similar to Ken Snyder's Date Instance Methods. // jsDate.strftime = function(d, formatString, syntax, locale) { var syn = 'perl'; var loc = jsDate.regional.getLocale(); // check if syntax and locale are available or reversed if (syntax && jsDate.formats.hasOwnProperty(syntax)) { syn = syntax; } else if (syntax && jsDate.regional.hasOwnProperty(syntax)) { loc = syntax; } if (locale && jsDate.formats.hasOwnProperty(locale)) { syn = locale; } else if (locale && jsDate.regional.hasOwnProperty(locale)) { loc = locale; } if (get_type(d) != "[object Object]" || d._type != "jsDate") { d = new jsDate(d); d.locale = loc; } if (!formatString) { formatString = d.formatString || jsDate.regional[loc]['formatString']; } // default the format string to year-month-day var source = formatString || '%Y-%m-%d', result = '', match; // replace each format code while (source.length > 0) { if (match = source.match(jsDate.formats[syn].codes.matcher)) { result += source.slice(0, match.index); result += (match[1] || '') + format(d, match[2], syn); source = source.slice(match.index + match[0].length); } else { result += source; source = ''; } } return result; }; /** * @namespace * Namespace to hold format codes and format shortcuts. "perl" and "php" format codes * and shortcuts are defined by default. Additional codes and shortcuts can be * added like: * * <pre class="code"> * jsDate.formats["perl"] = { * "codes": { * matcher: /someregex/, * Y: "fullYear", // name of "get" method without the "get", * ..., // more codes * }, * "shortcuts": { * F: '%Y-%m-%d', * ..., // more shortcuts * } * }; * </pre> * * <p>Additionally, ISO and SQL shortcuts are defined and can be accesses via: * <code>jsDate.formats.ISO</code> and <code>jsDate.formats.SQL</code> */ jsDate.formats = { ISO:'%Y-%m-%dT%H:%M:%S.%N%G', SQL:'%Y-%m-%d %H:%M:%S' }; /** * Perl format codes and shortcuts for strftime. * * A hash (object) of codes where each code must be an array where the first member is * the name of a Date.prototype or jsDate.prototype function to call * and optionally a second member indicating the number to pass to addZeros() * * <p>The following format codes are defined:</p> * * <pre class="code"> * Code Result Description * == Years == * %Y 2008 Four-digit year * %y 08 Two-digit year * * == Months == * %m 09 Two-digit month * %#m 9 One or two-digit month * %B September Full month name * %b Sep Abbreviated month name * * == Days == * %d 05 Two-digit day of month * %#d 5 One or two-digit day of month * %e 5 One or two-digit day of month * %A Sunday Full name of the day of the week * %a Sun Abbreviated name of the day of the week * %w 0 Number of the day of the week (0 = Sunday, 6 = Saturday) * * == Hours == * %H 23 Hours in 24-hour format (two digits) * %#H 3 Hours in 24-hour integer format (one or two digits) * %I 11 Hours in 12-hour format (two digits) * %#I 3 Hours in 12-hour integer format (one or two digits) * %p PM AM or PM * * == Minutes == * %M 09 Minutes (two digits) * %#M 9 Minutes (one or two digits) * * == Seconds == * %S 02 Seconds (two digits) * %#S 2 Seconds (one or two digits) * %s 1206567625723 Unix timestamp (Seconds past 1970-01-01 00:00:00) * * == Milliseconds == * %N 008 Milliseconds (three digits) * %#N 8 Milliseconds (one to three digits) * * == Timezone == * %O 360 difference in minutes between local time and GMT * %Z Mountain Standard Time Name of timezone as reported by browser * %G 06:00 Hours and minutes between GMT * * == Shortcuts == * %F 2008-03-26 %Y-%m-%d * %T 05:06:30 %H:%M:%S * %X 05:06:30 %H:%M:%S * %x 03/26/08 %m/%d/%y * %D 03/26/08 %m/%d/%y * %#c Wed Mar 26 15:31:00 2008 %a %b %e %H:%M:%S %Y * %v 3-Sep-2008 %e-%b-%Y * %R 15:31 %H:%M * %r 03:31:00 PM %I:%M:%S %p * * == Characters == * %n \n Newline * %t \t Tab * %% % Percent Symbol * </pre> * * <p>Formatting shortcuts that will be translated into their longer version. * Be sure that format shortcuts do not refer to themselves: this will cause an infinite loop.</p> * * <p>Format codes and format shortcuts can be redefined after the jsDate * module is imported.</p> * * <p>Note that if you redefine the whole hash (object), you must supply a "matcher" * regex for the parser. The default matcher is:</p> * * <code>/()%(#?(%|[a-z]))/i</code> * * <p>which corresponds to the Perl syntax used by default.</p> * * <p>By customizing the matcher and format codes, nearly any strftime functionality is possible.</p> */ jsDate.formats.perl = { codes: { // // 2-part regex matcher for format codes // // first match must be the character before the code (to account for escaping) // second match must be the format code character(s) // matcher: /()%(#?(%|[a-z]))/i, // year Y: 'FullYear', y: 'ShortYear.2', // month m: 'MonthNumber.2', '#m': 'MonthNumber', B: 'MonthName', b: 'AbbrMonthName', // day d: 'Date.2', '#d': 'Date', e: 'Date', A: 'DayName', a: 'AbbrDayName', w: 'Day', // hours H: 'Hours.2', '#H': 'Hours', I: 'Hours12.2', '#I': 'Hours12', p: 'AMPM', // minutes M: 'Minutes.2', '#M': 'Minutes', // seconds S: 'Seconds.2', '#S': 'Seconds', s: 'Unix', // milliseconds N: 'Milliseconds.3', '#N': 'Milliseconds', // timezone O: 'TimezoneOffset', Z: 'TimezoneName', G: 'GmtOffset' }, shortcuts: { // date F: '%Y-%m-%d', // time T: '%H:%M:%S', X: '%H:%M:%S', // local format date x: '%m/%d/%y', D: '%m/%d/%y', // local format extended '#c': '%a %b %e %H:%M:%S %Y', // local format short v: '%e-%b-%Y', R: '%H:%M', r: '%I:%M:%S %p', // tab and newline t: '\t', n: '\n', '%': '%' } }; /** * PHP format codes and shortcuts for strftime. * * A hash (object) of codes where each code must be an array where the first member is * the name of a Date.prototype or jsDate.prototype function to call * and optionally a second member indicating the number to pass to addZeros() * * <p>The following format codes are defined:</p> * * <pre class="code"> * Code Result Description * === Days === * %a Sun through Sat An abbreviated textual representation of the day * %A Sunday - Saturday A full textual representation of the day * %d 01 to 31 Two-digit day of the month (with leading zeros) * %e 1 to 31 Day of the month, with a space preceding single digits. * %j 001 to 366 Day of the year, 3 digits with leading zeros * %u 1 - 7 (Mon - Sun) ISO-8601 numeric representation of the day of the week * %w 0 - 6 (Sun - Sat) Numeric representation of the day of the week * * === Week === * %U 13 Full Week number, starting with the first Sunday as the first week * %V 01 through 53 ISO-8601:1988 week number, starting with the first week of the year * with at least 4 weekdays, with Monday being the start of the week * %W 46 A numeric representation of the week of the year, * starting with the first Monday as the first week * === Month === * %b Jan through Dec Abbreviated month name, based on the locale * %B January - December Full month name, based on the locale * %h Jan through Dec Abbreviated month name, based on the locale (an alias of %b) * %m 01 - 12 (Jan - Dec) Two digit representation of the month * * === Year === * %C 19 Two digit century (year/100, truncated to an integer) * %y 09 for 2009 Two digit year * %Y 2038 Four digit year * * === Time === * %H 00 through 23 Two digit representation of the hour in 24-hour format * %I 01 through 12 Two digit representation of the hour in 12-hour format * %l 1 through 12 Hour in 12-hour format, with a space preceeding single digits * %M 00 through 59 Two digit representation of the minute * %p AM/PM UPPER-CASE 'AM' or 'PM' based on the given time * %P am/pm lower-case 'am' or 'pm' based on the given time * %r 09:34:17 PM Same as %I:%M:%S %p * %R 00:35 Same as %H:%M * %S 00 through 59 Two digit representation of the second * %T 21:34:17 Same as %H:%M:%S * %X 03:59:16 Preferred time representation based on locale, without the date * %z -0500 or EST Either the time zone offset from UTC or the abbreviation * %Z -0500 or EST The time zone offset/abbreviation option NOT given by %z * * === Time and Date === * %D 02/05/09 Same as %m/%d/%y * %F 2009-02-05 Same as %Y-%m-%d (commonly used in database datestamps) * %s 305815200 Unix Epoch Time timestamp (same as the time() function) * %x 02/05/09 Preferred date representation, without the time * * === Miscellaneous === * %n --- A newline character (\n) * %t --- A Tab character (\t) * %% --- A literal percentage character (%) * </pre> */ jsDate.formats.php = { codes: { // // 2-part regex matcher for format codes // // first match must be the character before the code (to account for escaping) // second match must be the format code character(s) // matcher: /()%((%|[a-z]))/i, // day a: 'AbbrDayName', A: 'DayName', d: 'Date.2', e: 'Date', j: 'DayOfYear.3', u: 'DayOfWeek', w: 'Day', // week U: 'FullWeekOfYear.2', V: 'IsoWeek.2', W: 'WeekOfYear.2', // month b: 'AbbrMonthName', B: 'MonthName', m: 'MonthNumber.2', h: 'AbbrMonthName', // year C: 'Century.2', y: 'ShortYear.2', Y: 'FullYear', // time H: 'Hours.2', I: 'Hours12.2', l: 'Hours12', p: 'AMPM', P: 'AmPm', M: 'Minutes.2', S: 'Seconds.2', s: 'Unix', O: 'TimezoneOffset', z: 'GmtOffset', Z: 'TimezoneAbbr' }, shortcuts: { D: '%m/%d/%y', F: '%Y-%m-%d', T: '%H:%M:%S', X: '%H:%M:%S', x: '%m/%d/%y', R: '%H:%M', r: '%I:%M:%S %p', t: '\t', n: '\n', '%': '%' } }; // // Conceptually, the logic implemented here is similar to Ken Snyder's Date Instance Methods. // I use his idea of a set of parsers which can be regular expressions or functions, // iterating through those, and then seeing if Date.parse() will create a date. // The parser expressions and functions are a little different and some bugs have been // worked out. Also, a lot of "pre-parsing" is done to fix implementation // variations of Date.parse() between browsers. // jsDate.createDate = function(date) { // if passing in multiple arguments, try Date constructor if (date == null) { return new Date(); } // If the passed value is already a date object, return it if (date instanceof Date) { return date; } // if (typeof date == 'number') return new Date(date * 1000); // If the passed value is an integer, interpret it as a javascript timestamp if (typeof date == 'number') { return new Date(date); } // Before passing strings into Date.parse(), have to normalize them for certain conditions. // If strings are not formatted staccording to the EcmaScript spec, results from Date parse will be implementation dependent. // // For example: // * FF and Opera assume 2 digit dates are pre y2k, Chome assumes <50 is pre y2k, 50+ is 21st century. // * Chrome will correctly parse '1984-1-25' into localtime, FF and Opera will not parse. // * Both FF, Chrome and Opera will parse '1984/1/25' into localtime. // remove leading and trailing spaces var parsable = String(date).replace(/^\s*(.+)\s*$/g, '$1'); // replace dahses (-) with slashes (/) in dates like n[nnn]/n[n]/n[nnn] parsable = parsable.replace(/^([0-9]{1,4})-([0-9]{1,2})-([0-9]{1,4})/, "$1/$2/$3"); ///////// // Need to check for '15-Dec-09' also. // FF will not parse, but Chrome will. // Chrome will set date to 2009 as well. ///////// // first check for 'dd-mmm-yyyy' or 'dd/mmm/yyyy' like '15-Dec-2010' parsable = parsable.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{4})/i, "$1 $2 $3"); // Now check for 'dd-mmm-yy' or 'dd/mmm/yy' and normalize years to default century. var match = parsable.match(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i); if (match && match.length > 3) { var m3 = parseFloat(match[3]); var ny = jsDate.config.defaultCentury + m3; ny = String(ny); // now replace 2 digit year with 4 digit year parsable = parsable.replace(/^(3[01]|[0-2]?\d)[-\/]([a-z]{3,})[-\/](\d{2})\D*/i, match[1] +' '+ match[2] +' '+ ny); } // Check for '1/19/70 8:14PM' // where starts with mm/dd/yy or yy/mm/dd and have something after // Check if 1st postiion is greater than 31, assume it is year. // Assme all 2 digit years are 1900's. // Finally, change them into US style mm/dd/yyyy representations. match = parsable.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})[^0-9]/); function h1(parsable, match) { var m1 = parseFloat(match[1]); var m2 = parseFloat(match[2]); var m3 = parseFloat(match[3]); var cent = jsDate.config.defaultCentury; var ny, nd, nm, str; if (m1 > 31) { // first number is a year nd = m3; nm = m2; ny = cent + m1; } else { // last number is the year nd = m2; nm = m1; ny = cent + m3; } str = nm+'/'+nd+'/'+ny; // now replace 2 digit year with 4 digit year return parsable.replace(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})/, str); } if (match && match.length > 3) { parsable = h1(parsable, match); } // Now check for '1/19/70' with nothing after and do as above var match = parsable.match(/^([0-9]{1,2})[-\/]([0-9]{1,2})[-\/]([0-9]{1,2})$/); if (match && match.length > 3) { parsable = h1(parsable, match); } var i = 0; var length = jsDate.matchers.length; var pattern, ms, current = parsable, obj; while (i < length) { ms = Date.parse(current); if (!isNaN(ms)) { return new Date(ms); } pattern = jsDate.matchers[i]; if (typeof pattern == 'function') { obj = pattern.call(jsDate, current); if (obj instanceof Date) { return obj; } } else { current = parsable.replace(pattern[0], pattern[1]); } i++; } return NaN; }; /** * @static * Handy static utility function to return the number of days in a given month. * @param {Integer} year Year * @param {Integer} month Month (1-12) * @returns {Integer} Number of days in the month. */ // // handy utility method Borrowed right from Ken Snyder's Date Instance Mehtods. // jsDate.daysInMonth = function(year, month) { if (month == 2) { return new Date(year, 1, 29).getDate() == 29 ? 29 : 28; } return [undefined,31,undefined,31,30,31,30,31,31,30,31,30,31][month]; }; // // An Array of regular expressions or functions that will attempt to match the date string. // Functions are called with scope of a jsDate instance. // jsDate.matchers = [ // convert dd.mmm.yyyy to mm/dd/yyyy (world date to US date). [/(3[01]|[0-2]\d)\s*\.\s*(1[0-2]|0\d)\s*\.\s*([1-9]\d{3})/, '$2/$1/$3'], // convert yyyy-mm-dd to mm/dd/yyyy (ISO date to US date). [/([1-9]\d{3})\s*-\s*(1[0-2]|0\d)\s*-\s*(3[01]|[0-2]\d)/, '$2/$3/$1'], // Handle 12 hour or 24 hour time with milliseconds am/pm and optional date part. function(str) { var match = str.match(/^(?:(.+)\s+)?([012]?\d)(?:\s*\:\s*(\d\d))?(?:\s*\:\s*(\d\d(\.\d*)?))?\s*(am|pm)?\s*$/i); // opt. date hour opt. minute opt. second opt. msec opt. am or pm if (match) { if (match[1]) { var d = this.createDate(match[1]); if (isNaN(d)) { return; } } else { var d = new Date(); d.setMilliseconds(0); } var hour = parseFloat(match[2]); if (match[6]) { hour = match[6].toLowerCase() == 'am' ? (hour == 12 ? 0 : hour) : (hour == 12 ? 12 : hour + 12); } d.setHours(hour, parseInt(match[3] || 0, 10), parseInt(match[4] || 0, 10), ((parseFloat(match[5] || 0)) || 0)*1000); return d; } else { return str; } }, // Handle ISO timestamp with time zone. function(str) { var match = str.match(/^(?:(.+))[T|\s+]([012]\d)(?:\:(\d\d))(?:\:(\d\d))(?:\.\d+)([\+\-]\d\d\:\d\d)$/i); if (match) { if (match[1]) { var d = this.createDate(match[1]); if (isNaN(d)) { return; } } else { var d = new Date(); d.setMilliseconds(0); } var hour = parseFloat(match[2]); d.setHours(hour, parseInt(match[3], 10), parseInt(match[4], 10), parseFloat(match[5])*1000); return d; } else { return str; } }, // Try to match ambiguous strings like 12/8/22. // Use FF date assumption that 2 digit years are 20th century (i.e. 1900's). // This may be redundant with pre processing of date already performed. function(str) { var match = str.match(/^([0-3]?\d)\s*[-\/.\s]{1}\s*([a-zA-Z]{3,9})\s*[-\/.\s]{1}\s*([0-3]?\d)$/); if (match) { var d = new Date(); var cent = jsDate.config.defaultCentury; var m1 = parseFloat(match[1]); var m3 = parseFloat(match[3]); var ny, nd, nm; if (m1 > 31) { // first number is a year nd = m3; ny = cent + m1; } else { // last number is the year nd = m1; ny = cent + m3; } var nm = inArray(match[2], jsDate.regional[jsDate.regional.getLocale()]["monthNamesShort"]); if (nm == -1) { nm = inArray(match[2], jsDate.regional[jsDate.regional.getLocale()]["monthNames"]); } d.setFullYear(ny, nm, nd); d.setHours(0,0,0,0); return d; } else { return str; } } ]; // // I think John Reisig published this method on his blog, ejohn. // function inArray( elem, array ) { if ( array.indexOf ) { return array.indexOf( elem ); } for ( var i = 0, length = array.length; i < length; i++ ) { if ( array[ i ] === elem ) { return i; } } return -1; } // // Thanks to Kangax, Christian Sciberras and Stack Overflow for this method. // function get_type(thing){ if(thing===null) return "[object Null]"; // special case return Object.prototype.toString.call(thing); } $.jsDate = jsDate; /** * JavaScript printf/sprintf functions. * * This code has been adapted from the publicly available sprintf methods * by Ash Searle. His original header follows: * * This code is unrestricted: you are free to use it however you like. * * The functions should work as expected, performing left or right alignment, * truncating strings, outputting numbers with a required precision etc. * * For complex cases, these functions follow the Perl implementations of * (s)printf, allowing arguments to be passed out-of-order, and to set the * precision or length of the output based on arguments instead of fixed * numbers. * * See http://perldoc.perl.org/functions/sprintf.html for more information. * * Implemented: * - zero and space-padding * - right and left-alignment, * - base X prefix (binary, octal and hex) * - positive number prefix * - (minimum) width * - precision / truncation / maximum width * - out of order arguments * * Not implemented (yet): * - vector flag * - size (bytes, words, long-words etc.) * * Will not implement: * - %n or %p (no pass-by-reference in JavaScript) * * @version 2007.04.27 * @author Ash Searle * * You can see the original work and comments on his blog: * http://hexmen.com/blog/2007/03/printf-sprintf/ * http://hexmen.com/js/sprintf.js */ /** * @Modifications 2009.05.26 * @author Chris Leonello * * Added %p %P specifier * Acts like %g or %G but will not add more significant digits to the output than present in the input. * Example: * Format: '%.3p', Input: 0.012, Output: 0.012 * Format: '%.3g', Input: 0.012, Output: 0.0120 * Format: '%.4p', Input: 12.0, Output: 12.0 * Format: '%.4g', Input: 12.0, Output: 12.00 * Format: '%.4p', Input: 4.321e-5, Output: 4.321e-5 * Format: '%.4g', Input: 4.321e-5, Output: 4.3210e-5 * * Example: * >>> $.jqplot.sprintf('%.2f, %d', 23.3452, 43.23) * "23.35, 43" * >>> $.jqplot.sprintf("no value: %n, decimal with thousands separator: %'d", 23.3452, 433524) * "no value: , decimal with thousands separator: 433,524" */ $.jqplot.sprintf = function() { function pad(str, len, chr, leftJustify) { var padding = (str.length >= len) ? '' : Array(1 + len - str.length >>> 0).join(chr); return leftJustify ? str + padding : padding + str; } function thousand_separate(value) { var value_str = new String(value); for (var i=10; i>0; i--) { if (value_str == (value_str = value_str.replace(/^(\d+)(\d{3})/, "$1"+$.jqplot.sprintf.thousandsSeparator+"$2"))) break; } return value_str; } function justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace) { var diff = minWidth - value.length; if (diff > 0) { var spchar = ' '; if (htmlSpace) { spchar = ' '; } if (leftJustify || !zeroPad) { value = pad(value, minWidth, spchar, leftJustify); } else { value = value.slice(0, prefix.length) + pad('', diff, '0', true) + value.slice(prefix.length); } } return value; } function formatBaseX(value, base, prefix, leftJustify, minWidth, precision, zeroPad, htmlSpace) { // Note: casts negative numbers to positive ones var number = value >>> 0; prefix = prefix && number && {'2': '0b', '8': '0', '16': '0x'}[base] || ''; value = prefix + pad(number.toString(base), precision || 0, '0', false); return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace); } function formatString(value, leftJustify, minWidth, precision, zeroPad, htmlSpace) { if (precision != null) { value = value.slice(0, precision); } return justify(value, '', leftJustify, minWidth, zeroPad, htmlSpace); } var a = arguments, i = 0, format = a[i++]; return format.replace($.jqplot.sprintf.regex, function(substring, valueIndex, flags, minWidth, _, precision, type) { if (substring == '%%') { return '%'; } // parse flags var leftJustify = false, positivePrefix = '', zeroPad = false, prefixBaseX = false, htmlSpace = false, thousandSeparation = false; for (var j = 0; flags && j < flags.length; j++) switch (flags.charAt(j)) { case ' ': positivePrefix = ' '; break; case '+': positivePrefix = '+'; break; case '-': leftJustify = true; break; case '0': zeroPad = true; break; case '#': prefixBaseX = true; break; case '&': htmlSpace = true; break; case '\'': thousandSeparation = true; break; } // parameters may be null, undefined, empty-string or real valued // we want to ignore null, undefined and empty-string values if (!minWidth) { minWidth = 0; } else if (minWidth == '*') { minWidth = +a[i++]; } else if (minWidth.charAt(0) == '*') { minWidth = +a[minWidth.slice(1, -1)]; } else { minWidth = +minWidth; } // Note: undocumented perl feature: if (minWidth < 0) { minWidth = -minWidth; leftJustify = true; } if (!isFinite(minWidth)) { throw new Error('$.jqplot.sprintf: (minimum-)width must be finite'); } if (!precision) { precision = 'fFeE'.indexOf(type) > -1 ? 6 : (type == 'd') ? 0 : void(0); } else if (precision == '*') { precision = +a[i++]; } else if (precision.charAt(0) == '*') { precision = +a[precision.slice(1, -1)]; } else { precision = +precision; } // grab value using valueIndex if required? var value = valueIndex ? a[valueIndex.slice(0, -1)] : a[i++]; switch (type) { case 's': { if (value == null) { return ''; } return formatString(String(value), leftJustify, minWidth, precision, zeroPad, htmlSpace); } case 'c': return formatString(String.fromCharCode(+value), leftJustify, minWidth, precision, zeroPad, htmlSpace); case 'b': return formatBaseX(value, 2, prefixBaseX, leftJustify, minWidth, precision, zeroPad,htmlSpace); case 'o': return formatBaseX(value, 8, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace); case 'x': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace); case 'X': return formatBaseX(value, 16, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace).toUpperCase(); case 'u': return formatBaseX(value, 10, prefixBaseX, leftJustify, minWidth, precision, zeroPad, htmlSpace); case 'i': { var number = parseInt(+value, 10); if (isNaN(number)) { return ''; } var prefix = number < 0 ? '-' : positivePrefix; var number_str = thousandSeparation ? thousand_separate(String(Math.abs(number))): String(Math.abs(number)); value = prefix + pad(number_str, precision, '0', false); //value = prefix + pad(String(Math.abs(number)), precision, '0', false); return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace); } case 'd': { var number = Math.round(+value); if (isNaN(number)) { return ''; } var prefix = number < 0 ? '-' : positivePrefix; var number_str = thousandSeparation ? thousand_separate(String(Math.abs(number))): String(Math.abs(number)); value = prefix + pad(number_str, precision, '0', false); return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace); } case 'e': case 'E': case 'f': case 'F': case 'g': case 'G': { var number = +value; if (isNaN(number)) { return ''; } var prefix = number < 0 ? '-' : positivePrefix; var method = ['toExponential', 'toFixed', 'toPrecision']['efg'.indexOf(type.toLowerCase())]; var textTransform = ['toString', 'toUpperCase']['eEfFgG'.indexOf(type) % 2]; var number_str = Math.abs(number)[method](precision); // Apply the decimal mark properly by splitting the number by the // decimalMark, applying thousands separator, and then placing it // back in. var parts = number_str.toString().split('.'); parts[0] = thousandSeparation ? thousand_separate(parts[0]) : parts[0]; number_str = parts.join($.jqplot.sprintf.decimalMark); value = prefix + number_str; var justified = justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform](); return justified; } case 'p': case 'P': { // make sure number is a number var number = +value; if (isNaN(number)) { return ''; } var prefix = number < 0 ? '-' : positivePrefix; var parts = String(Number(Math.abs(number)).toExponential()).split(/e|E/); var sd = (parts[0].indexOf('.') != -1) ? parts[0].length - 1 : String(number).length; var zeros = (parts[1] < 0) ? -parts[1] - 1 : 0; if (Math.abs(number) < 1) { if (sd + zeros <= precision) { value = prefix + Math.abs(number).toPrecision(sd); } else { if (sd <= precision - 1) { value = prefix + Math.abs(number).toExponential(sd-1); } else { value = prefix + Math.abs(number).toExponential(precision-1); } } } else { var prec = (sd <= precision) ? sd : precision; value = prefix + Math.abs(number).toPrecision(prec); } var textTransform = ['toString', 'toUpperCase']['pP'.indexOf(type) % 2]; return justify(value, prefix, leftJustify, minWidth, zeroPad, htmlSpace)[textTransform](); } case 'n': return ''; default: return substring; } }); }; $.jqplot.sprintf.thousandsSeparator = ','; // Specifies the decimal mark for floating point values. By default a period '.' // is used. If you change this value to for example a comma be sure to also // change the thousands separator or else this won't work since a simple String // replace is used (replacing all periods with the mark specified here). $.jqplot.sprintf.decimalMark = '.'; $.jqplot.sprintf.regex = /%%|%(\d+\$)?([-+#0&\' ]*)(\*\d+\$|\*|\d+)?(\.(\*\d+\$|\*|\d+))?([nAscboxXuidfegpEGP])/g; $.jqplot.getSignificantFigures = function(number) { var parts = String(Number(Math.abs(number)).toExponential()).split(/e|E/); // total significant digits var sd = (parts[0].indexOf('.') != -1) ? parts[0].length - 1 : parts[0].length; var zeros = (parts[1] < 0) ? -parts[1] - 1 : 0; // exponent var expn = parseInt(parts[1], 10); // digits to the left of the decimal place var dleft = (expn + 1 > 0) ? expn + 1 : 0; // digits to the right of the decimal place var dright = (sd <= dleft) ? 0 : sd - expn - 1; return {significantDigits: sd, digitsLeft: dleft, digitsRight: dright, zeros: zeros, exponent: expn} ; }; $.jqplot.getPrecision = function(number) { return $.jqplot.getSignificantFigures(number).digitsRight; }; var backCompat = $.uiBackCompat !== false; $.jqplot.effects = { effect: {} }; // prefix used for storing data on .data() var dataSpace = "jqplot.storage."; /******************************************************************************/ /*********************************** EFFECTS **********************************/ /******************************************************************************/ $.extend( $.jqplot.effects, { version: "1.9pre", // Saves a set of properties in a data storage save: function( element, set ) { for( var i=0; i < set.length; i++ ) { if ( set[ i ] !== null ) { element.data( dataSpace + set[ i ], element[ 0 ].style[ set[ i ] ] ); } } }, // Restores a set of previously saved properties from a data storage restore: function( element, set ) { for( var i=0; i < set.length; i++ ) { if ( set[ i ] !== null ) { element.css( set[ i ], element.data( dataSpace + set[ i ] ) ); } } }, setMode: function( el, mode ) { if (mode === "toggle") { mode = el.is( ":hidden" ) ? "show" : "hide"; } return mode; }, // Wraps the element around a wrapper that copies position properties createWrapper: function( element ) { // if the element is already wrapped, return it if ( element.parent().is( ".ui-effects-wrapper" )) { return element.parent(); } // wrap the element var props = { width: element.outerWidth(true), height: element.outerHeight(true), "float": element.css( "float" ) }, wrapper = $( "<div></div>" ) .addClass( "ui-effects-wrapper" ) .css({ fontSize: "100%", background: "transparent", border: "none", margin: 0, padding: 0 }), // Store the size in case width/height are defined in % - Fixes #5245 size = { width: element.width(), height: element.height() }, active = document.activeElement; element.wrap( wrapper ); // Fixes #7595 - Elements lose focus when wrapped. if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { $( active ).focus(); } wrapper = element.parent(); //Hotfix for jQuery 1.4 since some change in wrap() seems to actually loose the reference to the wrapped element // transfer positioning properties to the wrapper if ( element.css( "position" ) === "static" ) { wrapper.css({ position: "relative" }); element.css({ position: "relative" }); } else { $.extend( props, { position: element.css( "position" ), zIndex: element.css( "z-index" ) }); $.each([ "top", "left", "bottom", "right" ], function(i, pos) { props[ pos ] = element.css( pos ); if ( isNaN( parseInt( props[ pos ], 10 ) ) ) { props[ pos ] = "auto"; } }); element.css({ position: "relative", top: 0, left: 0, right: "auto", bottom: "auto" }); } element.css(size); return wrapper.css( props ).show(); }, removeWrapper: function( element ) { var active = document.activeElement; if ( element.parent().is( ".ui-effects-wrapper" ) ) { element.parent().replaceWith( element ); // Fixes #7595 - Elements lose focus when wrapped. if ( element[ 0 ] === active || $.contains( element[ 0 ], active ) ) { $( active ).focus(); } } return element; } }); // return an effect options object for the given parameters: function _normalizeArguments( effect, options, speed, callback ) { // short path for passing an effect options object: if ( $.isPlainObject( effect ) ) { return effect; } // convert to an object effect = { effect: effect }; // catch (effect) if ( options === undefined ) { options = {}; } // catch (effect, callback) if ( $.isFunction( options ) ) { callback = options; speed = null; options = {}; } // catch (effect, speed, ?) if ( $.type( options ) === "number" || $.fx.speeds[ options ]) { callback = speed; speed = options; options = {}; } // catch (effect, options, callback) if ( $.isFunction( speed ) ) { callback = speed; speed = null; } // add options to effect if ( options ) { $.extend( effect, options ); } speed = speed || options.duration; effect.duration = $.fx.off ? 0 : typeof speed === "number" ? speed : speed in $.fx.speeds ? $.fx.speeds[ speed ] : $.fx.speeds._default; effect.complete = callback || options.complete; return effect; } function standardSpeed( speed ) { // valid standard speeds if ( !speed || typeof speed === "number" || $.fx.speeds[ speed ] ) { return true; } // invalid strings - treat as "normal" speed if ( typeof speed === "string" && !$.jqplot.effects.effect[ speed ] ) { // TODO: remove in 2.0 (#7115) if ( backCompat && $.jqplot.effects[ speed ] ) { return false; } return true; } return false; } $.fn.extend({ jqplotEffect: function( effect, options, speed, callback ) { var args = _normalizeArguments.apply( this, arguments ), mode = args.mode, queue = args.queue, effectMethod = $.jqplot.effects.effect[ args.effect ], // DEPRECATED: remove in 2.0 (#7115) oldEffectMethod = !effectMethod && backCompat && $.jqplot.effects[ args.effect ]; if ( $.fx.off || !( effectMethod || oldEffectMethod ) ) { // delegate to the original method (e.g., .show()) if possible if ( mode ) { return this[ mode ]( args.duration, args.complete ); } else { return this.each( function() { if ( args.complete ) { args.complete.call( this ); } }); } } function run( next ) { var elem = $( this ), complete = args.complete, mode = args.mode; function done() { if ( $.isFunction( complete ) ) { complete.call( elem[0] ); } if ( $.isFunction( next ) ) { next(); } } // if the element is hiddden and mode is hide, // or element is visible and mode is show if ( elem.is( ":hidden" ) ? mode === "hide" : mode === "show" ) { done(); } else { effectMethod.call( elem[0], args, done ); } } // TODO: remove this check in 2.0, effectMethod will always be true if ( effectMethod ) { return queue === false ? this.each( run ) : this.queue( queue || "fx", run ); } else { // DEPRECATED: remove in 2.0 (#7115) return oldEffectMethod.call(this, { options: args, duration: args.duration, callback: args.complete, mode: args.mode }); } } }); var rvertical = /up|down|vertical/, rpositivemotion = /up|left|vertical|horizontal/; $.jqplot.effects.effect.blind = function( o, done ) { // Create element var el = $( this ), props = [ "position", "top", "bottom", "left", "right", "height", "width" ], mode = $.jqplot.effects.setMode( el, o.mode || "hide" ), direction = o.direction || "up", vertical = rvertical.test( direction ), ref = vertical ? "height" : "width", ref2 = vertical ? "top" : "left", motion = rpositivemotion.test( direction ), animation = {}, show = mode === "show", wrapper, distance, top; // // if already wrapped, the wrapper's properties are my property. #6245 if ( el.parent().is( ".ui-effects-wrapper" ) ) { $.jqplot.effects.save( el.parent(), props ); } else { $.jqplot.effects.save( el, props ); } el.show(); top = parseInt(el.css('top'), 10); wrapper = $.jqplot.effects.createWrapper( el ).css({ overflow: "hidden" }); distance = vertical ? wrapper[ ref ]() + top : wrapper[ ref ](); animation[ ref ] = show ? String(distance) : '0'; if ( !motion ) { el .css( vertical ? "bottom" : "right", 0 ) .css( vertical ? "top" : "left", "" ) .css({ position: "absolute" }); animation[ ref2 ] = show ? '0' : String(distance); } // // start at 0 if we are showing if ( show ) { wrapper.css( ref, 0 ); if ( ! motion ) { wrapper.css( ref2, distance ); } } // // Animate wrapper.animate( animation, { duration: o.duration, easing: o.easing, queue: false, complete: function() { if ( mode === "hide" ) { el.hide(); } $.jqplot.effects.restore( el, props ); $.jqplot.effects.removeWrapper( el ); done(); } }); }; })(jQuery); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������psensor-1.2.1/www/details.html����������������������������������������������������������������������0000644�0001750�0001750�00000002674�13353521057�013301� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������<html> <head> <meta charset="utf-8"> <title id="title">Sensor

psensor-1.2.1/www/style.css0000644000175000017500000000525113353521057012632 00000000000000 body { background: #e2e2e2; color: #333333; font-family: Ubuntu,Arial,sans-serif; line-height: 1.6; font-weight: lighter; margin: 1em 2em 2em 2em; padding: 0 0 0 0; } h1 { font-size: 2.813em; margin: 0 0 0.267em 0; padding: 0 0 0 0; font-weight: normal; } h2 { font-size: 2em; margin: 0 0 0.375em; padding: 0 0 0 0; font-weight: normal; } h3 { font-size: 1.438em; margin: 0 0 0.522em; padding: 0 0 0 0; font-weight: normal; } h4 { font-size: 1.219em; margin: 0 0 0.615em; padding: 0 0 0 0; font-weight: normal; } h5 { font-size: 1em; margin: 0 0 0.75em; padding: 0 0 0 0; font-weight: bold; } h6 { font-weight: normal; font-size: 0.813em; letter-spacing: 0.1em; margin: 0 0 0.923em; text-transform: uppercase; padding: 0 0 0 0; } li { margin: 0 0 0 1em; line-height: 1.6; } li p { margin: 0 0 0 0; } ul { margin: 0 0 0 0; padding: 0 0 0 0; } a:link, a:visited { color: #19B6EE; text-decoration: none; } a:hover { text-decoration: underline; } code, pre, tt { font-family: "Ubuntu Mono","Courier New",Courier,monospace; font-weight: normal; color: #333333; } pre { background: none repeat scroll 0 0 #e0e0e0; border-radius: 4px; padding: 0.5em 0.5em; margin: 0 0 0 0; white-space: pre-wrap; word-wrap: break-word; } table { width: 100%; text-align: left; } #footer { margin: 0 0 0 0; font-size: 0.8em; font-weight: lighter; clear: both; text-align: right; } #page { margin: 0 0 0 0; padding: 0 0 0 0; } #main { background: #ffffff; -moz-box-sizing: border-box; padding: 2em 2em 2em 2em; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: 0 2px 2px 0 #C2C2C2; box-shadow: 0 2px 2px 0 #C2C2C2; } #menu { background: #ffffff; -moz-box-sizing: border-box; padding: 2em 2em 2em 2em; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: 0 2px 2px 0 #C2C2C2; box-shadow: 0 2px 2px 0 #C2C2C2; } #menu-list, #menu-list > li > ul { list-style-type: none; } /* menu on left col, content on right col */ #menu { float: left; width: 18%; } #main { float: right; width: 80%; } /* asciidoc */ #toc, #content { margin: 0em 0em 2em 0em; background: #ffffff; -moz-box-sizing: border-box; padding: 2em 2em 2em 2em; -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; -webkit-box-shadow: 0 2px 2px 0 #C2C2C2; box-shadow: 0 2px 2px 0 #C2C2C2; }psensor-1.2.1/www/Makefile.in0000664000175000017500000003657013676133314013042 00000000000000# Makefile.in generated by automake 1.16.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2018 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = www ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \ $(top_srcdir)/m4/nls.m4 $(top_srcdir)/m4/po.m4 \ $(top_srcdir)/m4/progtest.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(defaultwwwdir)" DATA = $(defaultwww_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPINDICATOR_CFLAGS = @APPINDICATOR_CFLAGS@ APPINDICATOR_LIBS = @APPINDICATOR_LIBS@ AR = @AR@ ASCIIDOCTOR = @ASCIIDOCTOR@ ATASMART_CFLAGS = @ATASMART_CFLAGS@ ATASMART_LIBS = @ATASMART_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CURL_CFLAGS = @CURL_CFLAGS@ CURL_LIBS = @CURL_LIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ GLIB_COMPILE_SCHEMAS = @GLIB_COMPILE_SCHEMAS@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GSETTINGS_DISABLE_SCHEMAS_COMPILE = @GSETTINGS_DISABLE_SCHEMAS_COMPILE@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ GTOP_CFLAGS = @GTOP_CFLAGS@ GTOP_LIBS = @GTOP_LIBS@ HAVE_CPPCHECK = @HAVE_CPPCHECK@ HELP2MAN = @HELP2MAN@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ JSON_CFLAGS = @JSON_CFLAGS@ JSON_LIBS = @JSON_LIBS@ LDFLAGS = @LDFLAGS@ LIBATIADL_CFLAGS = @LIBATIADL_CFLAGS@ LIBATIADL_LIBS = @LIBATIADL_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMICROHTTPD_CFLAGS = @LIBMICROHTTPD_CFLAGS@ LIBMICROHTTPD_LIBS = @LIBMICROHTTPD_LIBS@ LIBNOTIFY_CFLAGS = @LIBNOTIFY_CFLAGS@ LIBNOTIFY_LIBS = @LIBNOTIFY_LIBS@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBUDISKS2_CFLAGS = @LIBUDISKS2_CFLAGS@ LIBUDISKS2_LIBS = @LIBUDISKS2_LIBS@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NVIDIA_CFLAGS = @NVIDIA_CFLAGS@ NVIDIA_LIBS = @NVIDIA_LIBS@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PTHREAD_LIBS = @PTHREAD_LIBS@ RANLIB = @RANLIB@ SENSORS_LIBS = @SENSORS_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STRIP = @STRIP@ UNITY_CFLAGS = @UNITY_CFLAGS@ UNITY_LIBS = @UNITY_LIBS@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XEXT_CFLAGS = @XEXT_CFLAGS@ XEXT_LIBS = @XEXT_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XMKMF = @XMKMF@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gsettingsschemadir = @gsettingsschemadir@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ defaultwwwdir = $(pkgdatadir)/www defaultwww_DATA = \ details.html \ favicon.ico \ index.html \ jqplot.css \ jqplot.dateAxisRenderer.js \ jqplot.js \ jquery.js \ psensor.js \ style.css EXTRA_DIST = $(defaultwww_DATA) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu www/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu www/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-defaultwwwDATA: $(defaultwww_DATA) @$(NORMAL_INSTALL) @list='$(defaultwww_DATA)'; test -n "$(defaultwwwdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(defaultwwwdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(defaultwwwdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(defaultwwwdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(defaultwwwdir)" || exit $$?; \ done uninstall-defaultwwwDATA: @$(NORMAL_UNINSTALL) @list='$(defaultwww_DATA)'; test -n "$(defaultwwwdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(defaultwwwdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(defaultwwwdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-defaultwwwDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-defaultwwwDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic cscopelist-am \ ctags-am distclean distclean-generic distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-defaultwwwDATA install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-defaultwwwDATA .PRECIOUS: Makefile # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: psensor-1.2.1/www/favicon.ico0000644000175000017500000002267613353521057013113 0000000000000000 %(0` $a a rrrǴ׮؞n֦~ڽݚaNMMMMMMSߙ^MMMMMMMMMMYMMMMMMMMMMTMMMMMMMNױץzMMMMMSצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMR------------צ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMR------------צ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMR------------צ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMR555555555555צ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRצ}MMMMMRʸذذذذذ׳gggrpppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppUUU9psensor-1.2.1/www/jqplot.css0000644000175000017500000001277013353521057013007 00000000000000/*rules for the plot target div. These will be cascaded down to all plot elements according to css rules*/ .jqplot-target { position: relative; color: #666666; font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; font-size: 1em; /* height: 300px; width: 400px;*/ } /*rules applied to all axes*/ .jqplot-axis { font-size: 0.75em; } .jqplot-xaxis { margin-top: 10px; } .jqplot-x2axis { margin-bottom: 10px; } .jqplot-yaxis { margin-right: 10px; } .jqplot-y2axis, .jqplot-y3axis, .jqplot-y4axis, .jqplot-y5axis, .jqplot-y6axis, .jqplot-y7axis, .jqplot-y8axis, .jqplot-y9axis, .jqplot-yMidAxis { margin-left: 10px; margin-right: 10px; } /*rules applied to all axis tick divs*/ .jqplot-axis-tick, .jqplot-xaxis-tick, .jqplot-yaxis-tick, .jqplot-x2axis-tick, .jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick, .jqplot-yMidAxis-tick { position: absolute; white-space: pre; } .jqplot-xaxis-tick { top: 0px; /* initial position untill tick is drawn in proper place */ left: 15px; /* padding-top: 10px;*/ vertical-align: top; } .jqplot-x2axis-tick { bottom: 0px; /* initial position untill tick is drawn in proper place */ left: 15px; /* padding-bottom: 10px;*/ vertical-align: bottom; } .jqplot-yaxis-tick { right: 0px; /* initial position untill tick is drawn in proper place */ top: 15px; /* padding-right: 10px;*/ text-align: right; } .jqplot-yaxis-tick.jqplot-breakTick { right: -20px; margin-right: 0px; padding:1px 5px 1px 5px; /*background-color: white;*/ z-index: 2; font-size: 1.5em; } .jqplot-y2axis-tick, .jqplot-y3axis-tick, .jqplot-y4axis-tick, .jqplot-y5axis-tick, .jqplot-y6axis-tick, .jqplot-y7axis-tick, .jqplot-y8axis-tick, .jqplot-y9axis-tick { left: 0px; /* initial position untill tick is drawn in proper place */ top: 15px; /* padding-left: 10px;*/ /* padding-right: 15px;*/ text-align: left; } .jqplot-yMidAxis-tick { text-align: center; white-space: nowrap; } .jqplot-xaxis-label { margin-top: 10px; font-size: 11pt; position: absolute; } .jqplot-x2axis-label { margin-bottom: 10px; font-size: 11pt; position: absolute; } .jqplot-yaxis-label { margin-right: 10px; /* text-align: center;*/ font-size: 11pt; position: absolute; } .jqplot-yMidAxis-label { font-size: 11pt; position: absolute; } .jqplot-y2axis-label, .jqplot-y3axis-label, .jqplot-y4axis-label, .jqplot-y5axis-label, .jqplot-y6axis-label, .jqplot-y7axis-label, .jqplot-y8axis-label, .jqplot-y9axis-label { /* text-align: center;*/ font-size: 11pt; margin-left: 10px; position: absolute; } .jqplot-meterGauge-tick { font-size: 0.75em; color: #999999; } .jqplot-meterGauge-label { font-size: 1em; color: #999999; } table.jqplot-table-legend { margin-top: 12px; margin-bottom: 12px; margin-left: 12px; margin-right: 12px; } table.jqplot-table-legend, table.jqplot-cursor-legend { background-color: rgba(255,255,255,0.6); border: 1px solid #cccccc; position: absolute; font-size: 0.75em; } td.jqplot-table-legend { vertical-align:middle; } /* These rules could be used instead of assigning element styles and relying on js object properties. */ /* td.jqplot-table-legend-swatch { padding-top: 0.5em; text-align: center; } tr.jqplot-table-legend:first td.jqplot-table-legend-swatch { padding-top: 0px; } */ td.jqplot-seriesToggle:hover, td.jqplot-seriesToggle:active { cursor: pointer; } .jqplot-table-legend .jqplot-series-hidden { text-decoration: line-through; } div.jqplot-table-legend-swatch-outline { border: 1px solid #cccccc; padding:1px; } div.jqplot-table-legend-swatch { width:0px; height:0px; border-top-width: 5px; border-bottom-width: 5px; border-left-width: 6px; border-right-width: 6px; border-top-style: solid; border-bottom-style: solid; border-left-style: solid; border-right-style: solid; } .jqplot-title { top: 0px; left: 0px; padding-bottom: 0.5em; font-size: 1.2em; } table.jqplot-cursor-tooltip { border: 1px solid #cccccc; font-size: 0.75em; } .jqplot-cursor-tooltip { border: 1px solid #cccccc; font-size: 0.75em; white-space: nowrap; background: rgba(208,208,208,0.5); padding: 1px; } .jqplot-highlighter-tooltip, .jqplot-canvasOverlay-tooltip { border: 1px solid #cccccc; font-size: 0.75em; white-space: nowrap; background: rgba(208,208,208,0.5); padding: 1px; } .jqplot-point-label { font-size: 0.75em; z-index: 2; } td.jqplot-cursor-legend-swatch { vertical-align: middle; text-align: center; } div.jqplot-cursor-legend-swatch { width: 1.2em; height: 0.7em; } .jqplot-error { /* Styles added to the plot target container when there is an error go here.*/ text-align: center; } .jqplot-error-message { /* Styling of the custom error message div goes here.*/ position: relative; top: 46%; display: inline-block; } div.jqplot-bubble-label { font-size: 0.8em; /* background: rgba(90%, 90%, 90%, 0.15);*/ padding-left: 2px; padding-right: 2px; color: rgb(20%, 20%, 20%); } div.jqplot-bubble-label.jqplot-bubble-label-highlight { background: rgba(90%, 90%, 90%, 0.7); } div.jqplot-noData-container { text-align: center; background-color: rgba(96%, 96%, 96%, 0.3); } psensor-1.2.1/www/index.html0000644000175000017500000000376513353521057012765 00000000000000 Psensor Server Monitoring

System Monitoring

Uptime:

CPU

Current usage Load 1mn Load 5mn Load 15mn

Memory

Total Used Free Shared Buffer

Network

Interface Bytes In Bytes Out

Sensors

Name Value Min Max Type
psensor-1.2.1/www/psensor.js0000664000175000017500000001636713675227622013033 00000000000000/* * Copyright (C) 2010-2018 jeanfi@gmail.com * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as * published by the Free Software Foundation; either version 2 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301 USA */ function format_mem_size(s) { var mo_bytes, go_bytes, o, k, m, g; mo_bytes = 1024 * 1024; go_bytes = 1024 * mo_bytes; o = s % 1024; k = Math.round((s / 1024) % 1024); m = Math.round((s / (1024*1024)) % 1024); g = Math.round(s / (1024*1024*1024)); if (g >= 1) return g+"Go "; if (m >= 1) return m+"Mo"; if (k >= 1) return k+"Ko"; if (o > 0) return o+"o"; return "0"; } function type_to_str(stype) { var stype_str; if (stype & 0x0200) stype_str = "NVidia "; else if (stype & 0x0800) stype_str = "ATI/AMD "; else stype_str = ""; if (stype & 0x04000) stype_str += "HDD "; else if (stype & 0x08000) stype_str += "CPU "; else if (stype & 0x10000) stype_str += "GPU "; else if (stype & 0x20000) stype_str += "Fan "; if (stype & 0x0001) stype_str += "Temperature"; else if (stype & 0x0002) stype_str += "RPM"; else if (stype & 0x0004) stype_str += "Load"; return stype_str; } function type_to_unit(stype) { if (stype & 0x0001) return "C"; else if (stype & 0x0002) return "RPM"; else if (stype & 0x0004) return "%"; return ""; } function value_to_str(value, type) { return value+type_to_unit(type); } function get_url_params() { var vars, hashes, i; vars = []; hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); for(i = 0; i < hashes.length; i++) { hash = hashes[i].split('='); vars.push(hash[0]); vars[hash[0]] = hash[1]; } return vars; } function update_chart(chart_id, title, data) { var min_date, max_date, min, max, value; var measures, data_chart, date, entry; var style; $("#"+chart_id).html(""); measures = data["measures"]; data_chart = []; $("h1").html(""); $("h1").append(data["name"]); try { $("title").html(data["name"]); } catch(ignore) { // IE8 doesn't allow to modify the page title } $.each(measures, function(i, item) { value = item["value"]; date = new Date(item["time"]*1000); entry = [date, item["value"]]; data_chart.push(entry); if (!max_date || max_date < date) max_date = date; if (!min_date || min_date > date) min_date = date; if (!min || value < min) min = value; if (!max || value > max) max = value; }); style = { title: title, axes: { xaxis: { renderer: $.jqplot.DateAxisRenderer, tickOptions: { formatString:'%H:%M:%S' }, min: min_date, max: max_date }, yaxis: { min: min-1, max: max+1 } }, series: [ { lineWidth: 1, showMarker: false } ] }; $.jqplot (chart_id, [data_chart], style); } function update_menu() { var name, link, url, str; str = ""; $.getJSON("/api/1.1/sensors", function(data) { str += "
  • CPU
      "; url = "details.html?id="+escape("/api/1.1/cpu/usage"); link = "usage"; str += "
    • "+link+"
    • "; str += "
    "; str += "
  • Network
  • "; str += "
  • Memory
  • "; str += "
  • Sensors\n
      "; $.each(data, function(i, item) { name = item["name"]; url = "details.html?id="+escape("/api/1.1/sensors/"+item["id"]); link = ""+name+""; str += "
    • "+link+"
    • "; }); str += "
    "; $("#menu-list").append(str); }); } function update_summary_sensors() { var name, value_str, min_str, max_str, type, type_str, url; $.getJSON("/api/1.1/sensors", function(data) { $("#sensors tbody").html(""); $.each(data, function(i, item) { name = item["name"]; type = item["type"]; value_str = value_to_str(item["last_measure"]["value"], type); min_str = value_to_str(item["min"], type); max_str = value_to_str(item["max"], type); type_str = type_to_str(type); url = "details.html?id="+escape("/api/1.1/sensors/"+item["id"]); $("#sensors tbody").append("" +""+name+"" +""+value_str+"" +""+min_str+"" +""+max_str+"" +""+type_str+"" +""); }); }); } function update_summary_sysinfo() { $.getJSON("/api/1.1/sysinfo", function(data) { $("#uptime").html(""); $("#cpu tbody").html(""); $("#memory").html(""); $("#swap").html(""); $("#net tbody").html(""); var load = Math.round(data["load"] * 100); var load_1 = Math.round(data["load_1"]*1000)/1000; var load_5 = Math.round(data["load_5"]*1000)/1000; var load_15 = Math.round(data["load_15"]*1000)/1000; var uptime = data["uptime"]; var uptime_s = uptime % 60; var uptime_mn = Math.floor((uptime / 60) % 60); var uptime_h = Math.floor((uptime / (60*60)) % 24); var uptime_d = Math.floor(uptime / (60*60*24)); $("#cpu").append(""+load+"%" +load_1+"" +load_5+"" +load_15+""); $("#uptime").append(uptime_d+"d "+uptime_h+"h "+uptime_mn+"mn"); var ram = data["ram"]; var swap = data["swap"]; var mu = data["mem_unit"]; var ramtotal = ram["total"]*mu; var ramfree = ram["free"]*mu; var ramused = (ram["total"] - ram["free"])*mu; var ramshared = ram["shared"]*mu; var rambuffer = ram["buffer"]*mu; $("#memory").append("Memory" +""+format_mem_size(ramtotal)+"" +""+format_mem_size(ramused)+"" +""+format_mem_size(ramfree)+"" +""+format_mem_size(ramshared)+"" +""+format_mem_size(rambuffer)+""); $("#swap").append("Swap" +""+format_mem_size(swap["total"]*mu)+"" +""+format_mem_size(swap["total"]*mu-swap["free"]*mu)+"" +""+format_mem_size(swap["free"]*mu)+""); var netdata = data["net"]; $.each(netdata, function(i, item) { $("#net").append(""+item["name"]+"" +""+format_mem_size(item["bytes_in"])+"" +""+format_mem_size(item["bytes_out"])+""); }); }); } psensor-1.2.1/www/jqplot.dateAxisRenderer.js0000644000175000017500000007320613353521057016064 00000000000000/** * jqPlot * Pure JavaScript plotting plugin using jQuery * * Version: 1.0.8 * Revision: 1250 * * Copyright (c) 2009-2013 Chris Leonello * jqPlot is currently available for use in all personal or commercial projects * under both the MIT (http://www.opensource.org/licenses/mit-license.php) and GPL * version 2.0 (http://www.gnu.org/licenses/gpl-2.0.html) licenses. This means that you can * choose the license that best suits your project and use it accordingly. * * Although not required, the author would appreciate an email letting him * know of any substantial use of jqPlot. You can reach the author at: * chris at jqplot dot com or see http://www.jqplot.com/info.php . * * If you are feeling kind and generous, consider supporting the project by * making a donation at: http://www.jqplot.com/donate.php . * * sprintf functions contained in jqplot.sprintf.js by Ash Searle: * * version 2007.04.27 * author Ash Searle * http://hexmen.com/blog/2007/03/printf-sprintf/ * http://hexmen.com/js/sprintf.js * The author (Ash Searle) has placed this code in the public domain: * "This code is unrestricted: you are free to use it however you like." * */ (function($) { /** * Class: $.jqplot.DateAxisRenderer * A plugin for a jqPlot to render an axis as a series of date values. * This renderer has no options beyond those supplied by the class. * It supplies its own tick formatter, so the tickOptions.formatter option * should not be overridden. * * Thanks to Ken Synder for his enhanced Date instance methods which are * included with this code . * * To use this renderer, include the plugin in your source * > * * and supply the appropriate options to your plot * * > {axes:{xaxis:{renderer:$.jqplot.DateAxisRenderer}}} * * Dates can be passed into the axis in almost any recognizable value and * will be parsed. They will be rendered on the axis in the format * specified by tickOptions.formatString. e.g. tickOptions.formatString = '%Y-%m-%d'. * * Accecptable format codes * are: * * > Code Result Description * > == Years == * > %Y 2008 Four-digit year * > %y 08 Two-digit year * > == Months == * > %m 09 Two-digit month * > %#m 9 One or two-digit month * > %B September Full month name * > %b Sep Abbreviated month name * > == Days == * > %d 05 Two-digit day of month * > %#d 5 One or two-digit day of month * > %e 5 One or two-digit day of month * > %A Sunday Full name of the day of the week * > %a Sun Abbreviated name of the day of the week * > %w 0 Number of the day of the week (0 = Sunday, 6 = Saturday) * > %o th The ordinal suffix string following the day of the month * > == Hours == * > %H 23 Hours in 24-hour format (two digits) * > %#H 3 Hours in 24-hour integer format (one or two digits) * > %I 11 Hours in 12-hour format (two digits) * > %#I 3 Hours in 12-hour integer format (one or two digits) * > %p PM AM or PM * > == Minutes == * > %M 09 Minutes (two digits) * > %#M 9 Minutes (one or two digits) * > == Seconds == * > %S 02 Seconds (two digits) * > %#S 2 Seconds (one or two digits) * > %s 1206567625723 Unix timestamp (Seconds past 1970-01-01 00:00:00) * > == Milliseconds == * > %N 008 Milliseconds (three digits) * > %#N 8 Milliseconds (one to three digits) * > == Timezone == * > %O 360 difference in minutes between local time and GMT * > %Z Mountain Standard Time Name of timezone as reported by browser * > %G -06:00 Hours and minutes between GMT * > == Shortcuts == * > %F 2008-03-26 %Y-%m-%d * > %T 05:06:30 %H:%M:%S * > %X 05:06:30 %H:%M:%S * > %x 03/26/08 %m/%d/%y * > %D 03/26/08 %m/%d/%y * > %#c Wed Mar 26 15:31:00 2008 %a %b %e %H:%M:%S %Y * > %v 3-Sep-2008 %e-%b-%Y * > %R 15:31 %H:%M * > %r 3:31:00 PM %I:%M:%S %p * > == Characters == * > %n \n Newline * > %t \t Tab * > %% % Percent Symbol */ $.jqplot.DateAxisRenderer = function() { $.jqplot.LinearAxisRenderer.call(this); this.date = new $.jsDate(); }; var second = 1000; var minute = 60 * second; var hour = 60 * minute; var day = 24 * hour; var week = 7 * day; // these are less definitive var month = 30.4368499 * day; var year = 365.242199 * day; var daysInMonths = [31,28,31,30,31,30,31,30,31,30,31,30]; // array of consistent nice intervals. Longer intervals // will depend on days in month, days in year, etc. var niceFormatStrings = ['%M:%S.%#N', '%M:%S.%#N', '%M:%S.%#N', '%M:%S', '%M:%S', '%M:%S', '%M:%S', '%H:%M:%S', '%H:%M:%S', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%H:%M', '%a %H:%M', '%a %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%b %e %H:%M', '%v', '%v', '%v', '%v', '%v', '%v', '%v']; var niceIntervals = [0.1*second, 0.2*second, 0.5*second, second, 2*second, 5*second, 10*second, 15*second, 30*second, minute, 2*minute, 5*minute, 10*minute, 15*minute, 30*minute, hour, 2*hour, 4*hour, 6*hour, 8*hour, 12*hour, day, 2*day, 3*day, 4*day, 5*day, week, 2*week]; var niceMonthlyIntervals = []; function bestDateInterval(min, max, titarget) { // iterate through niceIntervals to find one closest to titarget var badness = Number.MAX_VALUE; var temp, bestTi, bestfmt; for (var i=0, l=niceIntervals.length; i < l; i++) { temp = Math.abs(titarget - niceIntervals[i]); if (temp < badness) { badness = temp; bestTi = niceIntervals[i]; bestfmt = niceFormatStrings[i]; } } return [bestTi, bestfmt]; } $.jqplot.DateAxisRenderer.prototype = new $.jqplot.LinearAxisRenderer(); $.jqplot.DateAxisRenderer.prototype.constructor = $.jqplot.DateAxisRenderer; $.jqplot.DateTickFormatter = function(format, val) { if (!format) { format = '%Y/%m/%d'; } return $.jsDate.strftime(val, format); }; $.jqplot.DateAxisRenderer.prototype.init = function(options){ // prop: tickRenderer // A class of a rendering engine for creating the ticks labels displayed on the plot, // See <$.jqplot.AxisTickRenderer>. // this.tickRenderer = $.jqplot.AxisTickRenderer; // this.labelRenderer = $.jqplot.AxisLabelRenderer; this.tickOptions.formatter = $.jqplot.DateTickFormatter; // prop: tickInset // Controls the amount to inset the first and last ticks from // the edges of the grid, in multiples of the tick interval. // 0 is no inset, 0.5 is one half a tick interval, 1 is a full // tick interval, etc. this.tickInset = 0; // prop: drawBaseline // True to draw the axis baseline. this.drawBaseline = true; // prop: baselineWidth // width of the baseline in pixels. this.baselineWidth = null; // prop: baselineColor // CSS color spec for the baseline. this.baselineColor = null; this.daTickInterval = null; this._daTickInterval = null; $.extend(true, this, options); var db = this._dataBounds, stats, sum, s, d, pd, sd, intv; // Go through all the series attached to this axis and find // the min/max bounds for this axis. for (var i=0; i db.max) || db.max == null) { db.max = d[j][0]; } if (j>0) { intv = Math.abs(d[j][0] - d[j-1][0]); stats.intervals.push(intv); if (stats.frequencies.hasOwnProperty(intv)) { stats.frequencies[intv] += 1; } else { stats.frequencies[intv] = 1; } } sum += intv; } else { d[j][1] = new $.jsDate(d[j][1]).getTime(); pd[j][1] = new $.jsDate(d[j][1]).getTime(); sd[j][1] = new $.jsDate(d[j][1]).getTime(); if ((d[j][1] != null && d[j][1] < db.min) || db.min == null) { db.min = d[j][1]; } if ((d[j][1] != null && d[j][1] > db.max) || db.max == null) { db.max = d[j][1]; } if (j>0) { intv = Math.abs(d[j][1] - d[j-1][1]); stats.intervals.push(intv); if (stats.frequencies.hasOwnProperty(intv)) { stats.frequencies[intv] += 1; } else { stats.frequencies[intv] = 1; } } } sum += intv; } if (s.renderer.bands) { if (s.renderer.bands.hiData.length) { var bd = s.renderer.bands.hiData; for (var j=0, l=bd.length; j < l; j++) { if (this.name === 'xaxis' || this.name === 'x2axis') { bd[j][0] = new $.jsDate(bd[j][0]).getTime(); if ((bd[j][0] != null && bd[j][0] > db.max) || db.max == null) { db.max = bd[j][0]; } } else { bd[j][1] = new $.jsDate(bd[j][1]).getTime(); if ((bd[j][1] != null && bd[j][1] > db.max) || db.max == null) { db.max = bd[j][1]; } } } } if (s.renderer.bands.lowData.length) { var bd = s.renderer.bands.lowData; for (var j=0, l=bd.length; j < l; j++) { if (this.name === 'xaxis' || this.name === 'x2axis') { bd[j][0] = new $.jsDate(bd[j][0]).getTime(); if ((bd[j][0] != null && bd[j][0] < db.min) || db.min == null) { db.min = bd[j][0]; } } else { bd[j][1] = new $.jsDate(bd[j][1]).getTime(); if ((bd[j][1] != null && bd[j][1] < db.min) || db.min == null) { db.min = bd[j][1]; } } } } } var tempf = 0, tempn=0; for (var n in stats.frequencies) { stats.sortedIntervals.push({interval:n, frequency:stats.frequencies[n]}); } stats.sortedIntervals.sort(function(a, b){ return b.frequency - a.frequency; }); stats.min = $.jqplot.arrayMin(stats.intervals); stats.max = $.jqplot.arrayMax(stats.intervals); stats.mean = sum/d.length; this._intervalStats.push(stats); stats = sum = s = d = pd = sd = null; } db = null; }; // called with scope of an axis $.jqplot.DateAxisRenderer.prototype.reset = function() { this.min = this._options.min; this.max = this._options.max; this.tickInterval = this._options.tickInterval; this.numberTicks = this._options.numberTicks; this._autoFormatString = ''; if (this._overrideFormatString && this.tickOptions && this.tickOptions.formatString) { this.tickOptions.formatString = ''; } this.daTickInterval = this._daTickInterval; // this._ticks = this.__ticks; }; $.jqplot.DateAxisRenderer.prototype.createTicks = function(plot) { // we're are operating on an axis here var ticks = this._ticks; var userTicks = this.ticks; var name = this.name; // databounds were set on axis initialization. var db = this._dataBounds; var iv = this._intervalStats; var dim = (this.name.charAt(0) === 'x') ? this._plotDimensions.width : this._plotDimensions.height; var interval; var min, max; var pos1, pos2; var tt, i; var threshold = 30; var insetMult = 1; var daTickInterval = null; // if user specified a tick interval, convert to usable. if (this.tickInterval != null) { // if interval is a number or can be converted to one, use it. // Assume it is in SECONDS!!! if (Number(this.tickInterval)) { daTickInterval = [Number(this.tickInterval), 'seconds']; } // else, parse out something we can build from. else if (typeof this.tickInterval == "string") { var parts = this.tickInterval.split(' '); if (parts.length == 1) { daTickInterval = [1, parts[0]]; } else if (parts.length == 2) { daTickInterval = [parts[0], parts[1]]; } } } var tickInterval = this.tickInterval; // if we already have ticks, use them. // ticks must be in order of increasing value. min = new $.jsDate((this.min != null) ? this.min : db.min).getTime(); max = new $.jsDate((this.max != null) ? this.max : db.max).getTime(); // see if we're zooming. if we are, don't use the min and max we're given, // but compute some nice ones. They will be reset later. var cursor = plot.plugins.cursor; if (cursor && cursor._zoom && cursor._zoom.zooming) { this.min = null; this.max = null; } var range = max - min; if (this.tickOptions == null || !this.tickOptions.formatString) { this._overrideFormatString = true; } if (userTicks.length) { // ticks could be 1D or 2D array of [val, val, ,,,] or [[val, label], [val, label], ...] or mixed for (i=0; i 6) { intv = 6; } // figure out the starting month and ending month. var mstart = new $.jsDate(min).setDate(1).setHours(0,0,0,0); // See if max ends exactly on a month var tempmend = new $.jsDate(max); var mend = new $.jsDate(max).setDate(1).setHours(0,0,0,0); if (tempmend.getTime() !== mend.getTime()) { mend = mend.add(1, 'month'); } var nmonths = mend.diff(mstart, 'month'); nttarget = Math.ceil(nmonths/intv) + 1; this.min = mstart.getTime(); this.max = mstart.clone().add((nttarget - 1) * intv, 'month').getTime(); this.numberTicks = nttarget; for (var i=0; i 200) { this.numberTicks = parseInt(3+(dim-200)/100, 10); } else { this.numberTicks = 2; } } insetMult = range / (this.numberTicks-1)/1000; if (this.daTickInterval == null) { this.daTickInterval = [insetMult, 'seconds']; } for (var i=0; i type pairs class2type = {}, // List of deleted data cache ids, so we can reuse them core_deletedIds = [], core_version = "1.9.1", // Save a reference to some core methods core_concat = core_deletedIds.concat, core_push = core_deletedIds.push, core_slice = core_deletedIds.slice, core_indexOf = core_deletedIds.indexOf, core_toString = class2type.toString, core_hasOwn = class2type.hasOwnProperty, core_trim = core_version.trim, // Define a local copy of jQuery jQuery = function( selector, context ) { // The jQuery object is actually just the init constructor 'enhanced' return new jQuery.fn.init( selector, context, rootjQuery ); }, // Used for matching numbers core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source, // Used for splitting on whitespace core_rnotwhite = /\S+/g, // Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE) rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, // A simple way to check for HTML strings // Prioritize #id over to avoid XSS via location.hash (#9521) // Strict HTML recognition (#11290: must start with <) rquickExpr = /^(?:(<[\w\W]+>)[^>]*|#([\w-]*))$/, // Match a standalone tag rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>|)$/, // JSON RegExp rvalidchars = /^[\],:{}\s]*$/, rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g, rvalidescape = /\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g, rvalidtokens = /"[^"\\\r\n]*"|true|false|null|-?(?:\d+\.|)\d+(?:[eE][+-]?\d+|)/g, // Matches dashed string for camelizing rmsPrefix = /^-ms-/, rdashAlpha = /-([\da-z])/gi, // Used by jQuery.camelCase as callback to replace() fcamelCase = function( all, letter ) { return letter.toUpperCase(); }, // The ready event handler completed = function( event ) { // readyState === "complete" is good enough for us to call the dom ready in oldIE if ( document.addEventListener || event.type === "load" || document.readyState === "complete" ) { detach(); jQuery.ready(); } }, // Clean-up method for dom ready events detach = function() { if ( document.addEventListener ) { document.removeEventListener( "DOMContentLoaded", completed, false ); window.removeEventListener( "load", completed, false ); } else { document.detachEvent( "onreadystatechange", completed ); window.detachEvent( "onload", completed ); } }; jQuery.fn = jQuery.prototype = { // The current version of jQuery being used jquery: core_version, constructor: jQuery, init: function( selector, context, rootjQuery ) { var match, elem; // HANDLE: $(""), $(null), $(undefined), $(false) if ( !selector ) { return this; } // Handle HTML strings if ( typeof selector === "string" ) { if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) { // Assume that strings that start and end with <> are HTML and skip the regex check match = [ null, selector, null ]; } else { match = rquickExpr.exec( selector ); } // Match html or make sure no context is specified for #id if ( match && (match[1] || !context) ) { // HANDLE: $(html) -> $(array) if ( match[1] ) { context = context instanceof jQuery ? context[0] : context; // scripts is true for back-compat jQuery.merge( this, jQuery.parseHTML( match[1], context && context.nodeType ? context.ownerDocument || context : document, true ) ); // HANDLE: $(html, props) if ( rsingleTag.test( match[1] ) && jQuery.isPlainObject( context ) ) { for ( match in context ) { // Properties of context are called as methods if possible if ( jQuery.isFunction( this[ match ] ) ) { this[ match ]( context[ match ] ); // ...and otherwise set as attributes } else { this.attr( match, context[ match ] ); } } } return this; // HANDLE: $(#id) } else { elem = document.getElementById( match[2] ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE and Opera return items // by name instead of ID if ( elem.id !== match[2] ) { return rootjQuery.find( selector ); } // Otherwise, we inject the element directly into the jQuery object this.length = 1; this[0] = elem; } this.context = document; this.selector = selector; return this; } // HANDLE: $(expr, $(...)) } else if ( !context || context.jquery ) { return ( context || rootjQuery ).find( selector ); // HANDLE: $(expr, context) // (which is just equivalent to: $(context).find(expr) } else { return this.constructor( context ).find( selector ); } // HANDLE: $(DOMElement) } else if ( selector.nodeType ) { this.context = this[0] = selector; this.length = 1; return this; // HANDLE: $(function) // Shortcut for document ready } else if ( jQuery.isFunction( selector ) ) { return rootjQuery.ready( selector ); } if ( selector.selector !== undefined ) { this.selector = selector.selector; this.context = selector.context; } return jQuery.makeArray( selector, this ); }, // Start with an empty selector selector: "", // The default length of a jQuery object is 0 length: 0, // The number of elements contained in the matched element set size: function() { return this.length; }, toArray: function() { return core_slice.call( this ); }, // Get the Nth element in the matched element set OR // Get the whole matched element set as a clean array get: function( num ) { return num == null ? // Return a 'clean' array this.toArray() : // Return just the object ( num < 0 ? this[ this.length + num ] : this[ num ] ); }, // Take an array of elements and push it onto the stack // (returning the new matched element set) pushStack: function( elems ) { // Build a new jQuery matched element set var ret = jQuery.merge( this.constructor(), elems ); // Add the old object onto the stack (as a reference) ret.prevObject = this; ret.context = this.context; // Return the newly-formed element set return ret; }, // Execute a callback for every element in the matched set. // (You can seed the arguments with an array of args, but this is // only used internally.) each: function( callback, args ) { return jQuery.each( this, callback, args ); }, ready: function( fn ) { // Add the callback jQuery.ready.promise().done( fn ); return this; }, slice: function() { return this.pushStack( core_slice.apply( this, arguments ) ); }, first: function() { return this.eq( 0 ); }, last: function() { return this.eq( -1 ); }, eq: function( i ) { var len = this.length, j = +i + ( i < 0 ? len : 0 ); return this.pushStack( j >= 0 && j < len ? [ this[j] ] : [] ); }, map: function( callback ) { return this.pushStack( jQuery.map(this, function( elem, i ) { return callback.call( elem, i, elem ); })); }, end: function() { return this.prevObject || this.constructor(null); }, // For internal use only. // Behaves like an Array's method, not like a jQuery method. push: core_push, sort: [].sort, splice: [].splice }; // Give the init function the jQuery prototype for later instantiation jQuery.fn.init.prototype = jQuery.fn; jQuery.extend = jQuery.fn.extend = function() { var src, copyIsArray, copy, name, options, clone, target = arguments[0] || {}, i = 1, length = arguments.length, deep = false; // Handle a deep copy situation if ( typeof target === "boolean" ) { deep = target; target = arguments[1] || {}; // skip the boolean and the target i = 2; } // Handle case when target is a string or something (possible in deep copy) if ( typeof target !== "object" && !jQuery.isFunction(target) ) { target = {}; } // extend jQuery itself if only one argument is passed if ( length === i ) { target = this; --i; } for ( ; i < length; i++ ) { // Only deal with non-null/undefined values if ( (options = arguments[ i ]) != null ) { // Extend the base object for ( name in options ) { src = target[ name ]; copy = options[ name ]; // Prevent never-ending loop if ( target === copy ) { continue; } // Recurse if we're merging plain objects or arrays if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) { if ( copyIsArray ) { copyIsArray = false; clone = src && jQuery.isArray(src) ? src : []; } else { clone = src && jQuery.isPlainObject(src) ? src : {}; } // Never move original objects, clone them target[ name ] = jQuery.extend( deep, clone, copy ); // Don't bring in undefined values } else if ( copy !== undefined ) { target[ name ] = copy; } } } } // Return the modified object return target; }; jQuery.extend({ noConflict: function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; }, // Is the DOM ready to be used? Set to true once it occurs. isReady: false, // A counter to track how many items to wait for before // the ready event fires. See #6781 readyWait: 1, // Hold (or release) the ready event holdReady: function( hold ) { if ( hold ) { jQuery.readyWait++; } else { jQuery.ready( true ); } }, // Handle when the DOM is ready ready: function( wait ) { // Abort if there are pending holds or we're already ready if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) { return; } // Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443). if ( !document.body ) { return setTimeout( jQuery.ready ); } // Remember that the DOM is ready jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be if ( wait !== true && --jQuery.readyWait > 0 ) { return; } // If there are functions bound, to execute readyList.resolveWith( document, [ jQuery ] ); // Trigger any bound ready events if ( jQuery.fn.trigger ) { jQuery( document ).trigger("ready").off("ready"); } }, // See test/unit/core.js for details concerning isFunction. // Since version 1.3, DOM methods and functions like alert // aren't supported. They return false on IE (#2968). isFunction: function( obj ) { return jQuery.type(obj) === "function"; }, isArray: Array.isArray || function( obj ) { return jQuery.type(obj) === "array"; }, isWindow: function( obj ) { return obj != null && obj == obj.window; }, isNumeric: function( obj ) { return !isNaN( parseFloat(obj) ) && isFinite( obj ); }, type: function( obj ) { if ( obj == null ) { return String( obj ); } return typeof obj === "object" || typeof obj === "function" ? class2type[ core_toString.call(obj) ] || "object" : typeof obj; }, isPlainObject: function( obj ) { // Must be an Object. // Because of IE, we also have to check the presence of the constructor property. // Make sure that DOM nodes and window objects don't pass through, as well if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) { return false; } try { // Not own constructor property must be Object if ( obj.constructor && !core_hasOwn.call(obj, "constructor") && !core_hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) { return false; } } catch ( e ) { // IE8,9 Will throw exceptions on certain host objects #9897 return false; } // Own properties are enumerated firstly, so to speed up, // if last one is own, then all properties are own. var key; for ( key in obj ) {} return key === undefined || core_hasOwn.call( obj, key ); }, isEmptyObject: function( obj ) { var name; for ( name in obj ) { return false; } return true; }, error: function( msg ) { throw new Error( msg ); }, // data: string of html // context (optional): If specified, the fragment will be created in this context, defaults to document // keepScripts (optional): If true, will include scripts passed in the html string parseHTML: function( data, context, keepScripts ) { if ( !data || typeof data !== "string" ) { return null; } if ( typeof context === "boolean" ) { keepScripts = context; context = false; } context = context || document; var parsed = rsingleTag.exec( data ), scripts = !keepScripts && []; // Single tag if ( parsed ) { return [ context.createElement( parsed[1] ) ]; } parsed = jQuery.buildFragment( [ data ], context, scripts ); if ( scripts ) { jQuery( scripts ).remove(); } return jQuery.merge( [], parsed.childNodes ); }, parseJSON: function( data ) { // Attempt to parse using the native JSON parser first if ( window.JSON && window.JSON.parse ) { return window.JSON.parse( data ); } if ( data === null ) { return data; } if ( typeof data === "string" ) { // Make sure leading/trailing whitespace is removed (IE can't handle it) data = jQuery.trim( data ); if ( data ) { // Make sure the incoming data is actual JSON // Logic borrowed from http://json.org/json2.js if ( rvalidchars.test( data.replace( rvalidescape, "@" ) .replace( rvalidtokens, "]" ) .replace( rvalidbraces, "")) ) { return ( new Function( "return " + data ) )(); } } } jQuery.error( "Invalid JSON: " + data ); }, // Cross-browser xml parsing parseXML: function( data ) { var xml, tmp; if ( !data || typeof data !== "string" ) { return null; } try { if ( window.DOMParser ) { // Standard tmp = new DOMParser(); xml = tmp.parseFromString( data , "text/xml" ); } else { // IE xml = new ActiveXObject( "Microsoft.XMLDOM" ); xml.async = "false"; xml.loadXML( data ); } } catch( e ) { xml = undefined; } if ( !xml || !xml.documentElement || xml.getElementsByTagName( "parsererror" ).length ) { jQuery.error( "Invalid XML: " + data ); } return xml; }, noop: function() {}, // Evaluates a script in a global context // Workarounds based on findings by Jim Driscoll // http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context globalEval: function( data ) { if ( data && jQuery.trim( data ) ) { // We use execScript on Internet Explorer // We use an anonymous function so that context is window // rather than jQuery in Firefox ( window.execScript || function( data ) { window[ "eval" ].call( window, data ); } )( data ); } }, // Convert dashed to camelCase; used by the css and data modules // Microsoft forgot to hump their vendor prefix (#9572) camelCase: function( string ) { return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase ); }, nodeName: function( elem, name ) { return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase(); }, // args is for internal usage only each: function( obj, callback, args ) { var value, i = 0, length = obj.length, isArray = isArraylike( obj ); if ( args ) { if ( isArray ) { for ( ; i < length; i++ ) { value = callback.apply( obj[ i ], args ); if ( value === false ) { break; } } } else { for ( i in obj ) { value = callback.apply( obj[ i ], args ); if ( value === false ) { break; } } } // A special, fast, case for the most common use of each } else { if ( isArray ) { for ( ; i < length; i++ ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) { break; } } } else { for ( i in obj ) { value = callback.call( obj[ i ], i, obj[ i ] ); if ( value === false ) { break; } } } } return obj; }, // Use native String.trim function wherever possible trim: core_trim && !core_trim.call("\uFEFF\xA0") ? function( text ) { return text == null ? "" : core_trim.call( text ); } : // Otherwise use our own trimming functionality function( text ) { return text == null ? "" : ( text + "" ).replace( rtrim, "" ); }, // results is for internal usage only makeArray: function( arr, results ) { var ret = results || []; if ( arr != null ) { if ( isArraylike( Object(arr) ) ) { jQuery.merge( ret, typeof arr === "string" ? [ arr ] : arr ); } else { core_push.call( ret, arr ); } } return ret; }, inArray: function( elem, arr, i ) { var len; if ( arr ) { if ( core_indexOf ) { return core_indexOf.call( arr, elem, i ); } len = arr.length; i = i ? i < 0 ? Math.max( 0, len + i ) : i : 0; for ( ; i < len; i++ ) { // Skip accessing in sparse arrays if ( i in arr && arr[ i ] === elem ) { return i; } } } return -1; }, merge: function( first, second ) { var l = second.length, i = first.length, j = 0; if ( typeof l === "number" ) { for ( ; j < l; j++ ) { first[ i++ ] = second[ j ]; } } else { while ( second[j] !== undefined ) { first[ i++ ] = second[ j++ ]; } } first.length = i; return first; }, grep: function( elems, callback, inv ) { var retVal, ret = [], i = 0, length = elems.length; inv = !!inv; // Go through the array, only saving the items // that pass the validator function for ( ; i < length; i++ ) { retVal = !!callback( elems[ i ], i ); if ( inv !== retVal ) { ret.push( elems[ i ] ); } } return ret; }, // arg is for internal usage only map: function( elems, callback, arg ) { var value, i = 0, length = elems.length, isArray = isArraylike( elems ), ret = []; // Go through the array, translating each of the items to their if ( isArray ) { for ( ; i < length; i++ ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret[ ret.length ] = value; } } // Go through every key on the object, } else { for ( i in elems ) { value = callback( elems[ i ], i, arg ); if ( value != null ) { ret[ ret.length ] = value; } } } // Flatten any nested arrays return core_concat.apply( [], ret ); }, // A global GUID counter for objects guid: 1, // Bind a function to a context, optionally partially applying any // arguments. proxy: function( fn, context ) { var args, proxy, tmp; if ( typeof context === "string" ) { tmp = fn[ context ]; context = fn; fn = tmp; } // Quick check to determine if target is callable, in the spec // this throws a TypeError, but we will just return undefined. if ( !jQuery.isFunction( fn ) ) { return undefined; } // Simulated bind args = core_slice.call( arguments, 2 ); proxy = function() { return fn.apply( context || this, args.concat( core_slice.call( arguments ) ) ); }; // Set the guid of unique handler to the same of original handler, so it can be removed proxy.guid = fn.guid = fn.guid || jQuery.guid++; return proxy; }, // Multifunctional method to get and set values of a collection // The value/s can optionally be executed if it's a function access: function( elems, fn, key, value, chainable, emptyGet, raw ) { var i = 0, length = elems.length, bulk = key == null; // Sets many values if ( jQuery.type( key ) === "object" ) { chainable = true; for ( i in key ) { jQuery.access( elems, fn, i, key[i], true, emptyGet, raw ); } // Sets one value } else if ( value !== undefined ) { chainable = true; if ( !jQuery.isFunction( value ) ) { raw = true; } if ( bulk ) { // Bulk operations run against the entire set if ( raw ) { fn.call( elems, value ); fn = null; // ...except when executing function values } else { bulk = fn; fn = function( elem, key, value ) { return bulk.call( jQuery( elem ), value ); }; } } if ( fn ) { for ( ; i < length; i++ ) { fn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) ); } } } return chainable ? elems : // Gets bulk ? fn.call( elems ) : length ? fn( elems[0], key ) : emptyGet; }, now: function() { return ( new Date() ).getTime(); } }); jQuery.ready.promise = function( obj ) { if ( !readyList ) { readyList = jQuery.Deferred(); // Catch cases where $(document).ready() is called after the browser event has already occurred. // we once tried to use readyState "interactive" here, but it caused issues like the one // discovered by ChrisS here: http://bugs.jquery.com/ticket/12282#comment:15 if ( document.readyState === "complete" ) { // Handle it asynchronously to allow scripts the opportunity to delay ready setTimeout( jQuery.ready ); // Standards-based browsers support DOMContentLoaded } else if ( document.addEventListener ) { // Use the handy event callback document.addEventListener( "DOMContentLoaded", completed, false ); // A fallback to window.onload, that will always work window.addEventListener( "load", completed, false ); // If IE event model is used } else { // Ensure firing before onload, maybe late but safe also for iframes document.attachEvent( "onreadystatechange", completed ); // A fallback to window.onload, that will always work window.attachEvent( "onload", completed ); // If IE and not a frame // continually check to see if the document is ready var top = false; try { top = window.frameElement == null && document.documentElement; } catch(e) {} if ( top && top.doScroll ) { (function doScrollCheck() { if ( !jQuery.isReady ) { try { // Use the trick by Diego Perini // http://javascript.nwbox.com/IEContentLoaded/ top.doScroll("left"); } catch(e) { return setTimeout( doScrollCheck, 50 ); } // detach all dom ready events detach(); // and execute any waiting functions jQuery.ready(); } })(); } } } return readyList.promise( obj ); }; // Populate the class2type map jQuery.each("Boolean Number String Function Array Date RegExp Object Error".split(" "), function(i, name) { class2type[ "[object " + name + "]" ] = name.toLowerCase(); }); function isArraylike( obj ) { var length = obj.length, type = jQuery.type( obj ); if ( jQuery.isWindow( obj ) ) { return false; } if ( obj.nodeType === 1 && length ) { return true; } return type === "array" || type !== "function" && ( length === 0 || typeof length === "number" && length > 0 && ( length - 1 ) in obj ); } // All jQuery objects should point back to these rootjQuery = jQuery(document); // String to Object options format cache var optionsCache = {}; // Convert String-formatted options into Object-formatted ones and store in cache function createOptions( options ) { var object = optionsCache[ options ] = {}; jQuery.each( options.match( core_rnotwhite ) || [], function( _, flag ) { object[ flag ] = true; }); return object; } /* * Create a callback list using the following parameters: * * options: an optional list of space-separated options that will change how * the callback list behaves or a more traditional option object * * By default a callback list will act like an event callback list and can be * "fired" multiple times. * * Possible options: * * once: will ensure the callback list can only be fired once (like a Deferred) * * memory: will keep track of previous values and will call any callback added * after the list has been fired right away with the latest "memorized" * values (like a Deferred) * * unique: will ensure a callback can only be added once (no duplicate in the list) * * stopOnFalse: interrupt callings when a callback returns false * */ jQuery.Callbacks = function( options ) { // Convert options from String-formatted to Object-formatted if needed // (we check in cache first) options = typeof options === "string" ? ( optionsCache[ options ] || createOptions( options ) ) : jQuery.extend( {}, options ); var // Flag to know if list is currently firing firing, // Last fire value (for non-forgettable lists) memory, // Flag to know if list was already fired fired, // End of the loop when firing firingLength, // Index of currently firing callback (modified by remove if needed) firingIndex, // First callback to fire (used internally by add and fireWith) firingStart, // Actual callback list list = [], // Stack of fire calls for repeatable lists stack = !options.once && [], // Fire callbacks fire = function( data ) { memory = options.memory && data; fired = true; firingIndex = firingStart || 0; firingStart = 0; firingLength = list.length; firing = true; for ( ; list && firingIndex < firingLength; firingIndex++ ) { if ( list[ firingIndex ].apply( data[ 0 ], data[ 1 ] ) === false && options.stopOnFalse ) { memory = false; // To prevent further calls using add break; } } firing = false; if ( list ) { if ( stack ) { if ( stack.length ) { fire( stack.shift() ); } } else if ( memory ) { list = []; } else { self.disable(); } } }, // Actual Callbacks object self = { // Add a callback or a collection of callbacks to the list add: function() { if ( list ) { // First, we save the current length var start = list.length; (function add( args ) { jQuery.each( args, function( _, arg ) { var type = jQuery.type( arg ); if ( type === "function" ) { if ( !options.unique || !self.has( arg ) ) { list.push( arg ); } } else if ( arg && arg.length && type !== "string" ) { // Inspect recursively add( arg ); } }); })( arguments ); // Do we need to add the callbacks to the // current firing batch? if ( firing ) { firingLength = list.length; // With memory, if we're not firing then // we should call right away } else if ( memory ) { firingStart = start; fire( memory ); } } return this; }, // Remove a callback from the list remove: function() { if ( list ) { jQuery.each( arguments, function( _, arg ) { var index; while( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) { list.splice( index, 1 ); // Handle firing indexes if ( firing ) { if ( index <= firingLength ) { firingLength--; } if ( index <= firingIndex ) { firingIndex--; } } } }); } return this; }, // Check if a given callback is in the list. // If no argument is given, return whether or not list has callbacks attached. has: function( fn ) { return fn ? jQuery.inArray( fn, list ) > -1 : !!( list && list.length ); }, // Remove all callbacks from the list empty: function() { list = []; return this; }, // Have the list do nothing anymore disable: function() { list = stack = memory = undefined; return this; }, // Is it disabled? disabled: function() { return !list; }, // Lock the list in its current state lock: function() { stack = undefined; if ( !memory ) { self.disable(); } return this; }, // Is it locked? locked: function() { return !stack; }, // Call all callbacks with the given context and arguments fireWith: function( context, args ) { args = args || []; args = [ context, args.slice ? args.slice() : args ]; if ( list && ( !fired || stack ) ) { if ( firing ) { stack.push( args ); } else { fire( args ); } } return this; }, // Call all the callbacks with the given arguments fire: function() { self.fireWith( this, arguments ); return this; }, // To know if the callbacks have already been called at least once fired: function() { return !!fired; } }; return self; }; jQuery.extend({ Deferred: function( func ) { var tuples = [ // action, add listener, listener list, final state [ "resolve", "done", jQuery.Callbacks("once memory"), "resolved" ], [ "reject", "fail", jQuery.Callbacks("once memory"), "rejected" ], [ "notify", "progress", jQuery.Callbacks("memory") ] ], state = "pending", promise = { state: function() { return state; }, always: function() { deferred.done( arguments ).fail( arguments ); return this; }, then: function( /* fnDone, fnFail, fnProgress */ ) { var fns = arguments; return jQuery.Deferred(function( newDefer ) { jQuery.each( tuples, function( i, tuple ) { var action = tuple[ 0 ], fn = jQuery.isFunction( fns[ i ] ) && fns[ i ]; // deferred[ done | fail | progress ] for forwarding actions to newDefer deferred[ tuple[1] ](function() { var returned = fn && fn.apply( this, arguments ); if ( returned && jQuery.isFunction( returned.promise ) ) { returned.promise() .done( newDefer.resolve ) .fail( newDefer.reject ) .progress( newDefer.notify ); } else { newDefer[ action + "With" ]( this === promise ? newDefer.promise() : this, fn ? [ returned ] : arguments ); } }); }); fns = null; }).promise(); }, // Get a promise for this deferred // If obj is provided, the promise aspect is added to the object promise: function( obj ) { return obj != null ? jQuery.extend( obj, promise ) : promise; } }, deferred = {}; // Keep pipe for back-compat promise.pipe = promise.then; // Add list-specific methods jQuery.each( tuples, function( i, tuple ) { var list = tuple[ 2 ], stateString = tuple[ 3 ]; // promise[ done | fail | progress ] = list.add promise[ tuple[1] ] = list.add; // Handle state if ( stateString ) { list.add(function() { // state = [ resolved | rejected ] state = stateString; // [ reject_list | resolve_list ].disable; progress_list.lock }, tuples[ i ^ 1 ][ 2 ].disable, tuples[ 2 ][ 2 ].lock ); } // deferred[ resolve | reject | notify ] deferred[ tuple[0] ] = function() { deferred[ tuple[0] + "With" ]( this === deferred ? promise : this, arguments ); return this; }; deferred[ tuple[0] + "With" ] = list.fireWith; }); // Make the deferred a promise promise.promise( deferred ); // Call given func if any if ( func ) { func.call( deferred, deferred ); } // All done! return deferred; }, // Deferred helper when: function( subordinate /* , ..., subordinateN */ ) { var i = 0, resolveValues = core_slice.call( arguments ), length = resolveValues.length, // the count of uncompleted subordinates remaining = length !== 1 || ( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0, // the master Deferred. If resolveValues consist of only a single Deferred, just use that. deferred = remaining === 1 ? subordinate : jQuery.Deferred(), // Update function for both resolve and progress values updateFunc = function( i, contexts, values ) { return function( value ) { contexts[ i ] = this; values[ i ] = arguments.length > 1 ? core_slice.call( arguments ) : value; if( values === progressValues ) { deferred.notifyWith( contexts, values ); } else if ( !( --remaining ) ) { deferred.resolveWith( contexts, values ); } }; }, progressValues, progressContexts, resolveContexts; // add listeners to Deferred subordinates; treat others as resolved if ( length > 1 ) { progressValues = new Array( length ); progressContexts = new Array( length ); resolveContexts = new Array( length ); for ( ; i < length; i++ ) { if ( resolveValues[ i ] && jQuery.isFunction( resolveValues[ i ].promise ) ) { resolveValues[ i ].promise() .done( updateFunc( i, resolveContexts, resolveValues ) ) .fail( deferred.reject ) .progress( updateFunc( i, progressContexts, progressValues ) ); } else { --remaining; } } } // if we're not waiting on anything, resolve the master if ( !remaining ) { deferred.resolveWith( resolveContexts, resolveValues ); } return deferred.promise(); } }); jQuery.support = (function() { var support, all, a, input, select, fragment, opt, eventName, isSupported, i, div = document.createElement("div"); // Setup div.setAttribute( "className", "t" ); div.innerHTML = "
    a"; // Support tests won't run in some limited or non-browser environments all = div.getElementsByTagName("*"); a = div.getElementsByTagName("a")[ 0 ]; if ( !all || !a || !all.length ) { return {}; } // First batch of tests select = document.createElement("select"); opt = select.appendChild( document.createElement("option") ); input = div.getElementsByTagName("input")[ 0 ]; a.style.cssText = "top:1px;float:left;opacity:.5"; support = { // Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7) getSetAttribute: div.className !== "t", // IE strips leading whitespace when .innerHTML is used leadingWhitespace: div.firstChild.nodeType === 3, // Make sure that tbody elements aren't automatically inserted // IE will insert them into empty tables tbody: !div.getElementsByTagName("tbody").length, // Make sure that link elements get serialized correctly by innerHTML // This requires a wrapper element in IE htmlSerialize: !!div.getElementsByTagName("link").length, // Get the style information from getAttribute // (IE uses .cssText instead) style: /top/.test( a.getAttribute("style") ), // Make sure that URLs aren't manipulated // (IE normalizes it by default) hrefNormalized: a.getAttribute("href") === "/a", // Make sure that element opacity exists // (IE uses filter instead) // Use a regex to work around a WebKit issue. See #5145 opacity: /^0.5/.test( a.style.opacity ), // Verify style float existence // (IE uses styleFloat instead of cssFloat) cssFloat: !!a.style.cssFloat, // Check the default checkbox/radio value ("" on WebKit; "on" elsewhere) checkOn: !!input.value, // Make sure that a selected-by-default option has a working selected property. // (WebKit defaults to false instead of true, IE too, if it's in an optgroup) optSelected: opt.selected, // Tests for enctype support on a form (#6743) enctype: !!document.createElement("form").enctype, // Makes sure cloning an html5 element does not cause problems // Where outerHTML is undefined, this still works html5Clone: document.createElement("nav").cloneNode( true ).outerHTML !== "<:nav>", // jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode boxModel: document.compatMode === "CSS1Compat", // Will be defined later deleteExpando: true, noCloneEvent: true, inlineBlockNeedsLayout: false, shrinkWrapBlocks: false, reliableMarginRight: true, boxSizingReliable: true, pixelPosition: false }; // Make sure checked status is properly cloned input.checked = true; support.noCloneChecked = input.cloneNode( true ).checked; // Make sure that the options inside disabled selects aren't marked as disabled // (WebKit marks them as disabled) select.disabled = true; support.optDisabled = !opt.disabled; // Support: IE<9 try { delete div.test; } catch( e ) { support.deleteExpando = false; } // Check if we can trust getAttribute("value") input = document.createElement("input"); input.setAttribute( "value", "" ); support.input = input.getAttribute( "value" ) === ""; // Check if an input maintains its value after becoming a radio input.value = "t"; input.setAttribute( "type", "radio" ); support.radioValue = input.value === "t"; // #11217 - WebKit loses check when the name is after the checked attribute input.setAttribute( "checked", "t" ); input.setAttribute( "name", "t" ); fragment = document.createDocumentFragment(); fragment.appendChild( input ); // Check if a disconnected checkbox will retain its checked // value of true after appended to the DOM (IE6/7) support.appendChecked = input.checked; // WebKit doesn't clone checked state correctly in fragments support.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked; // Support: IE<9 // Opera does not clone events (and typeof div.attachEvent === undefined). // IE9-10 clones events bound via attachEvent, but they don't trigger with .click() if ( div.attachEvent ) { div.attachEvent( "onclick", function() { support.noCloneEvent = false; }); div.cloneNode( true ).click(); } // Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event) // Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php for ( i in { submit: true, change: true, focusin: true }) { div.setAttribute( eventName = "on" + i, "t" ); support[ i + "Bubbles" ] = eventName in window || div.attributes[ eventName ].expando === false; } div.style.backgroundClip = "content-box"; div.cloneNode( true ).style.backgroundClip = ""; support.clearCloneStyle = div.style.backgroundClip === "content-box"; // Run tests that need a body at doc ready jQuery(function() { var container, marginDiv, tds, divReset = "padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;", body = document.getElementsByTagName("body")[0]; if ( !body ) { // Return for frameset docs that don't have a body return; } container = document.createElement("div"); container.style.cssText = "border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px"; body.appendChild( container ).appendChild( div ); // Support: IE8 // Check if table cells still have offsetWidth/Height when they are set // to display:none and there are still other visible table cells in a // table row; if so, offsetWidth/Height are not reliable for use when // determining if an element has been hidden directly using // display:none (it is still safe to use offsets if a parent element is // hidden; don safety goggles and see bug #4512 for more information). div.innerHTML = "
    t
    "; tds = div.getElementsByTagName("td"); tds[ 0 ].style.cssText = "padding:0;margin:0;border:0;display:none"; isSupported = ( tds[ 0 ].offsetHeight === 0 ); tds[ 0 ].style.display = ""; tds[ 1 ].style.display = "none"; // Support: IE8 // Check if empty table cells still have offsetWidth/Height support.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 ); // Check box-sizing and margin behavior div.innerHTML = ""; div.style.cssText = "box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;"; support.boxSizing = ( div.offsetWidth === 4 ); support.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 ); // Use window.getComputedStyle because jsdom on node.js will break without it. if ( window.getComputedStyle ) { support.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== "1%"; support.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: "4px" } ).width === "4px"; // Check if div with explicit width and no margin-right incorrectly // gets computed margin-right based on width of container. (#3333) // Fails in WebKit before Feb 2011 nightlies // WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right marginDiv = div.appendChild( document.createElement("div") ); marginDiv.style.cssText = div.style.cssText = divReset; marginDiv.style.marginRight = marginDiv.style.width = "0"; div.style.width = "1px"; support.reliableMarginRight = !parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight ); } if ( typeof div.style.zoom !== core_strundefined ) { // Support: IE<8 // Check if natively block-level elements act like inline-block // elements when setting their display to 'inline' and giving // them layout div.innerHTML = ""; div.style.cssText = divReset + "width:1px;padding:1px;display:inline;zoom:1"; support.inlineBlockNeedsLayout = ( div.offsetWidth === 3 ); // Support: IE6 // Check if elements with layout shrink-wrap their children div.style.display = "block"; div.innerHTML = "
    "; div.firstChild.style.width = "5px"; support.shrinkWrapBlocks = ( div.offsetWidth !== 3 ); if ( support.inlineBlockNeedsLayout ) { // Prevent IE 6 from affecting layout for positioned elements #11048 // Prevent IE from shrinking the body in IE 7 mode #12869 // Support: IE<8 body.style.zoom = 1; } } body.removeChild( container ); // Null elements to avoid leaks in IE container = div = tds = marginDiv = null; }); // Null elements to avoid leaks in IE all = select = fragment = opt = a = input = null; return support; })(); var rbrace = /(?:\{[\s\S]*\}|\[[\s\S]*\])$/, rmultiDash = /([A-Z])/g; function internalData( elem, name, data, pvt /* Internal Use Only */ ){ if ( !jQuery.acceptData( elem ) ) { return; } var thisCache, ret, internalKey = jQuery.expando, getByName = typeof name === "string", // We have to handle DOM nodes and JS objects differently because IE6-7 // can't GC object references properly across the DOM-JS boundary isNode = elem.nodeType, // Only DOM nodes need the global jQuery cache; JS object data is // attached directly to the object so GC can occur automatically cache = isNode ? jQuery.cache : elem, // Only defining an ID for JS objects if its cache already exists allows // the code to shortcut on the same path as a DOM node with no cache id = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey; // Avoid doing any more work than we need to when trying to get data on an // object that has no data at all if ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) { return; } if ( !id ) { // Only DOM nodes need a new unique ID for each element since their data // ends up in the global cache if ( isNode ) { elem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++; } else { id = internalKey; } } if ( !cache[ id ] ) { cache[ id ] = {}; // Avoids exposing jQuery metadata on plain JS objects when the object // is serialized using JSON.stringify if ( !isNode ) { cache[ id ].toJSON = jQuery.noop; } } // An object can be passed to jQuery.data instead of a key/value pair; this gets // shallow copied over onto the existing cache if ( typeof name === "object" || typeof name === "function" ) { if ( pvt ) { cache[ id ] = jQuery.extend( cache[ id ], name ); } else { cache[ id ].data = jQuery.extend( cache[ id ].data, name ); } } thisCache = cache[ id ]; // jQuery data() is stored in a separate object inside the object's internal data // cache in order to avoid key collisions between internal data and user-defined // data. if ( !pvt ) { if ( !thisCache.data ) { thisCache.data = {}; } thisCache = thisCache.data; } if ( data !== undefined ) { thisCache[ jQuery.camelCase( name ) ] = data; } // Check for both converted-to-camel and non-converted data property names // If a data property was specified if ( getByName ) { // First Try to find as-is property data ret = thisCache[ name ]; // Test for null|undefined property data if ( ret == null ) { // Try to find the camelCased property ret = thisCache[ jQuery.camelCase( name ) ]; } } else { ret = thisCache; } return ret; } function internalRemoveData( elem, name, pvt ) { if ( !jQuery.acceptData( elem ) ) { return; } var i, l, thisCache, isNode = elem.nodeType, // See jQuery.data for more information cache = isNode ? jQuery.cache : elem, id = isNode ? elem[ jQuery.expando ] : jQuery.expando; // If there is already no cache entry for this object, there is no // purpose in continuing if ( !cache[ id ] ) { return; } if ( name ) { thisCache = pvt ? cache[ id ] : cache[ id ].data; if ( thisCache ) { // Support array or space separated string names for data keys if ( !jQuery.isArray( name ) ) { // try the string as a key before any manipulation if ( name in thisCache ) { name = [ name ]; } else { // split the camel cased version by spaces unless a key with the spaces exists name = jQuery.camelCase( name ); if ( name in thisCache ) { name = [ name ]; } else { name = name.split(" "); } } } else { // If "name" is an array of keys... // When data is initially created, via ("key", "val") signature, // keys will be converted to camelCase. // Since there is no way to tell _how_ a key was added, remove // both plain key and camelCase key. #12786 // This will only penalize the array argument path. name = name.concat( jQuery.map( name, jQuery.camelCase ) ); } for ( i = 0, l = name.length; i < l; i++ ) { delete thisCache[ name[i] ]; } // If there is no data left in the cache, we want to continue // and let the cache object itself get destroyed if ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) { return; } } } // See jQuery.data for more information if ( !pvt ) { delete cache[ id ].data; // Don't destroy the parent cache unless the internal data object // had been the only thing left in it if ( !isEmptyDataObject( cache[ id ] ) ) { return; } } // Destroy the cache if ( isNode ) { jQuery.cleanData( [ elem ], true ); // Use delete when supported for expandos or `cache` is not a window per isWindow (#10080) } else if ( jQuery.support.deleteExpando || cache != cache.window ) { delete cache[ id ]; // When all else fails, null } else { cache[ id ] = null; } } jQuery.extend({ cache: {}, // Unique for each copy of jQuery on the page // Non-digits removed to match rinlinejQuery expando: "jQuery" + ( core_version + Math.random() ).replace( /\D/g, "" ), // The following elements throw uncatchable exceptions if you // attempt to add expando properties to them. noData: { "embed": true, // Ban all objects except for Flash (which handle expandos) "object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000", "applet": true }, hasData: function( elem ) { elem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ]; return !!elem && !isEmptyDataObject( elem ); }, data: function( elem, name, data ) { return internalData( elem, name, data ); }, removeData: function( elem, name ) { return internalRemoveData( elem, name ); }, // For internal use only. _data: function( elem, name, data ) { return internalData( elem, name, data, true ); }, _removeData: function( elem, name ) { return internalRemoveData( elem, name, true ); }, // A method for determining if a DOM node can handle the data expando acceptData: function( elem ) { // Do not set data on non-element because it will not be cleared (#8335). if ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) { return false; } var noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ]; // nodes accept data unless otherwise specified; rejection can be conditional return !noData || noData !== true && elem.getAttribute("classid") === noData; } }); jQuery.fn.extend({ data: function( key, value ) { var attrs, name, elem = this[0], i = 0, data = null; // Gets all values if ( key === undefined ) { if ( this.length ) { data = jQuery.data( elem ); if ( elem.nodeType === 1 && !jQuery._data( elem, "parsedAttrs" ) ) { attrs = elem.attributes; for ( ; i < attrs.length; i++ ) { name = attrs[i].name; if ( !name.indexOf( "data-" ) ) { name = jQuery.camelCase( name.slice(5) ); dataAttr( elem, name, data[ name ] ); } } jQuery._data( elem, "parsedAttrs", true ); } } return data; } // Sets multiple values if ( typeof key === "object" ) { return this.each(function() { jQuery.data( this, key ); }); } return jQuery.access( this, function( value ) { if ( value === undefined ) { // Try to fetch any internally stored data first return elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null; } this.each(function() { jQuery.data( this, key, value ); }); }, null, value, arguments.length > 1, null, true ); }, removeData: function( key ) { return this.each(function() { jQuery.removeData( this, key ); }); } }); function dataAttr( elem, key, data ) { // If nothing was found internally, try to fetch any // data from the HTML5 data-* attribute if ( data === undefined && elem.nodeType === 1 ) { var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase(); data = elem.getAttribute( name ); if ( typeof data === "string" ) { try { data = data === "true" ? true : data === "false" ? false : data === "null" ? null : // Only convert to a number if it doesn't change the string +data + "" === data ? +data : rbrace.test( data ) ? jQuery.parseJSON( data ) : data; } catch( e ) {} // Make sure we set the data so it isn't changed later jQuery.data( elem, key, data ); } else { data = undefined; } } return data; } // checks a cache object for emptiness function isEmptyDataObject( obj ) { var name; for ( name in obj ) { // if the public data object is empty, the private is still empty if ( name === "data" && jQuery.isEmptyObject( obj[name] ) ) { continue; } if ( name !== "toJSON" ) { return false; } } return true; } jQuery.extend({ queue: function( elem, type, data ) { var queue; if ( elem ) { type = ( type || "fx" ) + "queue"; queue = jQuery._data( elem, type ); // Speed up dequeue by getting out quickly if this is just a lookup if ( data ) { if ( !queue || jQuery.isArray(data) ) { queue = jQuery._data( elem, type, jQuery.makeArray(data) ); } else { queue.push( data ); } } return queue || []; } }, dequeue: function( elem, type ) { type = type || "fx"; var queue = jQuery.queue( elem, type ), startLength = queue.length, fn = queue.shift(), hooks = jQuery._queueHooks( elem, type ), next = function() { jQuery.dequeue( elem, type ); }; // If the fx queue is dequeued, always remove the progress sentinel if ( fn === "inprogress" ) { fn = queue.shift(); startLength--; } hooks.cur = fn; if ( fn ) { // Add a progress sentinel to prevent the fx queue from being // automatically dequeued if ( type === "fx" ) { queue.unshift( "inprogress" ); } // clear up the last queue stop function delete hooks.stop; fn.call( elem, next, hooks ); } if ( !startLength && hooks ) { hooks.empty.fire(); } }, // not intended for public consumption - generates a queueHooks object, or returns the current one _queueHooks: function( elem, type ) { var key = type + "queueHooks"; return jQuery._data( elem, key ) || jQuery._data( elem, key, { empty: jQuery.Callbacks("once memory").add(function() { jQuery._removeData( elem, type + "queue" ); jQuery._removeData( elem, key ); }) }); } }); jQuery.fn.extend({ queue: function( type, data ) { var setter = 2; if ( typeof type !== "string" ) { data = type; type = "fx"; setter--; } if ( arguments.length < setter ) { return jQuery.queue( this[0], type ); } return data === undefined ? this : this.each(function() { var queue = jQuery.queue( this, type, data ); // ensure a hooks for this queue jQuery._queueHooks( this, type ); if ( type === "fx" && queue[0] !== "inprogress" ) { jQuery.dequeue( this, type ); } }); }, dequeue: function( type ) { return this.each(function() { jQuery.dequeue( this, type ); }); }, // Based off of the plugin by Clint Helfers, with permission. // http://blindsignals.com/index.php/2009/07/jquery-delay/ delay: function( time, type ) { time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time; type = type || "fx"; return this.queue( type, function( next, hooks ) { var timeout = setTimeout( next, time ); hooks.stop = function() { clearTimeout( timeout ); }; }); }, clearQueue: function( type ) { return this.queue( type || "fx", [] ); }, // Get a promise resolved when queues of a certain type // are emptied (fx is the type by default) promise: function( type, obj ) { var tmp, count = 1, defer = jQuery.Deferred(), elements = this, i = this.length, resolve = function() { if ( !( --count ) ) { defer.resolveWith( elements, [ elements ] ); } }; if ( typeof type !== "string" ) { obj = type; type = undefined; } type = type || "fx"; while( i-- ) { tmp = jQuery._data( elements[ i ], type + "queueHooks" ); if ( tmp && tmp.empty ) { count++; tmp.empty.add( resolve ); } } resolve(); return defer.promise( obj ); } }); var nodeHook, boolHook, rclass = /[\t\r\n]/g, rreturn = /\r/g, rfocusable = /^(?:input|select|textarea|button|object)$/i, rclickable = /^(?:a|area)$/i, rboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i, ruseDefault = /^(?:checked|selected)$/i, getSetAttribute = jQuery.support.getSetAttribute, getSetInput = jQuery.support.input; jQuery.fn.extend({ attr: function( name, value ) { return jQuery.access( this, jQuery.attr, name, value, arguments.length > 1 ); }, removeAttr: function( name ) { return this.each(function() { jQuery.removeAttr( this, name ); }); }, prop: function( name, value ) { return jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 ); }, removeProp: function( name ) { name = jQuery.propFix[ name ] || name; return this.each(function() { // try/catch handles cases where IE balks (such as removing a property on window) try { this[ name ] = undefined; delete this[ name ]; } catch( e ) {} }); }, addClass: function( value ) { var classes, elem, cur, clazz, j, i = 0, len = this.length, proceed = typeof value === "string" && value; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) { jQuery( this ).addClass( value.call( this, j, this.className ) ); }); } if ( proceed ) { // The disjunction here is for better compressibility (see removeClass) classes = ( value || "" ).match( core_rnotwhite ) || []; for ( ; i < len; i++ ) { elem = this[ i ]; cur = elem.nodeType === 1 && ( elem.className ? ( " " + elem.className + " " ).replace( rclass, " " ) : " " ); if ( cur ) { j = 0; while ( (clazz = classes[j++]) ) { if ( cur.indexOf( " " + clazz + " " ) < 0 ) { cur += clazz + " "; } } elem.className = jQuery.trim( cur ); } } } return this; }, removeClass: function( value ) { var classes, elem, cur, clazz, j, i = 0, len = this.length, proceed = arguments.length === 0 || typeof value === "string" && value; if ( jQuery.isFunction( value ) ) { return this.each(function( j ) { jQuery( this ).removeClass( value.call( this, j, this.className ) ); }); } if ( proceed ) { classes = ( value || "" ).match( core_rnotwhite ) || []; for ( ; i < len; i++ ) { elem = this[ i ]; // This expression is here for better compressibility (see addClass) cur = elem.nodeType === 1 && ( elem.className ? ( " " + elem.className + " " ).replace( rclass, " " ) : "" ); if ( cur ) { j = 0; while ( (clazz = classes[j++]) ) { // Remove *all* instances while ( cur.indexOf( " " + clazz + " " ) >= 0 ) { cur = cur.replace( " " + clazz + " ", " " ); } } elem.className = value ? jQuery.trim( cur ) : ""; } } } return this; }, toggleClass: function( value, stateVal ) { var type = typeof value, isBool = typeof stateVal === "boolean"; if ( jQuery.isFunction( value ) ) { return this.each(function( i ) { jQuery( this ).toggleClass( value.call(this, i, this.className, stateVal), stateVal ); }); } return this.each(function() { if ( type === "string" ) { // toggle individual class names var className, i = 0, self = jQuery( this ), state = stateVal, classNames = value.match( core_rnotwhite ) || []; while ( (className = classNames[ i++ ]) ) { // check each className given, space separated list state = isBool ? state : !self.hasClass( className ); self[ state ? "addClass" : "removeClass" ]( className ); } // Toggle whole class name } else if ( type === core_strundefined || type === "boolean" ) { if ( this.className ) { // store className if set jQuery._data( this, "__className__", this.className ); } // If the element has a class name or if we're passed "false", // then remove the whole classname (if there was one, the above saved it). // Otherwise bring back whatever was previously saved (if anything), // falling back to the empty string if nothing was stored. this.className = this.className || value === false ? "" : jQuery._data( this, "__className__" ) || ""; } }); }, hasClass: function( selector ) { var className = " " + selector + " ", i = 0, l = this.length; for ( ; i < l; i++ ) { if ( this[i].nodeType === 1 && (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) >= 0 ) { return true; } } return false; }, val: function( value ) { var ret, hooks, isFunction, elem = this[0]; if ( !arguments.length ) { if ( elem ) { hooks = jQuery.valHooks[ elem.type ] || jQuery.valHooks[ elem.nodeName.toLowerCase() ]; if ( hooks && "get" in hooks && (ret = hooks.get( elem, "value" )) !== undefined ) { return ret; } ret = elem.value; return typeof ret === "string" ? // handle most common string cases ret.replace(rreturn, "") : // handle cases where value is null/undef or number ret == null ? "" : ret; } return; } isFunction = jQuery.isFunction( value ); return this.each(function( i ) { var val, self = jQuery(this); if ( this.nodeType !== 1 ) { return; } if ( isFunction ) { val = value.call( this, i, self.val() ); } else { val = value; } // Treat null/undefined as ""; convert numbers to string if ( val == null ) { val = ""; } else if ( typeof val === "number" ) { val += ""; } else if ( jQuery.isArray( val ) ) { val = jQuery.map(val, function ( value ) { return value == null ? "" : value + ""; }); } hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ]; // If set returns undefined, fall back to normal setting if ( !hooks || !("set" in hooks) || hooks.set( this, val, "value" ) === undefined ) { this.value = val; } }); } }); jQuery.extend({ valHooks: { option: { get: function( elem ) { // attributes.value is undefined in Blackberry 4.7 but // uses .value. See #6932 var val = elem.attributes.value; return !val || val.specified ? elem.value : elem.text; } }, select: { get: function( elem ) { var value, option, options = elem.options, index = elem.selectedIndex, one = elem.type === "select-one" || index < 0, values = one ? null : [], max = one ? index + 1 : options.length, i = index < 0 ? max : one ? index : 0; // Loop through all the selected options for ( ; i < max; i++ ) { option = options[ i ]; // oldIE doesn't update selected after form reset (#2551) if ( ( option.selected || i === index ) && // Don't return options that are disabled or in a disabled optgroup ( jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null ) && ( !option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" ) ) ) { // Get the specific value for the option value = jQuery( option ).val(); // We don't need an array for one selects if ( one ) { return value; } // Multi-Selects return an array values.push( value ); } } return values; }, set: function( elem, value ) { var values = jQuery.makeArray( value ); jQuery(elem).find("option").each(function() { this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0; }); if ( !values.length ) { elem.selectedIndex = -1; } return values; } } }, attr: function( elem, name, value ) { var hooks, notxml, ret, nType = elem.nodeType; // don't get/set attributes on text, comment and attribute nodes if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { return; } // Fallback to prop when attributes are not supported if ( typeof elem.getAttribute === core_strundefined ) { return jQuery.prop( elem, name, value ); } notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); // All attributes are lowercase // Grab necessary hook if one is defined if ( notxml ) { name = name.toLowerCase(); hooks = jQuery.attrHooks[ name ] || ( rboolean.test( name ) ? boolHook : nodeHook ); } if ( value !== undefined ) { if ( value === null ) { jQuery.removeAttr( elem, name ); } else if ( hooks && notxml && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { return ret; } else { elem.setAttribute( name, value + "" ); return value; } } else if ( hooks && notxml && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { return ret; } else { // In IE9+, Flash objects don't have .getAttribute (#12945) // Support: IE9+ if ( typeof elem.getAttribute !== core_strundefined ) { ret = elem.getAttribute( name ); } // Non-existent attributes return null, we normalize to undefined return ret == null ? undefined : ret; } }, removeAttr: function( elem, value ) { var name, propName, i = 0, attrNames = value && value.match( core_rnotwhite ); if ( attrNames && elem.nodeType === 1 ) { while ( (name = attrNames[i++]) ) { propName = jQuery.propFix[ name ] || name; // Boolean attributes get special treatment (#10870) if ( rboolean.test( name ) ) { // Set corresponding property to false for boolean attributes // Also clear defaultChecked/defaultSelected (if appropriate) for IE<8 if ( !getSetAttribute && ruseDefault.test( name ) ) { elem[ jQuery.camelCase( "default-" + name ) ] = elem[ propName ] = false; } else { elem[ propName ] = false; } // See #9699 for explanation of this approach (setting first, then removal) } else { jQuery.attr( elem, name, "" ); } elem.removeAttribute( getSetAttribute ? name : propName ); } } }, attrHooks: { type: { set: function( elem, value ) { if ( !jQuery.support.radioValue && value === "radio" && jQuery.nodeName(elem, "input") ) { // Setting the type on a radio button after the value resets the value in IE6-9 // Reset value to default in case type is set after value during creation var val = elem.value; elem.setAttribute( "type", value ); if ( val ) { elem.value = val; } return value; } } } }, propFix: { tabindex: "tabIndex", readonly: "readOnly", "for": "htmlFor", "class": "className", maxlength: "maxLength", cellspacing: "cellSpacing", cellpadding: "cellPadding", rowspan: "rowSpan", colspan: "colSpan", usemap: "useMap", frameborder: "frameBorder", contenteditable: "contentEditable" }, prop: function( elem, name, value ) { var ret, hooks, notxml, nType = elem.nodeType; // don't get/set properties on text, comment and attribute nodes if ( !elem || nType === 3 || nType === 8 || nType === 2 ) { return; } notxml = nType !== 1 || !jQuery.isXMLDoc( elem ); if ( notxml ) { // Fix name and attach hooks name = jQuery.propFix[ name ] || name; hooks = jQuery.propHooks[ name ]; } if ( value !== undefined ) { if ( hooks && "set" in hooks && (ret = hooks.set( elem, value, name )) !== undefined ) { return ret; } else { return ( elem[ name ] = value ); } } else { if ( hooks && "get" in hooks && (ret = hooks.get( elem, name )) !== null ) { return ret; } else { return elem[ name ]; } } }, propHooks: { tabIndex: { get: function( elem ) { // elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set // http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/ var attributeNode = elem.getAttributeNode("tabindex"); return attributeNode && attributeNode.specified ? parseInt( attributeNode.value, 10 ) : rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ? 0 : undefined; } } } }); // Hook for boolean attributes boolHook = { get: function( elem, name ) { var // Use .prop to determine if this attribute is understood as boolean prop = jQuery.prop( elem, name ), // Fetch it accordingly attr = typeof prop === "boolean" && elem.getAttribute( name ), detail = typeof prop === "boolean" ? getSetInput && getSetAttribute ? attr != null : // oldIE fabricates an empty string for missing boolean attributes // and conflates checked/selected into attroperties ruseDefault.test( name ) ? elem[ jQuery.camelCase( "default-" + name ) ] : !!attr : // fetch an attribute node for properties not recognized as boolean elem.getAttributeNode( name ); return detail && detail.value !== false ? name.toLowerCase() : undefined; }, set: function( elem, value, name ) { if ( value === false ) { // Remove boolean attributes when set to false jQuery.removeAttr( elem, name ); } else if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) { // IE<8 needs the *property* name elem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name ); // Use defaultChecked and defaultSelected for oldIE } else { elem[ jQuery.camelCase( "default-" + name ) ] = elem[ name ] = true; } return name; } }; // fix oldIE value attroperty if ( !getSetInput || !getSetAttribute ) { jQuery.attrHooks.value = { get: function( elem, name ) { var ret = elem.getAttributeNode( name ); return jQuery.nodeName( elem, "input" ) ? // Ignore the value *property* by using defaultValue elem.defaultValue : ret && ret.specified ? ret.value : undefined; }, set: function( elem, value, name ) { if ( jQuery.nodeName( elem, "input" ) ) { // Does not return so that setAttribute is also used elem.defaultValue = value; } else { // Use nodeHook if defined (#1954); otherwise setAttribute is fine return nodeHook && nodeHook.set( elem, value, name ); } } }; } // IE6/7 do not support getting/setting some attributes with get/setAttribute if ( !getSetAttribute ) { // Use this for any attribute in IE6/7 // This fixes almost every IE6/7 issue nodeHook = jQuery.valHooks.button = { get: function( elem, name ) { var ret = elem.getAttributeNode( name ); return ret && ( name === "id" || name === "name" || name === "coords" ? ret.value !== "" : ret.specified ) ? ret.value : undefined; }, set: function( elem, value, name ) { // Set the existing or create a new attribute node var ret = elem.getAttributeNode( name ); if ( !ret ) { elem.setAttributeNode( (ret = elem.ownerDocument.createAttribute( name )) ); } ret.value = value += ""; // Break association with cloned elements by also using setAttribute (#9646) return name === "value" || value === elem.getAttribute( name ) ? value : undefined; } }; // Set contenteditable to false on removals(#10429) // Setting to empty string throws an error as an invalid value jQuery.attrHooks.contenteditable = { get: nodeHook.get, set: function( elem, value, name ) { nodeHook.set( elem, value === "" ? false : value, name ); } }; // Set width and height to auto instead of 0 on empty string( Bug #8150 ) // This is for removals jQuery.each([ "width", "height" ], function( i, name ) { jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { set: function( elem, value ) { if ( value === "" ) { elem.setAttribute( name, "auto" ); return value; } } }); }); } // Some attributes require a special call on IE // http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx if ( !jQuery.support.hrefNormalized ) { jQuery.each([ "href", "src", "width", "height" ], function( i, name ) { jQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], { get: function( elem ) { var ret = elem.getAttribute( name, 2 ); return ret == null ? undefined : ret; } }); }); // href/src property should get the full normalized URL (#10299/#12915) jQuery.each([ "href", "src" ], function( i, name ) { jQuery.propHooks[ name ] = { get: function( elem ) { return elem.getAttribute( name, 4 ); } }; }); } if ( !jQuery.support.style ) { jQuery.attrHooks.style = { get: function( elem ) { // Return undefined in the case of empty string // Note: IE uppercases css property names, but if we were to .toLowerCase() // .cssText, that would destroy case senstitivity in URL's, like in "background" return elem.style.cssText || undefined; }, set: function( elem, value ) { return ( elem.style.cssText = value + "" ); } }; } // Safari mis-reports the default selected property of an option // Accessing the parent's selectedIndex property fixes it if ( !jQuery.support.optSelected ) { jQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, { get: function( elem ) { var parent = elem.parentNode; if ( parent ) { parent.selectedIndex; // Make sure that it also works with optgroups, see #5701 if ( parent.parentNode ) { parent.parentNode.selectedIndex; } } return null; } }); } // IE6/7 call enctype encoding if ( !jQuery.support.enctype ) { jQuery.propFix.enctype = "encoding"; } // Radios and checkboxes getter/setter if ( !jQuery.support.checkOn ) { jQuery.each([ "radio", "checkbox" ], function() { jQuery.valHooks[ this ] = { get: function( elem ) { // Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified return elem.getAttribute("value") === null ? "on" : elem.value; } }; }); } jQuery.each([ "radio", "checkbox" ], function() { jQuery.valHooks[ this ] = jQuery.extend( jQuery.valHooks[ this ], { set: function( elem, value ) { if ( jQuery.isArray( value ) ) { return ( elem.checked = jQuery.inArray( jQuery(elem).val(), value ) >= 0 ); } } }); }); var rformElems = /^(?:input|select|textarea)$/i, rkeyEvent = /^key/, rmouseEvent = /^(?:mouse|contextmenu)|click/, rfocusMorph = /^(?:focusinfocus|focusoutblur)$/, rtypenamespace = /^([^.]*)(?:\.(.+)|)$/; function returnTrue() { return true; } function returnFalse() { return false; } /* * Helper functions for managing events -- not part of the public interface. * Props to Dean Edwards' addEvent library for many of the ideas. */ jQuery.event = { global: {}, add: function( elem, types, handler, data, selector ) { var tmp, events, t, handleObjIn, special, eventHandle, handleObj, handlers, type, namespaces, origType, elemData = jQuery._data( elem ); // Don't attach events to noData or text/comment nodes (but allow plain objects) if ( !elemData ) { return; } // Caller can pass in an object of custom data in lieu of the handler if ( handler.handler ) { handleObjIn = handler; handler = handleObjIn.handler; selector = handleObjIn.selector; } // Make sure that the handler has a unique ID, used to find/remove it later if ( !handler.guid ) { handler.guid = jQuery.guid++; } // Init the element's event structure and main handler, if this is the first if ( !(events = elemData.events) ) { events = elemData.events = {}; } if ( !(eventHandle = elemData.handle) ) { eventHandle = elemData.handle = function( e ) { // Discard the second event of a jQuery.event.trigger() and // when an event is called after a page has unloaded return typeof jQuery !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ? jQuery.event.dispatch.apply( eventHandle.elem, arguments ) : undefined; }; // Add elem as a property of the handle fn to prevent a memory leak with IE non-native events eventHandle.elem = elem; } // Handle multiple events separated by a space // jQuery(...).bind("mouseover mouseout", fn); types = ( types || "" ).match( core_rnotwhite ) || [""]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[t] ) || []; type = origType = tmp[1]; namespaces = ( tmp[2] || "" ).split( "." ).sort(); // If event changes its type, use the special event handlers for the changed type special = jQuery.event.special[ type ] || {}; // If selector defined, determine special event api type, otherwise given type type = ( selector ? special.delegateType : special.bindType ) || type; // Update special based on newly reset type special = jQuery.event.special[ type ] || {}; // handleObj is passed to all event handlers handleObj = jQuery.extend({ type: type, origType: origType, data: data, handler: handler, guid: handler.guid, selector: selector, needsContext: selector && jQuery.expr.match.needsContext.test( selector ), namespace: namespaces.join(".") }, handleObjIn ); // Init the event handler queue if we're the first if ( !(handlers = events[ type ]) ) { handlers = events[ type ] = []; handlers.delegateCount = 0; // Only use addEventListener/attachEvent if the special events handler returns false if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) { // Bind the global event handler to the element if ( elem.addEventListener ) { elem.addEventListener( type, eventHandle, false ); } else if ( elem.attachEvent ) { elem.attachEvent( "on" + type, eventHandle ); } } } if ( special.add ) { special.add.call( elem, handleObj ); if ( !handleObj.handler.guid ) { handleObj.handler.guid = handler.guid; } } // Add to the element's handler list, delegates in front if ( selector ) { handlers.splice( handlers.delegateCount++, 0, handleObj ); } else { handlers.push( handleObj ); } // Keep track of which events have ever been used, for event optimization jQuery.event.global[ type ] = true; } // Nullify elem to prevent memory leaks in IE elem = null; }, // Detach an event or set of events from an element remove: function( elem, types, handler, selector, mappedTypes ) { var j, handleObj, tmp, origCount, t, events, special, handlers, type, namespaces, origType, elemData = jQuery.hasData( elem ) && jQuery._data( elem ); if ( !elemData || !(events = elemData.events) ) { return; } // Once for each type.namespace in types; type may be omitted types = ( types || "" ).match( core_rnotwhite ) || [""]; t = types.length; while ( t-- ) { tmp = rtypenamespace.exec( types[t] ) || []; type = origType = tmp[1]; namespaces = ( tmp[2] || "" ).split( "." ).sort(); // Unbind all events (on this namespace, if provided) for the element if ( !type ) { for ( type in events ) { jQuery.event.remove( elem, type + types[ t ], handler, selector, true ); } continue; } special = jQuery.event.special[ type ] || {}; type = ( selector ? special.delegateType : special.bindType ) || type; handlers = events[ type ] || []; tmp = tmp[2] && new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ); // Remove matching events origCount = j = handlers.length; while ( j-- ) { handleObj = handlers[ j ]; if ( ( mappedTypes || origType === handleObj.origType ) && ( !handler || handler.guid === handleObj.guid ) && ( !tmp || tmp.test( handleObj.namespace ) ) && ( !selector || selector === handleObj.selector || selector === "**" && handleObj.selector ) ) { handlers.splice( j, 1 ); if ( handleObj.selector ) { handlers.delegateCount--; } if ( special.remove ) { special.remove.call( elem, handleObj ); } } } // Remove generic event handler if we removed something and no more handlers exist // (avoids potential for endless recursion during removal of special event handlers) if ( origCount && !handlers.length ) { if ( !special.teardown || special.teardown.call( elem, namespaces, elemData.handle ) === false ) { jQuery.removeEvent( elem, type, elemData.handle ); } delete events[ type ]; } } // Remove the expando if it's no longer used if ( jQuery.isEmptyObject( events ) ) { delete elemData.handle; // removeData also checks for emptiness and clears the expando if empty // so use it instead of delete jQuery._removeData( elem, "events" ); } }, trigger: function( event, data, elem, onlyHandlers ) { var handle, ontype, cur, bubbleType, special, tmp, i, eventPath = [ elem || document ], type = core_hasOwn.call( event, "type" ) ? event.type : event, namespaces = core_hasOwn.call( event, "namespace" ) ? event.namespace.split(".") : []; cur = tmp = elem = elem || document; // Don't do events on text and comment nodes if ( elem.nodeType === 3 || elem.nodeType === 8 ) { return; } // focus/blur morphs to focusin/out; ensure we're not firing them right now if ( rfocusMorph.test( type + jQuery.event.triggered ) ) { return; } if ( type.indexOf(".") >= 0 ) { // Namespaced trigger; create a regexp to match event type in handle() namespaces = type.split("."); type = namespaces.shift(); namespaces.sort(); } ontype = type.indexOf(":") < 0 && "on" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string event = event[ jQuery.expando ] ? event : new jQuery.Event( type, typeof event === "object" && event ); event.isTrigger = true; event.namespace = namespaces.join("."); event.namespace_re = event.namespace ? new RegExp( "(^|\\.)" + namespaces.join("\\.(?:.*\\.|)") + "(\\.|$)" ) : null; // Clean up the event in case it is being reused event.result = undefined; if ( !event.target ) { event.target = elem; } // Clone any incoming data and prepend the event, creating the handler arg list data = data == null ? [ event ] : jQuery.makeArray( data, [ event ] ); // Allow special events to draw outside the lines special = jQuery.event.special[ type ] || {}; if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) { return; } // Determine event propagation path in advance, per W3C events spec (#9951) // Bubble up to document, then to window; watch for a global ownerDocument var (#9724) if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) { bubbleType = special.delegateType || type; if ( !rfocusMorph.test( bubbleType + type ) ) { cur = cur.parentNode; } for ( ; cur; cur = cur.parentNode ) { eventPath.push( cur ); tmp = cur; } // Only add window if we got to document (e.g., not plain obj or detached DOM) if ( tmp === (elem.ownerDocument || document) ) { eventPath.push( tmp.defaultView || tmp.parentWindow || window ); } } // Fire handlers on the event path i = 0; while ( (cur = eventPath[i++]) && !event.isPropagationStopped() ) { event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler handle = ( jQuery._data( cur, "events" ) || {} )[ event.type ] && jQuery._data( cur, "handle" ); if ( handle ) { handle.apply( cur, data ); } // Native handler handle = ontype && cur[ ontype ]; if ( handle && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) { event.preventDefault(); } } event.type = type; // If nobody prevented the default action, do it now if ( !onlyHandlers && !event.isDefaultPrevented() ) { if ( (!special._default || special._default.apply( elem.ownerDocument, data ) === false) && !(type === "click" && jQuery.nodeName( elem, "a" )) && jQuery.acceptData( elem ) ) { // Call a native DOM method on the target with the same name name as the event. // Can't use an .isFunction() check here because IE6/7 fails that test. // Don't do default actions on window, that's where global variables be (#6170) if ( ontype && elem[ type ] && !jQuery.isWindow( elem ) ) { // Don't re-trigger an onFOO event when we call its FOO() method tmp = elem[ ontype ]; if ( tmp ) { elem[ ontype ] = null; } // Prevent re-triggering of the same event, since we already bubbled it above jQuery.event.triggered = type; try { elem[ type ](); } catch ( e ) { // IE<9 dies on focus/blur to hidden element (#1486,#12518) // only reproducible on winXP IE8 native, not IE9 in IE8 mode } jQuery.event.triggered = undefined; if ( tmp ) { elem[ ontype ] = tmp; } } } } return event.result; }, dispatch: function( event ) { // Make a writable jQuery.Event from the native event object event = jQuery.event.fix( event ); var i, ret, handleObj, matched, j, handlerQueue = [], args = core_slice.call( arguments ), handlers = ( jQuery._data( this, "events" ) || {} )[ event.type ] || [], special = jQuery.event.special[ event.type ] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event args[0] = event; event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) { return; } // Determine handlers handlerQueue = jQuery.event.handlers.call( this, event, handlers ); // Run delegates first; they may want to stop propagation beneath us i = 0; while ( (matched = handlerQueue[ i++ ]) && !event.isPropagationStopped() ) { event.currentTarget = matched.elem; j = 0; while ( (handleObj = matched.handlers[ j++ ]) && !event.isImmediatePropagationStopped() ) { // Triggered event must either 1) have no namespace, or // 2) have namespace(s) a subset or equal to those in the bound event (both can have no namespace). if ( !event.namespace_re || event.namespace_re.test( handleObj.namespace ) ) { event.handleObj = handleObj; event.data = handleObj.data; ret = ( (jQuery.event.special[ handleObj.origType ] || {}).handle || handleObj.handler ) .apply( matched.elem, args ); if ( ret !== undefined ) { if ( (event.result = ret) === false ) { event.preventDefault(); event.stopPropagation(); } } } } } // Call the postDispatch hook for the mapped type if ( special.postDispatch ) { special.postDispatch.call( this, event ); } return event.result; }, handlers: function( event, handlers ) { var sel, handleObj, matches, i, handlerQueue = [], delegateCount = handlers.delegateCount, cur = event.target; // Find delegate handlers // Black-hole SVG instance trees (#13180) // Avoid non-left-click bubbling in Firefox (#3861) if ( delegateCount && cur.nodeType && (!event.button || event.type !== "click") ) { for ( ; cur != this; cur = cur.parentNode || this ) { // Don't check non-elements (#13208) // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764) if ( cur.nodeType === 1 && (cur.disabled !== true || event.type !== "click") ) { matches = []; for ( i = 0; i < delegateCount; i++ ) { handleObj = handlers[ i ]; // Don't conflict with Object.prototype properties (#13203) sel = handleObj.selector + " "; if ( matches[ sel ] === undefined ) { matches[ sel ] = handleObj.needsContext ? jQuery( sel, this ).index( cur ) >= 0 : jQuery.find( sel, this, null, [ cur ] ).length; } if ( matches[ sel ] ) { matches.push( handleObj ); } } if ( matches.length ) { handlerQueue.push({ elem: cur, handlers: matches }); } } } } // Add the remaining (directly-bound) handlers if ( delegateCount < handlers.length ) { handlerQueue.push({ elem: this, handlers: handlers.slice( delegateCount ) }); } return handlerQueue; }, fix: function( event ) { if ( event[ jQuery.expando ] ) { return event; } // Create a writable copy of the event object and normalize some properties var i, prop, copy, type = event.type, originalEvent = event, fixHook = this.fixHooks[ type ]; if ( !fixHook ) { this.fixHooks[ type ] = fixHook = rmouseEvent.test( type ) ? this.mouseHooks : rkeyEvent.test( type ) ? this.keyHooks : {}; } copy = fixHook.props ? this.props.concat( fixHook.props ) : this.props; event = new jQuery.Event( originalEvent ); i = copy.length; while ( i-- ) { prop = copy[ i ]; event[ prop ] = originalEvent[ prop ]; } // Support: IE<9 // Fix target property (#1925) if ( !event.target ) { event.target = originalEvent.srcElement || document; } // Support: Chrome 23+, Safari? // Target should not be a text node (#504, #13143) if ( event.target.nodeType === 3 ) { event.target = event.target.parentNode; } // Support: IE<9 // For mouse/key events, metaKey==false if it's undefined (#3368, #11328) event.metaKey = !!event.metaKey; return fixHook.filter ? fixHook.filter( event, originalEvent ) : event; }, // Includes some event props shared by KeyEvent and MouseEvent props: "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "), fixHooks: {}, keyHooks: { props: "char charCode key keyCode".split(" "), filter: function( event, original ) { // Add which for key events if ( event.which == null ) { event.which = original.charCode != null ? original.charCode : original.keyCode; } return event; } }, mouseHooks: { props: "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "), filter: function( event, original ) { var body, eventDoc, doc, button = original.button, fromElement = original.fromElement; // Calculate pageX/Y if missing and clientX/Y available if ( event.pageX == null && original.clientX != null ) { eventDoc = event.target.ownerDocument || document; doc = eventDoc.documentElement; body = eventDoc.body; event.pageX = original.clientX + ( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) - ( doc && doc.clientLeft || body && body.clientLeft || 0 ); event.pageY = original.clientY + ( doc && doc.scrollTop || body && body.scrollTop || 0 ) - ( doc && doc.clientTop || body && body.clientTop || 0 ); } // Add relatedTarget, if necessary if ( !event.relatedTarget && fromElement ) { event.relatedTarget = fromElement === event.target ? original.toElement : fromElement; } // Add which for click: 1 === left; 2 === middle; 3 === right // Note: button is not normalized, so don't use it if ( !event.which && button !== undefined ) { event.which = ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) ); } return event; } }, special: { load: { // Prevent triggered image.load events from bubbling to window.load noBubble: true }, click: { // For checkbox, fire native event so checked state will be right trigger: function() { if ( jQuery.nodeName( this, "input" ) && this.type === "checkbox" && this.click ) { this.click(); return false; } } }, focus: { // Fire native event if possible so blur/focus sequence is correct trigger: function() { if ( this !== document.activeElement && this.focus ) { try { this.focus(); return false; } catch ( e ) { // Support: IE<9 // If we error on focus to hidden element (#1486, #12518), // let .trigger() run the handlers } } }, delegateType: "focusin" }, blur: { trigger: function() { if ( this === document.activeElement && this.blur ) { this.blur(); return false; } }, delegateType: "focusout" }, beforeunload: { postDispatch: function( event ) { // Even when returnValue equals to undefined Firefox will still show alert if ( event.result !== undefined ) { event.originalEvent.returnValue = event.result; } } } }, simulate: function( type, elem, event, bubble ) { // Piggyback on a donor event to simulate a different one. // Fake originalEvent to avoid donor's stopPropagation, but if the // simulated event prevents default then we do the same on the donor. var e = jQuery.extend( new jQuery.Event(), event, { type: type, isSimulated: true, originalEvent: {} } ); if ( bubble ) { jQuery.event.trigger( e, null, elem ); } else { jQuery.event.dispatch.call( elem, e ); } if ( e.isDefaultPrevented() ) { event.preventDefault(); } } }; jQuery.removeEvent = document.removeEventListener ? function( elem, type, handle ) { if ( elem.removeEventListener ) { elem.removeEventListener( type, handle, false ); } } : function( elem, type, handle ) { var name = "on" + type; if ( elem.detachEvent ) { // #8545, #7054, preventing memory leaks for custom events in IE6-8 // detachEvent needed property on element, by name of that event, to properly expose it to GC if ( typeof elem[ name ] === core_strundefined ) { elem[ name ] = null; } elem.detachEvent( name, handle ); } }; jQuery.Event = function( src, props ) { // Allow instantiation without the 'new' keyword if ( !(this instanceof jQuery.Event) ) { return new jQuery.Event( src, props ); } // Event object if ( src && src.type ) { this.originalEvent = src; this.type = src.type; // Events bubbling up the document may have been marked as prevented // by a handler lower down the tree; reflect the correct value. this.isDefaultPrevented = ( src.defaultPrevented || src.returnValue === false || src.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse; // Event type } else { this.type = src; } // Put explicitly provided properties onto the event object if ( props ) { jQuery.extend( this, props ); } // Create a timestamp if incoming event doesn't have one this.timeStamp = src && src.timeStamp || jQuery.now(); // Mark it as fixed this[ jQuery.expando ] = true; }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding // http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html jQuery.Event.prototype = { isDefaultPrevented: returnFalse, isPropagationStopped: returnFalse, isImmediatePropagationStopped: returnFalse, preventDefault: function() { var e = this.originalEvent; this.isDefaultPrevented = returnTrue; if ( !e ) { return; } // If preventDefault exists, run it on the original event if ( e.preventDefault ) { e.preventDefault(); // Support: IE // Otherwise set the returnValue property of the original event to false } else { e.returnValue = false; } }, stopPropagation: function() { var e = this.originalEvent; this.isPropagationStopped = returnTrue; if ( !e ) { return; } // If stopPropagation exists, run it on the original event if ( e.stopPropagation ) { e.stopPropagation(); } // Support: IE // Set the cancelBubble property of the original event to true e.cancelBubble = true; }, stopImmediatePropagation: function() { this.isImmediatePropagationStopped = returnTrue; this.stopPropagation(); } }; // Create mouseenter/leave events using mouseover/out and event-time checks jQuery.each({ mouseenter: "mouseover", mouseleave: "mouseout" }, function( orig, fix ) { jQuery.event.special[ orig ] = { delegateType: fix, bindType: fix, handle: function( event ) { var ret, target = this, related = event.relatedTarget, handleObj = event.handleObj; // For mousenter/leave call the handler if related is outside the target. // NB: No relatedTarget if the mouse left/entered the browser window if ( !related || (related !== target && !jQuery.contains( target, related )) ) { event.type = handleObj.origType; ret = handleObj.handler.apply( this, arguments ); event.type = fix; } return ret; } }; }); // IE submit delegation if ( !jQuery.support.submitBubbles ) { jQuery.event.special.submit = { setup: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Lazy-add a submit handler when a descendant form may potentially be submitted jQuery.event.add( this, "click._submit keypress._submit", function( e ) { // Node name check avoids a VML-related crash in IE (#9807) var elem = e.target, form = jQuery.nodeName( elem, "input" ) || jQuery.nodeName( elem, "button" ) ? elem.form : undefined; if ( form && !jQuery._data( form, "submitBubbles" ) ) { jQuery.event.add( form, "submit._submit", function( event ) { event._submit_bubble = true; }); jQuery._data( form, "submitBubbles", true ); } }); // return undefined since we don't need an event listener }, postDispatch: function( event ) { // If form was submitted by the user, bubble the event up the tree if ( event._submit_bubble ) { delete event._submit_bubble; if ( this.parentNode && !event.isTrigger ) { jQuery.event.simulate( "submit", this.parentNode, event, true ); } } }, teardown: function() { // Only need this for delegated form submit events if ( jQuery.nodeName( this, "form" ) ) { return false; } // Remove delegated handlers; cleanData eventually reaps submit handlers attached above jQuery.event.remove( this, "._submit" ); } }; } // IE change delegation and checkbox/radio fix if ( !jQuery.support.changeBubbles ) { jQuery.event.special.change = { setup: function() { if ( rformElems.test( this.nodeName ) ) { // IE doesn't fire change on a check/radio until blur; trigger it on click // after a propertychange. Eat the blur-change in special.change.handle. // This still fires onchange a second time for check/radio after blur. if ( this.type === "checkbox" || this.type === "radio" ) { jQuery.event.add( this, "propertychange._change", function( event ) { if ( event.originalEvent.propertyName === "checked" ) { this._just_changed = true; } }); jQuery.event.add( this, "click._change", function( event ) { if ( this._just_changed && !event.isTrigger ) { this._just_changed = false; } // Allow triggered, simulated change events (#11500) jQuery.event.simulate( "change", this, event, true ); }); } return false; } // Delegated event; lazy-add a change handler on descendant inputs jQuery.event.add( this, "beforeactivate._change", function( e ) { var elem = e.target; if ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, "changeBubbles" ) ) { jQuery.event.add( elem, "change._change", function( event ) { if ( this.parentNode && !event.isSimulated && !event.isTrigger ) { jQuery.event.simulate( "change", this.parentNode, event, true ); } }); jQuery._data( elem, "changeBubbles", true ); } }); }, handle: function( event ) { var elem = event.target; // Swallow native change events from checkbox/radio, we already triggered them above if ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== "radio" && elem.type !== "checkbox") ) { return event.handleObj.handler.apply( this, arguments ); } }, teardown: function() { jQuery.event.remove( this, "._change" ); return !rformElems.test( this.nodeName ); } }; } // Create "bubbling" focus and blur events if ( !jQuery.support.focusinBubbles ) { jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) { // Attach a single capturing handler while someone wants focusin/focusout var attaches = 0, handler = function( event ) { jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ), true ); }; jQuery.event.special[ fix ] = { setup: function() { if ( attaches++ === 0 ) { document.addEventListener( orig, handler, true ); } }, teardown: function() { if ( --attaches === 0 ) { document.removeEventListener( orig, handler, true ); } } }; }); } jQuery.fn.extend({ on: function( types, selector, data, fn, /*INTERNAL*/ one ) { var type, origFn; // Types can be a map of types/handlers if ( typeof types === "object" ) { // ( types-Object, selector, data ) if ( typeof selector !== "string" ) { // ( types-Object, data ) data = data || selector; selector = undefined; } for ( type in types ) { this.on( type, selector, data, types[ type ], one ); } return this; } if ( data == null && fn == null ) { // ( types, fn ) fn = selector; data = selector = undefined; } else if ( fn == null ) { if ( typeof selector === "string" ) { // ( types, selector, fn ) fn = data; data = undefined; } else { // ( types, data, fn ) fn = data; data = selector; selector = undefined; } } if ( fn === false ) { fn = returnFalse; } else if ( !fn ) { return this; } if ( one === 1 ) { origFn = fn; fn = function( event ) { // Can use an empty set, since event contains the info jQuery().off( event ); return origFn.apply( this, arguments ); }; // Use same guid so caller can remove using origFn fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ ); } return this.each( function() { jQuery.event.add( this, types, fn, data, selector ); }); }, one: function( types, selector, data, fn ) { return this.on( types, selector, data, fn, 1 ); }, off: function( types, selector, fn ) { var handleObj, type; if ( types && types.preventDefault && types.handleObj ) { // ( event ) dispatched jQuery.Event handleObj = types.handleObj; jQuery( types.delegateTarget ).off( handleObj.namespace ? handleObj.origType + "." + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler ); return this; } if ( typeof types === "object" ) { // ( types-object [, selector] ) for ( type in types ) { this.off( type, selector, types[ type ] ); } return this; } if ( selector === false || typeof selector === "function" ) { // ( types [, fn] ) fn = selector; selector = undefined; } if ( fn === false ) { fn = returnFalse; } return this.each(function() { jQuery.event.remove( this, types, fn, selector ); }); }, bind: function( types, data, fn ) { return this.on( types, null, data, fn ); }, unbind: function( types, fn ) { return this.off( types, null, fn ); }, delegate: function( selector, types, data, fn ) { return this.on( types, selector, data, fn ); }, undelegate: function( selector, types, fn ) { // ( namespace ) or ( selector, types [, fn] ) return arguments.length === 1 ? this.off( selector, "**" ) : this.off( types, selector || "**", fn ); }, trigger: function( type, data ) { return this.each(function() { jQuery.event.trigger( type, data, this ); }); }, triggerHandler: function( type, data ) { var elem = this[0]; if ( elem ) { return jQuery.event.trigger( type, data, elem, true ); } } }); /*! * Sizzle CSS Selector Engine * Copyright 2012 jQuery Foundation and other contributors * Released under the MIT license * http://sizzlejs.com/ */ (function( window, undefined ) { var i, cachedruns, Expr, getText, isXML, compile, hasDuplicate, outermostContext, // Local document vars setDocument, document, docElem, documentIsXML, rbuggyQSA, rbuggyMatches, matches, contains, sortOrder, // Instance-specific data expando = "sizzle" + -(new Date()), preferredDoc = window.document, support = {}, dirruns = 0, done = 0, classCache = createCache(), tokenCache = createCache(), compilerCache = createCache(), // General-purpose constants strundefined = typeof undefined, MAX_NEGATIVE = 1 << 31, // Array methods arr = [], pop = arr.pop, push = arr.push, slice = arr.slice, // Use a stripped-down indexOf if we can't use a native one indexOf = arr.indexOf || function( elem ) { var i = 0, len = this.length; for ( ; i < len; i++ ) { if ( this[i] === elem ) { return i; } } return -1; }, // Regular expressions // Whitespace characters http://www.w3.org/TR/css3-selectors/#whitespace whitespace = "[\\x20\\t\\r\\n\\f]", // http://www.w3.org/TR/css3-syntax/#characters characterEncoding = "(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+", // Loosely modeled on CSS identifier characters // An unquoted value should be a CSS identifier http://www.w3.org/TR/css3-selectors/#attribute-selectors // Proper syntax: http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier identifier = characterEncoding.replace( "w", "w#" ), // Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors operators = "([*^$|!~]?=)", attributes = "\\[" + whitespace + "*(" + characterEncoding + ")" + whitespace + "*(?:" + operators + whitespace + "*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|(" + identifier + ")|)|)" + whitespace + "*\\]", // Prefer arguments quoted, // then not containing pseudos/brackets, // then attribute selectors/non-parenthetical expressions, // then anything else // These preferences are here to reduce the number of selectors // needing tokenize in the PSEUDO preFilter pseudos = ":(" + characterEncoding + ")(?:\\(((['\"])((?:\\\\.|[^\\\\])*?)\\3|((?:\\\\.|[^\\\\()[\\]]|" + attributes.replace( 3, 8 ) + ")*)|.*)\\)|)", // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ), rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ), rcombinators = new RegExp( "^" + whitespace + "*([\\x20\\t\\r\\n\\f>+~])" + whitespace + "*" ), rpseudo = new RegExp( pseudos ), ridentifier = new RegExp( "^" + identifier + "$" ), matchExpr = { "ID": new RegExp( "^#(" + characterEncoding + ")" ), "CLASS": new RegExp( "^\\.(" + characterEncoding + ")" ), "NAME": new RegExp( "^\\[name=['\"]?(" + characterEncoding + ")['\"]?\\]" ), "TAG": new RegExp( "^(" + characterEncoding.replace( "w", "w*" ) + ")" ), "ATTR": new RegExp( "^" + attributes ), "PSEUDO": new RegExp( "^" + pseudos ), "CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i" ), // For use in libraries implementing .is() // We use this for POS matching in `select` "needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" ) }, rsibling = /[\x20\t\r\n\f]*[+~]/, rnative = /^[^{]+\{\s*\[native code/, // Easily-parseable/retrievable ID or TAG or CLASS selectors rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/, rinputs = /^(?:input|select|textarea|button)$/i, rheader = /^h\d$/i, rescape = /'|\\/g, rattributeQuotes = /\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g, // CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters runescape = /\\([\da-fA-F]{1,6}[\x20\t\r\n\f]?|.)/g, funescape = function( _, escaped ) { var high = "0x" + escaped - 0x10000; // NaN means non-codepoint return high !== high ? escaped : // BMP codepoint high < 0 ? String.fromCharCode( high + 0x10000 ) : // Supplemental Plane codepoint (surrogate pair) String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 ); }; // Use a stripped-down slice if we can't use a native one try { slice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType; } catch ( e ) { slice = function( i ) { var elem, results = []; while ( (elem = this[i++]) ) { results.push( elem ); } return results; }; } /** * For feature detection * @param {Function} fn The function to test for native support */ function isNative( fn ) { return rnative.test( fn + "" ); } /** * Create key-value caches of limited size * @returns {Function(string, Object)} Returns the Object data after storing it on itself with * property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength) * deleting the oldest entry */ function createCache() { var cache, keys = []; return (cache = function( key, value ) { // Use (key + " ") to avoid collision with native prototype properties (see Issue #157) if ( keys.push( key += " " ) > Expr.cacheLength ) { // Only keep the most recent entries delete cache[ keys.shift() ]; } return (cache[ key ] = value); }); } /** * Mark a function for special use by Sizzle * @param {Function} fn The function to mark */ function markFunction( fn ) { fn[ expando ] = true; return fn; } /** * Support testing using an element * @param {Function} fn Passed the created div and expects a boolean result */ function assert( fn ) { var div = document.createElement("div"); try { return fn( div ); } catch (e) { return false; } finally { // release memory in IE div = null; } } function Sizzle( selector, context, results, seed ) { var match, elem, m, nodeType, // QSA vars i, groups, old, nid, newContext, newSelector; if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) { setDocument( context ); } context = context || document; results = results || []; if ( !selector || typeof selector !== "string" ) { return results; } if ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) { return []; } if ( !documentIsXML && !seed ) { // Shortcuts if ( (match = rquickExpr.exec( selector )) ) { // Speed-up: Sizzle("#ID") if ( (m = match[1]) ) { if ( nodeType === 9 ) { elem = context.getElementById( m ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 if ( elem && elem.parentNode ) { // Handle the case where IE, Opera, and Webkit return items // by name instead of ID if ( elem.id === m ) { results.push( elem ); return results; } } else { return results; } } else { // Context is not a document if ( context.ownerDocument && (elem = context.ownerDocument.getElementById( m )) && contains( context, elem ) && elem.id === m ) { results.push( elem ); return results; } } // Speed-up: Sizzle("TAG") } else if ( match[2] ) { push.apply( results, slice.call(context.getElementsByTagName( selector ), 0) ); return results; // Speed-up: Sizzle(".CLASS") } else if ( (m = match[3]) && support.getByClassName && context.getElementsByClassName ) { push.apply( results, slice.call(context.getElementsByClassName( m ), 0) ); return results; } } // QSA path if ( support.qsa && !rbuggyQSA.test(selector) ) { old = true; nid = expando; newContext = context; newSelector = nodeType === 9 && selector; // qSA works strangely on Element-rooted queries // We can work around this by specifying an extra ID on the root // and working up from there (Thanks to Andrew Dupont for the technique) // IE 8 doesn't work on object elements if ( nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) { groups = tokenize( selector ); if ( (old = context.getAttribute("id")) ) { nid = old.replace( rescape, "\\$&" ); } else { context.setAttribute( "id", nid ); } nid = "[id='" + nid + "'] "; i = groups.length; while ( i-- ) { groups[i] = nid + toSelector( groups[i] ); } newContext = rsibling.test( selector ) && context.parentNode || context; newSelector = groups.join(","); } if ( newSelector ) { try { push.apply( results, slice.call( newContext.querySelectorAll( newSelector ), 0 ) ); return results; } catch(qsaError) { } finally { if ( !old ) { context.removeAttribute("id"); } } } } } // All others return select( selector.replace( rtrim, "$1" ), context, results, seed ); } /** * Detect xml * @param {Element|Object} elem An element or a document */ isXML = Sizzle.isXML = function( elem ) { // documentElement is verified for cases where it doesn't yet exist // (such as loading iframes in IE - #4833) var documentElement = elem && (elem.ownerDocument || elem).documentElement; return documentElement ? documentElement.nodeName !== "HTML" : false; }; /** * Sets document-related variables once based on the current document * @param {Element|Object} [doc] An element or document object to use to set the document * @returns {Object} Returns the current document */ setDocument = Sizzle.setDocument = function( node ) { var doc = node ? node.ownerDocument || node : preferredDoc; // If no document and documentElement is available, return if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) { return document; } // Set our document document = doc; docElem = doc.documentElement; // Support tests documentIsXML = isXML( doc ); // Check if getElementsByTagName("*") returns only elements support.tagNameNoComments = assert(function( div ) { div.appendChild( doc.createComment("") ); return !div.getElementsByTagName("*").length; }); // Check if attributes should be retrieved by attribute nodes support.attributes = assert(function( div ) { div.innerHTML = ""; var type = typeof div.lastChild.getAttribute("multiple"); // IE8 returns a string for some attributes even when not present return type !== "boolean" && type !== "string"; }); // Check if getElementsByClassName can be trusted support.getByClassName = assert(function( div ) { // Opera can't find a second classname (in 9.6) div.innerHTML = ""; if ( !div.getElementsByClassName || !div.getElementsByClassName("e").length ) { return false; } // Safari 3.2 caches class attributes and doesn't catch changes div.lastChild.className = "e"; return div.getElementsByClassName("e").length === 2; }); // Check if getElementById returns elements by name // Check if getElementsByName privileges form controls or returns elements by ID support.getByName = assert(function( div ) { // Inject content div.id = expando + 0; div.innerHTML = "
    "; docElem.insertBefore( div, docElem.firstChild ); // Test var pass = doc.getElementsByName && // buggy browsers will return fewer than the correct 2 doc.getElementsByName( expando ).length === 2 + // buggy browsers will return more than the correct 0 doc.getElementsByName( expando + 0 ).length; support.getIdNotName = !doc.getElementById( expando ); // Cleanup docElem.removeChild( div ); return pass; }); // IE6/7 return modified attributes Expr.attrHandle = assert(function( div ) { div.innerHTML = ""; return div.firstChild && typeof div.firstChild.getAttribute !== strundefined && div.firstChild.getAttribute("href") === "#"; }) ? {} : { "href": function( elem ) { return elem.getAttribute( "href", 2 ); }, "type": function( elem ) { return elem.getAttribute("type"); } }; // ID find and filter if ( support.getIdNotName ) { Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== strundefined && !documentIsXML ) { var m = context.getElementById( id ); // Check parentNode to catch when Blackberry 4.6 returns // nodes that are no longer in the document #6963 return m && m.parentNode ? [m] : []; } }; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { return elem.getAttribute("id") === attrId; }; }; } else { Expr.find["ID"] = function( id, context ) { if ( typeof context.getElementById !== strundefined && !documentIsXML ) { var m = context.getElementById( id ); return m ? m.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode("id").value === id ? [m] : undefined : []; } }; Expr.filter["ID"] = function( id ) { var attrId = id.replace( runescape, funescape ); return function( elem ) { var node = typeof elem.getAttributeNode !== strundefined && elem.getAttributeNode("id"); return node && node.value === attrId; }; }; } // Tag Expr.find["TAG"] = support.tagNameNoComments ? function( tag, context ) { if ( typeof context.getElementsByTagName !== strundefined ) { return context.getElementsByTagName( tag ); } } : function( tag, context ) { var elem, tmp = [], i = 0, results = context.getElementsByTagName( tag ); // Filter out possible comments if ( tag === "*" ) { while ( (elem = results[i++]) ) { if ( elem.nodeType === 1 ) { tmp.push( elem ); } } return tmp; } return results; }; // Name Expr.find["NAME"] = support.getByName && function( tag, context ) { if ( typeof context.getElementsByName !== strundefined ) { return context.getElementsByName( name ); } }; // Class Expr.find["CLASS"] = support.getByClassName && function( className, context ) { if ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) { return context.getElementsByClassName( className ); } }; // QSA and matchesSelector support // matchesSelector(:active) reports false when true (IE9/Opera 11.5) rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21), // no need to also add to buggyMatches since matches checks buggyQSA // A support test would require too much code (would include document ready) rbuggyQSA = [ ":focus" ]; if ( (support.qsa = isNative(doc.querySelectorAll)) ) { // Build QSA regex // Regex strategy adopted from Diego Perini assert(function( div ) { // Select is set to empty string on purpose // This is to test IE's treatment of not explictly // setting a boolean content attribute, // since its presence should be enough // http://bugs.jquery.com/ticket/12359 div.innerHTML = ""; // IE8 - Some boolean attributes are not treated correctly if ( !div.querySelectorAll("[selected]").length ) { rbuggyQSA.push( "\\[" + whitespace + "*(?:checked|disabled|ismap|multiple|readonly|selected|value)" ); } // Webkit/Opera - :checked should return selected option elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":checked").length ) { rbuggyQSA.push(":checked"); } }); assert(function( div ) { // Opera 10-12/IE8 - ^= $= *= and empty values // Should not select anything div.innerHTML = ""; if ( div.querySelectorAll("[i^='']").length ) { rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:\"\"|'')" ); } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled) // IE8 throws error here and will not see later tests if ( !div.querySelectorAll(":enabled").length ) { rbuggyQSA.push( ":enabled", ":disabled" ); } // Opera 10-11 does not throw on post-comma invalid pseudos div.querySelectorAll("*,:x"); rbuggyQSA.push(",.*:"); }); } if ( (support.matchesSelector = isNative( (matches = docElem.matchesSelector || docElem.mozMatchesSelector || docElem.webkitMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector) )) ) { assert(function( div ) { // Check to see if it's possible to do matchesSelector // on a disconnected node (IE 9) support.disconnectedMatch = matches.call( div, "div" ); // This should fail with an exception // Gecko does not error, returns false instead matches.call( div, "[s!='']:x" ); rbuggyMatches.push( "!=", pseudos ); }); } rbuggyQSA = new RegExp( rbuggyQSA.join("|") ); rbuggyMatches = new RegExp( rbuggyMatches.join("|") ); // Element contains another // Purposefully does not implement inclusive descendent // As in, an element does not contain itself contains = isNative(docElem.contains) || docElem.compareDocumentPosition ? function( a, b ) { var adown = a.nodeType === 9 ? a.documentElement : a, bup = b && b.parentNode; return a === bup || !!( bup && bup.nodeType === 1 && ( adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16 )); } : function( a, b ) { if ( b ) { while ( (b = b.parentNode) ) { if ( b === a ) { return true; } } } return false; }; // Document order sorting sortOrder = docElem.compareDocumentPosition ? function( a, b ) { var compare; if ( a === b ) { hasDuplicate = true; return 0; } if ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) { if ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) { if ( a === doc || contains( preferredDoc, a ) ) { return -1; } if ( b === doc || contains( preferredDoc, b ) ) { return 1; } return 0; } return compare & 4 ? -1 : 1; } return a.compareDocumentPosition ? -1 : 1; } : function( a, b ) { var cur, i = 0, aup = a.parentNode, bup = b.parentNode, ap = [ a ], bp = [ b ]; // Exit early if the nodes are identical if ( a === b ) { hasDuplicate = true; return 0; // Parentless nodes are either documents or disconnected } else if ( !aup || !bup ) { return a === doc ? -1 : b === doc ? 1 : aup ? -1 : bup ? 1 : 0; // If the nodes are siblings, we can do a quick check } else if ( aup === bup ) { return siblingCheck( a, b ); } // Otherwise we need full lists of their ancestors for comparison cur = a; while ( (cur = cur.parentNode) ) { ap.unshift( cur ); } cur = b; while ( (cur = cur.parentNode) ) { bp.unshift( cur ); } // Walk down the tree looking for a discrepancy while ( ap[i] === bp[i] ) { i++; } return i ? // Do a sibling check if the nodes have a common ancestor siblingCheck( ap[i], bp[i] ) : // Otherwise nodes in our document sort first ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0; }; // Always assume the presence of duplicates if sort doesn't // pass them to our comparison function (as in Google Chrome). hasDuplicate = false; [0, 0].sort( sortOrder ); support.detectDuplicates = hasDuplicate; return document; }; Sizzle.matches = function( expr, elements ) { return Sizzle( expr, null, null, elements ); }; Sizzle.matchesSelector = function( elem, expr ) { // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } // Make sure that attribute selectors are quoted expr = expr.replace( rattributeQuotes, "='$1']" ); // rbuggyQSA always contains :focus, so no need for an existence check if ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) { try { var ret = matches.call( elem, expr ); // IE 9's matchesSelector returns false on disconnected nodes if ( ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document // fragment in IE 9 elem.document && elem.document.nodeType !== 11 ) { return ret; } } catch(e) {} } return Sizzle( expr, document, null, [elem] ).length > 0; }; Sizzle.contains = function( context, elem ) { // Set document vars if needed if ( ( context.ownerDocument || context ) !== document ) { setDocument( context ); } return contains( context, elem ); }; Sizzle.attr = function( elem, name ) { var val; // Set document vars if needed if ( ( elem.ownerDocument || elem ) !== document ) { setDocument( elem ); } if ( !documentIsXML ) { name = name.toLowerCase(); } if ( (val = Expr.attrHandle[ name ]) ) { return val( elem ); } if ( documentIsXML || support.attributes ) { return elem.getAttribute( name ); } return ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ? name : val && val.specified ? val.value : null; }; Sizzle.error = function( msg ) { throw new Error( "Syntax error, unrecognized expression: " + msg ); }; // Document sorting and removing duplicates Sizzle.uniqueSort = function( results ) { var elem, duplicates = [], i = 1, j = 0; // Unless we *know* we can detect duplicates, assume their presence hasDuplicate = !support.detectDuplicates; results.sort( sortOrder ); if ( hasDuplicate ) { for ( ; (elem = results[i]); i++ ) { if ( elem === results[ i - 1 ] ) { j = duplicates.push( i ); } } while ( j-- ) { results.splice( duplicates[ j ], 1 ); } } return results; }; function siblingCheck( a, b ) { var cur = b && a, diff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~a.sourceIndex || MAX_NEGATIVE ); // Use IE sourceIndex if available on both nodes if ( diff ) { return diff; } // Check if b follows a if ( cur ) { while ( (cur = cur.nextSibling) ) { if ( cur === b ) { return -1; } } } return a ? 1 : -1; } // Returns a function to use in pseudos for input types function createInputPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === type; }; } // Returns a function to use in pseudos for buttons function createButtonPseudo( type ) { return function( elem ) { var name = elem.nodeName.toLowerCase(); return (name === "input" || name === "button") && elem.type === type; }; } // Returns a function to use in pseudos for positionals function createPositionalPseudo( fn ) { return markFunction(function( argument ) { argument = +argument; return markFunction(function( seed, matches ) { var j, matchIndexes = fn( [], seed.length, argument ), i = matchIndexes.length; // Match elements found at the specified indexes while ( i-- ) { if ( seed[ (j = matchIndexes[i]) ] ) { seed[j] = !(matches[j] = seed[j]); } } }); }); } /** * Utility function for retrieving the text value of an array of DOM nodes * @param {Array|Element} elem */ getText = Sizzle.getText = function( elem ) { var node, ret = "", i = 0, nodeType = elem.nodeType; if ( !nodeType ) { // If no nodeType, this is expected to be an array for ( ; (node = elem[i]); i++ ) { // Do not traverse comment nodes ret += getText( node ); } } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { // Use textContent for elements // innerText usage removed for consistency of new lines (see #11153) if ( typeof elem.textContent === "string" ) { return elem.textContent; } else { // Traverse its children for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { ret += getText( elem ); } } } else if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } // Do not include comment or processing instruction nodes return ret; }; Expr = Sizzle.selectors = { // Can be adjusted by the user cacheLength: 50, createPseudo: markFunction, match: matchExpr, find: {}, relative: { ">": { dir: "parentNode", first: true }, " ": { dir: "parentNode" }, "+": { dir: "previousSibling", first: true }, "~": { dir: "previousSibling" } }, preFilter: { "ATTR": function( match ) { match[1] = match[1].replace( runescape, funescape ); // Move the given value to match[3] whether quoted or unquoted match[3] = ( match[4] || match[5] || "" ).replace( runescape, funescape ); if ( match[2] === "~=" ) { match[3] = " " + match[3] + " "; } return match.slice( 0, 4 ); }, "CHILD": function( match ) { /* matches from matchExpr["CHILD"] 1 type (only|nth|...) 2 what (child|of-type) 3 argument (even|odd|\d*|\d*n([+-]\d+)?|...) 4 xn-component of xn+y argument ([+-]?\d*n|) 5 sign of xn-component 6 x of xn-component 7 sign of y-component 8 y of y-component */ match[1] = match[1].toLowerCase(); if ( match[1].slice( 0, 3 ) === "nth" ) { // nth-* requires argument if ( !match[3] ) { Sizzle.error( match[0] ); } // numeric x and y parameters for Expr.filter.CHILD // remember that false/true cast respectively to 0/1 match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) ); match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" ); // other types prohibit arguments } else if ( match[3] ) { Sizzle.error( match[0] ); } return match; }, "PSEUDO": function( match ) { var excess, unquoted = !match[5] && match[2]; if ( matchExpr["CHILD"].test( match[0] ) ) { return null; } // Accept quoted arguments as-is if ( match[4] ) { match[2] = match[4]; // Strip excess characters from unquoted arguments } else if ( unquoted && rpseudo.test( unquoted ) && // Get excess from tokenize (recursively) (excess = tokenize( unquoted, true )) && // advance to the next closing parenthesis (excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) { // excess is a negative index match[0] = match[0].slice( 0, excess ); match[2] = unquoted.slice( 0, excess ); } // Return only captures needed by the pseudo filter method (type and argument) return match.slice( 0, 3 ); } }, filter: { "TAG": function( nodeName ) { if ( nodeName === "*" ) { return function() { return true; }; } nodeName = nodeName.replace( runescape, funescape ).toLowerCase(); return function( elem ) { return elem.nodeName && elem.nodeName.toLowerCase() === nodeName; }; }, "CLASS": function( className ) { var pattern = classCache[ className + " " ]; return pattern || (pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) && classCache( className, function( elem ) { return pattern.test( elem.className || (typeof elem.getAttribute !== strundefined && elem.getAttribute("class")) || "" ); }); }, "ATTR": function( name, operator, check ) { return function( elem ) { var result = Sizzle.attr( elem, name ); if ( result == null ) { return operator === "!="; } if ( !operator ) { return true; } result += ""; return operator === "=" ? result === check : operator === "!=" ? result !== check : operator === "^=" ? check && result.indexOf( check ) === 0 : operator === "*=" ? check && result.indexOf( check ) > -1 : operator === "$=" ? check && result.slice( -check.length ) === check : operator === "~=" ? ( " " + result + " " ).indexOf( check ) > -1 : operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" : false; }; }, "CHILD": function( type, what, argument, first, last ) { var simple = type.slice( 0, 3 ) !== "nth", forward = type.slice( -4 ) !== "last", ofType = what === "of-type"; return first === 1 && last === 0 ? // Shortcut for :nth-*(n) function( elem ) { return !!elem.parentNode; } : function( elem, context, xml ) { var cache, outerCache, node, diff, nodeIndex, start, dir = simple !== forward ? "nextSibling" : "previousSibling", parent = elem.parentNode, name = ofType && elem.nodeName.toLowerCase(), useCache = !xml && !ofType; if ( parent ) { // :(first|last|only)-(child|of-type) if ( simple ) { while ( dir ) { node = elem; while ( (node = node[ dir ]) ) { if ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) { return false; } } // Reverse direction for :only-* (if we haven't yet done so) start = dir = type === "only" && !start && "nextSibling"; } return true; } start = [ forward ? parent.firstChild : parent.lastChild ]; // non-xml :nth-child(...) stores cache data on `parent` if ( forward && useCache ) { // Seek `elem` from a previously-cached index outerCache = parent[ expando ] || (parent[ expando ] = {}); cache = outerCache[ type ] || []; nodeIndex = cache[0] === dirruns && cache[1]; diff = cache[0] === dirruns && cache[2]; node = nodeIndex && parent.childNodes[ nodeIndex ]; while ( (node = ++nodeIndex && node && node[ dir ] || // Fallback to seeking `elem` from the start (diff = nodeIndex = 0) || start.pop()) ) { // When found, cache indexes on `parent` and break if ( node.nodeType === 1 && ++diff && node === elem ) { outerCache[ type ] = [ dirruns, nodeIndex, diff ]; break; } } // Use previously-cached element index if available } else if ( useCache && (cache = (elem[ expando ] || (elem[ expando ] = {}))[ type ]) && cache[0] === dirruns ) { diff = cache[1]; // xml :nth-child(...) or :nth-last-child(...) or :nth(-last)?-of-type(...) } else { // Use the same loop as above to seek `elem` from the start while ( (node = ++nodeIndex && node && node[ dir ] || (diff = nodeIndex = 0) || start.pop()) ) { if ( ( ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1 ) && ++diff ) { // Cache the index of each encountered element if ( useCache ) { (node[ expando ] || (node[ expando ] = {}))[ type ] = [ dirruns, diff ]; } if ( node === elem ) { break; } } } } // Incorporate the offset, then check against cycle size diff -= last; return diff === first || ( diff % first === 0 && diff / first >= 0 ); } }; }, "PSEUDO": function( pseudo, argument ) { // pseudo-class names are case-insensitive // http://www.w3.org/TR/selectors/#pseudo-classes // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters // Remember that setFilters inherits from pseudos var args, fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] || Sizzle.error( "unsupported pseudo: " + pseudo ); // The user may use createPseudo to indicate that // arguments are needed to create the filter function // just as Sizzle does if ( fn[ expando ] ) { return fn( argument ); } // But maintain support for old signatures if ( fn.length > 1 ) { args = [ pseudo, pseudo, "", argument ]; return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ? markFunction(function( seed, matches ) { var idx, matched = fn( seed, argument ), i = matched.length; while ( i-- ) { idx = indexOf.call( seed, matched[i] ); seed[ idx ] = !( matches[ idx ] = matched[i] ); } }) : function( elem ) { return fn( elem, 0, args ); }; } return fn; } }, pseudos: { // Potentially complex pseudos "not": markFunction(function( selector ) { // Trim the selector passed to compile // to avoid treating leading and trailing // spaces as combinators var input = [], results = [], matcher = compile( selector.replace( rtrim, "$1" ) ); return matcher[ expando ] ? markFunction(function( seed, matches, context, xml ) { var elem, unmatched = matcher( seed, null, xml, [] ), i = seed.length; // Match elements unmatched by `matcher` while ( i-- ) { if ( (elem = unmatched[i]) ) { seed[i] = !(matches[i] = elem); } } }) : function( elem, context, xml ) { input[0] = elem; matcher( input, null, xml, results ); return !results.pop(); }; }), "has": markFunction(function( selector ) { return function( elem ) { return Sizzle( selector, elem ).length > 0; }; }), "contains": markFunction(function( text ) { return function( elem ) { return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1; }; }), // "Whether an element is represented by a :lang() selector // is based solely on the element's language value // being equal to the identifier C, // or beginning with the identifier C immediately followed by "-". // The matching of C against the element's language value is performed case-insensitively. // The identifier C does not have to be a valid language name." // http://www.w3.org/TR/selectors/#lang-pseudo "lang": markFunction( function( lang ) { // lang value must be a valid identifider if ( !ridentifier.test(lang || "") ) { Sizzle.error( "unsupported lang: " + lang ); } lang = lang.replace( runescape, funescape ).toLowerCase(); return function( elem ) { var elemLang; do { if ( (elemLang = documentIsXML ? elem.getAttribute("xml:lang") || elem.getAttribute("lang") : elem.lang) ) { elemLang = elemLang.toLowerCase(); return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0; } } while ( (elem = elem.parentNode) && elem.nodeType === 1 ); return false; }; }), // Miscellaneous "target": function( elem ) { var hash = window.location && window.location.hash; return hash && hash.slice( 1 ) === elem.id; }, "root": function( elem ) { return elem === docElem; }, "focus": function( elem ) { return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex); }, // Boolean properties "enabled": function( elem ) { return elem.disabled === false; }, "disabled": function( elem ) { return elem.disabled === true; }, "checked": function( elem ) { // In CSS3, :checked should return both checked and selected elements // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked var nodeName = elem.nodeName.toLowerCase(); return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected); }, "selected": function( elem ) { // Accessing this property makes selected-by-default // options in Safari work properly if ( elem.parentNode ) { elem.parentNode.selectedIndex; } return elem.selected === true; }, // Contents "empty": function( elem ) { // http://www.w3.org/TR/selectors/#empty-pseudo // :empty is only affected by element nodes and content nodes(including text(3), cdata(4)), // not comment, processing instructions, or others // Thanks to Diego Perini for the nodeName shortcut // Greater than "@" means alpha characters (specifically not starting with "#" or "?") for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) { if ( elem.nodeName > "@" || elem.nodeType === 3 || elem.nodeType === 4 ) { return false; } } return true; }, "parent": function( elem ) { return !Expr.pseudos["empty"]( elem ); }, // Element/input types "header": function( elem ) { return rheader.test( elem.nodeName ); }, "input": function( elem ) { return rinputs.test( elem.nodeName ); }, "button": function( elem ) { var name = elem.nodeName.toLowerCase(); return name === "input" && elem.type === "button" || name === "button"; }, "text": function( elem ) { var attr; // IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc) // use getAttribute instead to test this case return elem.nodeName.toLowerCase() === "input" && elem.type === "text" && ( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === elem.type ); }, // Position-in-collection "first": createPositionalPseudo(function() { return [ 0 ]; }), "last": createPositionalPseudo(function( matchIndexes, length ) { return [ length - 1 ]; }), "eq": createPositionalPseudo(function( matchIndexes, length, argument ) { return [ argument < 0 ? argument + length : argument ]; }), "even": createPositionalPseudo(function( matchIndexes, length ) { var i = 0; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "odd": createPositionalPseudo(function( matchIndexes, length ) { var i = 1; for ( ; i < length; i += 2 ) { matchIndexes.push( i ); } return matchIndexes; }), "lt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; --i >= 0; ) { matchIndexes.push( i ); } return matchIndexes; }), "gt": createPositionalPseudo(function( matchIndexes, length, argument ) { var i = argument < 0 ? argument + length : argument; for ( ; ++i < length; ) { matchIndexes.push( i ); } return matchIndexes; }) } }; // Add button/input type pseudos for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) { Expr.pseudos[ i ] = createInputPseudo( i ); } for ( i in { submit: true, reset: true } ) { Expr.pseudos[ i ] = createButtonPseudo( i ); } function tokenize( selector, parseOnly ) { var matched, match, tokens, type, soFar, groups, preFilters, cached = tokenCache[ selector + " " ]; if ( cached ) { return parseOnly ? 0 : cached.slice( 0 ); } soFar = selector; groups = []; preFilters = Expr.preFilter; while ( soFar ) { // Comma and first run if ( !matched || (match = rcomma.exec( soFar )) ) { if ( match ) { // Don't consume trailing commas as valid soFar = soFar.slice( match[0].length ) || soFar; } groups.push( tokens = [] ); } matched = false; // Combinators if ( (match = rcombinators.exec( soFar )) ) { matched = match.shift(); tokens.push( { value: matched, // Cast descendant combinators to space type: match[0].replace( rtrim, " " ) } ); soFar = soFar.slice( matched.length ); } // Filters for ( type in Expr.filter ) { if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] || (match = preFilters[ type ]( match ))) ) { matched = match.shift(); tokens.push( { value: matched, type: type, matches: match } ); soFar = soFar.slice( matched.length ); } } if ( !matched ) { break; } } // Return the length of the invalid excess // if we're just parsing // Otherwise, throw an error or return tokens return parseOnly ? soFar.length : soFar ? Sizzle.error( selector ) : // Cache the tokens tokenCache( selector, groups ).slice( 0 ); } function toSelector( tokens ) { var i = 0, len = tokens.length, selector = ""; for ( ; i < len; i++ ) { selector += tokens[i].value; } return selector; } function addCombinator( matcher, combinator, base ) { var dir = combinator.dir, checkNonElements = base && dir === "parentNode", doneName = done++; return combinator.first ? // Check against closest ancestor/preceding element function( elem, context, xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { return matcher( elem, context, xml ); } } } : // Check against all ancestor/preceding elements function( elem, context, xml ) { var data, cache, outerCache, dirkey = dirruns + " " + doneName; // We can't set arbitrary data on XML nodes, so they don't benefit from dir caching if ( xml ) { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { if ( matcher( elem, context, xml ) ) { return true; } } } } else { while ( (elem = elem[ dir ]) ) { if ( elem.nodeType === 1 || checkNonElements ) { outerCache = elem[ expando ] || (elem[ expando ] = {}); if ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) { if ( (data = cache[1]) === true || data === cachedruns ) { return data === true; } } else { cache = outerCache[ dir ] = [ dirkey ]; cache[1] = matcher( elem, context, xml ) || cachedruns; if ( cache[1] === true ) { return true; } } } } } }; } function elementMatcher( matchers ) { return matchers.length > 1 ? function( elem, context, xml ) { var i = matchers.length; while ( i-- ) { if ( !matchers[i]( elem, context, xml ) ) { return false; } } return true; } : matchers[0]; } function condense( unmatched, map, filter, context, xml ) { var elem, newUnmatched = [], i = 0, len = unmatched.length, mapped = map != null; for ( ; i < len; i++ ) { if ( (elem = unmatched[i]) ) { if ( !filter || filter( elem, context, xml ) ) { newUnmatched.push( elem ); if ( mapped ) { map.push( i ); } } } } return newUnmatched; } function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) { if ( postFilter && !postFilter[ expando ] ) { postFilter = setMatcher( postFilter ); } if ( postFinder && !postFinder[ expando ] ) { postFinder = setMatcher( postFinder, postSelector ); } return markFunction(function( seed, results, context, xml ) { var temp, i, elem, preMap = [], postMap = [], preexisting = results.length, // Get initial elements from seed or context elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ), // Prefilter to get matcher input, preserving a map for seed-results synchronization matcherIn = preFilter && ( seed || !selector ) ? condense( elems, preMap, preFilter, context, xml ) : elems, matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results, postFinder || ( seed ? preFilter : preexisting || postFilter ) ? // ...intermediate processing is necessary [] : // ...otherwise use results directly results : matcherIn; // Find primary matches if ( matcher ) { matcher( matcherIn, matcherOut, context, xml ); } // Apply postFilter if ( postFilter ) { temp = condense( matcherOut, postMap ); postFilter( temp, [], context, xml ); // Un-match failing elements by moving them back to matcherIn i = temp.length; while ( i-- ) { if ( (elem = temp[i]) ) { matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem); } } } if ( seed ) { if ( postFinder || preFilter ) { if ( postFinder ) { // Get the final matcherOut by condensing this intermediate into postFinder contexts temp = []; i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) ) { // Restore matcherIn since elem is not yet a final match temp.push( (matcherIn[i] = elem) ); } } postFinder( null, (matcherOut = []), temp, xml ); } // Move matched elements from seed to results to keep them synchronized i = matcherOut.length; while ( i-- ) { if ( (elem = matcherOut[i]) && (temp = postFinder ? indexOf.call( seed, elem ) : preMap[i]) > -1 ) { seed[temp] = !(results[temp] = elem); } } } // Add elements to results, through postFinder if defined } else { matcherOut = condense( matcherOut === results ? matcherOut.splice( preexisting, matcherOut.length ) : matcherOut ); if ( postFinder ) { postFinder( null, results, matcherOut, xml ); } else { push.apply( results, matcherOut ); } } }); } function matcherFromTokens( tokens ) { var checkContext, matcher, j, len = tokens.length, leadingRelative = Expr.relative[ tokens[0].type ], implicitRelative = leadingRelative || Expr.relative[" "], i = leadingRelative ? 1 : 0, // The foundational matcher ensures that elements are reachable from top-level context(s) matchContext = addCombinator( function( elem ) { return elem === checkContext; }, implicitRelative, true ), matchAnyContext = addCombinator( function( elem ) { return indexOf.call( checkContext, elem ) > -1; }, implicitRelative, true ), matchers = [ function( elem, context, xml ) { return ( !leadingRelative && ( xml || context !== outermostContext ) ) || ( (checkContext = context).nodeType ? matchContext( elem, context, xml ) : matchAnyContext( elem, context, xml ) ); } ]; for ( ; i < len; i++ ) { if ( (matcher = Expr.relative[ tokens[i].type ]) ) { matchers = [ addCombinator(elementMatcher( matchers ), matcher) ]; } else { matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches ); // Return special upon seeing a positional matcher if ( matcher[ expando ] ) { // Find the next relative operator (if any) for proper handling j = ++i; for ( ; j < len; j++ ) { if ( Expr.relative[ tokens[j].type ] ) { break; } } return setMatcher( i > 1 && elementMatcher( matchers ), i > 1 && toSelector( tokens.slice( 0, i - 1 ) ).replace( rtrim, "$1" ), matcher, i < j && matcherFromTokens( tokens.slice( i, j ) ), j < len && matcherFromTokens( (tokens = tokens.slice( j )) ), j < len && toSelector( tokens ) ); } matchers.push( matcher ); } } return elementMatcher( matchers ); } function matcherFromGroupMatchers( elementMatchers, setMatchers ) { // A counter to specify which element is currently being matched var matcherCachedRuns = 0, bySet = setMatchers.length > 0, byElement = elementMatchers.length > 0, superMatcher = function( seed, context, xml, results, expandContext ) { var elem, j, matcher, setMatched = [], matchedCount = 0, i = "0", unmatched = seed && [], outermost = expandContext != null, contextBackup = outermostContext, // We must always have either seed elements or context elems = seed || byElement && Expr.find["TAG"]( "*", expandContext && context.parentNode || context ), // Use integer dirruns iff this is the outermost matcher dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1); if ( outermost ) { outermostContext = context !== document && context; cachedruns = matcherCachedRuns; } // Add elements passing elementMatchers directly to results // Keep `i` a string if there are no elements so `matchedCount` will be "00" below for ( ; (elem = elems[i]) != null; i++ ) { if ( byElement && elem ) { j = 0; while ( (matcher = elementMatchers[j++]) ) { if ( matcher( elem, context, xml ) ) { results.push( elem ); break; } } if ( outermost ) { dirruns = dirrunsUnique; cachedruns = ++matcherCachedRuns; } } // Track unmatched elements for set filters if ( bySet ) { // They will have gone through all possible matchers if ( (elem = !matcher && elem) ) { matchedCount--; } // Lengthen the array for every element, matched or not if ( seed ) { unmatched.push( elem ); } } } // Apply set filters to unmatched elements matchedCount += i; if ( bySet && i !== matchedCount ) { j = 0; while ( (matcher = setMatchers[j++]) ) { matcher( unmatched, setMatched, context, xml ); } if ( seed ) { // Reintegrate element matches to eliminate the need for sorting if ( matchedCount > 0 ) { while ( i-- ) { if ( !(unmatched[i] || setMatched[i]) ) { setMatched[i] = pop.call( results ); } } } // Discard index placeholder values to get only actual matches setMatched = condense( setMatched ); } // Add matches to results push.apply( results, setMatched ); // Seedless set matches succeeding multiple successful matchers stipulate sorting if ( outermost && !seed && setMatched.length > 0 && ( matchedCount + setMatchers.length ) > 1 ) { Sizzle.uniqueSort( results ); } } // Override manipulation of globals by nested matchers if ( outermost ) { dirruns = dirrunsUnique; outermostContext = contextBackup; } return unmatched; }; return bySet ? markFunction( superMatcher ) : superMatcher; } compile = Sizzle.compile = function( selector, group /* Internal Use Only */ ) { var i, setMatchers = [], elementMatchers = [], cached = compilerCache[ selector + " " ]; if ( !cached ) { // Generate a function of recursive functions that can be used to check each element if ( !group ) { group = tokenize( selector ); } i = group.length; while ( i-- ) { cached = matcherFromTokens( group[i] ); if ( cached[ expando ] ) { setMatchers.push( cached ); } else { elementMatchers.push( cached ); } } // Cache the compiled function cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) ); } return cached; }; function multipleContexts( selector, contexts, results ) { var i = 0, len = contexts.length; for ( ; i < len; i++ ) { Sizzle( selector, contexts[i], results ); } return results; } function select( selector, context, results, seed ) { var i, tokens, token, type, find, match = tokenize( selector ); if ( !seed ) { // Try to minimize operations if there is only one group if ( match.length === 1 ) { // Take a shortcut and set the context if the root selector is an ID tokens = match[0] = match[0].slice( 0 ); if ( tokens.length > 2 && (token = tokens[0]).type === "ID" && context.nodeType === 9 && !documentIsXML && Expr.relative[ tokens[1].type ] ) { context = Expr.find["ID"]( token.matches[0].replace( runescape, funescape ), context )[0]; if ( !context ) { return results; } selector = selector.slice( tokens.shift().value.length ); } // Fetch a seed set for right-to-left matching i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length; while ( i-- ) { token = tokens[i]; // Abort if we hit a combinator if ( Expr.relative[ (type = token.type) ] ) { break; } if ( (find = Expr.find[ type ]) ) { // Search, expanding context for leading sibling combinators if ( (seed = find( token.matches[0].replace( runescape, funescape ), rsibling.test( tokens[0].type ) && context.parentNode || context )) ) { // If seed is empty or no tokens remain, we can return early tokens.splice( i, 1 ); selector = seed.length && toSelector( tokens ); if ( !selector ) { push.apply( results, slice.call( seed, 0 ) ); return results; } break; } } } } } // Compile and execute a filtering function // Provide `match` to avoid retokenization if we modified the selector above compile( selector, match )( seed, context, documentIsXML, results, rsibling.test( selector ) ); return results; } // Deprecated Expr.pseudos["nth"] = Expr.pseudos["eq"]; // Easy API for creating new setFilters function setFilters() {} Expr.filters = setFilters.prototype = Expr.pseudos; Expr.setFilters = new setFilters(); // Initialize with the default document setDocument(); // Override sizzle attribute retrieval Sizzle.attr = jQuery.attr; jQuery.find = Sizzle; jQuery.expr = Sizzle.selectors; jQuery.expr[":"] = jQuery.expr.pseudos; jQuery.unique = Sizzle.uniqueSort; jQuery.text = Sizzle.getText; jQuery.isXMLDoc = Sizzle.isXML; jQuery.contains = Sizzle.contains; })( window ); var runtil = /Until$/, rparentsprev = /^(?:parents|prev(?:Until|All))/, isSimple = /^.[^:#\[\.,]*$/, rneedsContext = jQuery.expr.match.needsContext, // methods guaranteed to produce a unique set when starting from a unique set guaranteedUnique = { children: true, contents: true, next: true, prev: true }; jQuery.fn.extend({ find: function( selector ) { var i, ret, self, len = this.length; if ( typeof selector !== "string" ) { self = this; return this.pushStack( jQuery( selector ).filter(function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( self[ i ], this ) ) { return true; } } }) ); } ret = []; for ( i = 0; i < len; i++ ) { jQuery.find( selector, this[ i ], ret ); } // Needed because $( selector, context ) becomes $( context ).find( selector ) ret = this.pushStack( len > 1 ? jQuery.unique( ret ) : ret ); ret.selector = ( this.selector ? this.selector + " " : "" ) + selector; return ret; }, has: function( target ) { var i, targets = jQuery( target, this ), len = targets.length; return this.filter(function() { for ( i = 0; i < len; i++ ) { if ( jQuery.contains( this, targets[i] ) ) { return true; } } }); }, not: function( selector ) { return this.pushStack( winnow(this, selector, false) ); }, filter: function( selector ) { return this.pushStack( winnow(this, selector, true) ); }, is: function( selector ) { return !!selector && ( typeof selector === "string" ? // If this is a positional/relative selector, check membership in the returned set // so $("p:first").is("p:last") won't return true for a doc with two "p". rneedsContext.test( selector ) ? jQuery( selector, this.context ).index( this[0] ) >= 0 : jQuery.filter( selector, this ).length > 0 : this.filter( selector ).length > 0 ); }, closest: function( selectors, context ) { var cur, i = 0, l = this.length, ret = [], pos = rneedsContext.test( selectors ) || typeof selectors !== "string" ? jQuery( selectors, context || this.context ) : 0; for ( ; i < l; i++ ) { cur = this[i]; while ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) { if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { ret.push( cur ); break; } cur = cur.parentNode; } } return this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret ); }, // Determine the position of an element within // the matched set of elements index: function( elem ) { // No argument, return index in parent if ( !elem ) { return ( this[0] && this[0].parentNode ) ? this.first().prevAll().length : -1; } // index in selector if ( typeof elem === "string" ) { return jQuery.inArray( this[0], jQuery( elem ) ); } // Locate the position of the desired element return jQuery.inArray( // If it receives a jQuery object, the first element is used elem.jquery ? elem[0] : elem, this ); }, add: function( selector, context ) { var set = typeof selector === "string" ? jQuery( selector, context ) : jQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ), all = jQuery.merge( this.get(), set ); return this.pushStack( jQuery.unique(all) ); }, addBack: function( selector ) { return this.add( selector == null ? this.prevObject : this.prevObject.filter(selector) ); } }); jQuery.fn.andSelf = jQuery.fn.addBack; function sibling( cur, dir ) { do { cur = cur[ dir ]; } while ( cur && cur.nodeType !== 1 ); return cur; } jQuery.each({ parent: function( elem ) { var parent = elem.parentNode; return parent && parent.nodeType !== 11 ? parent : null; }, parents: function( elem ) { return jQuery.dir( elem, "parentNode" ); }, parentsUntil: function( elem, i, until ) { return jQuery.dir( elem, "parentNode", until ); }, next: function( elem ) { return sibling( elem, "nextSibling" ); }, prev: function( elem ) { return sibling( elem, "previousSibling" ); }, nextAll: function( elem ) { return jQuery.dir( elem, "nextSibling" ); }, prevAll: function( elem ) { return jQuery.dir( elem, "previousSibling" ); }, nextUntil: function( elem, i, until ) { return jQuery.dir( elem, "nextSibling", until ); }, prevUntil: function( elem, i, until ) { return jQuery.dir( elem, "previousSibling", until ); }, siblings: function( elem ) { return jQuery.sibling( ( elem.parentNode || {} ).firstChild, elem ); }, children: function( elem ) { return jQuery.sibling( elem.firstChild ); }, contents: function( elem ) { return jQuery.nodeName( elem, "iframe" ) ? elem.contentDocument || elem.contentWindow.document : jQuery.merge( [], elem.childNodes ); } }, function( name, fn ) { jQuery.fn[ name ] = function( until, selector ) { var ret = jQuery.map( this, fn, until ); if ( !runtil.test( name ) ) { selector = until; } if ( selector && typeof selector === "string" ) { ret = jQuery.filter( selector, ret ); } ret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret; if ( this.length > 1 && rparentsprev.test( name ) ) { ret = ret.reverse(); } return this.pushStack( ret ); }; }); jQuery.extend({ filter: function( expr, elems, not ) { if ( not ) { expr = ":not(" + expr + ")"; } return elems.length === 1 ? jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] : jQuery.find.matches(expr, elems); }, dir: function( elem, dir, until ) { var matched = [], cur = elem[ dir ]; while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) { if ( cur.nodeType === 1 ) { matched.push( cur ); } cur = cur[dir]; } return matched; }, sibling: function( n, elem ) { var r = []; for ( ; n; n = n.nextSibling ) { if ( n.nodeType === 1 && n !== elem ) { r.push( n ); } } return r; } }); // Implement the identical functionality for filter and not function winnow( elements, qualifier, keep ) { // Can't pass null or undefined to indexOf in Firefox 4 // Set to 0 to skip string check qualifier = qualifier || 0; if ( jQuery.isFunction( qualifier ) ) { return jQuery.grep(elements, function( elem, i ) { var retVal = !!qualifier.call( elem, i, elem ); return retVal === keep; }); } else if ( qualifier.nodeType ) { return jQuery.grep(elements, function( elem ) { return ( elem === qualifier ) === keep; }); } else if ( typeof qualifier === "string" ) { var filtered = jQuery.grep(elements, function( elem ) { return elem.nodeType === 1; }); if ( isSimple.test( qualifier ) ) { return jQuery.filter(qualifier, filtered, !keep); } else { qualifier = jQuery.filter( qualifier, filtered ); } } return jQuery.grep(elements, function( elem ) { return ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep; }); } function createSafeFragment( document ) { var list = nodeNames.split( "|" ), safeFrag = document.createDocumentFragment(); if ( safeFrag.createElement ) { while ( list.length ) { safeFrag.createElement( list.pop() ); } } return safeFrag; } var nodeNames = "abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|" + "header|hgroup|mark|meter|nav|output|progress|section|summary|time|video", rinlinejQuery = / jQuery\d+="(?:null|\d+)"/g, rnoshimcache = new RegExp("<(?:" + nodeNames + ")[\\s/>]", "i"), rleadingWhitespace = /^\s+/, rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi, rtagName = /<([\w:]+)/, rtbody = /\s*$/g, // We have to close these tags to support XHTML (#13200) wrapMap = { option: [ 1, "" ], legend: [ 1, "
    ", "
    " ], area: [ 1, "", "" ], param: [ 1, "", "" ], thead: [ 1, "", "
    " ], tr: [ 2, "", "
    " ], col: [ 2, "", "
    " ], td: [ 3, "", "
    " ], // IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags, // unless wrapped in a div with non-breaking characters in front of it. _default: jQuery.support.htmlSerialize ? [ 0, "", "" ] : [ 1, "X
    ", "
    " ] }, safeFragment = createSafeFragment( document ), fragmentDiv = safeFragment.appendChild( document.createElement("div") ); wrapMap.optgroup = wrapMap.option; wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead; wrapMap.th = wrapMap.td; jQuery.fn.extend({ text: function( value ) { return jQuery.access( this, function( value ) { return value === undefined ? jQuery.text( this ) : this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) ); }, null, value, arguments.length ); }, wrapAll: function( html ) { if ( jQuery.isFunction( html ) ) { return this.each(function(i) { jQuery(this).wrapAll( html.call(this, i) ); }); } if ( this[0] ) { // The elements to wrap the target around var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true); if ( this[0].parentNode ) { wrap.insertBefore( this[0] ); } wrap.map(function() { var elem = this; while ( elem.firstChild && elem.firstChild.nodeType === 1 ) { elem = elem.firstChild; } return elem; }).append( this ); } return this; }, wrapInner: function( html ) { if ( jQuery.isFunction( html ) ) { return this.each(function(i) { jQuery(this).wrapInner( html.call(this, i) ); }); } return this.each(function() { var self = jQuery( this ), contents = self.contents(); if ( contents.length ) { contents.wrapAll( html ); } else { self.append( html ); } }); }, wrap: function( html ) { var isFunction = jQuery.isFunction( html ); return this.each(function(i) { jQuery( this ).wrapAll( isFunction ? html.call(this, i) : html ); }); }, unwrap: function() { return this.parent().each(function() { if ( !jQuery.nodeName( this, "body" ) ) { jQuery( this ).replaceWith( this.childNodes ); } }).end(); }, append: function() { return this.domManip(arguments, true, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { this.appendChild( elem ); } }); }, prepend: function() { return this.domManip(arguments, true, function( elem ) { if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) { this.insertBefore( elem, this.firstChild ); } }); }, before: function() { return this.domManip( arguments, false, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this ); } }); }, after: function() { return this.domManip( arguments, false, function( elem ) { if ( this.parentNode ) { this.parentNode.insertBefore( elem, this.nextSibling ); } }); }, // keepData is for internal use only--do not document remove: function( selector, keepData ) { var elem, i = 0; for ( ; (elem = this[i]) != null; i++ ) { if ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) { if ( !keepData && elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem ) ); } if ( elem.parentNode ) { if ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) { setGlobalEval( getAll( elem, "script" ) ); } elem.parentNode.removeChild( elem ); } } } return this; }, empty: function() { var elem, i = 0; for ( ; (elem = this[i]) != null; i++ ) { // Remove element nodes and prevent memory leaks if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); } // Remove any remaining nodes while ( elem.firstChild ) { elem.removeChild( elem.firstChild ); } // If this is a select, ensure that it displays empty (#12336) // Support: IE<9 if ( elem.options && jQuery.nodeName( elem, "select" ) ) { elem.options.length = 0; } } return this; }, clone: function( dataAndEvents, deepDataAndEvents ) { dataAndEvents = dataAndEvents == null ? false : dataAndEvents; deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents; return this.map( function () { return jQuery.clone( this, dataAndEvents, deepDataAndEvents ); }); }, html: function( value ) { return jQuery.access( this, function( value ) { var elem = this[0] || {}, i = 0, l = this.length; if ( value === undefined ) { return elem.nodeType === 1 ? elem.innerHTML.replace( rinlinejQuery, "" ) : undefined; } // See if we can take a shortcut and just use innerHTML if ( typeof value === "string" && !rnoInnerhtml.test( value ) && ( jQuery.support.htmlSerialize || !rnoshimcache.test( value ) ) && ( jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value ) ) && !wrapMap[ ( rtagName.exec( value ) || ["", ""] )[1].toLowerCase() ] ) { value = value.replace( rxhtmlTag, "<$1>" ); try { for (; i < l; i++ ) { // Remove element nodes and prevent memory leaks elem = this[i] || {}; if ( elem.nodeType === 1 ) { jQuery.cleanData( getAll( elem, false ) ); elem.innerHTML = value; } } elem = 0; // If using innerHTML throws an exception, use the fallback method } catch(e) {} } if ( elem ) { this.empty().append( value ); } }, null, value, arguments.length ); }, replaceWith: function( value ) { var isFunc = jQuery.isFunction( value ); // Make sure that the elements are removed from the DOM before they are inserted // this can help fix replacing a parent with child elements if ( !isFunc && typeof value !== "string" ) { value = jQuery( value ).not( this ).detach(); } return this.domManip( [ value ], true, function( elem ) { var next = this.nextSibling, parent = this.parentNode; if ( parent ) { jQuery( this ).remove(); parent.insertBefore( elem, next ); } }); }, detach: function( selector ) { return this.remove( selector, true ); }, domManip: function( args, table, callback ) { // Flatten any nested arrays args = core_concat.apply( [], args ); var first, node, hasScripts, scripts, doc, fragment, i = 0, l = this.length, set = this, iNoClone = l - 1, value = args[0], isFunction = jQuery.isFunction( value ); // We can't cloneNode fragments that contain checked, in WebKit if ( isFunction || !( l <= 1 || typeof value !== "string" || jQuery.support.checkClone || !rchecked.test( value ) ) ) { return this.each(function( index ) { var self = set.eq( index ); if ( isFunction ) { args[0] = value.call( this, index, table ? self.html() : undefined ); } self.domManip( args, table, callback ); }); } if ( l ) { fragment = jQuery.buildFragment( args, this[ 0 ].ownerDocument, false, this ); first = fragment.firstChild; if ( fragment.childNodes.length === 1 ) { fragment = first; } if ( first ) { table = table && jQuery.nodeName( first, "tr" ); scripts = jQuery.map( getAll( fragment, "script" ), disableScript ); hasScripts = scripts.length; // Use the original fragment for the last item instead of the first because it can end up // being emptied incorrectly in certain situations (#8070). for ( ; i < l; i++ ) { node = fragment; if ( i !== iNoClone ) { node = jQuery.clone( node, true, true ); // Keep references to cloned scripts for later restoration if ( hasScripts ) { jQuery.merge( scripts, getAll( node, "script" ) ); } } callback.call( table && jQuery.nodeName( this[i], "table" ) ? findOrAppend( this[i], "tbody" ) : this[i], node, i ); } if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; // Reenable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion for ( i = 0; i < hasScripts; i++ ) { node = scripts[ i ]; if ( rscriptType.test( node.type || "" ) && !jQuery._data( node, "globalEval" ) && jQuery.contains( doc, node ) ) { if ( node.src ) { // Hope ajax is available... jQuery.ajax({ url: node.src, type: "GET", dataType: "script", async: false, global: false, "throws": true }); } else { jQuery.globalEval( ( node.text || node.textContent || node.innerHTML || "" ).replace( rcleanScript, "" ) ); } } } } // Fix #11809: Avoid leaking memory fragment = first = null; } } return this; } }); function findOrAppend( elem, tag ) { return elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) ); } // Replace/restore the type attribute of script elements for safe DOM manipulation function disableScript( elem ) { var attr = elem.getAttributeNode("type"); elem.type = ( attr && attr.specified ) + "/" + elem.type; return elem; } function restoreScript( elem ) { var match = rscriptTypeMasked.exec( elem.type ); if ( match ) { elem.type = match[1]; } else { elem.removeAttribute("type"); } return elem; } // Mark scripts as having already been evaluated function setGlobalEval( elems, refElements ) { var elem, i = 0; for ( ; (elem = elems[i]) != null; i++ ) { jQuery._data( elem, "globalEval", !refElements || jQuery._data( refElements[i], "globalEval" ) ); } } function cloneCopyEvent( src, dest ) { if ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) { return; } var type, i, l, oldData = jQuery._data( src ), curData = jQuery._data( dest, oldData ), events = oldData.events; if ( events ) { delete curData.handle; curData.events = {}; for ( type in events ) { for ( i = 0, l = events[ type ].length; i < l; i++ ) { jQuery.event.add( dest, type, events[ type ][ i ] ); } } } // make the cloned public data object a copy from the original if ( curData.data ) { curData.data = jQuery.extend( {}, curData.data ); } } function fixCloneNodeIssues( src, dest ) { var nodeName, e, data; // We do not need to do anything for non-Elements if ( dest.nodeType !== 1 ) { return; } nodeName = dest.nodeName.toLowerCase(); // IE6-8 copies events bound via attachEvent when using cloneNode. if ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) { data = jQuery._data( dest ); for ( e in data.events ) { jQuery.removeEvent( dest, e, data.handle ); } // Event data gets referenced instead of copied if the expando gets copied too dest.removeAttribute( jQuery.expando ); } // IE blanks contents when cloning scripts, and tries to evaluate newly-set text if ( nodeName === "script" && dest.text !== src.text ) { disableScript( dest ).text = src.text; restoreScript( dest ); // IE6-10 improperly clones children of object elements using classid. // IE10 throws NoModificationAllowedError if parent is null, #12132. } else if ( nodeName === "object" ) { if ( dest.parentNode ) { dest.outerHTML = src.outerHTML; } // This path appears unavoidable for IE9. When cloning an object // element in IE9, the outerHTML strategy above is not sufficient. // If the src has innerHTML and the destination does not, // copy the src.innerHTML into the dest.innerHTML. #10324 if ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) { dest.innerHTML = src.innerHTML; } } else if ( nodeName === "input" && manipulation_rcheckableType.test( src.type ) ) { // IE6-8 fails to persist the checked state of a cloned checkbox // or radio button. Worse, IE6-7 fail to give the cloned element // a checked appearance if the defaultChecked value isn't also set dest.defaultChecked = dest.checked = src.checked; // IE6-7 get confused and end up setting the value of a cloned // checkbox/radio button to an empty string instead of "on" if ( dest.value !== src.value ) { dest.value = src.value; } // IE6-8 fails to return the selected option to the default selected // state when cloning options } else if ( nodeName === "option" ) { dest.defaultSelected = dest.selected = src.defaultSelected; // IE6-8 fails to set the defaultValue to the correct value when // cloning other types of input fields } else if ( nodeName === "input" || nodeName === "textarea" ) { dest.defaultValue = src.defaultValue; } } jQuery.each({ appendTo: "append", prependTo: "prepend", insertBefore: "before", insertAfter: "after", replaceAll: "replaceWith" }, function( name, original ) { jQuery.fn[ name ] = function( selector ) { var elems, i = 0, ret = [], insert = jQuery( selector ), last = insert.length - 1; for ( ; i <= last; i++ ) { elems = i === last ? this : this.clone(true); jQuery( insert[i] )[ original ]( elems ); // Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get() core_push.apply( ret, elems.get() ); } return this.pushStack( ret ); }; }); function getAll( context, tag ) { var elems, elem, i = 0, found = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || "*" ) : typeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || "*" ) : undefined; if ( !found ) { for ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) { if ( !tag || jQuery.nodeName( elem, tag ) ) { found.push( elem ); } else { jQuery.merge( found, getAll( elem, tag ) ); } } } return tag === undefined || tag && jQuery.nodeName( context, tag ) ? jQuery.merge( [ context ], found ) : found; } // Used in buildFragment, fixes the defaultChecked property function fixDefaultChecked( elem ) { if ( manipulation_rcheckableType.test( elem.type ) ) { elem.defaultChecked = elem.checked; } } jQuery.extend({ clone: function( elem, dataAndEvents, deepDataAndEvents ) { var destElements, node, clone, i, srcElements, inPage = jQuery.contains( elem.ownerDocument, elem ); if ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( "<" + elem.nodeName + ">" ) ) { clone = elem.cloneNode( true ); // IE<=8 does not properly clone detached, unknown element nodes } else { fragmentDiv.innerHTML = elem.outerHTML; fragmentDiv.removeChild( clone = fragmentDiv.firstChild ); } if ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem) ) { // We eschew Sizzle here for performance reasons: http://jsperf.com/getall-vs-sizzle/2 destElements = getAll( clone ); srcElements = getAll( elem ); // Fix all IE cloning issues for ( i = 0; (node = srcElements[i]) != null; ++i ) { // Ensure that the destination node is not null; Fixes #9587 if ( destElements[i] ) { fixCloneNodeIssues( node, destElements[i] ); } } } // Copy the events from the original to the clone if ( dataAndEvents ) { if ( deepDataAndEvents ) { srcElements = srcElements || getAll( elem ); destElements = destElements || getAll( clone ); for ( i = 0; (node = srcElements[i]) != null; i++ ) { cloneCopyEvent( node, destElements[i] ); } } else { cloneCopyEvent( elem, clone ); } } // Preserve script evaluation history destElements = getAll( clone, "script" ); if ( destElements.length > 0 ) { setGlobalEval( destElements, !inPage && getAll( elem, "script" ) ); } destElements = srcElements = node = null; // Return the cloned set return clone; }, buildFragment: function( elems, context, scripts, selection ) { var j, elem, contains, tmp, tag, tbody, wrap, l = elems.length, // Ensure a safe fragment safe = createSafeFragment( context ), nodes = [], i = 0; for ( ; i < l; i++ ) { elem = elems[ i ]; if ( elem || elem === 0 ) { // Add nodes directly if ( jQuery.type( elem ) === "object" ) { jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem ); // Convert non-html into a text node } else if ( !rhtml.test( elem ) ) { nodes.push( context.createTextNode( elem ) ); // Convert html into DOM nodes } else { tmp = tmp || safe.appendChild( context.createElement("div") ); // Deserialize a standard representation tag = ( rtagName.exec( elem ) || ["", ""] )[1].toLowerCase(); wrap = wrapMap[ tag ] || wrapMap._default; tmp.innerHTML = wrap[1] + elem.replace( rxhtmlTag, "<$1>" ) + wrap[2]; // Descend through wrappers to the right content j = wrap[0]; while ( j-- ) { tmp = tmp.lastChild; } // Manually add leading whitespace removed by IE if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) { nodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) ); } // Remove IE's autoinserted from table fragments if ( !jQuery.support.tbody ) { // String was a , *may* have spurious elem = tag === "table" && !rtbody.test( elem ) ? tmp.firstChild : // String was a bare or wrap[1] === "
    " && !rtbody.test( elem ) ? tmp : 0; j = elem && elem.childNodes.length; while ( j-- ) { if ( jQuery.nodeName( (tbody = elem.childNodes[j]), "tbody" ) && !tbody.childNodes.length ) { elem.removeChild( tbody ); } } } jQuery.merge( nodes, tmp.childNodes ); // Fix #12392 for WebKit and IE > 9 tmp.textContent = ""; // Fix #12392 for oldIE while ( tmp.firstChild ) { tmp.removeChild( tmp.firstChild ); } // Remember the top-level container for proper cleanup tmp = safe.lastChild; } } } // Fix #11356: Clear elements from fragment if ( tmp ) { safe.removeChild( tmp ); } // Reset defaultChecked for any radios and checkboxes // about to be appended to the DOM in IE 6/7 (#8060) if ( !jQuery.support.appendChecked ) { jQuery.grep( getAll( nodes, "input" ), fixDefaultChecked ); } i = 0; while ( (elem = nodes[ i++ ]) ) { // #4087 - If origin and destination elements are the same, and this is // that element, do not do anything if ( selection && jQuery.inArray( elem, selection ) !== -1 ) { continue; } contains = jQuery.contains( elem.ownerDocument, elem ); // Append to fragment tmp = getAll( safe.appendChild( elem ), "script" ); // Preserve script evaluation history if ( contains ) { setGlobalEval( tmp ); } // Capture executables if ( scripts ) { j = 0; while ( (elem = tmp[ j++ ]) ) { if ( rscriptType.test( elem.type || "" ) ) { scripts.push( elem ); } } } } tmp = null; return safe; }, cleanData: function( elems, /* internal */ acceptData ) { var elem, type, id, data, i = 0, internalKey = jQuery.expando, cache = jQuery.cache, deleteExpando = jQuery.support.deleteExpando, special = jQuery.event.special; for ( ; (elem = elems[i]) != null; i++ ) { if ( acceptData || jQuery.acceptData( elem ) ) { id = elem[ internalKey ]; data = id && cache[ id ]; if ( data ) { if ( data.events ) { for ( type in data.events ) { if ( special[ type ] ) { jQuery.event.remove( elem, type ); // This is a shortcut to avoid jQuery.event.remove's overhead } else { jQuery.removeEvent( elem, type, data.handle ); } } } // Remove cache only if it was not already removed by jQuery.event.remove if ( cache[ id ] ) { delete cache[ id ]; // IE does not allow us to delete expando properties from nodes, // nor does it have a removeAttribute function on Document nodes; // we must handle all of these cases if ( deleteExpando ) { delete elem[ internalKey ]; } else if ( typeof elem.removeAttribute !== core_strundefined ) { elem.removeAttribute( internalKey ); } else { elem[ internalKey ] = null; } core_deletedIds.push( id ); } } } } } }); var iframe, getStyles, curCSS, ralpha = /alpha\([^)]*\)/i, ropacity = /opacity\s*=\s*([^)]*)/, rposition = /^(top|right|bottom|left)$/, // swappable if display is none or starts with table except "table", "table-cell", or "table-caption" // see here for display values: https://developer.mozilla.org/en-US/docs/CSS/display rdisplayswap = /^(none|table(?!-c[ea]).+)/, rmargin = /^margin/, rnumsplit = new RegExp( "^(" + core_pnum + ")(.*)$", "i" ), rnumnonpx = new RegExp( "^(" + core_pnum + ")(?!px)[a-z%]+$", "i" ), rrelNum = new RegExp( "^([+-])=(" + core_pnum + ")", "i" ), elemdisplay = { BODY: "block" }, cssShow = { position: "absolute", visibility: "hidden", display: "block" }, cssNormalTransform = { letterSpacing: 0, fontWeight: 400 }, cssExpand = [ "Top", "Right", "Bottom", "Left" ], cssPrefixes = [ "Webkit", "O", "Moz", "ms" ]; // return a css property mapped to a potentially vendor prefixed property function vendorPropName( style, name ) { // shortcut for names that are not vendor prefixed if ( name in style ) { return name; } // check for vendor prefixed names var capName = name.charAt(0).toUpperCase() + name.slice(1), origName = name, i = cssPrefixes.length; while ( i-- ) { name = cssPrefixes[ i ] + capName; if ( name in style ) { return name; } } return origName; } function isHidden( elem, el ) { // isHidden might be called from jQuery#filter function; // in that case, element will be second argument elem = el || elem; return jQuery.css( elem, "display" ) === "none" || !jQuery.contains( elem.ownerDocument, elem ); } function showHide( elements, show ) { var display, elem, hidden, values = [], index = 0, length = elements.length; for ( ; index < length; index++ ) { elem = elements[ index ]; if ( !elem.style ) { continue; } values[ index ] = jQuery._data( elem, "olddisplay" ); display = elem.style.display; if ( show ) { // Reset the inline display of this element to learn if it is // being hidden by cascaded rules or not if ( !values[ index ] && display === "none" ) { elem.style.display = ""; } // Set elements which have been overridden with display: none // in a stylesheet to whatever the default browser style is // for such an element if ( elem.style.display === "" && isHidden( elem ) ) { values[ index ] = jQuery._data( elem, "olddisplay", css_defaultDisplay(elem.nodeName) ); } } else { if ( !values[ index ] ) { hidden = isHidden( elem ); if ( display && display !== "none" || !hidden ) { jQuery._data( elem, "olddisplay", hidden ? display : jQuery.css( elem, "display" ) ); } } } } // Set the display of most of the elements in a second loop // to avoid the constant reflow for ( index = 0; index < length; index++ ) { elem = elements[ index ]; if ( !elem.style ) { continue; } if ( !show || elem.style.display === "none" || elem.style.display === "" ) { elem.style.display = show ? values[ index ] || "" : "none"; } } return elements; } jQuery.fn.extend({ css: function( name, value ) { return jQuery.access( this, function( elem, name, value ) { var len, styles, map = {}, i = 0; if ( jQuery.isArray( name ) ) { styles = getStyles( elem ); len = name.length; for ( ; i < len; i++ ) { map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles ); } return map; } return value !== undefined ? jQuery.style( elem, name, value ) : jQuery.css( elem, name ); }, name, value, arguments.length > 1 ); }, show: function() { return showHide( this, true ); }, hide: function() { return showHide( this ); }, toggle: function( state ) { var bool = typeof state === "boolean"; return this.each(function() { if ( bool ? state : isHidden( this ) ) { jQuery( this ).show(); } else { jQuery( this ).hide(); } }); } }); jQuery.extend({ // Add in style property hooks for overriding the default // behavior of getting and setting a style property cssHooks: { opacity: { get: function( elem, computed ) { if ( computed ) { // We should always get a number back from opacity var ret = curCSS( elem, "opacity" ); return ret === "" ? "1" : ret; } } } }, // Exclude the following css properties to add px cssNumber: { "columnCount": true, "fillOpacity": true, "fontWeight": true, "lineHeight": true, "opacity": true, "orphans": true, "widows": true, "zIndex": true, "zoom": true }, // Add in properties whose names you wish to fix before // setting or getting the value cssProps: { // normalize float css property "float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat" }, // Get and set the style property on a DOM Node style: function( elem, name, value, extra ) { // Don't set styles on text and comment nodes if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) { return; } // Make sure that we're working with the right name var ret, type, hooks, origName = jQuery.camelCase( name ), style = elem.style; name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( style, origName ) ); // gets hook for the prefixed version // followed by the unprefixed version hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; // Check if we're setting a value if ( value !== undefined ) { type = typeof value; // convert relative number strings (+= or -=) to relative numbers. #7345 if ( type === "string" && (ret = rrelNum.exec( value )) ) { value = ( ret[1] + 1 ) * ret[2] + parseFloat( jQuery.css( elem, name ) ); // Fixes bug #9237 type = "number"; } // Make sure that NaN and null values aren't set. See: #7116 if ( value == null || type === "number" && isNaN( value ) ) { return; } // If a number was passed in, add 'px' to the (except for certain CSS properties) if ( type === "number" && !jQuery.cssNumber[ origName ] ) { value += "px"; } // Fixes #8908, it can be done more correctly by specifing setters in cssHooks, // but it would mean to define eight (for every problematic property) identical functions if ( !jQuery.support.clearCloneStyle && value === "" && name.indexOf("background") === 0 ) { style[ name ] = "inherit"; } // If a hook was provided, use that value, otherwise just set the specified value if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value, extra )) !== undefined ) { // Wrapped to prevent IE from throwing errors when 'invalid' values are provided // Fixes bug #5509 try { style[ name ] = value; } catch(e) {} } } else { // If a hook was provided get the non-computed value from there if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) { return ret; } // Otherwise just get the value from the style object return style[ name ]; } }, css: function( elem, name, extra, styles ) { var num, val, hooks, origName = jQuery.camelCase( name ); // Make sure that we're working with the right name name = jQuery.cssProps[ origName ] || ( jQuery.cssProps[ origName ] = vendorPropName( elem.style, origName ) ); // gets hook for the prefixed version // followed by the unprefixed version hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ]; // If a hook was provided get the computed value from there if ( hooks && "get" in hooks ) { val = hooks.get( elem, true, extra ); } // Otherwise, if a way to get the computed value exists, use that if ( val === undefined ) { val = curCSS( elem, name, styles ); } //convert "normal" to computed value if ( val === "normal" && name in cssNormalTransform ) { val = cssNormalTransform[ name ]; } // Return, converting to number if forced or a qualifier was provided and val looks numeric if ( extra === "" || extra ) { num = parseFloat( val ); return extra === true || jQuery.isNumeric( num ) ? num || 0 : val; } return val; }, // A method for quickly swapping in/out CSS properties to get correct calculations swap: function( elem, options, callback, args ) { var ret, name, old = {}; // Remember the old values, and insert the new ones for ( name in options ) { old[ name ] = elem.style[ name ]; elem.style[ name ] = options[ name ]; } ret = callback.apply( elem, args || [] ); // Revert the old values for ( name in options ) { elem.style[ name ] = old[ name ]; } return ret; } }); // NOTE: we've included the "window" in window.getComputedStyle // because jsdom on node.js will break without it. if ( window.getComputedStyle ) { getStyles = function( elem ) { return window.getComputedStyle( elem, null ); }; curCSS = function( elem, name, _computed ) { var width, minWidth, maxWidth, computed = _computed || getStyles( elem ), // getPropertyValue is only needed for .css('filter') in IE9, see #12537 ret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined, style = elem.style; if ( computed ) { if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) { ret = jQuery.style( elem, name ); } // A tribute to the "awesome hack by Dean Edwards" // Chrome < 17 and Safari 5.0 uses "computed value" instead of "used value" for margin-right // Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels // this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values if ( rnumnonpx.test( ret ) && rmargin.test( name ) ) { // Remember the original values width = style.width; minWidth = style.minWidth; maxWidth = style.maxWidth; // Put in the new values to get a computed value out style.minWidth = style.maxWidth = style.width = ret; ret = computed.width; // Revert the changed values style.width = width; style.minWidth = minWidth; style.maxWidth = maxWidth; } } return ret; }; } else if ( document.documentElement.currentStyle ) { getStyles = function( elem ) { return elem.currentStyle; }; curCSS = function( elem, name, _computed ) { var left, rs, rsLeft, computed = _computed || getStyles( elem ), ret = computed ? computed[ name ] : undefined, style = elem.style; // Avoid setting ret to empty string here // so we don't default to auto if ( ret == null && style && style[ name ] ) { ret = style[ name ]; } // From the awesome hack by Dean Edwards // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 // If we're not dealing with a regular pixel number // but a number that has a weird ending, we need to convert it to pixels // but not position css attributes, as those are proportional to the parent element instead // and we can't measure the parent instead because it might trigger a "stacking dolls" problem if ( rnumnonpx.test( ret ) && !rposition.test( name ) ) { // Remember the original values left = style.left; rs = elem.runtimeStyle; rsLeft = rs && rs.left; // Put in the new values to get a computed value out if ( rsLeft ) { rs.left = elem.currentStyle.left; } style.left = name === "fontSize" ? "1em" : ret; ret = style.pixelLeft + "px"; // Revert the changed values style.left = left; if ( rsLeft ) { rs.left = rsLeft; } } return ret === "" ? "auto" : ret; }; } function setPositiveNumber( elem, value, subtract ) { var matches = rnumsplit.exec( value ); return matches ? // Guard against undefined "subtract", e.g., when used as in cssHooks Math.max( 0, matches[ 1 ] - ( subtract || 0 ) ) + ( matches[ 2 ] || "px" ) : value; } function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) { var i = extra === ( isBorderBox ? "border" : "content" ) ? // If we already have the right measurement, avoid augmentation 4 : // Otherwise initialize for horizontal or vertical properties name === "width" ? 1 : 0, val = 0; for ( ; i < 4; i += 2 ) { // both box models exclude margin, so add it if we want it if ( extra === "margin" ) { val += jQuery.css( elem, extra + cssExpand[ i ], true, styles ); } if ( isBorderBox ) { // border-box includes padding, so remove it if we want content if ( extra === "content" ) { val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); } // at this point, extra isn't border nor margin, so remove border if ( extra !== "margin" ) { val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } } else { // at this point, extra isn't content, so add padding val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles ); // at this point, extra isn't content nor padding, so add border if ( extra !== "padding" ) { val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles ); } } } return val; } function getWidthOrHeight( elem, name, extra ) { // Start with offset property, which is equivalent to the border-box value var valueIsBorderBox = true, val = name === "width" ? elem.offsetWidth : elem.offsetHeight, styles = getStyles( elem ), isBorderBox = jQuery.support.boxSizing && jQuery.css( elem, "boxSizing", false, styles ) === "border-box"; // some non-html elements return undefined for offsetWidth, so check for null/undefined // svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285 // MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668 if ( val <= 0 || val == null ) { // Fall back to computed then uncomputed css if necessary val = curCSS( elem, name, styles ); if ( val < 0 || val == null ) { val = elem.style[ name ]; } // Computed unit is not pixels. Stop here and return. if ( rnumnonpx.test(val) ) { return val; } // we need the check for style in case a browser which returns unreliable values // for getComputedStyle silently falls back to the reliable elem.style valueIsBorderBox = isBorderBox && ( jQuery.support.boxSizingReliable || val === elem.style[ name ] ); // Normalize "", auto, and prepare for extra val = parseFloat( val ) || 0; } // use the active box-sizing model to add/subtract irrelevant styles return ( val + augmentWidthOrHeight( elem, name, extra || ( isBorderBox ? "border" : "content" ), valueIsBorderBox, styles ) ) + "px"; } // Try to determine the default display value of an element function css_defaultDisplay( nodeName ) { var doc = document, display = elemdisplay[ nodeName ]; if ( !display ) { display = actualDisplay( nodeName, doc ); // If the simple way fails, read from inside an iframe if ( display === "none" || !display ) { // Use the already-created iframe if possible iframe = ( iframe || jQuery("