From a6c1084b14a0a84d622a953292c376c0572565b9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Fri, 19 Jun 2015 21:52:03 +0200 Subject: [PATCH 01/17] Fix: Only try to delete a key in the settings that's actually there --- src/octoprint/settings.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index a024338b..eab68cf6 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -969,7 +969,7 @@ class Settings(object): del config[key] self._dirty = True elif force or (not key in config and defaults[key] != value) or (key in config and config[key] != value): - if value is None: + if value is None and key in config: del config[key] else: config[key] = value From 7c74aa4c4d0646742e79fe644c130369cc3d5783 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Fri, 19 Jun 2015 22:25:42 +0200 Subject: [PATCH 02/17] Allow ignoring of settings defaults when retrieving values --- src/octoprint/settings.py | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index eab68cf6..f4b2cf09 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -789,7 +789,7 @@ class Settings(object): #~~ getter - def get(self, path, asdict=False, config=None, defaults=None, preprocessors=None, merged=False): + def get(self, path, asdict=False, config=None, defaults=None, preprocessors=None, merged=False, incl_defaults=True): import octoprint.util as util if len(path) == 0: @@ -807,7 +807,7 @@ class Settings(object): if key in config and key in defaults: config = config[key] defaults = defaults[key] - elif key in defaults: + elif incl_defaults and key in defaults: config = {} defaults = defaults[key] else: @@ -832,7 +832,7 @@ class Settings(object): value = config[key] if merged and key in defaults: value = util.dict_merge(defaults[key], value) - elif key in defaults: + elif incl_defaults and key in defaults: value = defaults[key] else: value = None @@ -853,8 +853,8 @@ class Settings(object): else: return results - def getInt(self, path, config=None, defaults=None, preprocessors=None): - value = self.get(path, config=config, defaults=defaults, preprocessors=preprocessors) + def getInt(self, path, config=None, defaults=None, preprocessors=None, incl_defaults=True): + value = self.get(path, config=config, defaults=defaults, preprocessors=preprocessors, incl_defaults=incl_defaults) if value is None: return None @@ -864,8 +864,8 @@ class Settings(object): self._logger.warn("Could not convert %r to a valid integer when getting option %r" % (value, path)) return None - def getFloat(self, path, config=None, defaults=None, preprocessors=None): - value = self.get(path, config=config, defaults=defaults, preprocessors=preprocessors) + def getFloat(self, path, config=None, defaults=None, preprocessors=None, incl_defaults=True): + value = self.get(path, config=config, defaults=defaults, preprocessors=preprocessors, incl_defaults=incl_defaults) if value is None: return None @@ -875,8 +875,8 @@ class Settings(object): self._logger.warn("Could not convert %r to a valid integer when getting option %r" % (value, path)) return None - def getBoolean(self, path, config=None, defaults=None, preprocessors=None): - value = self.get(path, config=config, defaults=defaults, preprocessors=preprocessors) + def getBoolean(self, path, config=None, defaults=None, preprocessors=None, incl_defaults=True): + value = self.get(path, config=config, defaults=defaults, preprocessors=preprocessors, incl_defaults=incl_defaults) if value is None: return None if isinstance(value, bool): From 269f18a22f1866ec295520ee2992d17a3c6317f2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Fri, 19 Jun 2015 22:26:22 +0200 Subject: [PATCH 03/17] Software Update Fix: Only migrate config settings that are actually in the config --- .../plugins/softwareupdate/__init__.py | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/src/octoprint/plugins/softwareupdate/__init__.py b/src/octoprint/plugins/softwareupdate/__init__.py index 0d2c96af..4d91dd83 100644 --- a/src/octoprint/plugins/softwareupdate/__init__.py +++ b/src/octoprint/plugins/softwareupdate/__init__.py @@ -100,15 +100,18 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, # even the stuff that shouldn't be persisted but always provided by the hook - let's # clean up + configured_checks = self._settings.get(["checks"], incl_defaults=False) + if configured_checks is None: + configured_checks = dict() + # take care of the octoprint entry - configured_checks = self._settings.get(["checks"], merged=True) - octoprint_check = dict(configured_checks["octoprint"]) - if "type" in octoprint_check and not octoprint_check["type"] == "github_commit": - deletables=["current"] - else: - deletables=[] - octoprint_check = self._clean_settings_check("octoprint", octoprint_check, self.get_settings_defaults()["checks"]["octoprint"], delete=deletables, save=False) - configured_checks["octoprint"] = octoprint_check + if "octoprint" in configured_checks: + octoprint_check = dict(configured_checks["octoprint"]) + if "type" in octoprint_check and not octoprint_check["type"] == "github_commit": + deletables=["current"] + else: + deletables=[] + octoprint_check = self._clean_settings_check("octoprint", configured_checks, self.get_settings_defaults()["checks"]["octoprint"], delete=deletables, save=False) # and the hooks update_check_hooks = self._plugin_manager.get_hooks("octoprint.plugin.softwareupdate.check_config") From 0e60b26048a295f15de52edf3ecde375907e46e7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Fri, 19 Jun 2015 22:31:05 +0200 Subject: [PATCH 04/17] Config migration must happen after all plugin implementations are initialized Introduced new callback for settings plugin to hook into the point after the settings have been migrated since the initialize method is not suitable for that as it might be called before other plugin implementations reachable through hooks are initialized. --- src/octoprint/plugin/types.py | 15 ++++++++++++--- src/octoprint/server/__init__.py | 11 +++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/src/octoprint/plugin/types.py b/src/octoprint/plugin/types.py index d285173c..578e117a 100644 --- a/src/octoprint/plugin/types.py +++ b/src/octoprint/plugin/types.py @@ -853,9 +853,9 @@ class SettingsPlugin(OctoPrintPlugin): Your plugin's implementation should take care of migrating any data by utilizing self._settings. OctoPrint will take care of saving any changes to disk by calling `self._settings.save()` after returning from this method. - This method will be called before your plugin's :func:`initialize` method, but with all injections already - having taken place. You can therefore depend on the configuration having been migrated by the time :func:`initialize` - is called. + This method will be called before your plugin's :func:`on_settings_initialized` method, with all injections already + having taken place. You can therefore depend on the configuration having been migrated by the time + :func:`on_settings_initialized` is called. Arguments: target (int): The settings format version the plugin requires, this should always be the same value as @@ -865,6 +865,15 @@ class SettingsPlugin(OctoPrintPlugin): """ pass + def on_settings_initialized(self): + """ + Called after the settings have been initialized and - if necessary - also been migrated through a call to + func:`on_settings_migrate`. + + This method will always be called after the `initialize` method. + """ + pass + class EventHandlerPlugin(OctoPrintPlugin): """ diff --git a/src/octoprint/server/__init__.py b/src/octoprint/server/__init__.py index d94ba4a4..811baaf6 100644 --- a/src/octoprint/server/__init__.py +++ b/src/octoprint/server/__init__.py @@ -210,7 +210,7 @@ class Server(): set_preprocessors=set_preprocessors) return dict(settings=plugin_settings) - def settings_plugin_pre_init(name, implementation): + def settings_plugin_config_migration(name, implementation): if not isinstance(implementation, octoprint.plugin.SettingsPlugin): return @@ -224,10 +224,17 @@ class Server(): implementation._settings.set_int(["_config_version"], settings_version) implementation._settings.save() + implementation.on_settings_initialized() + pluginManager.implementation_inject_factories=[octoprint_plugin_inject_factory, settings_plugin_inject_factory] - pluginManager.implementation_pre_inits=[settings_plugin_pre_init] pluginManager.initialize_implementations() + settingsPlugins = pluginManager.get_implementations(octoprint.plugin.SettingsPlugin) + for implementation in settingsPlugins: + settings_plugin_config_migration(implementation._identifier, implementation) + + pluginManager.implementation_post_inits=[settings_plugin_config_migration] + pluginManager.log_all_plugins() # initialize file manager and register it for changes in the registered plugins From c6cb4305943b6a7103b470037df5ccfa31018938 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Fri, 19 Jun 2015 22:33:26 +0200 Subject: [PATCH 05/17] Throttle gcode analysis a bit for low prio entries Give the Pi's CPU a bit air to breathe... --- src/octoprint/filemanager/analysis.py | 37 +++++++++++++++++++------- src/octoprint/util/gcodeInterpreter.py | 11 +++++--- 2 files changed, 35 insertions(+), 13 deletions(-) diff --git a/src/octoprint/filemanager/analysis.py b/src/octoprint/filemanager/analysis.py index ca7edabb..5fa6883f 100644 --- a/src/octoprint/filemanager/analysis.py +++ b/src/octoprint/filemanager/analysis.py @@ -11,6 +11,7 @@ import Queue as queue import os import threading import collections +import time from octoprint.events import Events, eventManager @@ -100,6 +101,9 @@ class AbstractAnalysisQueue(object): .. automethod:: _do_abort """ + LOW_PRIO = 0 + HIGH_PRIO = 100 + def __init__(self, finished_callback): self._logger = logging.getLogger(__name__) @@ -133,10 +137,10 @@ class AbstractAnalysisQueue(object): if high_priority: self._logger.debug("Adding entry {entry} to analysis queue with high priority".format(entry=entry)) - prio = 0 + prio = self.__class__.HIGH_PRIO else: self._logger.debug("Adding entry {entry} to analysis queue with low priority".format(entry=entry)) - prio = 100 + prio = self.__class__.LOW_PRIO self._queue.put((prio, entry)) @@ -173,13 +177,15 @@ class AbstractAnalysisQueue(object): self._active.wait() try: - self._analyze(entry) + self._analyze(entry, high_priority=(priority == self.__class__.HIGH_PRIO)) self._queue.task_done() except gcodeInterpreter.AnalysisAborted: aborted = entry self._logger.debug("Running analysis of entry {entry} aborted".format(**locals())) + else: + time.sleep(1.0) - def _analyze(self, entry): + def _analyze(self, entry, high_priority=False): path = entry.absolute_path if path is None or not os.path.exists(path): return @@ -190,18 +196,24 @@ class AbstractAnalysisQueue(object): try: self._logger.debug("Starting analysis of {entry}".format(**locals())) eventManager().fire(Events.METADATA_ANALYSIS_STARTED, {"file": entry.path, "type": entry.type}) - result = self._do_analysis() + try: + result = self._do_analysis(high_priority=high_priority) + except TypeError: + result = self._do_analysis() self._logger.debug("Analysis of entry {entry} finished, notifying callback".format(**locals())) self._finished_callback(self._current, result) finally: self._current = None self._current_progress = None - def _do_analysis(self): + def _do_analysis(self, high_priority=False): """ Performs the actual analysis of the current entry which can be accessed via ``self._current``. Needs to be overridden by sub classes. + Arguments: + high_priority (bool): Whether the current entry has high priority or not. + Returns: object: The result of the analysis which will be forwarded to the ``finished_callback`` provided during construction. @@ -235,10 +247,17 @@ class GcodeAnalysisQueue(AbstractAnalysisQueue): * The extruded volume in cm³ """ - def _do_analysis(self): + def _do_analysis(self, high_priority=False): try: + def throttle(): + time.sleep(0.01) + + throttle_callback = throttle + if high_priority: + throttle_callback = None + self._gcode = gcodeInterpreter.gcode() - self._gcode.load(self._current.absolute_path, self._current.printer_profile) + self._gcode.load(self._current.absolute_path, self._current.printer_profile, throttle=throttle_callback) result = dict() if self._gcode.totalMoveTimeMinute: @@ -256,4 +275,4 @@ class GcodeAnalysisQueue(AbstractAnalysisQueue): def _do_abort(self): if self._gcode: - self._gcode.abort() \ No newline at end of file + self._gcode.abort() diff --git a/src/octoprint/util/gcodeInterpreter.py b/src/octoprint/util/gcodeInterpreter.py index 4261abef..b0b69b66 100644 --- a/src/octoprint/util/gcodeInterpreter.py +++ b/src/octoprint/util/gcodeInterpreter.py @@ -30,18 +30,18 @@ class gcode(object): self.progressCallback = None self._abort = False self._filamentDiameter = 0 - - def load(self, filename, printer_profile): + + def load(self, filename, printer_profile, throttle=None): if os.path.isfile(filename): self.filename = filename self._fileSize = os.stat(filename).st_size with open(filename, "r") as f: - self._load(f, printer_profile) + self._load(f, printer_profile, throttle=throttle) def abort(self): self._abort = True - def _load(self, gcodeFile, printer_profile): + def _load(self, gcodeFile, printer_profile, throttle=None): filePos = 0 readBytes = 0 pos = [0.0, 0.0, 0.0] @@ -237,6 +237,9 @@ class gcode(object): for i in range(len(totalExtrusion), currentExtruder + 1): totalExtrusion.append(0.0) + if throttle is not None: + throttle() + if self.progressCallback is not None: self.progressCallback(100.0) From 9e12a8353b59b99d2082a0dd180b1018086f1091 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Fri, 19 Jun 2015 23:46:17 +0200 Subject: [PATCH 06/17] Small update for API docs, more necessary --- docs/api/datamodel.rst | 85 +++++++++++++++++++++++------------------- 1 file changed, 46 insertions(+), 39 deletions(-) diff --git a/docs/api/datamodel.rst b/docs/api/datamodel.rst index 7511332d..bdc2c804 100644 --- a/docs/api/datamodel.rst +++ b/docs/api/datamodel.rst @@ -216,6 +216,10 @@ Progress information File related ============ +.. todo:: + + Update to reflect enhanced data now available. + .. _sec-api-datamodel-files-file: File information @@ -233,10 +237,51 @@ File information - 1 - String - The name of the file + * - ``type`` + - 1 + - String + - Type of file. ``model`` or ``machinecode``. Or ``folder`` if it's a folder, in which case the ``children`` + node will be populated + +Additional properties depend on ``type``. For a ``type`` value of ``folder``, see "Folders". For any other value +see "Files". + +Folders +''''''' + +.. list-table:: + :widths: 15 5 10 30 + :header-rows: 1 + + * - Name + - Multiplicity + - Type + - Description + * - ``children`` + - 0..* + - Array of :ref:`File information items ` + - Contained children for entries of type ``folder`` + +Files +''''' + +.. list-table:: + :widths: 15 5 10 30 + :header-rows: 1 + + * - Name + - Multiplicity + - Type + - Description + * - ``hash`` + - 1 + - String + - MD5 hash of the file * - ``size`` - 0..1 - Number - - The size of the file in bytes. Only available for ``local`` files. + - The size of the file in bytes. Only available for ``local`` files or ``sdcard`` files if the printer + supports file sizes for sd card files. * - ``date`` - 0..1 - Unix timestamp @@ -254,10 +299,6 @@ File information - 0..1 - :ref:`GCODE analysis information ` - Information from the analysis of the GCODE file, if available. Left out in abridged version. - * - ``prints`` - - 0..1 - - :ref:`Print history ` - - Information regarding prints of this file, if available. Left out in abridged version. .. _sec-api-datamodel-files-gcodeanalysis: @@ -290,40 +331,6 @@ GCODE analysis information - The volume of filament used, in cm³ -.. _sec-api-datamodel-files-prints: - -Print history -------------- - -.. list-table:: - :widths: 15 5 10 30 - :header-rows: 1 - - * - Name - - Multiplicity - - Type - - Description - * - ``failure`` - - 1 - - Number - - The number of failed prints on record for the file - * - ``success`` - - 1 - - Number - - The number of successful prints on record for the file - * - ``last`` - - 0..1 - - Object - - Information regarding the last print on record for the file - * - ``last.date`` - - 1 - - Unix timestamp - - Timestamp when this file was printed last - * - ``last.success`` - - 1 - - Boolean - - Whether the last print on record was a success (``true``) or not (``false``) - .. _sec-api-datamodel-files-ref: References From 2f5c3570dd59d753327f2914b4a4086923dc5199 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Sat, 20 Jun 2015 00:01:59 +0200 Subject: [PATCH 07/17] More verbose logging for analyzer --- src/octoprint/filemanager/analysis.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/octoprint/filemanager/analysis.py b/src/octoprint/filemanager/analysis.py index 5fa6883f..cd4ca7fd 100644 --- a/src/octoprint/filemanager/analysis.py +++ b/src/octoprint/filemanager/analysis.py @@ -194,7 +194,7 @@ class AbstractAnalysisQueue(object): self._current_progress = 0 try: - self._logger.debug("Starting analysis of {entry}".format(**locals())) + self._logger.info("Starting analysis of {entry}".format(**locals())) eventManager().fire(Events.METADATA_ANALYSIS_STARTED, {"file": entry.path, "type": entry.type}) try: result = self._do_analysis(high_priority=high_priority) From 61bd803942a970c1c84ffdf60e04324c4c2f088e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Sat, 20 Jun 2015 00:56:26 +0200 Subject: [PATCH 08/17] Fix: Properly report if a plugin simply could not be found after installation Also more resilience towards odd version numbers that get mangled by python's package management (1.2.3a0 => 1.2.3a) --- .../plugins/pluginmanager/__init__.py | 21 ++++++++++++++++++- .../pluginmanager/static/js/pluginmanager.js | 15 +++++++++++-- 2 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/octoprint/plugins/pluginmanager/__init__.py b/src/octoprint/plugins/pluginmanager/__init__.py index e7bde03c..3b254b33 100644 --- a/src/octoprint/plugins/pluginmanager/__init__.py +++ b/src/octoprint/plugins/pluginmanager/__init__.py @@ -241,12 +241,31 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, package_name = plugin.origin.package_name package_version = plugin.origin.package_version versioned_package = "{package_name}-{package_version}".format(**locals()) + if package_name in installed or versioned_package in installed: + # exact match, we are done here new_plugin_key = key new_plugin = plugin break + + else: + # it might still be a version that got stripped by python's package resources, e.g. 1.4.5a0 => 1.4.5a + found = False + + for inst in installed: + if inst.startswith(versioned_package): + found = True + break + + if found: + new_plugin_key = key + new_plugin = plugin + break else: - return make_response("Could not find plugin that was installed", 500) + self._logger.warn("The plugin was installed successfully, but couldn't be found afterwards to initialize properly during runtime. Please restart OctoPrint.") + result = dict(result=True, url=url, needs_restart=True, needs_refresh=True, was_reinstalled=False, plugin="unknown") + self._send_result_notification("install", result) + return jsonify(result) self._plugin_manager.mark_plugin(new_plugin_key, uninstalled=False) self._plugin_manager.reload_plugins() diff --git a/src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js b/src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js index c8178d20..f7508851 100644 --- a/src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js +++ b/src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js @@ -511,11 +511,22 @@ $(function() { var name = "Unknown"; if (action == "install") { + var unknown = false; + if (data.hasOwnProperty("plugin")) { - name = data.plugin.name; + if (data.plugin == "unknown") { + unknown = true; + } else { + name = data.plugin.name; + } } - if (data.was_reinstalled) { + if (unknown) { + titleSuccess = _.sprintf(gettext("Plugin installed")); + textSuccess = gettext("A plugin was installed successfully, however it was impossible to detect which one. Please Restart OctoPrint to make sure everything will be registered properly"); + textRestart = textSuccess; + textReload = textSuccess; + } else if (data.was_reinstalled) { titleSuccess = _.sprintf(gettext("Plugin \"%(name)s\" reinstalled"), {name: name}); textSuccess = gettext("The plugin was reinstalled successfully"); textRestart = gettext("The plugin was reinstalled successfully, however a restart of OctoPrint is needed for that to take effect."); From 1c99bccef9b59cabd72d5da6eaa684998cf8ee4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Sat, 20 Jun 2015 01:05:18 +0200 Subject: [PATCH 09/17] Updated german translation --- .../translations/de/LC_MESSAGES/messages.mo | Bin 45934 -> 46718 bytes .../translations/de/LC_MESSAGES/messages.po | 338 ++++++++++-------- translations/de/LC_MESSAGES/messages.mo | Bin 45934 -> 46718 bytes translations/de/LC_MESSAGES/messages.po | 338 ++++++++++-------- translations/messages.pot | 330 +++++++++-------- 5 files changed, 544 insertions(+), 462 deletions(-) diff --git a/src/octoprint/translations/de/LC_MESSAGES/messages.mo b/src/octoprint/translations/de/LC_MESSAGES/messages.mo index 6684edf9834b61019c1be2412298784b6cf493a8..166c3216da3471ac95d887eaf0729053a79f0e09 100644 GIT binary patch delta 9128 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 LLwRfG_LzSGGDB+) delta 8398 zcmYM&d32A*9>?*KT|z=4VhNH6i6E$@M8uMWNQu3%)m~dmwQ8r2eF>`erBabfYiTV_ zX;I2m+M{j>_u`%|=+SB^RjrcK#eILwoO}C6Uo-Q}GxMGA%sjuefB)oj=X)RTn{dCi zhJSo~jETku6;%8GKdCXs#8Yj9h7>HNV-x$yQKp}vJI~a=hUEQyq?HGc39^tHp5!7Q*{hMPDW?&R{MFuv{ zqSo>pCgDu1if^M9aQt!IGv*r#>i7`bVOe@t!fdR9gE0oDq9)pi%0wXs;~rGMLl}z} zusq&JjpJM2n3`Ax6Yxn?po1}z`OOpx!MGeX&<0oEhkn#QLQQ-emBQ0l9lt;gbQ2q) zPXmI-C$J)>qEelM%GA@S_nt*%bPjrv6c)RNH&6i-VHh68+V}--#e3KX*EF;%yNL?y z5h~?D$#&pSR6P=bV!zY3RW&;-{}6aR#Y{1H~hNM_ZG4X_Tj zMg=_7`8+C+DX5h%Kn1=OxeR6v*1~mI4iBKt#tDytBD;**%PY`6FYDkYEQeM zQaK1U&=k~!^HBrlp#t85>URLOu(POuE}<5371iJS*>&)H!Uj?f)iDCK!f01dKn>g& zmD*0IiMyb#V^7qCBT@Z4)cfmD0c=Gra0j-<c`VMZGu` z75QtZm2W`}{0?dh-*@fDP!s82>lTPY8TG%h#v?uNRXHXxO3s_O_p#t?`nc*0Q3OEimUJ_Phe$$?UChCO^ za1iQ4vJ{i>U95zcu{++z)|l4H-uLOKEt`)+a5?tFJD7o4DK>M=kBx>s>qTZj1TF@fQ#8pVL%w^P>2}`x(My8Vg z3N*ygpe<;MN?i(Sz%Hl>d!Vl4GpK~gq$Z+ib`q2G`m%!FrNAkWnvC$p!FDyyRasH=IS@F26ex7 zwqG3T{T8V4I$#ufohc{-L!Hl~&cYPbDV>c9Y&~jkccM~y5H--psKa>*v++wT!n*B^ zNyIbw65dB;WON7nGdvHg>;C6cP^1T)mrw)VM@<-MJo&_rK6J>~tLtKYn1$C#V3<;7t4ymBPLmcEAy+)K5ZXVijsD zH)1lriOS%4?1?`j$Hk;(+Q6q{0P~wX3R=-h)C8OL0Joze-{U-n-Km$L_CBto9jFCr zWgSr&=;qpUQ41J_>OUE0VIJ1QpibmJfWi|Lbf{Y4;{h;Riw^7%x6t$r6EPG9BIP0S_)Cv_?dKUTT5SX4cXrl3``W(~%`KZXZqbB?ao8oa) z|NE$W9MstcPz@(juZu5WKI(b-Yl8k3t}YeW*wex(=VCQh6B_ z*e|F|Ji=g%=wb)1i5jROD$ow7m1Uv&^*}xaW*};u&8UEOVlVU#Qb?vyzN<}5Dr$wj zoc%F``cPDW<4}QksEJo&Ioyt#ct7gU9>vCZ7IkJ!4u5z;V;qI+u#WEk-xNmB5Z{fj z9WKFmyo+=&ksNuox5m*}hzS_d!`7SPSn8Wm?SVaQdm~i)2GlL{Wx2<39zMj(-inDQ zX?=|8Ps4H~yXFV%h|Qk1shiJXW3O)%YKt0T zeQb;M@Hq^_wdjvU*cx}CSC_&K3OenfgX|fIKn;|HX_$(ga0Y7P6Ic`fg_ZGF)FBHV zY`+`XsD6`BXJ?_SuR;aL9M(4YQo;A3=MG4=b|Re zbI&&-J7x-8z0lQnxcV+sCf>v5cmj1uOHrAN^@j6XPoX7hpx03o=c8WShT8l6sJ;6b zwN)ok0iQ-?@I3nB*QkEiP?@;l+V7$d_1|3m0csxa4+XcYQlx6OuXvq8&Dsh0t~?Ys1<*N3hX5M;^$Zu&tfG0h&pSJu)6Ml_yqex zGU`+|!&;c-9E~y57o%3P1J&;grsGxAVU2&$zL$ zoEt?`cZm>+R|3j zYnT*Bup4#iKSizV1}dPRQ3F0iWh!vG-I8jkKyEzHNdB+6qTR?x`O;ZnMe2(J~P8kyaRQ*-$zY! z5cS?AtcKsAR;<6>wPh7hb>``wc;*aEz-@ zaP?{EL;Gxu#(DS^ds%?zsn23AeM!5|whPF|INHp13OYQWqawYA%E%p8513Tnttb-3w zfz_CAQ`j68NE_54%|_jpfvD7vLv6_{RKKOJz5#V6-kMMT_2N4;Xitt}A3TLEF?xaR z*ax-p0jT~HP+Kq;btsphA8tk+)~%=v>_si)6e^JOs8fFxd*g!z)k#rBJr zjT(3y)<+LD@h()q!>Chy4Yd`w&=-A|*bD|@0QE4`IF(ViArW=W)3Fu~#CY^(QqaI# zu{M5+TKO&1K!0Np`sdjfLot|ova=QHc?MR;uBi9NptfQr`r}emzm=%1*@SGhXZBL~ zhK7Kp_B4Noqp624v!{LrYT%8oz8|%M3(j9rpWuk)c8?PLSQ~m|&y(`WeSdRM7Sb%?``scrDQ@|*cW5* zAnF!}+1j(V{VM&Mx7S(u1=z5?~B-HH|PC~AVU zs6f9*UANn){)ubsI4P*D$yr1G$)@Q?1AWYor~ziJwF9g{P4GG@zzua z^_zeZxCraw>!^VKfx7pXQ2pDJEe+zHM)UYTu4Y%x`MHVF${=!93WB z>JYqz|LuYcuyPrG3kvMSuWsf42hsjL4#hrPkpcJt_QHra?T^?fY)btIYC*qX7A9>Y zJ2(*^|M&k93LR(&DYAd1=HNl<0dLtCk6}0JrPv=kziqc-8y+CAQdIli9d@rncG@k7 zL~UIR>TI<{ZAlKs;vn>NnrBnckIgDu5{dd_vy+SaVdM@e%vJmzD3e@S| ziaI0jV_z)$j-7ZI)}lTY70?FkiF@B6|II1*zH29Jg}TSRTzv%U!}AJifPB;;I)c@) z1RLRP)ETI;+paJZ1E}{w1vn7naXg0NY7D``-JUJ%b`6K{G!IVUuefrLop8ZkJHbZO z%8z3po<>b@-qo*TW9mP-dX0VdgH{I>P#UshCKL63C(ku>a}7PP0uTCO3XaA4ScFxu z1n1#R)Ij6kvja^)y*CxLvL&v4E&5T3(K|pvdwdA>;xYH&4Ej(%=js\n" "Language-Team: German (http://www.transifex.com/projects/p/octoprint/" "language/de/)\n" @@ -55,7 +55,7 @@ msgid "Identifier" msgstr "ID" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:22 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:66 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:75 #: src/octoprint/templates/dialogs/settings/logs.jinja2:6 #: src/octoprint/templates/sidebar/files_header.jinja2:6 #: src/octoprint/templates/tabs/timelapse.jinja2:45 @@ -65,7 +65,7 @@ msgstr "aufsteigend" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:22 #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:28 #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:82 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:6 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:14 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:4 #: src/octoprint/templates/dialogs/settings/logs.jinja2:6 #: src/octoprint/templates/dialogs/settings/logs.jinja2:12 @@ -78,7 +78,7 @@ msgid "Name" msgstr "Name" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:29 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:7 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:15 msgid "Actions" msgstr "Aktionen" @@ -104,7 +104,7 @@ msgid "Profile ini file" msgstr "Profil-INI-Datei" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:68 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:132 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:141 #: src/octoprint/templates/dialogs/settings/appearance.jinja2:83 msgid "Browse..." msgstr "Durchsuchen..." @@ -135,105 +135,120 @@ msgstr "Abbrechen" msgid "Confirm" msgstr "Bestätigen" -#: src/octoprint/plugins/pluginmanager/__init__.py:78 +#: src/octoprint/plugins/pluginmanager/__init__.py:79 msgid "Plugin Manager" msgstr "Pluginmanager" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:110 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:234 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:272 msgid "Installing plugin..." msgstr "Installiere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:110 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 msgid "Installing plugin from uploaded archive..." msgstr "Installiere Plugin von hochgeladenem Archiv..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:122 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:194 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:259 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:285 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:490 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:520 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:537 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:554 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:144 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:220 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:297 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:327 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:571 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:588 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:605 msgid "Something went wrong" msgstr "Etwas ist schief gegangen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:123 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:195 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:260 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:286 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:145 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:221 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:298 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:328 msgid "Please consult octoprint.log for details" msgstr "Bitte konsultiere octoprint.log für Details" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:236 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:274 #, python-format msgid "Installing plugin \"%(name)s\" from %(url)s..." msgstr "Installiere Plugin \"%(name)s\" von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:238 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 #, python-format msgid "Installing plugin from %(url)s..." msgstr "Installiere Plugin von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:241 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:279 msgid "Reinstalling plugin..." msgstr "Reinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:242 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:280 #, python-format msgid "Reinstalling plugin \"%(name)s\" from %(url)s..." msgstr "Reinstalliere Plugin \"%(name)s\" von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 msgid "Uninstalling plugin..." msgstr "Deinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 #, python-format msgid "Uninstalling plugin \"%(name)s\"" msgstr "Deinstalliere Plugin \"%(name)s\"" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 msgid "Reinstall" msgstr "Reinstallieren" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:313 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:121 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:137 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:130 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:146 msgid "Install" msgstr "Installieren" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 msgid "Incompatible" msgstr "Inkompatibel" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:331 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:371 msgid "Reload now" msgstr "Jetzt neu laden" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:400 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:440 msgid "Done!" msgstr "Fertig!" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 msgid "Enable Plugin" msgstr "Plugin enablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 msgid "Disable Plugin" msgstr "Plugin disablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:479 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:525 +#, python-format +msgid "Plugin installed" +msgstr "Plugin installiert" + +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:526 +msgid "" +"A plugin was installed successfully, however it was impossible to detect " +"which one. Please Restart OctoPrint to make sure everything will be " +"registered properly" +msgstr "" +"Ein Plugin wurde erfolgreich installiert, es war aber unmöglich zu " +"detektieren, welches. Bitte starte OctoPrint neu um sicherzustellen, dass " +"alles ordnungsgemäß registriert wird." + +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:530 #, python-format msgid "Plugin \"%(name)s\" reinstalled" msgstr "Plugin \"%(name)s\" reinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:480 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:531 msgid "The plugin was reinstalled successfully" msgstr "Das Plugin wurde erfolgreich reinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:481 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:532 msgid "" "The plugin was reinstalled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -241,7 +256,7 @@ msgstr "" "Das Plugin wurde erfolgreich reinstalliert, es ist aber ein Neustart von " "OctoPrint notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:482 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 msgid "" "The plugin was reinstalled successfully, however a reload of the page is " "needed for that to take effect." @@ -249,16 +264,16 @@ msgstr "" "Das Plugin wurde erfolgreich reinstalliert, es ist aber ein Neuladen der " "Seite notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:484 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 #, python-format msgid "Plugin \"%(name)s\" installed" msgstr "Plugin \"%(name)s\" installiert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:485 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:536 msgid "The plugin was installed successfully" msgstr "Das Plugin wurde erfolgreich installiert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:486 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:537 msgid "" "The plugin was installed successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -266,7 +281,7 @@ msgstr "" "Das Plugin wurde erfolgreich installiert, es ist jedoch ein Neustart von " "OctoPrint notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:487 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:538 msgid "" "The plugin was installed successfully, however a reload of the page is " "needed for that to take effect." @@ -274,19 +289,19 @@ msgstr "" "Das Plugin wurde erfolgreich installiert, es ist jedoch ein Neuladen der " "Seite notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:498 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:549 #, python-format msgid "Reinstalling the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" "Reinstallation des Plugins von URL \"%(url)s\" fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:500 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:551 #, python-format msgid "Installing the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" "Installation des Plugins von URL \"%(url)s\" fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:504 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:555 #, python-format msgid "" "Reinstalling the plugin from URL \"%(url)s\" failed, please see the log for " @@ -295,7 +310,7 @@ msgstr "" "Reinstallation des Plugins von URL \"%(url)s\" fehlgeschlagen, bitte " "konsultiere das Log für Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:506 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:557 #, python-format msgid "" "Installing the plugin from URL \"%(url)s\" failed, please see the log for " @@ -304,16 +319,16 @@ msgstr "" "Installation des Plugins von URL \"%(url)s\" fehlgeschlagen, bitte " "konsultiere das Log für Details" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:515 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:566 #, python-format msgid "Plugin \"%(name)s\" uninstalled" msgstr "Plugin \"%(name)s\" deinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:516 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:567 msgid "The plugin was uninstalled successfully" msgstr "Das Plugin wurde erfolgreich deinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:517 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:568 msgid "" "The plugin was uninstalled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -321,7 +336,7 @@ msgstr "" "Das Plugin wurde erfolgreich deinstalliert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:518 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:569 msgid "" "The plugin was uninstalled successfully, however a reload of the page is " "needed for that to take effect." @@ -329,27 +344,27 @@ msgstr "" "Das Plugin wurde erfolgreich deinstalliert, es ist jedoch ein Neuladen der " "Seite notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:522 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:573 #, python-format msgid "Uninstalling the plugin failed: %(reason)s" msgstr "Deinstallation des Plugins fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:524 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:575 msgid "Uninstalling the plugin failed, please see the log for details." msgstr "" "Deinstallation des Plugins fehlgeschlagen, bitte konsultiere das Log für " "Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:532 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:583 #, python-format msgid "Plugin \"%(name)s\" enabled" msgstr "Plugin \"%(name)s\" aktiviert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:584 msgid "The plugin was enabled successfully." msgstr "Das Plugin wurde erfolgreich aktiviert." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:534 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:585 msgid "" "The plugin was enabled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -357,7 +372,7 @@ msgstr "" "Das Plugin wurde erfolgreich aktiviert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:586 msgid "" "The plugin was enabled successfully, however a reload of the page is needed " "for that to take effect." @@ -365,28 +380,28 @@ msgstr "" "Das Plugin wurde erfolgreich aktiviert, es ist jedoch ein Neuladen der Seite " "notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:539 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:556 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:590 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:607 #, python-format msgid "Toggling the plugin failed: %(reason)s" msgstr "Togglen des Plugins fehlgeschalgen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:558 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:592 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:609 msgid "Toggling the plugin failed, please see the log for details." msgstr "" "Togglen des Plugins fehlgeschlagen, bitte konsultiere das Log für Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:549 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:600 #, python-format msgid "Plugin \"%(name)s\" disabled" msgstr "Plugin \"%(name)s\" deaktiviert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:550 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:601 msgid "The plugin was disabled successfully." msgstr "Das Plugin wurde erfolgreich deaktiviert." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:551 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:602 msgid "" "The plugin was disabled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -394,7 +409,7 @@ msgstr "" "Das Plugin wurde erfolgreich deaktiviert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:552 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:603 msgid "" "The plugin was disabled successfully, however a reload of the page is needed " "for that to take effect." @@ -402,53 +417,61 @@ msgstr "" "Das Plugin wurde erfolgreich deaktiviert, es ist jedoch ein Neuladen der " "Seite notwendig." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:1 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:3 +msgid "" +"Take note that all plugin management functionality is disabled while your " +"printer is printing." +msgstr "" +"Bitte beachte das jegliche Pluginmanagementfunktionen während des Druckens " +"deaktiviert sind." + +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:9 msgid "Installed Plugins" msgstr "Installierte Plugins" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:13 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:21 msgid "Bundled" msgstr "Gebundled" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:16 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:90 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:24 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:99 #: src/octoprint/templates/index.jinja2:118 msgid "Homepage" msgstr "Homepage" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:23 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:31 msgid "Uninstall Plugin" msgstr "Plugin deinstallieren" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:40 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:48 msgid "Get More..." msgstr "Mehr..." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:51 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:143 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:59 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:167 #: src/octoprint/templates/dialogs/settings/appearance.jinja2:96 msgid "Close" msgstr "Schließen" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:58 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:66 msgid "Install new Plugins..." msgstr "Installation neuer Plugins..." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:62 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:71 #, python-format msgid "" "... from the Plugin Repository" msgstr "... vom Plugin Repository" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:66 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:75 msgid "Sort by title" msgstr "Nach Titel sortieren" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:67 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:76 msgid "Sort by publication date" msgstr "Nach Veröffentlichungsdatum sortieren" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:67 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:76 #: src/octoprint/templates/dialogs/settings/logs.jinja2:6 #: src/octoprint/templates/sidebar/files_header.jinja2:7 #: src/octoprint/templates/sidebar/files_header.jinja2:8 @@ -456,52 +479,52 @@ msgstr "Nach Veröffentlichungsdatum sortieren" msgid "descending" msgstr "absteigend" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:69 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:78 msgid "Only show uninstalled plugins" msgstr "Nur uninstallierte Plugins anzeigen" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:70 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:79 msgid "Only show compatible plugins" msgstr "Nur kompatible Plugins anzeigen" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:72 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:81 msgid "Refresh list from repository" msgstr "Liste vom Repository neu laden" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:78 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:87 #: src/octoprint/templates/sidebar/files.jinja2:2 msgid "Search..." msgstr "Suchen..." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:89 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:98 msgid "Details" msgstr "Details" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:106 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:115 msgid "Sadly the repository is currently not available" msgstr "Das Repository ist leider zur Zeit nicht verfügbar" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:109 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:118 msgid "Is your OctoPrint installation connected to the internet?" msgstr "Ist Deine OctoPrint Installation mit dem Internet verbunden?" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:114 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:123 msgid "... from URL" msgstr "... von URL" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:119 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:128 msgid "Enter URL..." msgstr "URL eingeben..." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:123 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:132 msgid "This does not look like a valid \"http://\" or \"https://\" URL." msgstr "Das sieht nicht wie eine valide \"http://\" oder \"https://\" URL aus." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:126 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:135 msgid "... from an uploaded archive" msgstr "... von einem hochgeladenen Archiv" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:139 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:148 msgid "" "This does not look like a valid plugin archive. Valid plugin archives should " "be either zip files or tarballs and have the extension \".zip\", \".tar.gz" @@ -511,7 +534,19 @@ msgstr "" "sollten entweder ZIP-Dateien oder Tarballs sein und die Dateiextension \".zip" "\", \".tar.gz\", \".tgz\" oder \".tar\" haben" -#: src/octoprint/plugins/softwareupdate/__init__.py:412 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:152 +#: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:44 +#: src/octoprint/templates/tabs/terminal.jinja2:25 +msgid "Advanced options" +msgstr "Erweiterte Optionen" + +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:158 +msgid "" +"Use --process-dependency-links with pip install" +msgstr "" +"Übergebe --process-dependency-links an pip install" + +#: src/octoprint/plugins/softwareupdate/__init__.py:486 #: src/octoprint/server/views.py:146 #: src/octoprint/static/js/app/viewmodels/appearance.js:11 #: src/octoprint/static/js/app/viewmodels/appearance.js:13 @@ -520,11 +555,11 @@ msgstr "" msgid "OctoPrint" msgstr "OctoPrint" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:122 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:114 msgid "There are updates available for the following components:" msgstr "Es gibt Aktualisierungen für die folgenden Komponenten:" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:136 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:128 msgid "" "Those components marked with can be updated " "directly." @@ -532,15 +567,15 @@ msgstr "" "Die mit markierten Komponenten können direkt " "aktualisiert werden." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:139 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:131 msgid "Update Available" msgstr "Aktualisierung verfügbar" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:151 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:143 msgid "Ignore" msgstr "Ignorieren" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:155 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:147 msgid "" "You can make this message display again via \"Settings\" > \"SoftwareUpdate" "\" > \"Check for update now\"" @@ -548,27 +583,27 @@ msgstr "" "Du kannst diese Nachricht erneut anzeigen lassen mittels \"Einstellungen\" > " "\"Software Update\" > \"Jetzt nach Aktualisierungen suchen\"" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:159 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:151 msgid "Update now" msgstr "Jetzt aktualisieren" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:175 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:168 msgid "Everything is up-to-date" msgstr "Alles ist auf dem neusten Stand" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:221 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:233 msgid "Updating..." msgstr "Aktualisiere..." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:222 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:234 msgid "Now updating, please wait." msgstr "Aktualisiere gerade, bitte warten." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:241 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:253 msgid "Update not started!" msgstr "Aktualisierung nicht gestartet!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:242 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:254 msgid "" "The update could not be started. Is it already active? Please consult the " "log for details." @@ -576,11 +611,11 @@ msgstr "" "Die Aktualisierung konnte nicht gestartet werden. Läuft bereits eine? Bitte " "konsultiere das Log für Details." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:264 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:276 msgid "Can't update while printing" msgstr "Aktualisierung nicht möglich während gedruckt wird" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:265 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:277 msgid "" "A print job is currently in progress. Updating will be prevented until it is " "done." @@ -588,17 +623,17 @@ msgstr "" "Ein Druckjob ist zur Zeit aktiv. Aktualisierungen werden unterbunden bis er " "fertig ist." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:269 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:281 msgid "This will update your OctoPrint installation and restart the server." msgstr "" "Das wird Deine OctoPrint Installation aktualisieren und den Server neu " "starten." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:293 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:305 msgid "Restart successful!" msgstr "Neustart erfolgreich!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:294 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:306 msgid "" "The server was restarted successfully. The page will now reload " "automatically." @@ -606,28 +641,28 @@ msgstr "" "Der Server wurde erfolgreich neu gestartet. Die Seite wird nun automatisch " "neu geladen." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:326 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:338 #, python-format msgid "Now updating %(name)s to %(version)s" msgstr "Aktualisiere %(name)s auf %(version)s" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:334 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:346 msgid "Update successful, restarting!" msgstr "Aktualisierung erfolgreich, starte neu!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:335 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:347 msgid "The update finished successfully and the server will now be restarted." msgstr "" "Die Aktualisierung wurde erfolgreich durchgeführt und der Server wird jetzt " "neu gestartet." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:346 -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:388 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:358 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:400 msgid "Restart failed" msgstr "Neustart fehlgeschlagen" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:347 -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:389 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:359 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:401 msgid "" "The server apparently did not restart by itself, you'll have to do it " "manually. Please consult the log file on what went wrong." @@ -635,23 +670,23 @@ msgstr "" "Der Server hat anscheinend nicht von selbst neu gstartet, Du wirst das " "manuell tun müssen. Bitte konsultiere das Logfile." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:363 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:375 msgid "The update finished successfully, please restart OctoPrint now." msgstr "" "Die Aktualisierung wurde erfolgreich abgeschlossen, bitte starte OctoPrint " "jetzt neu." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:365 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:377 msgid "The update finished successfully, please reboot the server now." msgstr "" "Die Aktualisierung wurde erfolgreich abgeschlossen, bitte reboote den Server " "jetzt." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:369 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:381 msgid "Update successful, restart required!" msgstr "Aktualisierung erfolgreich, Neustart notwendig!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:382 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:394 msgid "" "Restarting OctoPrint failed, please restart it manually. You might also want " "to consult the log file on what went wrong here." @@ -660,7 +695,7 @@ msgstr "" "Du solltest das Logfile konsultieren, um herauszufinden, was hier schief " "gelaufen ist." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:384 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:396 msgid "" "Rebooting the server failed, please reboot it manually. You might also want " "to consult the log file on what went wrong here." @@ -669,19 +704,19 @@ msgstr "" "auch das Logfile konsultieren, um herauszufinden, was hier gerade schief " "gelaufen ist." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:402 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:414 msgid "Update successful!" msgstr "Aktualisierung erfolgreich!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:403 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:415 msgid "The update finished successfully." msgstr "Die Aktualisierung wurde erfolgreich abgeschlossen." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:415 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:427 msgid "Update failed!" msgstr "Aktualisierung fehlgeschlagen!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:416 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:428 msgid "" "The update did not finish successfully. Please consult the log for details." msgstr "" @@ -713,11 +748,6 @@ msgstr "Verfügbar:" msgid "Check for update now" msgstr "Jetzt nach Aktualisierungen suchen" -#: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:44 -#: src/octoprint/templates/tabs/terminal.jinja2:25 -msgid "Advanced options" -msgstr "Erweiterte Optionen" - #: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:46 msgid "Force check for update (overrides cache used for update checks)" msgstr "" @@ -855,7 +885,7 @@ msgstr "Interface" #: src/octoprint/static/js/app/dataupdater.js:61 #: src/octoprint/static/js/app/dataupdater.js:95 -#: src/octoprint/static/js/app/helpers.js:423 +#: src/octoprint/static/js/app/helpers.js:436 #: src/octoprint/templates/overlays/offline.jinja2:6 msgid "Server is offline" msgstr "Der Server ist offline" @@ -955,17 +985,17 @@ msgstr "Streaming abgeschlossen" msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" msgstr "%(local)s nach %(remote)s gestreamt, dauerte %(time).2f Sekunden" -#: src/octoprint/static/js/app/helpers.js:344 +#: src/octoprint/static/js/app/helpers.js:357 #, python-format msgid "%(hour)02d:%(minute)02d:%(second)02d" msgstr "%(hour)02d:%(minute)02d:%(second)02d" -#: src/octoprint/static/js/app/helpers.js:364 +#: src/octoprint/static/js/app/helpers.js:377 msgid "YYYY-MM-DD HH:mm" msgstr "DD.MM.YYYY HH:mm" -#: src/octoprint/static/js/app/helpers.js:382 -#: src/octoprint/static/js/app/helpers.js:387 +#: src/octoprint/static/js/app/helpers.js:395 +#: src/octoprint/static/js/app/helpers.js:400 msgid "off" msgstr "Aus" @@ -1187,44 +1217,44 @@ msgid "Error" msgstr "Fehler" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:96 -#: src/octoprint/static/js/app/viewmodels/settings.js:52 -#: src/octoprint/static/js/app/viewmodels/settings.js:82 +#: src/octoprint/static/js/app/viewmodels/settings.js:53 +#: src/octoprint/static/js/app/viewmodels/settings.js:83 msgid "default" msgstr "Standard" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:97 -#: src/octoprint/static/js/app/viewmodels/settings.js:53 -#: src/octoprint/static/js/app/viewmodels/settings.js:66 +#: src/octoprint/static/js/app/viewmodels/settings.js:54 +#: src/octoprint/static/js/app/viewmodels/settings.js:67 msgid "red" msgstr "Rot" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:98 -#: src/octoprint/static/js/app/viewmodels/settings.js:54 -#: src/octoprint/static/js/app/viewmodels/settings.js:68 +#: src/octoprint/static/js/app/viewmodels/settings.js:55 +#: src/octoprint/static/js/app/viewmodels/settings.js:69 msgid "orange" msgstr "Orange" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:99 -#: src/octoprint/static/js/app/viewmodels/settings.js:55 -#: src/octoprint/static/js/app/viewmodels/settings.js:70 +#: src/octoprint/static/js/app/viewmodels/settings.js:56 +#: src/octoprint/static/js/app/viewmodels/settings.js:71 msgid "yellow" msgstr "Gelb" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:100 -#: src/octoprint/static/js/app/viewmodels/settings.js:56 -#: src/octoprint/static/js/app/viewmodels/settings.js:72 +#: src/octoprint/static/js/app/viewmodels/settings.js:57 +#: src/octoprint/static/js/app/viewmodels/settings.js:73 msgid "green" msgstr "Grün" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:101 -#: src/octoprint/static/js/app/viewmodels/settings.js:57 -#: src/octoprint/static/js/app/viewmodels/settings.js:74 +#: src/octoprint/static/js/app/viewmodels/settings.js:58 +#: src/octoprint/static/js/app/viewmodels/settings.js:75 msgid "blue" msgstr "Blau" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:102 -#: src/octoprint/static/js/app/viewmodels/settings.js:59 -#: src/octoprint/static/js/app/viewmodels/settings.js:78 +#: src/octoprint/static/js/app/viewmodels/settings.js:60 +#: src/octoprint/static/js/app/viewmodels/settings.js:79 msgid "black" msgstr "Schwarz" @@ -1333,17 +1363,17 @@ msgstr "Sek" msgid "This will restart the print job from the beginning." msgstr "Der Druckjob wird zurückgesetzt und von vorne begonnen." -#: src/octoprint/static/js/app/viewmodels/settings.js:58 -#: src/octoprint/static/js/app/viewmodels/settings.js:76 +#: src/octoprint/static/js/app/viewmodels/settings.js:59 +#: src/octoprint/static/js/app/viewmodels/settings.js:77 msgid "violet" msgstr "Violett" -#: src/octoprint/static/js/app/viewmodels/settings.js:60 -#: src/octoprint/static/js/app/viewmodels/settings.js:80 +#: src/octoprint/static/js/app/viewmodels/settings.js:61 +#: src/octoprint/static/js/app/viewmodels/settings.js:81 msgid "white" msgstr "weiß" -#: src/octoprint/static/js/app/viewmodels/settings.js:88 +#: src/octoprint/static/js/app/viewmodels/settings.js:89 msgid "Autodetect from browser" msgstr "Automatisch vom Browser erkennen" diff --git a/translations/de/LC_MESSAGES/messages.mo b/translations/de/LC_MESSAGES/messages.mo index 6684edf9834b61019c1be2412298784b6cf493a8..166c3216da3471ac95d887eaf0729053a79f0e09 100644 GIT binary patch delta 9128 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 LLwRfG_LzSGGDB+) delta 8398 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\n" "Language-Team: German (http://www.transifex.com/projects/p/octoprint/" "language/de/)\n" @@ -55,7 +55,7 @@ msgid "Identifier" msgstr "ID" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:22 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:66 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:75 #: src/octoprint/templates/dialogs/settings/logs.jinja2:6 #: src/octoprint/templates/sidebar/files_header.jinja2:6 #: src/octoprint/templates/tabs/timelapse.jinja2:45 @@ -65,7 +65,7 @@ msgstr "aufsteigend" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:22 #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:28 #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:82 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:6 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:14 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:4 #: src/octoprint/templates/dialogs/settings/logs.jinja2:6 #: src/octoprint/templates/dialogs/settings/logs.jinja2:12 @@ -78,7 +78,7 @@ msgid "Name" msgstr "Name" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:29 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:7 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:15 msgid "Actions" msgstr "Aktionen" @@ -104,7 +104,7 @@ msgid "Profile ini file" msgstr "Profil-INI-Datei" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:68 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:132 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:141 #: src/octoprint/templates/dialogs/settings/appearance.jinja2:83 msgid "Browse..." msgstr "Durchsuchen..." @@ -135,105 +135,120 @@ msgstr "Abbrechen" msgid "Confirm" msgstr "Bestätigen" -#: src/octoprint/plugins/pluginmanager/__init__.py:78 +#: src/octoprint/plugins/pluginmanager/__init__.py:79 msgid "Plugin Manager" msgstr "Pluginmanager" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:110 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:234 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:272 msgid "Installing plugin..." msgstr "Installiere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:110 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 msgid "Installing plugin from uploaded archive..." msgstr "Installiere Plugin von hochgeladenem Archiv..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:122 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:194 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:259 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:285 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:490 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:520 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:537 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:554 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:144 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:220 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:297 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:327 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:571 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:588 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:605 msgid "Something went wrong" msgstr "Etwas ist schief gegangen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:123 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:195 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:260 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:286 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:145 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:221 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:298 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:328 msgid "Please consult octoprint.log for details" msgstr "Bitte konsultiere octoprint.log für Details" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:236 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:274 #, python-format msgid "Installing plugin \"%(name)s\" from %(url)s..." msgstr "Installiere Plugin \"%(name)s\" von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:238 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 #, python-format msgid "Installing plugin from %(url)s..." msgstr "Installiere Plugin von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:241 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:279 msgid "Reinstalling plugin..." msgstr "Reinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:242 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:280 #, python-format msgid "Reinstalling plugin \"%(name)s\" from %(url)s..." msgstr "Reinstalliere Plugin \"%(name)s\" von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 msgid "Uninstalling plugin..." msgstr "Deinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 #, python-format msgid "Uninstalling plugin \"%(name)s\"" msgstr "Deinstalliere Plugin \"%(name)s\"" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 msgid "Reinstall" msgstr "Reinstallieren" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:313 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:121 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:137 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:130 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:146 msgid "Install" msgstr "Installieren" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 msgid "Incompatible" msgstr "Inkompatibel" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:331 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:371 msgid "Reload now" msgstr "Jetzt neu laden" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:400 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:440 msgid "Done!" msgstr "Fertig!" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 msgid "Enable Plugin" msgstr "Plugin enablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 msgid "Disable Plugin" msgstr "Plugin disablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:479 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:525 +#, python-format +msgid "Plugin installed" +msgstr "Plugin installiert" + +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:526 +msgid "" +"A plugin was installed successfully, however it was impossible to detect " +"which one. Please Restart OctoPrint to make sure everything will be " +"registered properly" +msgstr "" +"Ein Plugin wurde erfolgreich installiert, es war aber unmöglich zu " +"detektieren, welches. Bitte starte OctoPrint neu um sicherzustellen, dass " +"alles ordnungsgemäß registriert wird." + +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:530 #, python-format msgid "Plugin \"%(name)s\" reinstalled" msgstr "Plugin \"%(name)s\" reinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:480 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:531 msgid "The plugin was reinstalled successfully" msgstr "Das Plugin wurde erfolgreich reinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:481 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:532 msgid "" "The plugin was reinstalled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -241,7 +256,7 @@ msgstr "" "Das Plugin wurde erfolgreich reinstalliert, es ist aber ein Neustart von " "OctoPrint notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:482 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 msgid "" "The plugin was reinstalled successfully, however a reload of the page is " "needed for that to take effect." @@ -249,16 +264,16 @@ msgstr "" "Das Plugin wurde erfolgreich reinstalliert, es ist aber ein Neuladen der " "Seite notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:484 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 #, python-format msgid "Plugin \"%(name)s\" installed" msgstr "Plugin \"%(name)s\" installiert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:485 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:536 msgid "The plugin was installed successfully" msgstr "Das Plugin wurde erfolgreich installiert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:486 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:537 msgid "" "The plugin was installed successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -266,7 +281,7 @@ msgstr "" "Das Plugin wurde erfolgreich installiert, es ist jedoch ein Neustart von " "OctoPrint notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:487 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:538 msgid "" "The plugin was installed successfully, however a reload of the page is " "needed for that to take effect." @@ -274,19 +289,19 @@ msgstr "" "Das Plugin wurde erfolgreich installiert, es ist jedoch ein Neuladen der " "Seite notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:498 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:549 #, python-format msgid "Reinstalling the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" "Reinstallation des Plugins von URL \"%(url)s\" fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:500 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:551 #, python-format msgid "Installing the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" "Installation des Plugins von URL \"%(url)s\" fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:504 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:555 #, python-format msgid "" "Reinstalling the plugin from URL \"%(url)s\" failed, please see the log for " @@ -295,7 +310,7 @@ msgstr "" "Reinstallation des Plugins von URL \"%(url)s\" fehlgeschlagen, bitte " "konsultiere das Log für Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:506 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:557 #, python-format msgid "" "Installing the plugin from URL \"%(url)s\" failed, please see the log for " @@ -304,16 +319,16 @@ msgstr "" "Installation des Plugins von URL \"%(url)s\" fehlgeschlagen, bitte " "konsultiere das Log für Details" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:515 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:566 #, python-format msgid "Plugin \"%(name)s\" uninstalled" msgstr "Plugin \"%(name)s\" deinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:516 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:567 msgid "The plugin was uninstalled successfully" msgstr "Das Plugin wurde erfolgreich deinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:517 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:568 msgid "" "The plugin was uninstalled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -321,7 +336,7 @@ msgstr "" "Das Plugin wurde erfolgreich deinstalliert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:518 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:569 msgid "" "The plugin was uninstalled successfully, however a reload of the page is " "needed for that to take effect." @@ -329,27 +344,27 @@ msgstr "" "Das Plugin wurde erfolgreich deinstalliert, es ist jedoch ein Neuladen der " "Seite notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:522 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:573 #, python-format msgid "Uninstalling the plugin failed: %(reason)s" msgstr "Deinstallation des Plugins fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:524 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:575 msgid "Uninstalling the plugin failed, please see the log for details." msgstr "" "Deinstallation des Plugins fehlgeschlagen, bitte konsultiere das Log für " "Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:532 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:583 #, python-format msgid "Plugin \"%(name)s\" enabled" msgstr "Plugin \"%(name)s\" aktiviert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:584 msgid "The plugin was enabled successfully." msgstr "Das Plugin wurde erfolgreich aktiviert." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:534 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:585 msgid "" "The plugin was enabled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -357,7 +372,7 @@ msgstr "" "Das Plugin wurde erfolgreich aktiviert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:586 msgid "" "The plugin was enabled successfully, however a reload of the page is needed " "for that to take effect." @@ -365,28 +380,28 @@ msgstr "" "Das Plugin wurde erfolgreich aktiviert, es ist jedoch ein Neuladen der Seite " "notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:539 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:556 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:590 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:607 #, python-format msgid "Toggling the plugin failed: %(reason)s" msgstr "Togglen des Plugins fehlgeschalgen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:558 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:592 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:609 msgid "Toggling the plugin failed, please see the log for details." msgstr "" "Togglen des Plugins fehlgeschlagen, bitte konsultiere das Log für Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:549 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:600 #, python-format msgid "Plugin \"%(name)s\" disabled" msgstr "Plugin \"%(name)s\" deaktiviert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:550 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:601 msgid "The plugin was disabled successfully." msgstr "Das Plugin wurde erfolgreich deaktiviert." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:551 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:602 msgid "" "The plugin was disabled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -394,7 +409,7 @@ msgstr "" "Das Plugin wurde erfolgreich deaktiviert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:552 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:603 msgid "" "The plugin was disabled successfully, however a reload of the page is needed " "for that to take effect." @@ -402,53 +417,61 @@ msgstr "" "Das Plugin wurde erfolgreich deaktiviert, es ist jedoch ein Neuladen der " "Seite notwendig." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:1 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:3 +msgid "" +"Take note that all plugin management functionality is disabled while your " +"printer is printing." +msgstr "" +"Bitte beachte das jegliche Pluginmanagementfunktionen während des Druckens " +"deaktiviert sind." + +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:9 msgid "Installed Plugins" msgstr "Installierte Plugins" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:13 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:21 msgid "Bundled" msgstr "Gebundled" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:16 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:90 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:24 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:99 #: src/octoprint/templates/index.jinja2:118 msgid "Homepage" msgstr "Homepage" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:23 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:31 msgid "Uninstall Plugin" msgstr "Plugin deinstallieren" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:40 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:48 msgid "Get More..." msgstr "Mehr..." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:51 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:143 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:59 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:167 #: src/octoprint/templates/dialogs/settings/appearance.jinja2:96 msgid "Close" msgstr "Schließen" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:58 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:66 msgid "Install new Plugins..." msgstr "Installation neuer Plugins..." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:62 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:71 #, python-format msgid "" "... from the Plugin Repository" msgstr "... vom Plugin Repository" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:66 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:75 msgid "Sort by title" msgstr "Nach Titel sortieren" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:67 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:76 msgid "Sort by publication date" msgstr "Nach Veröffentlichungsdatum sortieren" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:67 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:76 #: src/octoprint/templates/dialogs/settings/logs.jinja2:6 #: src/octoprint/templates/sidebar/files_header.jinja2:7 #: src/octoprint/templates/sidebar/files_header.jinja2:8 @@ -456,52 +479,52 @@ msgstr "Nach Veröffentlichungsdatum sortieren" msgid "descending" msgstr "absteigend" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:69 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:78 msgid "Only show uninstalled plugins" msgstr "Nur uninstallierte Plugins anzeigen" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:70 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:79 msgid "Only show compatible plugins" msgstr "Nur kompatible Plugins anzeigen" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:72 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:81 msgid "Refresh list from repository" msgstr "Liste vom Repository neu laden" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:78 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:87 #: src/octoprint/templates/sidebar/files.jinja2:2 msgid "Search..." msgstr "Suchen..." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:89 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:98 msgid "Details" msgstr "Details" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:106 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:115 msgid "Sadly the repository is currently not available" msgstr "Das Repository ist leider zur Zeit nicht verfügbar" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:109 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:118 msgid "Is your OctoPrint installation connected to the internet?" msgstr "Ist Deine OctoPrint Installation mit dem Internet verbunden?" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:114 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:123 msgid "... from URL" msgstr "... von URL" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:119 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:128 msgid "Enter URL..." msgstr "URL eingeben..." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:123 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:132 msgid "This does not look like a valid \"http://\" or \"https://\" URL." msgstr "Das sieht nicht wie eine valide \"http://\" oder \"https://\" URL aus." -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:126 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:135 msgid "... from an uploaded archive" msgstr "... von einem hochgeladenen Archiv" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:139 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:148 msgid "" "This does not look like a valid plugin archive. Valid plugin archives should " "be either zip files or tarballs and have the extension \".zip\", \".tar.gz" @@ -511,7 +534,19 @@ msgstr "" "sollten entweder ZIP-Dateien oder Tarballs sein und die Dateiextension \".zip" "\", \".tar.gz\", \".tgz\" oder \".tar\" haben" -#: src/octoprint/plugins/softwareupdate/__init__.py:412 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:152 +#: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:44 +#: src/octoprint/templates/tabs/terminal.jinja2:25 +msgid "Advanced options" +msgstr "Erweiterte Optionen" + +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:158 +msgid "" +"Use --process-dependency-links with pip install" +msgstr "" +"Übergebe --process-dependency-links an pip install" + +#: src/octoprint/plugins/softwareupdate/__init__.py:486 #: src/octoprint/server/views.py:146 #: src/octoprint/static/js/app/viewmodels/appearance.js:11 #: src/octoprint/static/js/app/viewmodels/appearance.js:13 @@ -520,11 +555,11 @@ msgstr "" msgid "OctoPrint" msgstr "OctoPrint" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:122 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:114 msgid "There are updates available for the following components:" msgstr "Es gibt Aktualisierungen für die folgenden Komponenten:" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:136 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:128 msgid "" "Those components marked with can be updated " "directly." @@ -532,15 +567,15 @@ msgstr "" "Die mit markierten Komponenten können direkt " "aktualisiert werden." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:139 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:131 msgid "Update Available" msgstr "Aktualisierung verfügbar" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:151 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:143 msgid "Ignore" msgstr "Ignorieren" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:155 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:147 msgid "" "You can make this message display again via \"Settings\" > \"SoftwareUpdate" "\" > \"Check for update now\"" @@ -548,27 +583,27 @@ msgstr "" "Du kannst diese Nachricht erneut anzeigen lassen mittels \"Einstellungen\" > " "\"Software Update\" > \"Jetzt nach Aktualisierungen suchen\"" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:159 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:151 msgid "Update now" msgstr "Jetzt aktualisieren" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:175 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:168 msgid "Everything is up-to-date" msgstr "Alles ist auf dem neusten Stand" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:221 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:233 msgid "Updating..." msgstr "Aktualisiere..." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:222 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:234 msgid "Now updating, please wait." msgstr "Aktualisiere gerade, bitte warten." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:241 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:253 msgid "Update not started!" msgstr "Aktualisierung nicht gestartet!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:242 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:254 msgid "" "The update could not be started. Is it already active? Please consult the " "log for details." @@ -576,11 +611,11 @@ msgstr "" "Die Aktualisierung konnte nicht gestartet werden. Läuft bereits eine? Bitte " "konsultiere das Log für Details." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:264 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:276 msgid "Can't update while printing" msgstr "Aktualisierung nicht möglich während gedruckt wird" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:265 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:277 msgid "" "A print job is currently in progress. Updating will be prevented until it is " "done." @@ -588,17 +623,17 @@ msgstr "" "Ein Druckjob ist zur Zeit aktiv. Aktualisierungen werden unterbunden bis er " "fertig ist." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:269 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:281 msgid "This will update your OctoPrint installation and restart the server." msgstr "" "Das wird Deine OctoPrint Installation aktualisieren und den Server neu " "starten." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:293 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:305 msgid "Restart successful!" msgstr "Neustart erfolgreich!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:294 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:306 msgid "" "The server was restarted successfully. The page will now reload " "automatically." @@ -606,28 +641,28 @@ msgstr "" "Der Server wurde erfolgreich neu gestartet. Die Seite wird nun automatisch " "neu geladen." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:326 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:338 #, python-format msgid "Now updating %(name)s to %(version)s" msgstr "Aktualisiere %(name)s auf %(version)s" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:334 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:346 msgid "Update successful, restarting!" msgstr "Aktualisierung erfolgreich, starte neu!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:335 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:347 msgid "The update finished successfully and the server will now be restarted." msgstr "" "Die Aktualisierung wurde erfolgreich durchgeführt und der Server wird jetzt " "neu gestartet." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:346 -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:388 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:358 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:400 msgid "Restart failed" msgstr "Neustart fehlgeschlagen" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:347 -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:389 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:359 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:401 msgid "" "The server apparently did not restart by itself, you'll have to do it " "manually. Please consult the log file on what went wrong." @@ -635,23 +670,23 @@ msgstr "" "Der Server hat anscheinend nicht von selbst neu gstartet, Du wirst das " "manuell tun müssen. Bitte konsultiere das Logfile." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:363 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:375 msgid "The update finished successfully, please restart OctoPrint now." msgstr "" "Die Aktualisierung wurde erfolgreich abgeschlossen, bitte starte OctoPrint " "jetzt neu." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:365 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:377 msgid "The update finished successfully, please reboot the server now." msgstr "" "Die Aktualisierung wurde erfolgreich abgeschlossen, bitte reboote den Server " "jetzt." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:369 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:381 msgid "Update successful, restart required!" msgstr "Aktualisierung erfolgreich, Neustart notwendig!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:382 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:394 msgid "" "Restarting OctoPrint failed, please restart it manually. You might also want " "to consult the log file on what went wrong here." @@ -660,7 +695,7 @@ msgstr "" "Du solltest das Logfile konsultieren, um herauszufinden, was hier schief " "gelaufen ist." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:384 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:396 msgid "" "Rebooting the server failed, please reboot it manually. You might also want " "to consult the log file on what went wrong here." @@ -669,19 +704,19 @@ msgstr "" "auch das Logfile konsultieren, um herauszufinden, was hier gerade schief " "gelaufen ist." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:402 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:414 msgid "Update successful!" msgstr "Aktualisierung erfolgreich!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:403 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:415 msgid "The update finished successfully." msgstr "Die Aktualisierung wurde erfolgreich abgeschlossen." -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:415 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:427 msgid "Update failed!" msgstr "Aktualisierung fehlgeschlagen!" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:416 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:428 msgid "" "The update did not finish successfully. Please consult the log for details." msgstr "" @@ -713,11 +748,6 @@ msgstr "Verfügbar:" msgid "Check for update now" msgstr "Jetzt nach Aktualisierungen suchen" -#: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:44 -#: src/octoprint/templates/tabs/terminal.jinja2:25 -msgid "Advanced options" -msgstr "Erweiterte Optionen" - #: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:46 msgid "Force check for update (overrides cache used for update checks)" msgstr "" @@ -855,7 +885,7 @@ msgstr "Interface" #: src/octoprint/static/js/app/dataupdater.js:61 #: src/octoprint/static/js/app/dataupdater.js:95 -#: src/octoprint/static/js/app/helpers.js:423 +#: src/octoprint/static/js/app/helpers.js:436 #: src/octoprint/templates/overlays/offline.jinja2:6 msgid "Server is offline" msgstr "Der Server ist offline" @@ -955,17 +985,17 @@ msgstr "Streaming abgeschlossen" msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" msgstr "%(local)s nach %(remote)s gestreamt, dauerte %(time).2f Sekunden" -#: src/octoprint/static/js/app/helpers.js:344 +#: src/octoprint/static/js/app/helpers.js:357 #, python-format msgid "%(hour)02d:%(minute)02d:%(second)02d" msgstr "%(hour)02d:%(minute)02d:%(second)02d" -#: src/octoprint/static/js/app/helpers.js:364 +#: src/octoprint/static/js/app/helpers.js:377 msgid "YYYY-MM-DD HH:mm" msgstr "DD.MM.YYYY HH:mm" -#: src/octoprint/static/js/app/helpers.js:382 -#: src/octoprint/static/js/app/helpers.js:387 +#: src/octoprint/static/js/app/helpers.js:395 +#: src/octoprint/static/js/app/helpers.js:400 msgid "off" msgstr "Aus" @@ -1187,44 +1217,44 @@ msgid "Error" msgstr "Fehler" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:96 -#: src/octoprint/static/js/app/viewmodels/settings.js:52 -#: src/octoprint/static/js/app/viewmodels/settings.js:82 +#: src/octoprint/static/js/app/viewmodels/settings.js:53 +#: src/octoprint/static/js/app/viewmodels/settings.js:83 msgid "default" msgstr "Standard" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:97 -#: src/octoprint/static/js/app/viewmodels/settings.js:53 -#: src/octoprint/static/js/app/viewmodels/settings.js:66 +#: src/octoprint/static/js/app/viewmodels/settings.js:54 +#: src/octoprint/static/js/app/viewmodels/settings.js:67 msgid "red" msgstr "Rot" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:98 -#: src/octoprint/static/js/app/viewmodels/settings.js:54 -#: src/octoprint/static/js/app/viewmodels/settings.js:68 +#: src/octoprint/static/js/app/viewmodels/settings.js:55 +#: src/octoprint/static/js/app/viewmodels/settings.js:69 msgid "orange" msgstr "Orange" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:99 -#: src/octoprint/static/js/app/viewmodels/settings.js:55 -#: src/octoprint/static/js/app/viewmodels/settings.js:70 +#: src/octoprint/static/js/app/viewmodels/settings.js:56 +#: src/octoprint/static/js/app/viewmodels/settings.js:71 msgid "yellow" msgstr "Gelb" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:100 -#: src/octoprint/static/js/app/viewmodels/settings.js:56 -#: src/octoprint/static/js/app/viewmodels/settings.js:72 +#: src/octoprint/static/js/app/viewmodels/settings.js:57 +#: src/octoprint/static/js/app/viewmodels/settings.js:73 msgid "green" msgstr "Grün" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:101 -#: src/octoprint/static/js/app/viewmodels/settings.js:57 -#: src/octoprint/static/js/app/viewmodels/settings.js:74 +#: src/octoprint/static/js/app/viewmodels/settings.js:58 +#: src/octoprint/static/js/app/viewmodels/settings.js:75 msgid "blue" msgstr "Blau" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:102 -#: src/octoprint/static/js/app/viewmodels/settings.js:59 -#: src/octoprint/static/js/app/viewmodels/settings.js:78 +#: src/octoprint/static/js/app/viewmodels/settings.js:60 +#: src/octoprint/static/js/app/viewmodels/settings.js:79 msgid "black" msgstr "Schwarz" @@ -1333,17 +1363,17 @@ msgstr "Sek" msgid "This will restart the print job from the beginning." msgstr "Der Druckjob wird zurückgesetzt und von vorne begonnen." -#: src/octoprint/static/js/app/viewmodels/settings.js:58 -#: src/octoprint/static/js/app/viewmodels/settings.js:76 +#: src/octoprint/static/js/app/viewmodels/settings.js:59 +#: src/octoprint/static/js/app/viewmodels/settings.js:77 msgid "violet" msgstr "Violett" -#: src/octoprint/static/js/app/viewmodels/settings.js:60 -#: src/octoprint/static/js/app/viewmodels/settings.js:80 +#: src/octoprint/static/js/app/viewmodels/settings.js:61 +#: src/octoprint/static/js/app/viewmodels/settings.js:81 msgid "white" msgstr "weiß" -#: src/octoprint/static/js/app/viewmodels/settings.js:88 +#: src/octoprint/static/js/app/viewmodels/settings.js:89 msgid "Autodetect from browser" msgstr "Automatisch vom Browser erkennen" diff --git a/translations/messages.pot b/translations/messages.pot index 1305bef0..1a110bfa 100644 --- a/translations/messages.pot +++ b/translations/messages.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OctoPrint 1.2.0-dev-921-g8696ce9-dirty\n" +"Project-Id-Version: OctoPrint 1.2.0-rc1-34-g61bd803\n" "Report-Msgid-Bugs-To: i18n@octoprint.org\n" -"POT-Creation-Date: 2015-06-09 14:48+0200\n" +"POT-Creation-Date: 2015-06-20 01:02+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -48,7 +48,7 @@ msgid "Identifier" msgstr "" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:22 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:66 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:75 #: src/octoprint/templates/dialogs/settings/logs.jinja2:6 #: src/octoprint/templates/sidebar/files_header.jinja2:6 #: src/octoprint/templates/tabs/timelapse.jinja2:45 @@ -58,7 +58,7 @@ msgstr "" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:22 #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:28 #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:82 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:6 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:14 #: src/octoprint/templates/dialogs/settings/accesscontrol.jinja2:4 #: src/octoprint/templates/dialogs/settings/logs.jinja2:6 #: src/octoprint/templates/dialogs/settings/logs.jinja2:12 @@ -71,7 +71,7 @@ msgid "Name" msgstr "" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:29 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:7 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:15 msgid "Actions" msgstr "" @@ -97,7 +97,7 @@ msgid "Profile ini file" msgstr "" #: src/octoprint/plugins/cura/templates/cura_settings.jinja2:68 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:132 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:141 #: src/octoprint/templates/dialogs/settings/appearance.jinja2:83 msgid "Browse..." msgstr "" @@ -128,290 +128,307 @@ msgstr "" msgid "Confirm" msgstr "" -#: src/octoprint/plugins/pluginmanager/__init__.py:78 +#: src/octoprint/plugins/pluginmanager/__init__.py:79 msgid "Plugin Manager" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:110 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:234 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:272 msgid "Installing plugin..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:110 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 msgid "Installing plugin from uploaded archive..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:122 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:194 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:259 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:285 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:490 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:520 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:537 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:554 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:144 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:220 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:297 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:327 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:571 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:588 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:605 msgid "Something went wrong" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:123 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:195 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:260 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:286 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:145 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:221 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:298 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:328 msgid "Please consult octoprint.log for details" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:236 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:274 #, python-format msgid "Installing plugin \"%(name)s\" from %(url)s..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:238 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 #, python-format msgid "Installing plugin from %(url)s..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:241 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:279 msgid "Reinstalling plugin..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:242 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:280 #, python-format msgid "Reinstalling plugin \"%(name)s\" from %(url)s..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 msgid "Uninstalling plugin..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 #, python-format msgid "Uninstalling plugin \"%(name)s\"" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 msgid "Reinstall" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:313 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:121 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:137 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:130 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:146 msgid "Install" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 msgid "Incompatible" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:331 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:371 msgid "Reload now" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:400 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:440 msgid "Done!" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 msgid "Enable Plugin" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 msgid "Disable Plugin" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:479 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:525 +msgid "Plugin installed" +msgstr "" + +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:526 +msgid "" +"A plugin was installed successfully, however it was impossible to detect " +"which one. Please Restart OctoPrint to make sure everything will be " +"registered properly" +msgstr "" + +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:530 #, python-format msgid "Plugin \"%(name)s\" reinstalled" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:480 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:531 msgid "The plugin was reinstalled successfully" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:481 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:532 msgid "" "The plugin was reinstalled successfully, however a restart of OctoPrint " "is needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:482 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 msgid "" "The plugin was reinstalled successfully, however a reload of the page is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:484 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 #, python-format msgid "Plugin \"%(name)s\" installed" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:485 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:536 msgid "The plugin was installed successfully" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:486 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:537 msgid "" "The plugin was installed successfully, however a restart of OctoPrint is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:487 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:538 msgid "" "The plugin was installed successfully, however a reload of the page is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:498 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:549 #, python-format msgid "Reinstalling the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:500 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:551 #, python-format msgid "Installing the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:504 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:555 #, python-format msgid "" "Reinstalling the plugin from URL \"%(url)s\" failed, please see the log " "for details." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:506 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:557 #, python-format msgid "" "Installing the plugin from URL \"%(url)s\" failed, please see the log for" " details." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:515 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:566 #, python-format msgid "Plugin \"%(name)s\" uninstalled" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:516 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:567 msgid "The plugin was uninstalled successfully" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:517 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:568 msgid "" "The plugin was uninstalled successfully, however a restart of OctoPrint " "is needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:518 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:569 msgid "" "The plugin was uninstalled successfully, however a reload of the page is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:522 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:573 #, python-format msgid "Uninstalling the plugin failed: %(reason)s" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:524 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:575 msgid "Uninstalling the plugin failed, please see the log for details." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:532 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:583 #, python-format msgid "Plugin \"%(name)s\" enabled" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:584 msgid "The plugin was enabled successfully." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:534 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:585 msgid "" "The plugin was enabled successfully, however a restart of OctoPrint is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:586 msgid "" "The plugin was enabled successfully, however a reload of the page is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:539 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:556 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:590 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:607 #, python-format msgid "Toggling the plugin failed: %(reason)s" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:558 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:592 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:609 msgid "Toggling the plugin failed, please see the log for details." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:549 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:600 #, python-format msgid "Plugin \"%(name)s\" disabled" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:550 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:601 msgid "The plugin was disabled successfully." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:551 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:602 msgid "" "The plugin was disabled successfully, however a restart of OctoPrint is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:552 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:603 msgid "" "The plugin was disabled successfully, however a reload of the page is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:1 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:3 +msgid "" +"Take note that all plugin management functionality is disabled while your" +" printer is printing." +msgstr "" + +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:9 msgid "Installed Plugins" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:13 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:21 msgid "Bundled" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:16 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:90 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:24 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:99 #: src/octoprint/templates/index.jinja2:118 msgid "Homepage" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:23 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:31 msgid "Uninstall Plugin" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:40 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:48 msgid "Get More..." msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:51 -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:143 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:59 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:167 #: src/octoprint/templates/dialogs/settings/appearance.jinja2:96 msgid "Close" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:58 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:66 msgid "Install new Plugins..." msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:62 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:71 #, python-format msgid "... from the Plugin Repository" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:66 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:75 msgid "Sort by title" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:67 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:76 msgid "Sort by publication date" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:67 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:76 #: src/octoprint/templates/dialogs/settings/logs.jinja2:6 #: src/octoprint/templates/sidebar/files_header.jinja2:7 #: src/octoprint/templates/sidebar/files_header.jinja2:8 @@ -419,59 +436,69 @@ msgstr "" msgid "descending" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:69 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:78 msgid "Only show uninstalled plugins" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:70 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:79 msgid "Only show compatible plugins" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:72 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:81 msgid "Refresh list from repository" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:78 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:87 #: src/octoprint/templates/sidebar/files.jinja2:2 msgid "Search..." msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:89 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:98 msgid "Details" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:106 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:115 msgid "Sadly the repository is currently not available" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:109 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:118 msgid "Is your OctoPrint installation connected to the internet?" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:114 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:123 msgid "... from URL" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:119 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:128 msgid "Enter URL..." msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:123 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:132 msgid "This does not look like a valid \"http://\" or \"https://\" URL." msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:126 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:135 msgid "... from an uploaded archive" msgstr "" -#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:139 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:148 msgid "" "This does not look like a valid plugin archive. Valid plugin archives " "should be either zip files or tarballs and have the extension \".zip\", " "\".tar.gz\", \".tgz\" or \".tar\"" msgstr "" -#: src/octoprint/plugins/softwareupdate/__init__.py:412 +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:152 +#: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:44 +#: src/octoprint/templates/tabs/terminal.jinja2:25 +msgid "Advanced options" +msgstr "" + +#: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:158 +msgid "Use --process-dependency-links with pip install" +msgstr "" + +#: src/octoprint/plugins/softwareupdate/__init__.py:486 #: src/octoprint/server/views.py:146 #: src/octoprint/static/js/app/viewmodels/appearance.js:11 #: src/octoprint/static/js/app/viewmodels/appearance.js:13 @@ -480,142 +507,142 @@ msgstr "" msgid "OctoPrint" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:122 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:114 msgid "There are updates available for the following components:" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:136 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:128 msgid "" "Those components marked with can be updated " "directly." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:139 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:131 msgid "Update Available" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:151 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:143 msgid "Ignore" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:155 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:147 msgid "" "You can make this message display again via \"Settings\" > " "\"SoftwareUpdate\" > \"Check for update now\"" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:159 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:151 msgid "Update now" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:175 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:168 msgid "Everything is up-to-date" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:221 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:233 msgid "Updating..." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:222 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:234 msgid "Now updating, please wait." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:241 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:253 msgid "Update not started!" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:242 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:254 msgid "" "The update could not be started. Is it already active? Please consult the" " log for details." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:264 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:276 msgid "Can't update while printing" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:265 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:277 msgid "" "A print job is currently in progress. Updating will be prevented until it" " is done." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:269 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:281 msgid "This will update your OctoPrint installation and restart the server." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:293 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:305 msgid "Restart successful!" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:294 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:306 msgid "" "The server was restarted successfully. The page will now reload " "automatically." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:326 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:338 #, python-format msgid "Now updating %(name)s to %(version)s" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:334 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:346 msgid "Update successful, restarting!" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:335 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:347 msgid "The update finished successfully and the server will now be restarted." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:346 -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:388 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:358 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:400 msgid "Restart failed" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:347 -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:389 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:359 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:401 msgid "" "The server apparently did not restart by itself, you'll have to do it " "manually. Please consult the log file on what went wrong." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:363 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:375 msgid "The update finished successfully, please restart OctoPrint now." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:365 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:377 msgid "The update finished successfully, please reboot the server now." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:369 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:381 msgid "Update successful, restart required!" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:382 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:394 msgid "" "Restarting OctoPrint failed, please restart it manually. You might also " "want to consult the log file on what went wrong here." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:384 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:396 msgid "" "Rebooting the server failed, please reboot it manually. You might also " "want to consult the log file on what went wrong here." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:402 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:414 msgid "Update successful!" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:403 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:415 msgid "The update finished successfully." msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:415 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:427 msgid "Update failed!" msgstr "" -#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:416 +#: src/octoprint/plugins/softwareupdate/static/js/softwareupdate.js:428 msgid "" "The update did not finish successfully. Please consult the log for " "details." @@ -646,11 +673,6 @@ msgstr "" msgid "Check for update now" msgstr "" -#: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:44 -#: src/octoprint/templates/tabs/terminal.jinja2:25 -msgid "Advanced options" -msgstr "" - #: src/octoprint/plugins/softwareupdate/templates/softwareupdate_settings.jinja2:46 msgid "Force check for update (overrides cache used for update checks)" msgstr "" @@ -785,7 +807,7 @@ msgstr "" #: src/octoprint/static/js/app/dataupdater.js:61 #: src/octoprint/static/js/app/dataupdater.js:95 -#: src/octoprint/static/js/app/helpers.js:423 +#: src/octoprint/static/js/app/helpers.js:436 #: src/octoprint/templates/overlays/offline.jinja2:6 msgid "Server is offline" msgstr "" @@ -875,17 +897,17 @@ msgstr "" msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" msgstr "" -#: src/octoprint/static/js/app/helpers.js:344 +#: src/octoprint/static/js/app/helpers.js:357 #, python-format msgid "%(hour)02d:%(minute)02d:%(second)02d" msgstr "" -#: src/octoprint/static/js/app/helpers.js:364 +#: src/octoprint/static/js/app/helpers.js:377 msgid "YYYY-MM-DD HH:mm" msgstr "" -#: src/octoprint/static/js/app/helpers.js:382 -#: src/octoprint/static/js/app/helpers.js:387 +#: src/octoprint/static/js/app/helpers.js:395 +#: src/octoprint/static/js/app/helpers.js:400 msgid "off" msgstr "" @@ -1101,44 +1123,44 @@ msgid "Error" msgstr "" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:96 -#: src/octoprint/static/js/app/viewmodels/settings.js:52 -#: src/octoprint/static/js/app/viewmodels/settings.js:82 +#: src/octoprint/static/js/app/viewmodels/settings.js:53 +#: src/octoprint/static/js/app/viewmodels/settings.js:83 msgid "default" msgstr "" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:97 -#: src/octoprint/static/js/app/viewmodels/settings.js:53 -#: src/octoprint/static/js/app/viewmodels/settings.js:66 +#: src/octoprint/static/js/app/viewmodels/settings.js:54 +#: src/octoprint/static/js/app/viewmodels/settings.js:67 msgid "red" msgstr "" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:98 -#: src/octoprint/static/js/app/viewmodels/settings.js:54 -#: src/octoprint/static/js/app/viewmodels/settings.js:68 +#: src/octoprint/static/js/app/viewmodels/settings.js:55 +#: src/octoprint/static/js/app/viewmodels/settings.js:69 msgid "orange" msgstr "" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:99 -#: src/octoprint/static/js/app/viewmodels/settings.js:55 -#: src/octoprint/static/js/app/viewmodels/settings.js:70 +#: src/octoprint/static/js/app/viewmodels/settings.js:56 +#: src/octoprint/static/js/app/viewmodels/settings.js:71 msgid "yellow" msgstr "" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:100 -#: src/octoprint/static/js/app/viewmodels/settings.js:56 -#: src/octoprint/static/js/app/viewmodels/settings.js:72 +#: src/octoprint/static/js/app/viewmodels/settings.js:57 +#: src/octoprint/static/js/app/viewmodels/settings.js:73 msgid "green" msgstr "" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:101 -#: src/octoprint/static/js/app/viewmodels/settings.js:57 -#: src/octoprint/static/js/app/viewmodels/settings.js:74 +#: src/octoprint/static/js/app/viewmodels/settings.js:58 +#: src/octoprint/static/js/app/viewmodels/settings.js:75 msgid "blue" msgstr "" #: src/octoprint/static/js/app/viewmodels/printerprofiles.js:102 -#: src/octoprint/static/js/app/viewmodels/settings.js:59 -#: src/octoprint/static/js/app/viewmodels/settings.js:78 +#: src/octoprint/static/js/app/viewmodels/settings.js:60 +#: src/octoprint/static/js/app/viewmodels/settings.js:79 msgid "black" msgstr "" @@ -1244,17 +1266,17 @@ msgstr "" msgid "This will restart the print job from the beginning." msgstr "" -#: src/octoprint/static/js/app/viewmodels/settings.js:58 -#: src/octoprint/static/js/app/viewmodels/settings.js:76 +#: src/octoprint/static/js/app/viewmodels/settings.js:59 +#: src/octoprint/static/js/app/viewmodels/settings.js:77 msgid "violet" msgstr "" -#: src/octoprint/static/js/app/viewmodels/settings.js:60 -#: src/octoprint/static/js/app/viewmodels/settings.js:80 +#: src/octoprint/static/js/app/viewmodels/settings.js:61 +#: src/octoprint/static/js/app/viewmodels/settings.js:81 msgid "white" msgstr "" -#: src/octoprint/static/js/app/viewmodels/settings.js:88 +#: src/octoprint/static/js/app/viewmodels/settings.js:89 msgid "Autodetect from browser" msgstr "" From e722c2f8adef5dce085205977a0e83331aba5837 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Sun, 21 Jun 2015 00:32:59 +0200 Subject: [PATCH 10/17] Sanity check: verify that plugin settings data jsonifies without error More resilience which apparently is necessary as witnessed in #946 --- src/octoprint/server/api/settings.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/octoprint/server/api/settings.py b/src/octoprint/server/api/settings.py index 187ff460..524b0e03 100644 --- a/src/octoprint/server/api/settings.py +++ b/src/octoprint/server/api/settings.py @@ -122,6 +122,11 @@ def getSettings(): def process_plugin_result(name, result): if result: + try: + jsonify(test=result) + except: + logger.exception("Error while jsonifying settings from plugin {}, please contact the plugin author about this".format(name)) + if not "plugins" in data: data["plugins"] = dict() if "__enabled" in result: From 33ea9c34597eaca802fc4d411c4f69fa6a0f080a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Sun, 21 Jun 2015 12:09:38 +0200 Subject: [PATCH 11/17] Fix: Software Update config could contain circular reference Caused by a wrong variable usage. Fixed the usage and added a migration step that fixes the circular reference if it exists. Bumping configuration version to 2. Fixes #946 --- .../plugins/softwareupdate/__init__.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/octoprint/plugins/softwareupdate/__init__.py b/src/octoprint/plugins/softwareupdate/__init__.py index 4d91dd83..fd3bd0d1 100644 --- a/src/octoprint/plugins/softwareupdate/__init__.py +++ b/src/octoprint/plugins/softwareupdate/__init__.py @@ -92,7 +92,7 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, self._version_cache_ttl = self._settings.get_int(["cache_ttl"]) * 60 def get_settings_version(self): - return 1 + return 2 def on_settings_migrate(self, target, current=None): if current is None: @@ -111,7 +111,7 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, deletables=["current"] else: deletables=[] - octoprint_check = self._clean_settings_check("octoprint", configured_checks, self.get_settings_defaults()["checks"]["octoprint"], delete=deletables, save=False) + octoprint_check = self._clean_settings_check("octoprint", octoprint_check, self.get_settings_defaults()["checks"]["octoprint"], delete=deletables, save=False) # and the hooks update_check_hooks = self._plugin_manager.get_hooks("octoprint.plugin.softwareupdate.check_config") @@ -132,6 +132,19 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, self._clean_settings_check(key, settings_check, data, delete=deletables, save=False) + elif current == 1: + configured_checks = self._settings.get(["checks"], incl_defaults=False) + if configured_checks is None: + return + + if "octoprint" in configured_checks and "octoprint" in configured_checks["octoprint"]: + # that's a circular reference, back to defaults + dummy_defaults = dict(plugins=dict()) + dummy_defaults["plugins"][self._identifier] = dict(checks=dict()) + dummy_defaults["plugins"][self._identifier]["checks"]["octoprint"] = None + self._settings.set(["checks", "octoprint"], None, defaults=dummy_defaults) + self._settings.save() + def _clean_settings_check(self, key, data, defaults, delete=None, save=True): if delete is None: delete = [] From 22710ccfb39fd083ddcb0621bb1c85455df927c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Sun, 21 Jun 2015 18:02:16 +0200 Subject: [PATCH 12/17] Show overlay when a new server version is detected That's more user friendly than just blindly reloading the page. Also include installed Template- and AssetPlugins in the check whether there's a new version or not. --- src/octoprint/server/util/sockjs.py | 11 +- src/octoprint/static/css/octoprint.css | 2 +- src/octoprint/static/js/app/dataupdater.js | 17 +- src/octoprint/static/less/octoprint.less | 13 +- src/octoprint/templates/index.jinja2 | 1 + .../templates/overlays/reloadui.jinja2 | 14 ++ .../translations/de/LC_MESSAGES/messages.mo | Bin 46718 -> 47233 bytes .../translations/de/LC_MESSAGES/messages.po | 182 ++++++++++-------- translations/de/LC_MESSAGES/messages.mo | Bin 46718 -> 47233 bytes translations/de/LC_MESSAGES/messages.po | 182 ++++++++++-------- translations/messages.pot | 179 +++++++++-------- 11 files changed, 336 insertions(+), 265 deletions(-) create mode 100644 src/octoprint/templates/overlays/reloadui.jinja2 diff --git a/src/octoprint/server/util/sockjs.py b/src/octoprint/server/util/sockjs.py index b8985ef5..8e7df023 100644 --- a/src/octoprint/server/util/sockjs.py +++ b/src/octoprint/server/util/sockjs.py @@ -49,8 +49,17 @@ class PrinterStateConnection(sockjs.tornado.SockJSConnection, octoprint.printer. self._remoteAddress = self._getRemoteAddress(info) self._logger.info("New connection from client: %s" % self._remoteAddress) + plugin_signature = lambda impl: "{}:{}".format(impl._identifier, impl._plugin_version) + template_plugins = map(plugin_signature, self._pluginManager.get_implementations(octoprint.plugin.TemplatePlugin)) + asset_plugins = map(plugin_signature, self._pluginManager.get_implementations(octoprint.plugin.AssetPlugin)) + ui_plugins = sorted(set(template_plugins + asset_plugins)) + + import hashlib + plugin_hash = hashlib.md5() + plugin_hash.update(",".join(ui_plugins)) + # connected => update the API key, might be necessary if the client was left open while the server restarted - self._emit("connected", {"apikey": octoprint.server.UI_API_KEY, "version": octoprint.server.VERSION, "display_version": octoprint.server.DISPLAY_VERSION}) + self._emit("connected", {"apikey": octoprint.server.UI_API_KEY, "version": octoprint.server.VERSION, "display_version": octoprint.server.DISPLAY_VERSION, "plugin_hash": plugin_hash.hexdigest()}) self._printer.register_callback(self) self._fileManager.register_slicingprogress_callback(self) diff --git a/src/octoprint/static/css/octoprint.css b/src/octoprint/static/css/octoprint.css index 887d20b7..13a3a93c 100644 --- a/src/octoprint/static/css/octoprint.css +++ b/src/octoprint/static/css/octoprint.css @@ -1 +1 @@ -.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#08c;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.nowrap{white-space:nowrap}.actioncol{text-align:center;white-space:nowrap}.actioncol a{text-decoration:none;color:#000}.actioncol a.disabled{color:#ccc;cursor:default}#navbar .navbar-inner{background-color:#ebebeb;background-image:-moz-linear-gradient(top,#fff,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#ccc));background-image:-webkit-linear-gradient(top,#fff,#ccc);background-image:-o-linear-gradient(top,#fff,#ccc);background-image:linear-gradient(to bottom,#fff,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffcccccc',GradientType=0)}#navbar .navbar-inner .brand,#navbar .navbar-inner .nav>li>a{text-shadow:0 1px 0 #fff;color:#333}#navbar .navbar-inner .brand .caret,#navbar .navbar-inner .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner .brand:hover .caret,#navbar .navbar-inner .nav>li>a:hover .caret,#navbar .navbar-inner .brand:focus .caret,#navbar .navbar-inner .nav>li>a:focus .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e0e0e0;background-image:-moz-linear-gradient(top,#ccc,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ccc),to(#fff));background-image:-webkit-linear-gradient(top,#ccc,#fff);background-image:-o-linear-gradient(top,#ccc,#fff);background-image:linear-gradient(to bottom,#ccc,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffcccccc',endColorstr='#ffffffff',GradientType=0)}#navbar .navbar-inner.transparent{background-color:rgba(235,235,235,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,0.6),rgba(204,204,204,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,0.6)),to(rgba(204,204,204,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(255,255,255,0.6),rgba(204,204,204,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(255,255,255,0.6),rgba(204,204,204,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(255,255,255,0.6),rgba(204,204,204,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff',endColorstr='#99cccccc',GradientType=0)}#navbar .navbar-inner.transparent .brand,#navbar .navbar-inner.transparent .nav>li>a{text-shadow:0 1px 0 #fff;color:#333}#navbar .navbar-inner.transparent .brand .caret,#navbar .navbar-inner.transparent .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner.transparent .brand:hover .caret,#navbar .navbar-inner.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.transparent .brand:focus .caret,#navbar .navbar-inner.transparent .nav>li>a:focus .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(224,224,224,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(204,204,204,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(204,204,204,0.6)),to(rgba(255,255,255,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(204,204,204,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(204,204,204,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(204,204,204,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99cccccc',endColorstr='#99ffffff',GradientType=0)}#navbar .navbar-inner.red{background-color:#bb645f;background-image:-moz-linear-gradient(top,#e28e8a,#802420);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e28e8a),to(#802420));background-image:-webkit-linear-gradient(top,#e28e8a,#802420);background-image:-o-linear-gradient(top,#e28e8a,#802420);background-image:linear-gradient(to bottom,#e28e8a,#802420);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe28e8a',endColorstr='#ff802420',GradientType=0)}#navbar .navbar-inner.red .brand,#navbar .navbar-inner.red .nav>li>a{text-shadow:0 1px 0 #802420;color:#f2f2f2}#navbar .navbar-inner.red .brand .caret,#navbar .navbar-inner.red .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red .brand:hover .caret,#navbar .navbar-inner.red .nav>li>a:hover .caret,#navbar .navbar-inner.red .brand:focus .caret,#navbar .navbar-inner.red .nav>li>a:focus .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.open.active>.dropdown-toggle{background-color:#a74f4a;background-image:-moz-linear-gradient(top,#802420,#e28e8a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#802420),to(#e28e8a));background-image:-webkit-linear-gradient(top,#802420,#e28e8a);background-image:-o-linear-gradient(top,#802420,#e28e8a);background-image:linear-gradient(to bottom,#802420,#e28e8a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff802420',endColorstr='#ffe28e8a',GradientType=0)}#navbar .navbar-inner.red.transparent{background-color:rgba(187,100,95,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(226,142,138,0.6),rgba(128,36,32,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(226,142,138,0.6)),to(rgba(128,36,32,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(226,142,138,0.6),rgba(128,36,32,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(226,142,138,0.6),rgba(128,36,32,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(226,142,138,0.6),rgba(128,36,32,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99e28e8a',endColorstr='#99802420',GradientType=0)}#navbar .navbar-inner.red.transparent .brand,#navbar .navbar-inner.red.transparent .nav>li>a{text-shadow:0 1px 0 #802420;color:#f2f2f2}#navbar .navbar-inner.red.transparent .brand .caret,#navbar .navbar-inner.red.transparent .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red.transparent .brand:hover .caret,#navbar .navbar-inner.red.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.red.transparent .brand:focus .caret,#navbar .navbar-inner.red.transparent .nav>li>a:focus .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(167,79,74,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(128,36,32,0.6),rgba(226,142,138,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(128,36,32,0.6)),to(rgba(226,142,138,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(128,36,32,0.6),rgba(226,142,138,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(128,36,32,0.6),rgba(226,142,138,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(128,36,32,0.6),rgba(226,142,138,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99802420',endColorstr='#99e28e8a',GradientType=0)}#navbar .navbar-inner.orange{background-color:#e39665;background-image:-moz-linear-gradient(top,#f9c3a0,#c2530c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9c3a0),to(#c2530c));background-image:-webkit-linear-gradient(top,#f9c3a0,#c2530c);background-image:-o-linear-gradient(top,#f9c3a0,#c2530c);background-image:linear-gradient(to bottom,#f9c3a0,#c2530c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9c3a0',endColorstr='#ffc2530c',GradientType=0)}#navbar .navbar-inner.orange .brand,#navbar .navbar-inner.orange .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange .brand .caret,#navbar .navbar-inner.orange .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange .brand:hover .caret,#navbar .navbar-inner.orange .nav>li>a:hover .caret,#navbar .navbar-inner.orange .brand:focus .caret,#navbar .navbar-inner.orange .nav>li>a:focus .caret{border-bottom-color:#f2d3c0;border-top-color:#f2d3c0}#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.open.active>.dropdown-toggle{background-color:#d88047;background-image:-moz-linear-gradient(top,#c2530c,#f9c3a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2530c),to(#f9c3a0));background-image:-webkit-linear-gradient(top,#c2530c,#f9c3a0);background-image:-o-linear-gradient(top,#c2530c,#f9c3a0);background-image:linear-gradient(to bottom,#c2530c,#f9c3a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2530c',endColorstr='#fff9c3a0',GradientType=0)}#navbar .navbar-inner.orange.transparent{background-color:rgba(227,150,101,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,195,160,0.6),rgba(194,83,12,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,195,160,0.6)),to(rgba(194,83,12,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(249,195,160,0.6),rgba(194,83,12,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(249,195,160,0.6),rgba(194,83,12,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(249,195,160,0.6),rgba(194,83,12,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9c3a0',endColorstr='#99c2530c',GradientType=0)}#navbar .navbar-inner.orange.transparent .brand,#navbar .navbar-inner.orange.transparent .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange.transparent .brand .caret,#navbar .navbar-inner.orange.transparent .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange.transparent .brand:hover .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.orange.transparent .brand:focus .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:focus .caret{border-bottom-color:#f2d3c0;border-top-color:#f2d3c0}#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(216,128,71,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,83,12,0.6),rgba(249,195,160,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,83,12,0.6)),to(rgba(249,195,160,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(194,83,12,0.6),rgba(249,195,160,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(194,83,12,0.6),rgba(249,195,160,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(194,83,12,0.6),rgba(249,195,160,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2530c',endColorstr='#99f9c3a0',GradientType=0)}#navbar .navbar-inner.yellow{background-color:#e3d765;background-image:-moz-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9f0a0),to(#c2b00c));background-image:-webkit-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-o-linear-gradient(top,#f9f0a0,#c2b00c);background-image:linear-gradient(to bottom,#f9f0a0,#c2b00c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f0a0',endColorstr='#ffc2b00c',GradientType=0)}#navbar .navbar-inner.yellow .brand,#navbar .navbar-inner.yellow .nav>li>a{text-shadow:0 1px 0 #f6e970;color:#333}#navbar .navbar-inner.yellow .brand .caret,#navbar .navbar-inner.yellow .nav>li>a .caret{border-bottom-color:#93892e;border-top-color:#93892e}#navbar .navbar-inner.yellow .brand:hover .caret,#navbar .navbar-inner.yellow .nav>li>a:hover .caret,#navbar .navbar-inner.yellow .brand:focus .caret,#navbar .navbar-inner.yellow .nav>li>a:focus .caret{border-bottom-color:#635e30;border-top-color:#635e30}#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.yellow .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.open.active>.dropdown-toggle{background-color:#d8ca47;background-image:-moz-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2b00c),to(#f9f0a0));background-image:-webkit-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-o-linear-gradient(top,#c2b00c,#f9f0a0);background-image:linear-gradient(to bottom,#c2b00c,#f9f0a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2b00c',endColorstr='#fff9f0a0',GradientType=0)}#navbar .navbar-inner.yellow.transparent{background-color:rgba(227,215,101,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,240,160,0.6),rgba(194,176,12,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,240,160,0.6)),to(rgba(194,176,12,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(249,240,160,0.6),rgba(194,176,12,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(249,240,160,0.6),rgba(194,176,12,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(249,240,160,0.6),rgba(194,176,12,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9f0a0',endColorstr='#99c2b00c',GradientType=0)}#navbar .navbar-inner.yellow.transparent .brand,#navbar .navbar-inner.yellow.transparent .nav>li>a{text-shadow:0 1px 0 #f6e970;color:#333}#navbar .navbar-inner.yellow.transparent .brand .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a .caret{border-bottom-color:#93892e;border-top-color:#93892e}#navbar .navbar-inner.yellow.transparent .brand:hover .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.yellow.transparent .brand:focus .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:focus .caret{border-bottom-color:#635e30;border-top-color:#635e30}#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(216,202,71,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,176,12,0.6),rgba(249,240,160,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,176,12,0.6)),to(rgba(249,240,160,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(194,176,12,0.6),rgba(249,240,160,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(194,176,12,0.6),rgba(249,240,160,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(194,176,12,0.6),rgba(249,240,160,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2b00c',endColorstr='#99f9f0a0',GradientType=0)}#navbar .navbar-inner.green{background-color:#98f064;background-image:-moz-linear-gradient(top,#c8ffa7,#50da00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8ffa7),to(#50da00));background-image:-webkit-linear-gradient(top,#c8ffa7,#50da00);background-image:-o-linear-gradient(top,#c8ffa7,#50da00);background-image:linear-gradient(to bottom,#c8ffa7,#50da00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8ffa7',endColorstr='#ff50da00',GradientType=0)}#navbar .navbar-inner.green .brand,#navbar .navbar-inner.green .nav>li>a{text-shadow:0 1px 0 #a7ff74;color:#333}#navbar .navbar-inner.green .brand .caret,#navbar .navbar-inner.green .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green .brand:hover .caret,#navbar .navbar-inner.green .nav>li>a:hover .caret,#navbar .navbar-inner.green .brand:focus .caret,#navbar .navbar-inner.green .nav>li>a:focus .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.open.active>.dropdown-toggle{background-color:#80e943;background-image:-moz-linear-gradient(top,#50da00,#c8ffa7);background-image:-webkit-gradient(linear,0 0,0 100%,from(#50da00),to(#c8ffa7));background-image:-webkit-linear-gradient(top,#50da00,#c8ffa7);background-image:-o-linear-gradient(top,#50da00,#c8ffa7);background-image:linear-gradient(to bottom,#50da00,#c8ffa7);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff50da00',endColorstr='#ffc8ffa7',GradientType=0)}#navbar .navbar-inner.green.transparent{background-color:rgba(152,240,100,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,255,167,0.6),rgba(80,218,0,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,255,167,0.6)),to(rgba(80,218,0,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(200,255,167,0.6),rgba(80,218,0,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(200,255,167,0.6),rgba(80,218,0,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(200,255,167,0.6),rgba(80,218,0,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8ffa7',endColorstr='#9950da00',GradientType=0)}#navbar .navbar-inner.green.transparent .brand,#navbar .navbar-inner.green.transparent .nav>li>a{text-shadow:0 1px 0 #a7ff74;color:#333}#navbar .navbar-inner.green.transparent .brand .caret,#navbar .navbar-inner.green.transparent .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green.transparent .brand:hover .caret,#navbar .navbar-inner.green.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.green.transparent .brand:focus .caret,#navbar .navbar-inner.green.transparent .nav>li>a:focus .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(128,233,67,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,218,0,0.6),rgba(200,255,167,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,218,0,0.6)),to(rgba(200,255,167,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(80,218,0,0.6),rgba(200,255,167,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(80,218,0,0.6),rgba(200,255,167,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(80,218,0,0.6),rgba(200,255,167,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9950da00',endColorstr='#99c8ffa7',GradientType=0)}#navbar .navbar-inner.blue{background-color:#2e63cc;background-image:-moz-linear-gradient(top,#4d88ff,#002b80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4d88ff),to(#002b80));background-image:-webkit-linear-gradient(top,#4d88ff,#002b80);background-image:-o-linear-gradient(top,#4d88ff,#002b80);background-image:linear-gradient(to bottom,#4d88ff,#002b80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4d88ff',endColorstr='#ff002b80',GradientType=0)}#navbar .navbar-inner.blue .brand,#navbar .navbar-inner.blue .nav>li>a{text-shadow:0 1px 0 #002b80;color:#f2f2f2}#navbar .navbar-inner.blue .brand .caret,#navbar .navbar-inner.blue .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue .brand:hover .caret,#navbar .navbar-inner.blue .nav>li>a:hover .caret,#navbar .navbar-inner.blue .brand:focus .caret,#navbar .navbar-inner.blue .nav>li>a:focus .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.open.active>.dropdown-toggle{background-color:#1f50b3;background-image:-moz-linear-gradient(top,#002b80,#4d88ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#002b80),to(#4d88ff));background-image:-webkit-linear-gradient(top,#002b80,#4d88ff);background-image:-o-linear-gradient(top,#002b80,#4d88ff);background-image:linear-gradient(to bottom,#002b80,#4d88ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff002b80',endColorstr='#ff4d88ff',GradientType=0)}#navbar .navbar-inner.blue.transparent{background-color:rgba(46,99,204,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(77,136,255,0.6),rgba(0,43,128,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(77,136,255,0.6)),to(rgba(0,43,128,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(77,136,255,0.6),rgba(0,43,128,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(77,136,255,0.6),rgba(0,43,128,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(77,136,255,0.6),rgba(0,43,128,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#994d88ff',endColorstr='#99002b80',GradientType=0)}#navbar .navbar-inner.blue.transparent .brand,#navbar .navbar-inner.blue.transparent .nav>li>a{text-shadow:0 1px 0 #002b80;color:#f2f2f2}#navbar .navbar-inner.blue.transparent .brand .caret,#navbar .navbar-inner.blue.transparent .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue.transparent .brand:hover .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.blue.transparent .brand:focus .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:focus .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(31,80,179,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(0,43,128,0.6),rgba(77,136,255,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(0,43,128,0.6)),to(rgba(77,136,255,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(0,43,128,0.6),rgba(77,136,255,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(0,43,128,0.6),rgba(77,136,255,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(0,43,128,0.6),rgba(77,136,255,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99002b80',endColorstr='#994d88ff',GradientType=0)}#navbar .navbar-inner.violet{background-color:#9864f0;background-image:-moz-linear-gradient(top,#c8a7ff,#5000da);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8a7ff),to(#5000da));background-image:-webkit-linear-gradient(top,#c8a7ff,#5000da);background-image:-o-linear-gradient(top,#c8a7ff,#5000da);background-image:linear-gradient(to bottom,#c8a7ff,#5000da);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8a7ff',endColorstr='#ff5000da',GradientType=0)}#navbar .navbar-inner.violet .brand,#navbar .navbar-inner.violet .nav>li>a{text-shadow:0 1px 0 #5000da;color:#f2f2f2}#navbar .navbar-inner.violet .brand .caret,#navbar .navbar-inner.violet .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet .brand:hover .caret,#navbar .navbar-inner.violet .nav>li>a:hover .caret,#navbar .navbar-inner.violet .brand:focus .caret,#navbar .navbar-inner.violet .nav>li>a:focus .caret{border-bottom-color:#d3c0f5;border-top-color:#d3c0f5}#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.open.active>.dropdown-toggle{background-color:#8043e9;background-image:-moz-linear-gradient(top,#5000da,#c8a7ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5000da),to(#c8a7ff));background-image:-webkit-linear-gradient(top,#5000da,#c8a7ff);background-image:-o-linear-gradient(top,#5000da,#c8a7ff);background-image:linear-gradient(to bottom,#5000da,#c8a7ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5000da',endColorstr='#ffc8a7ff',GradientType=0)}#navbar .navbar-inner.violet.transparent{background-color:rgba(152,100,240,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,167,255,0.6),rgba(80,0,218,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,167,255,0.6)),to(rgba(80,0,218,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(200,167,255,0.6),rgba(80,0,218,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(200,167,255,0.6),rgba(80,0,218,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(200,167,255,0.6),rgba(80,0,218,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8a7ff',endColorstr='#995000da',GradientType=0)}#navbar .navbar-inner.violet.transparent .brand,#navbar .navbar-inner.violet.transparent .nav>li>a{text-shadow:0 1px 0 #5000da;color:#f2f2f2}#navbar .navbar-inner.violet.transparent .brand .caret,#navbar .navbar-inner.violet.transparent .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet.transparent .brand:hover .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.violet.transparent .brand:focus .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:focus .caret{border-bottom-color:#d3c0f5;border-top-color:#d3c0f5}#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(128,67,233,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,0,218,0.6),rgba(200,167,255,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,0,218,0.6)),to(rgba(200,167,255,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(80,0,218,0.6),rgba(200,167,255,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(80,0,218,0.6),rgba(200,167,255,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(80,0,218,0.6),rgba(200,167,255,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#995000da',endColorstr='#99c8a7ff',GradientType=0)}#navbar .navbar-inner.black{background-color:#4f4f4f;background-image:-moz-linear-gradient(top,#787878,#121212);background-image:-webkit-gradient(linear,0 0,0 100%,from(#787878),to(#121212));background-image:-webkit-linear-gradient(top,#787878,#121212);background-image:-o-linear-gradient(top,#787878,#121212);background-image:linear-gradient(to bottom,#787878,#121212);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff787878',endColorstr='#ff121212',GradientType=0)}#navbar .navbar-inner.black .brand,#navbar .navbar-inner.black .nav>li>a{text-shadow:0 1px 0 #121212;color:#f2f2f2}#navbar .navbar-inner.black .brand .caret,#navbar .navbar-inner.black .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black .brand:hover .caret,#navbar .navbar-inner.black .nav>li>a:hover .caret,#navbar .navbar-inner.black .brand:focus .caret,#navbar .navbar-inner.black .nav>li>a:focus .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.open.active>.dropdown-toggle{background-color:#3b3b3b;background-image:-moz-linear-gradient(top,#121212,#787878);background-image:-webkit-gradient(linear,0 0,0 100%,from(#121212),to(#787878));background-image:-webkit-linear-gradient(top,#121212,#787878);background-image:-o-linear-gradient(top,#121212,#787878);background-image:linear-gradient(to bottom,#121212,#787878);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff121212',endColorstr='#ff787878',GradientType=0)}#navbar .navbar-inner.black.transparent{background-color:rgba(79,79,79,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(120,120,120,0.6),rgba(18,18,18,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(120,120,120,0.6)),to(rgba(18,18,18,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(120,120,120,0.6),rgba(18,18,18,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(120,120,120,0.6),rgba(18,18,18,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(120,120,120,0.6),rgba(18,18,18,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99787878',endColorstr='#99121212',GradientType=0)}#navbar .navbar-inner.black.transparent .brand,#navbar .navbar-inner.black.transparent .nav>li>a{text-shadow:0 1px 0 #121212;color:#f2f2f2}#navbar .navbar-inner.black.transparent .brand .caret,#navbar .navbar-inner.black.transparent .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black.transparent .brand:hover .caret,#navbar .navbar-inner.black.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.black.transparent .brand:focus .caret,#navbar .navbar-inner.black.transparent .nav>li>a:focus .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(59,59,59,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(18,18,18,0.6),rgba(120,120,120,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(18,18,18,0.6)),to(rgba(120,120,120,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(18,18,18,0.6),rgba(120,120,120,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(18,18,18,0.6),rgba(120,120,120,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(18,18,18,0.6),rgba(120,120,120,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99121212',endColorstr='#99787878',GradientType=0)}#navbar .navbar-inner.white{background-color:#e9e9e9;background-image:-moz-linear-gradient(top,#fff,#c8c8c8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#c8c8c8));background-image:-webkit-linear-gradient(top,#fff,#c8c8c8);background-image:-o-linear-gradient(top,#fff,#c8c8c8);background-image:linear-gradient(to bottom,#fff,#c8c8c8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffc8c8c8',GradientType=0)}#navbar .navbar-inner.white .brand,#navbar .navbar-inner.white .nav>li>a{text-shadow:0 1px 0 #fff;color:#333}#navbar .navbar-inner.white .brand .caret,#navbar .navbar-inner.white .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white .brand:hover .caret,#navbar .navbar-inner.white .nav>li>a:hover .caret,#navbar .navbar-inner.white .brand:focus .caret,#navbar .navbar-inner.white .nav>li>a:focus .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.open.active>.dropdown-toggle{background-color:#dedede;background-image:-moz-linear-gradient(top,#c8c8c8,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8c8c8),to(#fff));background-image:-webkit-linear-gradient(top,#c8c8c8,#fff);background-image:-o-linear-gradient(top,#c8c8c8,#fff);background-image:linear-gradient(to bottom,#c8c8c8,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8c8c8',endColorstr='#ffffffff',GradientType=0)}#navbar .navbar-inner.white.transparent{background-color:rgba(233,233,233,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,0.6),rgba(200,200,200,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,0.6)),to(rgba(200,200,200,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(255,255,255,0.6),rgba(200,200,200,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(255,255,255,0.6),rgba(200,200,200,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(255,255,255,0.6),rgba(200,200,200,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff',endColorstr='#99c8c8c8',GradientType=0)}#navbar .navbar-inner.white.transparent .brand,#navbar .navbar-inner.white.transparent .nav>li>a{text-shadow:0 1px 0 #fff;color:#333}#navbar .navbar-inner.white.transparent .brand .caret,#navbar .navbar-inner.white.transparent .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white.transparent .brand:hover .caret,#navbar .navbar-inner.white.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.white.transparent .brand:focus .caret,#navbar .navbar-inner.white.transparent .nav>li>a:focus .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(222,222,222,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,200,200,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,200,200,0.6)),to(rgba(255,255,255,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(200,200,200,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(200,200,200,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(200,200,200,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8c8c8',endColorstr='#99ffffff',GradientType=0)}#navbar .navbar-inner .brand span{background-size:20px 20px;background-position:left center;padding-left:24px;background-repeat:no-repeat}.octoprint-container{margin-top:20px}.octoprint-container .tab-content{padding:9px 15px;border-left:1px solid #DDD;border-right:1px solid #DDD;border-bottom:1px solid #DDD;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.octoprint-container .nav{margin-bottom:0}.octoprint-container .tab-content h1{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5;font-weight:normal}.octoprint-container .accordion-heading .accordion-heading-button{float:right}.octoprint-container .accordion-heading .accordion-heading-button a{display:inline-block;padding:8px 15px;font-size:14px;line-height:20px;color:#000;text-decoration:none;background:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.octoprint-container .accordion-heading a.accordion-toggle{display:inline-block}.octoprint-container .accordion-heading [class^="icon-"],.octoprint-container .accordion-heading [class*=" icon-"]{color:#000}.print-control .btn{padding-left:4px;padding-right:4px}.upload-buttons .btn{margin-right:0}table{table-layout:fixed}table .popover-title{text-overflow:ellipsis;word-break:break-all}table th,table td{overflow:hidden}table th.gcode_files_name,table td.gcode_files_name{text-overflow:ellipsis;text-align:left;white-space:nowrap}table th.gcode_files_action,table td.gcode_files_action{width:90px;text-align:center;white-space:nowrap}table th.gcode_files_action a,table td.gcode_files_action a{text-decoration:none;color:#000}table th.gcode_files_action a.disabled,table td.gcode_files_action a.disabled{color:#ccc;cursor:default}table th.timelapse_files_name,table td.timelapse_files_name{text-overflow:ellipsis;text-align:left}table th.timelapse_files_size,table td.timelapse_files_size{text-align:right;width:55px}table th.timelapse_files_action,table td.timelapse_files_action{width:45px;text-align:center;white-space:nowrap}table th.timelapse_files_action a,table td.timelapse_files_action a{text-decoration:none;color:#000}table th.timelapse_files_action a.disabled,table td.timelapse_files_action a.disabled{color:#ccc;cursor:default}table th.settings_users_name,table td.settings_users_name{text-overflow:ellipsis;text-align:left}table th.settings_users_active,table td.settings_users_active,table th.settings_users_admin,table td.settings_users_admin{text-align:center;width:55px}table th.settings_users_actions,table td.settings_users_actions{width:60px;text-align:center;white-space:nowrap}table th.settings_users_actions a,table td.settings_users_actions a{text-decoration:none;color:#000}table th.settings_users_actions a.disabled,table td.settings_users_actions a.disabled{color:#ccc;cursor:default}table th.settings_logs_name,table td.settings_logs_name{text-overflow:ellipsis;text-align:left}table th.settings_logs_size,table td.settings_logs_size{text-align:right;width:70px}table th.settings_logs_date,table td.settings_logs_date{text-align:left;width:130px}table th.settings_logs_action,table td.settings_logs_action{width:70px;text-align:center;white-space:nowrap}table th.settings_logs_action a,table td.settings_logs_action a{text-decoration:none;color:#000}table th.settings_logs_action a.disabled,table td.settings_logs_action a.disabled{color:#ccc;cursor:default}table th.settings_printerProfiles_profiles_name,table td.settings_printerProfiles_profiles_name{text-overflow:ellipsis;text-align:left}table th.settings_printerProfiles_profiles_model,table td.settings_printerProfiles_profiles_model{text-align:left;width:250px}table th.settings_printerProfiles_profiles_action,table td.settings_printerProfiles_profiles_action{width:80px;text-align:center;white-space:nowrap}table th.settings_printerProfiles_profiles_action a,table td.settings_printerProfiles_profiles_action a{text-decoration:none;color:#000}table th.settings_printerProfiles_profiles_action a.disabled,table td.settings_printerProfiles_profiles_action a.disabled{color:#ccc;cursor:default}#temperature-graph{height:350px;width:100%;background-image:url("../img/graph-background.png");background-position:center;background-repeat:no-repeat}.tab-content,.tab-pane{overflow:visible}.tempInput{width:50px}#temp_newTemp,#temp_newBedTemp,#speed_innerWall,#speed_outerWall,#speed_fill,#speed_support,#webcam_timelapse_interval,#webcam_timelapse_postRoll,#webcam_timelapse_fps{text-align:right}ul.dropdown-menu li a{cursor:pointer}#connection_ports,#connection_baudrates,#connection_printers{width:100%}#offline_overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10000;display:none}#offline_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#offline_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#offline_overlay_wrapper .container{margin:auto}#webcam_container{width:100%;position:relative;outline:0}#webcam_container .flipH{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1)}#webcam_container .flipV{-webkit-transform:scaleY(-1);-moz-transform:scaleY(-1);-ms-transform:scaleY(-1)}#webcam_container .flipH.flipV{-webkit-transform:scaleX(-1) scaleY(-1);-moz-transform:scaleX(-1) scaleY(-1);-ms-transform:scaleX(-1) scaleY(-1)}#webcam_container .rotate90{transform:rotate(-90deg)}#webcam_container .keycontrol_overlay{position:absolute;left:10px;right:10px;bottom:10px;background:rgba(0,0,0,0.5);font-size:85%;color:white;padding:0}#webcam_container .keycontrol_overlay kbd{border:1px solid #eee;border-radius:3px;margin-left:2px;margin-right:2px;font-size:90%;padding:2px;min-width:1em}#webcam_container .keycontrol_overlay .keycontrol_overlay_heading{position:relative;padding:10px;font-weight:bold}#webcam_container .keycontrol_overlay .keycontrol_overlay_column{position:relative;width:45%;padding:10px;float:left}#files .gcode_files{padding-right:7px}#files .gcode_files .entry{padding:5px;line-height:20px;border-bottom:1px solid #ddd;position:relative}#files .gcode_files .entry:hover{background-color:#f5f5f5}#files .gcode_files .entry .title{text-overflow:ellipsis;word-break:break-all}#files .gcode_files .entry .uploaded,#files .gcode_files .entry .size,#files .gcode_files .entry .additionalInfo{font-size:85%;color:#999}#files .gcode_files .entry .action-buttons{position:absolute;bottom:5px;right:5px}#files .gcode_files .entry .additionalInfo{padding-bottom:22px}#files .upload-buttons{margin-top:10px}#files .form-search{text-align:center;margin-bottom:5px!important}#control{overflow:hidden}#control .jog-panel{float:left;margin-right:19px}#control h1{text-align:left}#control .jog-panel>div{text-align:center}#control .jog-panel>div.distance{text-align:left}#control .jog-panel .slider{margin-bottom:10px}#control .box{width:30px;height:30px;margin-right:10px;margin-bottom:10px;padding-left:8px}#control .control-box{display:block;height:30px;margin-bottom:10px}#control .btn-group{margin-bottom:10px}#control .btn-group.distance>.btn{width:43px;padding:3px 0;height:30px}#control .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#control .custom_section h1{cursor:pointer}#control .custom_section_horizontal .custom_control{display:inline-block}#control .custom_section_vertical .custom_control{display:block}#control .custom_control .slider{margin-left:10px;margin-right:10px;margin-bottom:2px}#gcode .progress{width:582px}#gcode .progress .bar{-webkit-transition:width 0s linear;-moz-transition:width 0s linear;-o-transition:width 0s linear;transition:width 0s linear}#gcode .canvas_container{position:relative}#gcode #gcode_layer_slider{position:absolute;right:0;top:0;height:568px;float:right}#gcode #gcode_layer_slider .slider-handle{width:14px;height:14px;margin-left:-3px;margin-top:-7px}#gcode #gcode_command_slider .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#term .terminal{margin-bottom:30px}#term .terminal #terminal-output{min-height:340px;margin-bottom:5px}#term #terminal-sendpanel{text-align:right}#settings_dialog .modal-body #settings_dialog_menu{margin-left:0}#settings_appearance_managelanguagesdialog_emptylist{overflow:hidden;width:100%;height:300px;text-align:center;display:table}#settings_appearance_managelanguagesdialog_emptylist div{display:table-cell;vertical-align:middle}.footer ul{margin:0}.footer ul li{display:inline;margin-left:1em;font-size:85%}.footer ul li:first-child{margin-left:0}.footer ul li a{color:#555}.ui-pnotify .alert a{color:#c09853}.ui-pnotify .alert-error a,.ui-pnotify .alert-danger a{color:#b94a48}.ui-pnotify .alert-success a{color:#468847}.ui-pnotify .alert-info a{color:#3a87ad}.pnotify_additional_info .pnotify_more{font-size:85%}.text-right{text-align:right}.overflow_visible{overflow:visible!important}.border_box{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none}textarea.block{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#drop_overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10000;display:none}#drop_overlay.in{display:block}#drop_overlay #drop_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#drop_overlay #drop_overlay_wrapper #drop,#drop_overlay #drop_overlay_wrapper #drop_background{position:absolute;top:0;left:0;margin-left:0;width:100%}#drop_overlay #drop_overlay_wrapper #drop_locally,#drop_overlay #drop_overlay_wrapper #drop_locally_background{position:absolute;top:0;left:50%;margin-left:-50%;width:50%;border-right:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper #drop_sd,#drop_overlay #drop_overlay_wrapper #drop_sd_background{position:absolute;top:0;left:50%;margin-left:0;width:50%;border-left:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper .dropzone{height:100%;z-index:10001;color:#fff;font-size:30px}#drop_overlay #drop_overlay_wrapper .dropzone i{font-size:50px}#drop_overlay #drop_overlay_wrapper .dropzone .text{display:block;text-align:center;line-height:40px;position:absolute;width:100%;bottom:5%;filter:alpha(opacity=100);-moz-opacity:1.0;-khtml-opacity:1.0;opacity:1.0}#drop_overlay #drop_overlay_wrapper .dropzone_background{width:50%;height:100%;background-color:#000;filter:alpha(opacity=25);-moz-opacity:.25;-khtml-opacity:.25;opacity:.25}#drop_overlay #drop_overlay_wrapper .dropzone_background.hover{background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper .dropzone_background.fade{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;opacity:1}.icon-sd-black-14{background:url("../img/icon-sd-black-14.png") 0 3px no-repeat;width:11px;height:17px;display:inline-block!important}.center{float:none;margin-left:auto;margin-right:auto}.slider .slider-selection{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.slider .slider-selection:hover,.slider .slider-selection:focus,.slider .slider-selection:active,.slider .slider-selection.active,.slider .slider-selection.disabled,.slider .slider-selection[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.slider .slider-selection:active,.slider .slider-selection.active{background-color:#039 \9}.slider.slider-disabled .slider-selection{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-track{background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.slider.slider-disabled .slider-track{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);padding:0;margin-bottom:0;opacity:1;filter:alpha(opacity=100)}.slider .slider-handle:hover,.slider .slider-handle:focus,.slider .slider-handle:active,.slider .slider-handle.active,.slider .slider-handle.disabled,.slider .slider-handle[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.slider .slider-handle:active,.slider .slider-handle.active{background-color:#ccc \9}.slider .slider-handle:first-child{*margin-left:0}.slider .slider-handle:hover,.slider .slider-handle:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.slider .slider-handle:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.slider .slider-handle.active,.slider .slider-handle:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.slider .slider-handle.disabled,.slider .slider-handle[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle.hide{display:none}.slider .slider-handle.round{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.modal.large{width:975px;margin-left:-487px}.full-sized-box{position:absolute;bottom:0;left:0;right:0;top:0;padding:15px}.full-sized-box .row-fluid{height:100%}@media(max-width:979px){.full-sized-box{position:static}}.scrollable{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.input-append .add-on.add-on-limited,.input-prepend .add-on.add-on-limited{overflow-x:hidden;text-overflow:ellipsis;width:inherit}.control-group.error .input-prepend .fileinput-button,.control-group.error .input-append .fileinput-button{border-color:#b94a48}input[type=number]{text-align:right} \ No newline at end of file +.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05)}.btn:hover,.btn:focus,.btn:active,.btn.active,.btn.disabled,.btn[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.btn:active,.btn.active{background-color:#ccc \9}.btn:first-child{*margin-left:0}.btn:hover,.btn:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.btn:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.btn.active,.btn:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.btn.disabled,.btn[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-large{padding:11px 19px;font-size:17.5px;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px}.btn-large [class^="icon-"],.btn-large [class*=" icon-"]{margin-top:4px}.btn-small{padding:2px 10px;font-size:11.9px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-small [class^="icon-"],.btn-small [class*=" icon-"]{margin-top:0}.btn-mini [class^="icon-"],.btn-mini [class*=" icon-"]{margin-top:-1px}.btn-mini{padding:0 6px;font-size:10.5px;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px}.btn-block{display:block;width:100%;padding-left:0;padding-right:0;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.btn-block+.btn-block{margin-top:5px}input[type="submit"].btn-block,input[type="reset"].btn-block,input[type="button"].btn-block{width:100%}.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active,.btn-inverse.active{color:rgba(255,255,255,0.75)}.btn-primary{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-primary:hover,.btn-primary:focus,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.btn-primary:active,.btn-primary.active{background-color:#039 \9}.btn-warning{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#faa732;background-image:-moz-linear-gradient(top,#fbb450,#f89406);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fbb450),to(#f89406));background-image:-webkit-linear-gradient(top,#fbb450,#f89406);background-image:-o-linear-gradient(top,#fbb450,#f89406);background-image:linear-gradient(to bottom,#fbb450,#f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fffbb450',endColorstr='#fff89406',GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#f89406;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-warning:hover,.btn-warning:focus,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{color:#fff;background-color:#f89406;*background-color:#df8505}.btn-warning:active,.btn-warning.active{background-color:#c67605 \9}.btn-danger{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#da4f49;background-image:-moz-linear-gradient(top,#ee5f5b,#bd362f);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ee5f5b),to(#bd362f));background-image:-webkit-linear-gradient(top,#ee5f5b,#bd362f);background-image:-o-linear-gradient(top,#ee5f5b,#bd362f);background-image:linear-gradient(to bottom,#ee5f5b,#bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffee5f5b',endColorstr='#ffbd362f',GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#bd362f;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-danger:hover,.btn-danger:focus,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{color:#fff;background-color:#bd362f;*background-color:#a9302a}.btn-danger:active,.btn-danger.active{background-color:#942a25 \9}.btn-success{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#5bb75b;background-image:-moz-linear-gradient(top,#62c462,#51a351);background-image:-webkit-gradient(linear,0 0,0 100%,from(#62c462),to(#51a351));background-image:-webkit-linear-gradient(top,#62c462,#51a351);background-image:-o-linear-gradient(top,#62c462,#51a351);background-image:linear-gradient(to bottom,#62c462,#51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff62c462',endColorstr='#ff51a351',GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#51a351;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-success:hover,.btn-success:focus,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{color:#fff;background-color:#51a351;*background-color:#499249}.btn-success:active,.btn-success.active{background-color:#408140 \9}.btn-info{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#49afcd;background-image:-moz-linear-gradient(top,#5bc0de,#2f96b4);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5bc0de),to(#2f96b4));background-image:-webkit-linear-gradient(top,#5bc0de,#2f96b4);background-image:-o-linear-gradient(top,#5bc0de,#2f96b4);background-image:linear-gradient(to bottom,#5bc0de,#2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5bc0de',endColorstr='#ff2f96b4',GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#2f96b4;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-info:hover,.btn-info:focus,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{color:#fff;background-color:#2f96b4;*background-color:#2a85a0}.btn-info:active,.btn-info.active{background-color:#24748c \9}.btn-inverse{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#363636;background-image:-moz-linear-gradient(top,#444,#222);background-image:-webkit-gradient(linear,0 0,0 100%,from(#444),to(#222));background-image:-webkit-linear-gradient(top,#444,#222);background-image:-o-linear-gradient(top,#444,#222);background-image:linear-gradient(to bottom,#444,#222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff444444',endColorstr='#ff222222',GradientType=0);border-color:#222 #222 #000;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#222;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.btn-inverse:hover,.btn-inverse:focus,.btn-inverse:active,.btn-inverse.active,.btn-inverse.disabled,.btn-inverse[disabled]{color:#fff;background-color:#222;*background-color:#151515}.btn-inverse:active,.btn-inverse.active{background-color:#080808 \9}button.btn,input[type="submit"].btn{*padding-top:3px;*padding-bottom:3px}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0}button.btn.btn-large,input[type="submit"].btn.btn-large{*padding-top:7px;*padding-bottom:7px}button.btn.btn-small,input[type="submit"].btn.btn-small{*padding-top:3px;*padding-bottom:3px}button.btn.btn-mini,input[type="submit"].btn.btn-mini{*padding-top:1px;*padding-bottom:1px}.btn-link,.btn-link:active,.btn-link[disabled]{background-color:transparent;background-image:none;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.btn-link{border-color:transparent;cursor:pointer;color:#08c;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0}.btn-link:hover,.btn-link:focus{color:#005580;text-decoration:underline;background-color:transparent}.btn-link[disabled]:hover,.btn-link[disabled]:focus{color:#333;text-decoration:none}.clearfix{*zoom:1}.clearfix:before,.clearfix:after{display:table;content:"";line-height:0}.clearfix:after{clear:both}.hide-text{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.input-block-level{display:block;width:100%;min-height:30px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.nowrap{white-space:nowrap}.actioncol{text-align:center;white-space:nowrap}.actioncol a{text-decoration:none;color:#000}.actioncol a.disabled{color:#ccc;cursor:default}#navbar .navbar-inner{background-color:#ebebeb;background-image:-moz-linear-gradient(top,#fff,#ccc);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#ccc));background-image:-webkit-linear-gradient(top,#fff,#ccc);background-image:-o-linear-gradient(top,#fff,#ccc);background-image:linear-gradient(to bottom,#fff,#ccc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffcccccc',GradientType=0)}#navbar .navbar-inner .brand,#navbar .navbar-inner .nav>li>a{text-shadow:0 1px 0 #fff;color:#333}#navbar .navbar-inner .brand .caret,#navbar .navbar-inner .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner .brand:hover .caret,#navbar .navbar-inner .nav>li>a:hover .caret,#navbar .navbar-inner .brand:focus .caret,#navbar .navbar-inner .nav>li>a:focus .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner .nav li.dropdown.open.active>.dropdown-toggle{background-color:#e0e0e0;background-image:-moz-linear-gradient(top,#ccc,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#ccc),to(#fff));background-image:-webkit-linear-gradient(top,#ccc,#fff);background-image:-o-linear-gradient(top,#ccc,#fff);background-image:linear-gradient(to bottom,#ccc,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffcccccc',endColorstr='#ffffffff',GradientType=0)}#navbar .navbar-inner.transparent{background-color:rgba(235,235,235,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,0.6),rgba(204,204,204,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,0.6)),to(rgba(204,204,204,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(255,255,255,0.6),rgba(204,204,204,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(255,255,255,0.6),rgba(204,204,204,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(255,255,255,0.6),rgba(204,204,204,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff',endColorstr='#99cccccc',GradientType=0)}#navbar .navbar-inner.transparent .brand,#navbar .navbar-inner.transparent .nav>li>a{text-shadow:0 1px 0 #fff;color:#333}#navbar .navbar-inner.transparent .brand .caret,#navbar .navbar-inner.transparent .nav>li>a .caret{border-bottom-color:#939393;border-top-color:#939393}#navbar .navbar-inner.transparent .brand:hover .caret,#navbar .navbar-inner.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.transparent .brand:focus .caret,#navbar .navbar-inner.transparent .nav>li>a:focus .caret{border-bottom-color:#636363;border-top-color:#636363}#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(224,224,224,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(204,204,204,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(204,204,204,0.6)),to(rgba(255,255,255,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(204,204,204,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(204,204,204,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(204,204,204,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99cccccc',endColorstr='#99ffffff',GradientType=0)}#navbar .navbar-inner.red{background-color:#bb645f;background-image:-moz-linear-gradient(top,#e28e8a,#802420);background-image:-webkit-gradient(linear,0 0,0 100%,from(#e28e8a),to(#802420));background-image:-webkit-linear-gradient(top,#e28e8a,#802420);background-image:-o-linear-gradient(top,#e28e8a,#802420);background-image:linear-gradient(to bottom,#e28e8a,#802420);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffe28e8a',endColorstr='#ff802420',GradientType=0)}#navbar .navbar-inner.red .brand,#navbar .navbar-inner.red .nav>li>a{text-shadow:0 1px 0 #802420;color:#f2f2f2}#navbar .navbar-inner.red .brand .caret,#navbar .navbar-inner.red .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red .brand:hover .caret,#navbar .navbar-inner.red .nav>li>a:hover .caret,#navbar .navbar-inner.red .brand:focus .caret,#navbar .navbar-inner.red .nav>li>a:focus .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red .nav li.dropdown.open.active>.dropdown-toggle{background-color:#a74f4a;background-image:-moz-linear-gradient(top,#802420,#e28e8a);background-image:-webkit-gradient(linear,0 0,0 100%,from(#802420),to(#e28e8a));background-image:-webkit-linear-gradient(top,#802420,#e28e8a);background-image:-o-linear-gradient(top,#802420,#e28e8a);background-image:linear-gradient(to bottom,#802420,#e28e8a);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff802420',endColorstr='#ffe28e8a',GradientType=0)}#navbar .navbar-inner.red.transparent{background-color:rgba(187,100,95,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(226,142,138,0.6),rgba(128,36,32,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(226,142,138,0.6)),to(rgba(128,36,32,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(226,142,138,0.6),rgba(128,36,32,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(226,142,138,0.6),rgba(128,36,32,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(226,142,138,0.6),rgba(128,36,32,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99e28e8a',endColorstr='#99802420',GradientType=0)}#navbar .navbar-inner.red.transparent .brand,#navbar .navbar-inner.red.transparent .nav>li>a{text-shadow:0 1px 0 #802420;color:#f2f2f2}#navbar .navbar-inner.red.transparent .brand .caret,#navbar .navbar-inner.red.transparent .nav>li>a .caret{border-bottom-color:#d89491;border-top-color:#d89491}#navbar .navbar-inner.red.transparent .brand:hover .caret,#navbar .navbar-inner.red.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.red.transparent .brand:focus .caret,#navbar .navbar-inner.red.transparent .nav>li>a:focus .caret{border-bottom-color:#e5c3c1;border-top-color:#e5c3c1}#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.red.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.red.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.red.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(167,79,74,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(128,36,32,0.6),rgba(226,142,138,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(128,36,32,0.6)),to(rgba(226,142,138,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(128,36,32,0.6),rgba(226,142,138,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(128,36,32,0.6),rgba(226,142,138,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(128,36,32,0.6),rgba(226,142,138,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99802420',endColorstr='#99e28e8a',GradientType=0)}#navbar .navbar-inner.orange{background-color:#e39665;background-image:-moz-linear-gradient(top,#f9c3a0,#c2530c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9c3a0),to(#c2530c));background-image:-webkit-linear-gradient(top,#f9c3a0,#c2530c);background-image:-o-linear-gradient(top,#f9c3a0,#c2530c);background-image:linear-gradient(to bottom,#f9c3a0,#c2530c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9c3a0',endColorstr='#ffc2530c',GradientType=0)}#navbar .navbar-inner.orange .brand,#navbar .navbar-inner.orange .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange .brand .caret,#navbar .navbar-inner.orange .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange .brand:hover .caret,#navbar .navbar-inner.orange .nav>li>a:hover .caret,#navbar .navbar-inner.orange .brand:focus .caret,#navbar .navbar-inner.orange .nav>li>a:focus .caret{border-bottom-color:#f2d3c0;border-top-color:#f2d3c0}#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange .nav li.dropdown.open.active>.dropdown-toggle{background-color:#d88047;background-image:-moz-linear-gradient(top,#c2530c,#f9c3a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2530c),to(#f9c3a0));background-image:-webkit-linear-gradient(top,#c2530c,#f9c3a0);background-image:-o-linear-gradient(top,#c2530c,#f9c3a0);background-image:linear-gradient(to bottom,#c2530c,#f9c3a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2530c',endColorstr='#fff9c3a0',GradientType=0)}#navbar .navbar-inner.orange.transparent{background-color:rgba(227,150,101,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,195,160,0.6),rgba(194,83,12,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,195,160,0.6)),to(rgba(194,83,12,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(249,195,160,0.6),rgba(194,83,12,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(249,195,160,0.6),rgba(194,83,12,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(249,195,160,0.6),rgba(194,83,12,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9c3a0',endColorstr='#99c2530c',GradientType=0)}#navbar .navbar-inner.orange.transparent .brand,#navbar .navbar-inner.orange.transparent .nav>li>a{text-shadow:0 1px 0 #f6a570;color:#f2f2f2}#navbar .navbar-inner.orange.transparent .brand .caret,#navbar .navbar-inner.orange.transparent .nav>li>a .caret{border-bottom-color:#f2b58d;border-top-color:#f2b58d}#navbar .navbar-inner.orange.transparent .brand:hover .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.orange.transparent .brand:focus .caret,#navbar .navbar-inner.orange.transparent .nav>li>a:focus .caret{border-bottom-color:#f2d3c0;border-top-color:#f2d3c0}#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.orange.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.orange.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.orange.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(216,128,71,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,83,12,0.6),rgba(249,195,160,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,83,12,0.6)),to(rgba(249,195,160,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(194,83,12,0.6),rgba(249,195,160,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(194,83,12,0.6),rgba(249,195,160,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(194,83,12,0.6),rgba(249,195,160,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2530c',endColorstr='#99f9c3a0',GradientType=0)}#navbar .navbar-inner.yellow{background-color:#e3d765;background-image:-moz-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#f9f0a0),to(#c2b00c));background-image:-webkit-linear-gradient(top,#f9f0a0,#c2b00c);background-image:-o-linear-gradient(top,#f9f0a0,#c2b00c);background-image:linear-gradient(to bottom,#f9f0a0,#c2b00c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fff9f0a0',endColorstr='#ffc2b00c',GradientType=0)}#navbar .navbar-inner.yellow .brand,#navbar .navbar-inner.yellow .nav>li>a{text-shadow:0 1px 0 #f6e970;color:#333}#navbar .navbar-inner.yellow .brand .caret,#navbar .navbar-inner.yellow .nav>li>a .caret{border-bottom-color:#93892e;border-top-color:#93892e}#navbar .navbar-inner.yellow .brand:hover .caret,#navbar .navbar-inner.yellow .nav>li>a:hover .caret,#navbar .navbar-inner.yellow .brand:focus .caret,#navbar .navbar-inner.yellow .nav>li>a:focus .caret{border-bottom-color:#635e30;border-top-color:#635e30}#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.yellow .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow .nav li.dropdown.open.active>.dropdown-toggle{background-color:#d8ca47;background-image:-moz-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c2b00c),to(#f9f0a0));background-image:-webkit-linear-gradient(top,#c2b00c,#f9f0a0);background-image:-o-linear-gradient(top,#c2b00c,#f9f0a0);background-image:linear-gradient(to bottom,#c2b00c,#f9f0a0);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc2b00c',endColorstr='#fff9f0a0',GradientType=0)}#navbar .navbar-inner.yellow.transparent{background-color:rgba(227,215,101,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(249,240,160,0.6),rgba(194,176,12,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(249,240,160,0.6)),to(rgba(194,176,12,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(249,240,160,0.6),rgba(194,176,12,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(249,240,160,0.6),rgba(194,176,12,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(249,240,160,0.6),rgba(194,176,12,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99f9f0a0',endColorstr='#99c2b00c',GradientType=0)}#navbar .navbar-inner.yellow.transparent .brand,#navbar .navbar-inner.yellow.transparent .nav>li>a{text-shadow:0 1px 0 #f6e970;color:#333}#navbar .navbar-inner.yellow.transparent .brand .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a .caret{border-bottom-color:#93892e;border-top-color:#93892e}#navbar .navbar-inner.yellow.transparent .brand:hover .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.yellow.transparent .brand:focus .caret,#navbar .navbar-inner.yellow.transparent .nav>li>a:focus .caret{border-bottom-color:#635e30;border-top-color:#635e30}#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.yellow.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.yellow.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(216,202,71,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(194,176,12,0.6),rgba(249,240,160,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(194,176,12,0.6)),to(rgba(249,240,160,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(194,176,12,0.6),rgba(249,240,160,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(194,176,12,0.6),rgba(249,240,160,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(194,176,12,0.6),rgba(249,240,160,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c2b00c',endColorstr='#99f9f0a0',GradientType=0)}#navbar .navbar-inner.green{background-color:#98f064;background-image:-moz-linear-gradient(top,#c8ffa7,#50da00);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8ffa7),to(#50da00));background-image:-webkit-linear-gradient(top,#c8ffa7,#50da00);background-image:-o-linear-gradient(top,#c8ffa7,#50da00);background-image:linear-gradient(to bottom,#c8ffa7,#50da00);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8ffa7',endColorstr='#ff50da00',GradientType=0)}#navbar .navbar-inner.green .brand,#navbar .navbar-inner.green .nav>li>a{text-shadow:0 1px 0 #a7ff74;color:#333}#navbar .navbar-inner.green .brand .caret,#navbar .navbar-inner.green .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green .brand:hover .caret,#navbar .navbar-inner.green .nav>li>a:hover .caret,#navbar .navbar-inner.green .brand:focus .caret,#navbar .navbar-inner.green .nav>li>a:focus .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green .nav li.dropdown.open.active>.dropdown-toggle{background-color:#80e943;background-image:-moz-linear-gradient(top,#50da00,#c8ffa7);background-image:-webkit-gradient(linear,0 0,0 100%,from(#50da00),to(#c8ffa7));background-image:-webkit-linear-gradient(top,#50da00,#c8ffa7);background-image:-o-linear-gradient(top,#50da00,#c8ffa7);background-image:linear-gradient(to bottom,#50da00,#c8ffa7);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff50da00',endColorstr='#ffc8ffa7',GradientType=0)}#navbar .navbar-inner.green.transparent{background-color:rgba(152,240,100,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,255,167,0.6),rgba(80,218,0,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,255,167,0.6)),to(rgba(80,218,0,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(200,255,167,0.6),rgba(80,218,0,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(200,255,167,0.6),rgba(80,218,0,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(200,255,167,0.6),rgba(80,218,0,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8ffa7',endColorstr='#9950da00',GradientType=0)}#navbar .navbar-inner.green.transparent .brand,#navbar .navbar-inner.green.transparent .nav>li>a{text-shadow:0 1px 0 #a7ff74;color:#333}#navbar .navbar-inner.green.transparent .brand .caret,#navbar .navbar-inner.green.transparent .nav>li>a .caret{border-bottom-color:#55992e;border-top-color:#55992e}#navbar .navbar-inner.green.transparent .brand:hover .caret,#navbar .navbar-inner.green.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.green.transparent .brand:focus .caret,#navbar .navbar-inner.green.transparent .nav>li>a:focus .caret{border-bottom-color:#446630;border-top-color:#446630}#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.green.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.green.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.green.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(128,233,67,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,218,0,0.6),rgba(200,255,167,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,218,0,0.6)),to(rgba(200,255,167,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(80,218,0,0.6),rgba(200,255,167,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(80,218,0,0.6),rgba(200,255,167,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(80,218,0,0.6),rgba(200,255,167,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#9950da00',endColorstr='#99c8ffa7',GradientType=0)}#navbar .navbar-inner.blue{background-color:#2e63cc;background-image:-moz-linear-gradient(top,#4d88ff,#002b80);background-image:-webkit-gradient(linear,0 0,0 100%,from(#4d88ff),to(#002b80));background-image:-webkit-linear-gradient(top,#4d88ff,#002b80);background-image:-o-linear-gradient(top,#4d88ff,#002b80);background-image:linear-gradient(to bottom,#4d88ff,#002b80);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff4d88ff',endColorstr='#ff002b80',GradientType=0)}#navbar .navbar-inner.blue .brand,#navbar .navbar-inner.blue .nav>li>a{text-shadow:0 1px 0 #002b80;color:#f2f2f2}#navbar .navbar-inner.blue .brand .caret,#navbar .navbar-inner.blue .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue .brand:hover .caret,#navbar .navbar-inner.blue .nav>li>a:hover .caret,#navbar .navbar-inner.blue .brand:focus .caret,#navbar .navbar-inner.blue .nav>li>a:focus .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue .nav li.dropdown.open.active>.dropdown-toggle{background-color:#1f50b3;background-image:-moz-linear-gradient(top,#002b80,#4d88ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#002b80),to(#4d88ff));background-image:-webkit-linear-gradient(top,#002b80,#4d88ff);background-image:-o-linear-gradient(top,#002b80,#4d88ff);background-image:linear-gradient(to bottom,#002b80,#4d88ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff002b80',endColorstr='#ff4d88ff',GradientType=0)}#navbar .navbar-inner.blue.transparent{background-color:rgba(46,99,204,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(77,136,255,0.6),rgba(0,43,128,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(77,136,255,0.6)),to(rgba(0,43,128,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(77,136,255,0.6),rgba(0,43,128,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(77,136,255,0.6),rgba(0,43,128,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(77,136,255,0.6),rgba(0,43,128,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#994d88ff',endColorstr='#99002b80',GradientType=0)}#navbar .navbar-inner.blue.transparent .brand,#navbar .navbar-inner.blue.transparent .nav>li>a{text-shadow:0 1px 0 #002b80;color:#f2f2f2}#navbar .navbar-inner.blue.transparent .brand .caret,#navbar .navbar-inner.blue.transparent .nav>li>a .caret{border-bottom-color:#799bdf;border-top-color:#799bdf}#navbar .navbar-inner.blue.transparent .brand:hover .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.blue.transparent .brand:focus .caret,#navbar .navbar-inner.blue.transparent .nav>li>a:focus .caret{border-bottom-color:#b6c7e9;border-top-color:#b6c7e9}#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.blue.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.blue.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.blue.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(31,80,179,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(0,43,128,0.6),rgba(77,136,255,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(0,43,128,0.6)),to(rgba(77,136,255,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(0,43,128,0.6),rgba(77,136,255,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(0,43,128,0.6),rgba(77,136,255,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(0,43,128,0.6),rgba(77,136,255,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99002b80',endColorstr='#994d88ff',GradientType=0)}#navbar .navbar-inner.violet{background-color:#9864f0;background-image:-moz-linear-gradient(top,#c8a7ff,#5000da);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8a7ff),to(#5000da));background-image:-webkit-linear-gradient(top,#c8a7ff,#5000da);background-image:-o-linear-gradient(top,#c8a7ff,#5000da);background-image:linear-gradient(to bottom,#c8a7ff,#5000da);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8a7ff',endColorstr='#ff5000da',GradientType=0)}#navbar .navbar-inner.violet .brand,#navbar .navbar-inner.violet .nav>li>a{text-shadow:0 1px 0 #5000da;color:#f2f2f2}#navbar .navbar-inner.violet .brand .caret,#navbar .navbar-inner.violet .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet .brand:hover .caret,#navbar .navbar-inner.violet .nav>li>a:hover .caret,#navbar .navbar-inner.violet .brand:focus .caret,#navbar .navbar-inner.violet .nav>li>a:focus .caret{border-bottom-color:#d3c0f5;border-top-color:#d3c0f5}#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet .nav li.dropdown.open.active>.dropdown-toggle{background-color:#8043e9;background-image:-moz-linear-gradient(top,#5000da,#c8a7ff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#5000da),to(#c8a7ff));background-image:-webkit-linear-gradient(top,#5000da,#c8a7ff);background-image:-o-linear-gradient(top,#5000da,#c8a7ff);background-image:linear-gradient(to bottom,#5000da,#c8a7ff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff5000da',endColorstr='#ffc8a7ff',GradientType=0)}#navbar .navbar-inner.violet.transparent{background-color:rgba(152,100,240,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,167,255,0.6),rgba(80,0,218,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,167,255,0.6)),to(rgba(80,0,218,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(200,167,255,0.6),rgba(80,0,218,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(200,167,255,0.6),rgba(80,0,218,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(200,167,255,0.6),rgba(80,0,218,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8a7ff',endColorstr='#995000da',GradientType=0)}#navbar .navbar-inner.violet.transparent .brand,#navbar .navbar-inner.violet.transparent .nav>li>a{text-shadow:0 1px 0 #5000da;color:#f2f2f2}#navbar .navbar-inner.violet.transparent .brand .caret,#navbar .navbar-inner.violet.transparent .nav>li>a .caret{border-bottom-color:#b58df9;border-top-color:#b58df9}#navbar .navbar-inner.violet.transparent .brand:hover .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.violet.transparent .brand:focus .caret,#navbar .navbar-inner.violet.transparent .nav>li>a:focus .caret{border-bottom-color:#d3c0f5;border-top-color:#d3c0f5}#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.violet.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.violet.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.violet.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(128,67,233,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(80,0,218,0.6),rgba(200,167,255,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(80,0,218,0.6)),to(rgba(200,167,255,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(80,0,218,0.6),rgba(200,167,255,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(80,0,218,0.6),rgba(200,167,255,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(80,0,218,0.6),rgba(200,167,255,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#995000da',endColorstr='#99c8a7ff',GradientType=0)}#navbar .navbar-inner.black{background-color:#4f4f4f;background-image:-moz-linear-gradient(top,#787878,#121212);background-image:-webkit-gradient(linear,0 0,0 100%,from(#787878),to(#121212));background-image:-webkit-linear-gradient(top,#787878,#121212);background-image:-o-linear-gradient(top,#787878,#121212);background-image:linear-gradient(to bottom,#787878,#121212);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff787878',endColorstr='#ff121212',GradientType=0)}#navbar .navbar-inner.black .brand,#navbar .navbar-inner.black .nav>li>a{text-shadow:0 1px 0 #121212;color:#f2f2f2}#navbar .navbar-inner.black .brand .caret,#navbar .navbar-inner.black .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black .brand:hover .caret,#navbar .navbar-inner.black .nav>li>a:hover .caret,#navbar .navbar-inner.black .brand:focus .caret,#navbar .navbar-inner.black .nav>li>a:focus .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black .nav li.dropdown.open.active>.dropdown-toggle{background-color:#3b3b3b;background-image:-moz-linear-gradient(top,#121212,#787878);background-image:-webkit-gradient(linear,0 0,0 100%,from(#121212),to(#787878));background-image:-webkit-linear-gradient(top,#121212,#787878);background-image:-o-linear-gradient(top,#121212,#787878);background-image:linear-gradient(to bottom,#121212,#787878);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff121212',endColorstr='#ff787878',GradientType=0)}#navbar .navbar-inner.black.transparent{background-color:rgba(79,79,79,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(120,120,120,0.6),rgba(18,18,18,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(120,120,120,0.6)),to(rgba(18,18,18,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(120,120,120,0.6),rgba(18,18,18,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(120,120,120,0.6),rgba(18,18,18,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(120,120,120,0.6),rgba(18,18,18,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99787878',endColorstr='#99121212',GradientType=0)}#navbar .navbar-inner.black.transparent .brand,#navbar .navbar-inner.black.transparent .nav>li>a{text-shadow:0 1px 0 #121212;color:#f2f2f2}#navbar .navbar-inner.black.transparent .brand .caret,#navbar .navbar-inner.black.transparent .nav>li>a .caret{border-bottom-color:#959595;border-top-color:#959595}#navbar .navbar-inner.black.transparent .brand:hover .caret,#navbar .navbar-inner.black.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.black.transparent .brand:focus .caret,#navbar .navbar-inner.black.transparent .nav>li>a:focus .caret{border-bottom-color:#c4c4c4;border-top-color:#c4c4c4}#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.black.transparent .brand span{background-image:url(../img/tentacle-20x20-light@2x.png)}}#navbar .navbar-inner.black.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.black.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(59,59,59,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(18,18,18,0.6),rgba(120,120,120,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(18,18,18,0.6)),to(rgba(120,120,120,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(18,18,18,0.6),rgba(120,120,120,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(18,18,18,0.6),rgba(120,120,120,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(18,18,18,0.6),rgba(120,120,120,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99121212',endColorstr='#99787878',GradientType=0)}#navbar .navbar-inner.white{background-color:#e9e9e9;background-image:-moz-linear-gradient(top,#fff,#c8c8c8);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#c8c8c8));background-image:-webkit-linear-gradient(top,#fff,#c8c8c8);background-image:-o-linear-gradient(top,#fff,#c8c8c8);background-image:linear-gradient(to bottom,#fff,#c8c8c8);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffc8c8c8',GradientType=0)}#navbar .navbar-inner.white .brand,#navbar .navbar-inner.white .nav>li>a{text-shadow:0 1px 0 #fff;color:#333}#navbar .navbar-inner.white .brand .caret,#navbar .navbar-inner.white .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white .brand:hover .caret,#navbar .navbar-inner.white .nav>li>a:hover .caret,#navbar .navbar-inner.white .brand:focus .caret,#navbar .navbar-inner.white .nav>li>a:focus .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white .nav li.dropdown.open.active>.dropdown-toggle{background-color:#dedede;background-image:-moz-linear-gradient(top,#c8c8c8,#fff);background-image:-webkit-gradient(linear,0 0,0 100%,from(#c8c8c8),to(#fff));background-image:-webkit-linear-gradient(top,#c8c8c8,#fff);background-image:-o-linear-gradient(top,#c8c8c8,#fff);background-image:linear-gradient(to bottom,#c8c8c8,#fff);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffc8c8c8',endColorstr='#ffffffff',GradientType=0)}#navbar .navbar-inner.white.transparent{background-color:rgba(233,233,233,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(255,255,255,0.6),rgba(200,200,200,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(255,255,255,0.6)),to(rgba(200,200,200,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(255,255,255,0.6),rgba(200,200,200,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(255,255,255,0.6),rgba(200,200,200,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(255,255,255,0.6),rgba(200,200,200,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99ffffff',endColorstr='#99c8c8c8',GradientType=0)}#navbar .navbar-inner.white.transparent .brand,#navbar .navbar-inner.white.transparent .nav>li>a{text-shadow:0 1px 0 #fff;color:#333}#navbar .navbar-inner.white.transparent .brand .caret,#navbar .navbar-inner.white.transparent .nav>li>a .caret{border-bottom-color:#919191;border-top-color:#919191}#navbar .navbar-inner.white.transparent .brand:hover .caret,#navbar .navbar-inner.white.transparent .nav>li>a:hover .caret,#navbar .navbar-inner.white.transparent .brand:focus .caret,#navbar .navbar-inner.white.transparent .nav>li>a:focus .caret{border-bottom-color:#626262;border-top-color:#626262}#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20.png)}@media(-webkit-min-device-pixel-ratio:2),(min-resolution:192dpi){#navbar .navbar-inner.white.transparent .brand span{background-image:url(../img/tentacle-20x20@2x.png)}}#navbar .navbar-inner.white.transparent .nav li.dropdown.open>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.active>.dropdown-toggle,#navbar .navbar-inner.white.transparent .nav li.dropdown.open.active>.dropdown-toggle{background-color:rgba(222,222,222,0.6);background-image:"../img/trans-background.png";background-image:-moz-linear-gradient(top,rgba(200,200,200,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:-webkit-gradient(linear,0 0,0 100%,from(rgba(200,200,200,0.6)),to(rgba(255,255,255,0.6))),url("../img/trans-background.png");background-image:-webkit-linear-gradient(top,rgba(200,200,200,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:-o-linear-gradient(top,rgba(200,200,200,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-image:linear-gradient(to bottom,rgba(200,200,200,0.6),rgba(255,255,255,0.6)),url("../img/trans-background.png");background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#99c8c8c8',endColorstr='#99ffffff',GradientType=0)}#navbar .navbar-inner .brand span{background-size:20px 20px;background-position:left center;padding-left:24px;background-repeat:no-repeat}.octoprint-container{margin-top:20px}.octoprint-container .tab-content{padding:9px 15px;border-left:1px solid #DDD;border-right:1px solid #DDD;border-bottom:1px solid #DDD;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px}.octoprint-container .nav{margin-bottom:0}.octoprint-container .tab-content h1{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:40px;color:#333;border:0;border-bottom:1px solid #e5e5e5;font-weight:normal}.octoprint-container .accordion-heading .accordion-heading-button{float:right}.octoprint-container .accordion-heading .accordion-heading-button a{display:inline-block;padding:8px 15px;font-size:14px;line-height:20px;color:#000;text-decoration:none;background:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.octoprint-container .accordion-heading a.accordion-toggle{display:inline-block}.octoprint-container .accordion-heading [class^="icon-"],.octoprint-container .accordion-heading [class*=" icon-"]{color:#000}.print-control .btn{padding-left:4px;padding-right:4px}.upload-buttons .btn{margin-right:0}table{table-layout:fixed}table .popover-title{text-overflow:ellipsis;word-break:break-all}table th,table td{overflow:hidden}table th.gcode_files_name,table td.gcode_files_name{text-overflow:ellipsis;text-align:left;white-space:nowrap}table th.gcode_files_action,table td.gcode_files_action{width:90px;text-align:center;white-space:nowrap}table th.gcode_files_action a,table td.gcode_files_action a{text-decoration:none;color:#000}table th.gcode_files_action a.disabled,table td.gcode_files_action a.disabled{color:#ccc;cursor:default}table th.timelapse_files_name,table td.timelapse_files_name{text-overflow:ellipsis;text-align:left}table th.timelapse_files_size,table td.timelapse_files_size{text-align:right;width:55px}table th.timelapse_files_action,table td.timelapse_files_action{width:45px;text-align:center;white-space:nowrap}table th.timelapse_files_action a,table td.timelapse_files_action a{text-decoration:none;color:#000}table th.timelapse_files_action a.disabled,table td.timelapse_files_action a.disabled{color:#ccc;cursor:default}table th.settings_users_name,table td.settings_users_name{text-overflow:ellipsis;text-align:left}table th.settings_users_active,table td.settings_users_active,table th.settings_users_admin,table td.settings_users_admin{text-align:center;width:55px}table th.settings_users_actions,table td.settings_users_actions{width:60px;text-align:center;white-space:nowrap}table th.settings_users_actions a,table td.settings_users_actions a{text-decoration:none;color:#000}table th.settings_users_actions a.disabled,table td.settings_users_actions a.disabled{color:#ccc;cursor:default}table th.settings_logs_name,table td.settings_logs_name{text-overflow:ellipsis;text-align:left}table th.settings_logs_size,table td.settings_logs_size{text-align:right;width:70px}table th.settings_logs_date,table td.settings_logs_date{text-align:left;width:130px}table th.settings_logs_action,table td.settings_logs_action{width:70px;text-align:center;white-space:nowrap}table th.settings_logs_action a,table td.settings_logs_action a{text-decoration:none;color:#000}table th.settings_logs_action a.disabled,table td.settings_logs_action a.disabled{color:#ccc;cursor:default}table th.settings_printerProfiles_profiles_name,table td.settings_printerProfiles_profiles_name{text-overflow:ellipsis;text-align:left}table th.settings_printerProfiles_profiles_model,table td.settings_printerProfiles_profiles_model{text-align:left;width:250px}table th.settings_printerProfiles_profiles_action,table td.settings_printerProfiles_profiles_action{width:80px;text-align:center;white-space:nowrap}table th.settings_printerProfiles_profiles_action a,table td.settings_printerProfiles_profiles_action a{text-decoration:none;color:#000}table th.settings_printerProfiles_profiles_action a.disabled,table td.settings_printerProfiles_profiles_action a.disabled{color:#ccc;cursor:default}#temperature-graph{height:350px;width:100%;background-image:url("../img/graph-background.png");background-position:center;background-repeat:no-repeat}.tab-content,.tab-pane{overflow:visible}.tempInput{width:50px}#temp_newTemp,#temp_newBedTemp,#speed_innerWall,#speed_outerWall,#speed_fill,#speed_support,#webcam_timelapse_interval,#webcam_timelapse_postRoll,#webcam_timelapse_fps{text-align:right}ul.dropdown-menu li a{cursor:pointer}#connection_ports,#connection_baudrates,#connection_printers{width:100%}#offline_overlay,#reloadui_overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10001;display:none}#offline_overlay_background,#reloadui_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#offline_overlay_wrapper,#reloadui_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#offline_overlay_wrapper .container,#reloadui_overlay_wrapper .container{margin:auto}#webcam_container{width:100%;position:relative;outline:0}#webcam_container .flipH{-webkit-transform:scaleX(-1);-moz-transform:scaleX(-1);-ms-transform:scaleX(-1)}#webcam_container .flipV{-webkit-transform:scaleY(-1);-moz-transform:scaleY(-1);-ms-transform:scaleY(-1)}#webcam_container .flipH.flipV{-webkit-transform:scaleX(-1) scaleY(-1);-moz-transform:scaleX(-1) scaleY(-1);-ms-transform:scaleX(-1) scaleY(-1)}#webcam_container .rotate90{transform:rotate(-90deg)}#webcam_container .keycontrol_overlay{position:absolute;left:10px;right:10px;bottom:10px;background:rgba(0,0,0,0.5);font-size:85%;color:white;padding:0}#webcam_container .keycontrol_overlay kbd{border:1px solid #eee;border-radius:3px;margin-left:2px;margin-right:2px;font-size:90%;padding:2px;min-width:1em}#webcam_container .keycontrol_overlay .keycontrol_overlay_heading{position:relative;padding:10px;font-weight:bold}#webcam_container .keycontrol_overlay .keycontrol_overlay_column{position:relative;width:45%;padding:10px;float:left}#files .gcode_files{padding-right:7px}#files .gcode_files .entry{padding:5px;line-height:20px;border-bottom:1px solid #ddd;position:relative}#files .gcode_files .entry:hover{background-color:#f5f5f5}#files .gcode_files .entry .title{text-overflow:ellipsis;word-break:break-all}#files .gcode_files .entry .uploaded,#files .gcode_files .entry .size,#files .gcode_files .entry .additionalInfo{font-size:85%;color:#999}#files .gcode_files .entry .action-buttons{position:absolute;bottom:5px;right:5px}#files .gcode_files .entry .additionalInfo{padding-bottom:22px}#files .upload-buttons{margin-top:10px}#files .form-search{text-align:center;margin-bottom:5px!important}#control{overflow:hidden}#control .jog-panel{float:left;margin-right:19px}#control h1{text-align:left}#control .jog-panel>div{text-align:center}#control .jog-panel>div.distance{text-align:left}#control .jog-panel .slider{margin-bottom:10px}#control .box{width:30px;height:30px;margin-right:10px;margin-bottom:10px;padding-left:8px}#control .control-box{display:block;height:30px;margin-bottom:10px}#control .btn-group{margin-bottom:10px}#control .btn-group.distance>.btn{width:43px;padding:3px 0;height:30px}#control .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#control .custom_section h1{cursor:pointer}#control .custom_section_horizontal .custom_control{display:inline-block}#control .custom_section_vertical .custom_control{display:block}#control .custom_control .slider{margin-left:10px;margin-right:10px;margin-bottom:2px}#gcode .progress{width:582px}#gcode .progress .bar{-webkit-transition:width 0s linear;-moz-transition:width 0s linear;-o-transition:width 0s linear;transition:width 0s linear}#gcode .canvas_container{position:relative}#gcode #gcode_layer_slider{position:absolute;right:0;top:0;height:568px;float:right}#gcode #gcode_layer_slider .slider-handle{width:14px;height:14px;margin-left:-3px;margin-top:-7px}#gcode #gcode_command_slider .slider-handle{width:14px;height:14px;margin-left:-7px;margin-top:-3px}#term .terminal{margin-bottom:30px}#term .terminal #terminal-output{min-height:340px;margin-bottom:5px}#term #terminal-sendpanel{text-align:right}#settings_dialog .modal-body #settings_dialog_menu{margin-left:0}#settings_appearance_managelanguagesdialog_emptylist{overflow:hidden;width:100%;height:300px;text-align:center;display:table}#settings_appearance_managelanguagesdialog_emptylist div{display:table-cell;vertical-align:middle}.footer ul{margin:0}.footer ul li{display:inline;margin-left:1em;font-size:85%}.footer ul li:first-child{margin-left:0}.footer ul li a{color:#555}.ui-pnotify .alert a{color:#c09853}.ui-pnotify .alert-error a,.ui-pnotify .alert-danger a{color:#b94a48}.ui-pnotify .alert-success a{color:#468847}.ui-pnotify .alert-info a{color:#3a87ad}.pnotify_additional_info .pnotify_more{font-size:85%}.text-right{text-align:right}.overflow_visible{overflow:visible!important}.border_box{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}.hidden{display:none}textarea.block{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;width:100%}#drop_overlay{position:fixed;top:0;left:0;width:100%;height:100%;z-index:10000;display:none}#drop_overlay.in{display:block}#drop_overlay #drop_overlay_background{position:fixed;top:0;left:0;width:100%;height:100%;background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper{position:absolute;top:0;bottom:0;left:0;right:0;padding-top:60px}#drop_overlay #drop_overlay_wrapper #drop,#drop_overlay #drop_overlay_wrapper #drop_background{position:absolute;top:0;left:0;margin-left:0;width:100%}#drop_overlay #drop_overlay_wrapper #drop_locally,#drop_overlay #drop_overlay_wrapper #drop_locally_background{position:absolute;top:0;left:50%;margin-left:-50%;width:50%;border-right:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper #drop_sd,#drop_overlay #drop_overlay_wrapper #drop_sd_background{position:absolute;top:0;left:50%;margin-left:0;width:50%;border-left:2px dashed #ccc}#drop_overlay #drop_overlay_wrapper .dropzone{height:100%;z-index:10001;color:#fff;font-size:30px}#drop_overlay #drop_overlay_wrapper .dropzone i{font-size:50px}#drop_overlay #drop_overlay_wrapper .dropzone .text{display:block;text-align:center;line-height:40px;position:absolute;width:100%;bottom:5%;filter:alpha(opacity=100);-moz-opacity:1.0;-khtml-opacity:1.0;opacity:1.0}#drop_overlay #drop_overlay_wrapper .dropzone_background{width:50%;height:100%;background-color:#000;filter:alpha(opacity=25);-moz-opacity:.25;-khtml-opacity:.25;opacity:.25}#drop_overlay #drop_overlay_wrapper .dropzone_background.hover{background-color:#000;filter:alpha(opacity=50);-moz-opacity:.5;-khtml-opacity:.5;opacity:.5}#drop_overlay #drop_overlay_wrapper .dropzone_background.fade{-webkit-transition:all .3s ease-out;-moz-transition:all .3s ease-out;-ms-transition:all .3s ease-out;-o-transition:all .3s ease-out;transition:all .3s ease-out;opacity:1}.icon-sd-black-14{background:url("../img/icon-sd-black-14.png") 0 3px no-repeat;width:11px;height:17px;display:inline-block!important}.center{float:none;margin-left:auto;margin-right:auto}.slider .slider-selection{color:#fff;text-shadow:0 -1px 0 rgba(0,0,0,0.25);background-color:#006dcc;background-image:-moz-linear-gradient(top,#08c,#04c);background-image:-webkit-gradient(linear,0 0,0 100%,from(#08c),to(#04c));background-image:-webkit-linear-gradient(top,#08c,#04c);background-image:-o-linear-gradient(top,#08c,#04c);background-image:linear-gradient(to bottom,#08c,#04c);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ff0088cc',endColorstr='#ff0044cc',GradientType=0);border-color:#04c #04c #002a80;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#04c;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false)}.slider .slider-selection:hover,.slider .slider-selection:focus,.slider .slider-selection:active,.slider .slider-selection.active,.slider .slider-selection.disabled,.slider .slider-selection[disabled]{color:#fff;background-color:#04c;*background-color:#003bb3}.slider .slider-selection:active,.slider .slider-selection.active{background-color:#039 \9}.slider.slider-disabled .slider-selection{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-track{background-color:#f5f5f5;border:1px solid #e3e3e3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);-moz-box-shadow:inset 0 1px 1px rgba(0,0,0,0.05);box-shadow:inset 0 1px 1px rgba(0,0,0,0.05)}.slider.slider-disabled .slider-track{background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;font-size:14px;line-height:20px;text-align:center;vertical-align:middle;cursor:pointer;color:#333;text-shadow:0 1px 1px rgba(255,255,255,0.75);background-color:#f5f5f5;background-image:-moz-linear-gradient(top,#fff,#e6e6e6);background-image:-webkit-gradient(linear,0 0,0 100%,from(#fff),to(#e6e6e6));background-image:-webkit-linear-gradient(top,#fff,#e6e6e6);background-image:-o-linear-gradient(top,#fff,#e6e6e6);background-image:linear-gradient(to bottom,#fff,#e6e6e6);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffffff',endColorstr='#ffe6e6e6',GradientType=0);border-color:#e6e6e6 #e6e6e6 #bfbfbf;border-color:rgba(0,0,0,0.1) rgba(0,0,0,0.1) rgba(0,0,0,0.25);*background-color:#e6e6e6;filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);border:1px solid #ccc;*border:0;border-bottom-color:#b3b3b3;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;*margin-left:.3em;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 1px 0 rgba(255,255,255,.2),0 1px 2px rgba(0,0,0,.05);padding:0;margin-bottom:0;opacity:1;filter:alpha(opacity=100)}.slider .slider-handle:hover,.slider .slider-handle:focus,.slider .slider-handle:active,.slider .slider-handle.active,.slider .slider-handle.disabled,.slider .slider-handle[disabled]{color:#333;background-color:#e6e6e6;*background-color:#d9d9d9}.slider .slider-handle:active,.slider .slider-handle.active{background-color:#ccc \9}.slider .slider-handle:first-child{*margin-left:0}.slider .slider-handle:hover,.slider .slider-handle:focus{color:#333;text-decoration:none;background-position:0 -15px;-webkit-transition:background-position .1s linear;-moz-transition:background-position .1s linear;-o-transition:background-position .1s linear;transition:background-position .1s linear}.slider .slider-handle:focus{outline:thin dotted #333;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px}.slider .slider-handle.active,.slider .slider-handle:active{background-image:none;outline:0;-webkit-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);-moz-box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05);box-shadow:inset 0 2px 4px rgba(0,0,0,.15),0 1px 2px rgba(0,0,0,.05)}.slider .slider-handle.disabled,.slider .slider-handle[disabled]{cursor:default;background-image:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none}.slider .slider-handle.hide{display:none}.slider .slider-handle.round{-webkit-border-radius:50%;-moz-border-radius:50%;border-radius:50%}.modal.large{width:975px;margin-left:-487px}.full-sized-box{position:absolute;bottom:0;left:0;right:0;top:0;padding:15px}.full-sized-box .row-fluid{height:100%}@media(max-width:979px){.full-sized-box{position:static}}.scrollable{height:100%;overflow:auto;-webkit-overflow-scrolling:touch}.input-append .add-on.add-on-limited,.input-prepend .add-on.add-on-limited{overflow-x:hidden;text-overflow:ellipsis;width:inherit}.control-group.error .input-prepend .fileinput-button,.control-group.error .input-append .fileinput-button{border-color:#b94a48}input[type=number]{text-align:right} \ No newline at end of file diff --git a/src/octoprint/static/js/app/dataupdater.js b/src/octoprint/static/js/app/dataupdater.js index 73a4a6d2..788edc86 100644 --- a/src/octoprint/static/js/app/dataupdater.js +++ b/src/octoprint/static/js/app/dataupdater.js @@ -9,6 +9,11 @@ function DataUpdater(allViewModels) { self._autoReconnectTimeouts = [0, 1, 1, 2, 3, 5, 8, 13, 20, 40, 100]; self._autoReconnectDialogIndex = 1; + self._pluginHash = undefined; + + self.reloadOverlay = $("#reloadui_overlay"); + $("#reloadui_overlay_reload").click(function() { location.reload(true); }); + self.connect = function() { var options = {}; if (SOCKJS_DEBUG) { @@ -119,6 +124,9 @@ function DataUpdater(allViewModels) { DISPLAY_VERSION = data["display_version"]; $("span.version").text(DISPLAY_VERSION); + var oldPluginHash = self._pluginHash; + self._pluginHash = data["plugin_hash"]; + if ($("#offline_overlay").is(":visible")) { hideOfflineOverlay(); _.each(self.allViewModels, function(viewModel) { @@ -132,13 +140,8 @@ function DataUpdater(allViewModels) { } } - if (oldVersion != VERSION) { - // version change detected, force reloading UI - use randomized delay to reduce server load in - // the case of multiple clients - var delay = 5 + Math.floor(Math.random() * 5) + 1; - setTimeout(function() {location.reload(true);}, delay * 1000); - - // TODO notify about that, or show confirmation + if (oldVersion != VERSION || (oldPluginHash != undefined && oldPluginHash != self._pluginHash)) { + self.reloadOverlay.show(); } break; diff --git a/src/octoprint/static/less/octoprint.less b/src/octoprint/static/less/octoprint.less index 07a760a5..e05a8d7c 100644 --- a/src/octoprint/static/less/octoprint.less +++ b/src/octoprint/static/less/octoprint.less @@ -387,19 +387,21 @@ ul.dropdown-menu li a { width: 100%; } -/** Offline overlay */ +/** Offline & Reload overlay */ -#offline_overlay { +#offline_overlay, +#reloadui_overlay { position: fixed; top: 0; left: 0; width: 100%; height: 100%; - z-index: 10000; + z-index: 10001; display: none; } -#offline_overlay_background { +#offline_overlay_background, +#reloadui_overlay_background { position: fixed; top: 0; left: 0; @@ -412,7 +414,8 @@ ul.dropdown-menu li a { opacity: 0.5; } -#offline_overlay_wrapper { +#offline_overlay_wrapper, +#reloadui_overlay_wrapper { position: absolute; top: 0; bottom: 0; diff --git a/src/octoprint/templates/index.jinja2 b/src/octoprint/templates/index.jinja2 index 9623d6e0..1a58a82b 100644 --- a/src/octoprint/templates/index.jinja2 +++ b/src/octoprint/templates/index.jinja2 @@ -134,6 +134,7 @@ {% include 'overlays/dragndrop.jinja2' %} {% include 'overlays/offline.jinja2' %} + {% include 'overlays/reloadui.jinja2' %} diff --git a/src/octoprint/templates/overlays/reloadui.jinja2 b/src/octoprint/templates/overlays/reloadui.jinja2 new file mode 100644 index 00000000..8790002e --- /dev/null +++ b/src/octoprint/templates/overlays/reloadui.jinja2 @@ -0,0 +1,14 @@ +
+
+
+
+
+

{{ _('Please reload') }}

+

{{ _('There is a new version of the server active now, a reload of the user interface is needed. This will not interrupt any print jobs you might have ongoing. Please reload the web interface now by clicking the button below.') }}

+

+ {{ _('Reload now') }} +

+
+
+
+
diff --git a/src/octoprint/translations/de/LC_MESSAGES/messages.mo b/src/octoprint/translations/de/LC_MESSAGES/messages.mo index 166c3216da3471ac95d887eaf0729053a79f0e09..6b4f53965d044f49f7423c4533fd312b0a757ae6 100644 GIT binary patch delta 8936 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 t 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 diff --git a/src/octoprint/translations/de/LC_MESSAGES/messages.po b/src/octoprint/translations/de/LC_MESSAGES/messages.po index ba607700..596d79a6 100644 --- a/src/octoprint/translations/de/LC_MESSAGES/messages.po +++ b/src/octoprint/translations/de/LC_MESSAGES/messages.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: OctoPrint\n" "Report-Msgid-Bugs-To: i18n@octoprint.org\n" -"POT-Creation-Date: 2015-06-20 01:02+0200\n" -"PO-Revision-Date: 2015-06-20 01:04+0100\n" +"POT-Creation-Date: 2015-06-21 17:58+0200\n" +"PO-Revision-Date: 2015-06-21 18:00+0100\n" "Last-Translator: Gina Häußge \n" "Language-Team: German (http://www.transifex.com/projects/p/octoprint/" "language/de/)\n" @@ -139,97 +139,97 @@ msgstr "Bestätigen" msgid "Plugin Manager" msgstr "Pluginmanager" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:272 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:132 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:275 msgid "Installing plugin..." msgstr "Installiere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:132 msgid "Installing plugin from uploaded archive..." msgstr "Installiere Plugin von hochgeladenem Archiv..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:144 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:220 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:297 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:327 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:571 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:588 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:605 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:147 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:223 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:300 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:330 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:544 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:574 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:591 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:608 msgid "Something went wrong" msgstr "Etwas ist schief gegangen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:145 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:221 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:298 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:328 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:148 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:224 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:301 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:331 msgid "Please consult octoprint.log for details" msgstr "Bitte konsultiere octoprint.log für Details" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:274 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:277 #, python-format msgid "Installing plugin \"%(name)s\" from %(url)s..." msgstr "Installiere Plugin \"%(name)s\" von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:279 #, python-format msgid "Installing plugin from %(url)s..." msgstr "Installiere Plugin von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:279 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:282 msgid "Reinstalling plugin..." msgstr "Reinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:280 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:283 #, python-format msgid "Reinstalling plugin \"%(name)s\" from %(url)s..." msgstr "Reinstalliere Plugin \"%(name)s\" von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:321 msgid "Uninstalling plugin..." msgstr "Deinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:321 #, python-format msgid "Uninstalling plugin \"%(name)s\"" msgstr "Deinstalliere Plugin \"%(name)s\"" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 msgid "Reinstall" msgstr "Reinstallieren" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:130 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:146 msgid "Install" msgstr "Installieren" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 msgid "Incompatible" msgstr "Inkompatibel" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:371 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:374 +#: src/octoprint/templates/overlays/reloadui.jinja2:9 msgid "Reload now" msgstr "Jetzt neu laden" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:440 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:443 msgid "Done!" msgstr "Fertig!" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Enable Plugin" msgstr "Plugin enablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Disable Plugin" msgstr "Plugin disablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:525 -#, python-format +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:528 msgid "Plugin installed" msgstr "Plugin installiert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:526 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:529 msgid "" "A plugin was installed successfully, however it was impossible to detect " "which one. Please Restart OctoPrint to make sure everything will be " @@ -239,16 +239,16 @@ msgstr "" "detektieren, welches. Bitte starte OctoPrint neu um sicherzustellen, dass " "alles ordnungsgemäß registriert wird." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:530 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 #, python-format msgid "Plugin \"%(name)s\" reinstalled" msgstr "Plugin \"%(name)s\" reinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:531 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:534 msgid "The plugin was reinstalled successfully" msgstr "Das Plugin wurde erfolgreich reinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:532 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 msgid "" "The plugin was reinstalled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -256,7 +256,7 @@ msgstr "" "Das Plugin wurde erfolgreich reinstalliert, es ist aber ein Neustart von " "OctoPrint notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:536 msgid "" "The plugin was reinstalled successfully, however a reload of the page is " "needed for that to take effect." @@ -264,16 +264,16 @@ msgstr "" "Das Plugin wurde erfolgreich reinstalliert, es ist aber ein Neuladen der " "Seite notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:538 #, python-format msgid "Plugin \"%(name)s\" installed" msgstr "Plugin \"%(name)s\" installiert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:536 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:539 msgid "The plugin was installed successfully" msgstr "Das Plugin wurde erfolgreich installiert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:537 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:540 msgid "" "The plugin was installed successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -281,7 +281,7 @@ msgstr "" "Das Plugin wurde erfolgreich installiert, es ist jedoch ein Neustart von " "OctoPrint notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:538 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 msgid "" "The plugin was installed successfully, however a reload of the page is " "needed for that to take effect." @@ -289,19 +289,19 @@ msgstr "" "Das Plugin wurde erfolgreich installiert, es ist jedoch ein Neuladen der " "Seite notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:549 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:552 #, python-format msgid "Reinstalling the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" "Reinstallation des Plugins von URL \"%(url)s\" fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:551 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:554 #, python-format msgid "Installing the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" "Installation des Plugins von URL \"%(url)s\" fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:555 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:558 #, python-format msgid "" "Reinstalling the plugin from URL \"%(url)s\" failed, please see the log for " @@ -310,7 +310,7 @@ msgstr "" "Reinstallation des Plugins von URL \"%(url)s\" fehlgeschlagen, bitte " "konsultiere das Log für Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:557 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:560 #, python-format msgid "" "Installing the plugin from URL \"%(url)s\" failed, please see the log for " @@ -319,16 +319,16 @@ msgstr "" "Installation des Plugins von URL \"%(url)s\" fehlgeschlagen, bitte " "konsultiere das Log für Details" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:566 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:569 #, python-format msgid "Plugin \"%(name)s\" uninstalled" msgstr "Plugin \"%(name)s\" deinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:567 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:570 msgid "The plugin was uninstalled successfully" msgstr "Das Plugin wurde erfolgreich deinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:568 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:571 msgid "" "The plugin was uninstalled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -336,7 +336,7 @@ msgstr "" "Das Plugin wurde erfolgreich deinstalliert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:569 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:572 msgid "" "The plugin was uninstalled successfully, however a reload of the page is " "needed for that to take effect." @@ -344,27 +344,27 @@ msgstr "" "Das Plugin wurde erfolgreich deinstalliert, es ist jedoch ein Neuladen der " "Seite notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:573 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:576 #, python-format msgid "Uninstalling the plugin failed: %(reason)s" msgstr "Deinstallation des Plugins fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:575 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:578 msgid "Uninstalling the plugin failed, please see the log for details." msgstr "" "Deinstallation des Plugins fehlgeschlagen, bitte konsultiere das Log für " "Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:583 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:586 #, python-format msgid "Plugin \"%(name)s\" enabled" msgstr "Plugin \"%(name)s\" aktiviert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:584 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:587 msgid "The plugin was enabled successfully." msgstr "Das Plugin wurde erfolgreich aktiviert." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:585 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:588 msgid "" "The plugin was enabled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -372,7 +372,7 @@ msgstr "" "Das Plugin wurde erfolgreich aktiviert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:586 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:589 msgid "" "The plugin was enabled successfully, however a reload of the page is needed " "for that to take effect." @@ -380,28 +380,28 @@ msgstr "" "Das Plugin wurde erfolgreich aktiviert, es ist jedoch ein Neuladen der Seite " "notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:590 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:607 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:593 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:610 #, python-format msgid "Toggling the plugin failed: %(reason)s" msgstr "Togglen des Plugins fehlgeschalgen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:592 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:609 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:595 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:612 msgid "Toggling the plugin failed, please see the log for details." msgstr "" "Togglen des Plugins fehlgeschlagen, bitte konsultiere das Log für Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:600 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:603 #, python-format msgid "Plugin \"%(name)s\" disabled" msgstr "Plugin \"%(name)s\" deaktiviert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:601 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:604 msgid "The plugin was disabled successfully." msgstr "Das Plugin wurde erfolgreich deaktiviert." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:602 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:605 msgid "" "The plugin was disabled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -409,7 +409,7 @@ msgstr "" "Das Plugin wurde erfolgreich deaktiviert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:603 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:606 msgid "" "The plugin was disabled successfully, however a reload of the page is needed " "for that to take effect." @@ -546,7 +546,7 @@ msgid "" msgstr "" "Übergebe --process-dependency-links an pip install" -#: src/octoprint/plugins/softwareupdate/__init__.py:486 +#: src/octoprint/plugins/softwareupdate/__init__.py:499 #: src/octoprint/server/views.py:146 #: src/octoprint/static/js/app/viewmodels/appearance.js:11 #: src/octoprint/static/js/app/viewmodels/appearance.js:13 @@ -883,14 +883,14 @@ msgstr "Zugriff" msgid "Interface" msgstr "Interface" -#: src/octoprint/static/js/app/dataupdater.js:61 -#: src/octoprint/static/js/app/dataupdater.js:95 +#: src/octoprint/static/js/app/dataupdater.js:65 +#: src/octoprint/static/js/app/dataupdater.js:99 #: src/octoprint/static/js/app/helpers.js:436 #: src/octoprint/templates/overlays/offline.jinja2:6 msgid "Server is offline" msgstr "Der Server ist offline" -#: src/octoprint/static/js/app/dataupdater.js:62 +#: src/octoprint/static/js/app/dataupdater.js:66 msgid "" "The server appears to be offline, at least I'm not getting any response from " "it. I'll try to reconnect automatically over the next couple of " @@ -902,7 +902,7 @@ msgstr "" "erneut zu verbinden, aber Du kannst mittels des folgenden Buttons auch " "jederzeit einen manuellen Verbindungsversuch anstoßen." -#: src/octoprint/static/js/app/dataupdater.js:96 +#: src/octoprint/static/js/app/dataupdater.js:100 msgid "" "The server appears to be offline, at least I'm not getting any response from " "it. I could not reconnect automatically, but you may try a " @@ -913,31 +913,31 @@ msgstr "" "aber Du kannst mittels des folgenden Buttons einen manuellen " "Verbindungsversuch anstoßen." -#: src/octoprint/static/js/app/dataupdater.js:168 -#: src/octoprint/static/js/app/dataupdater.js:196 +#: src/octoprint/static/js/app/dataupdater.js:166 +#: src/octoprint/static/js/app/dataupdater.js:194 #, python-format msgid "Slicing ... (%(percentage)d%%)" msgstr "Slice ... (%(percentage)d%%)" -#: src/octoprint/static/js/app/dataupdater.js:185 +#: src/octoprint/static/js/app/dataupdater.js:183 msgid "Rendering timelapse" msgstr "Zeitrafferaufnahme wird gerendert" -#: src/octoprint/static/js/app/dataupdater.js:185 +#: src/octoprint/static/js/app/dataupdater.js:183 #, python-format msgid "Now rendering timelapse %(movie_basename)s" msgstr "Rendere Zeitrafferaufnahme %(movie_basename)s" -#: src/octoprint/static/js/app/dataupdater.js:187 +#: src/octoprint/static/js/app/dataupdater.js:185 msgid "Timelapse ready" msgstr "Zeitrafferaufnahme fertig" -#: src/octoprint/static/js/app/dataupdater.js:187 +#: src/octoprint/static/js/app/dataupdater.js:185 #, python-format msgid "New timelapse %(movie_basename)s is done rendering." msgstr "Neue Zeitrafferaufnahme %(movie_basename)s wurde fertig gerendert" -#: src/octoprint/static/js/app/dataupdater.js:189 +#: src/octoprint/static/js/app/dataupdater.js:187 #, python-format msgid "" "Rendering of timelapse %(movie_basename)s failed with return code " @@ -946,41 +946,41 @@ msgstr "" "Rendering der Zeitrafferaufnahme %(movie_basename)s fehlgeschlagen mit " "Returncode %(returncode)s" -#: src/octoprint/static/js/app/dataupdater.js:191 +#: src/octoprint/static/js/app/dataupdater.js:189 msgid "Rendering failed" msgstr "Rendering fehlgeschlagen" -#: src/octoprint/static/js/app/dataupdater.js:198 +#: src/octoprint/static/js/app/dataupdater.js:196 msgid "Slicing ..." msgstr "Slice ..." -#: src/octoprint/static/js/app/dataupdater.js:204 +#: src/octoprint/static/js/app/dataupdater.js:202 msgid "Slicing done" msgstr "Slicing abgeschlossen" -#: src/octoprint/static/js/app/dataupdater.js:204 +#: src/octoprint/static/js/app/dataupdater.js:202 #, python-format msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds" msgstr "%(stl)s nach %(gcode)s geslicet, dauerte %(time).2f Sekunden" -#: src/octoprint/static/js/app/dataupdater.js:214 +#: src/octoprint/static/js/app/dataupdater.js:212 #, python-format msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s" msgstr "Konnte %(stl)s nicht nach %(gcode)s slicen: %(reason)s" -#: src/octoprint/static/js/app/dataupdater.js:215 +#: src/octoprint/static/js/app/dataupdater.js:213 msgid "Slicing failed" msgstr "Slicing fehlgeschlagen" -#: src/octoprint/static/js/app/dataupdater.js:219 +#: src/octoprint/static/js/app/dataupdater.js:217 msgid "Streaming ..." msgstr "Streaming ..." -#: src/octoprint/static/js/app/dataupdater.js:225 +#: src/octoprint/static/js/app/dataupdater.js:223 msgid "Streaming done" msgstr "Streaming abgeschlossen" -#: src/octoprint/static/js/app/dataupdater.js:226 +#: src/octoprint/static/js/app/dataupdater.js:224 #, python-format msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" msgstr "%(local)s nach %(remote)s gestreamt, dauerte %(time).2f Sekunden" @@ -2311,6 +2311,20 @@ msgstr "SD-Karte ist nicht initialisiert" msgid "Attempt to reconnect" msgstr "Erneut verbinden" +#: src/octoprint/templates/overlays/reloadui.jinja2:6 +msgid "Please reload" +msgstr "Bitte die Seite neu laden" + +#: src/octoprint/templates/overlays/reloadui.jinja2:7 +msgid "" +"There is a new version of the server active now, a reload of the user " +"interface is needed. This will not interrupt any print jobs you might have " +"ongoing. Please reload the web interface now by clicking the button below." +msgstr "" +"Die Serverversion hat sich geändert, ein Neuladen des Webinterfaces ist " +"notwendig. Das hat keinen Einfluss auf deine evtl. laufenden Printjobs. " +"Bitte lade das Webinterface jetzt neu, indem du auf den Button unten klickst." + #: src/octoprint/templates/sidebar/connection.jinja2:8 msgid "Save connection settings" msgstr "Verbindungseinstellungen speichern" diff --git a/translations/de/LC_MESSAGES/messages.mo b/translations/de/LC_MESSAGES/messages.mo index 166c3216da3471ac95d887eaf0729053a79f0e09..6b4f53965d044f49f7423c4533fd312b0a757ae6 100644 GIT binary patch delta 8936 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 t zF$wRZGLtmGuCO;gPQ9P2@5Mms2T*|?M+Ni|DuAyr2!BNd;6KnF-e63o9*gam-wdWO zfriC63BSSSIFO?~9%tc1{2b%4$6)*UL{$4~oQ$`z1^#Y`tv`oPQooLB&t-LbZV{^e zDtfyAIXT8u(C`WVf}4hs9$Y)zn34D|WV=k~5&UGvWvCRMat7tvS9m|vcffSyBeNSB z>cMxg>cjai=6lZU!<~2ycQL zd=WG86l&tIe0%Dfqn_`D={O2o<5tvj@1xGn`F!%PhAT8E;yYL$eG2SpjlfXqaj3md z#l|=iHNaf-$7NUtS7R&|p~gFkI)s&|LwFwb+$H1{VSXs^_}xb#Z7jdn@H^B4ua2`5 zm7+SH!T|gfm4SbvCcc5n)Lr*^BTlR)ZjSoABi6vKuKtLt_j2{eJPOJ{e@w;4u>}^Q zQg{rB$(%(E)MU{uydP)u`th&9r~u zXpcI)vrzpCu@m!~gA}w!*HDM=F4jWdr)?m0P}ip!>bedRUx=zPYTXO{);!mg*hdgV)8=_G^PE)Wm4nl3Ix6*yE1=aBoDxfOVb@>v*@mq|< z`>4|!Io}4Fh6<=VYQSt%rgBkRHU$;PGtMQbjK7HV^UP)nI&3>osXdO$z+W*6PdWdM z5!4O8ST#T-DnoIofRb@E4#K{;4>fT$>MZ#!wDZ(P^=pX@b^kk2(2576_N)Lk!E{t0 zbKK{PP%B-BEpQ8FVFixD+Kkl)C!(Hv3zfllT)o28E0On`slpikF`w|S3vA{s{FwTO zi|s45c!^!X52#cAE9&sXEVY4lKxHJ|)kk0>>f%L*oOM+*c7WU32&pP0pp&t zf4WV>-qedw8Mx&9&V7Cd$I?E0nSHJtwa53d8wM`7FQhC~VAD|Ig)$u>50fV2nKdmA#jrugyb8nzl{wLJ)73hy=QHSz# z^u_C_!}{a%q+A)OvBIt-0u@Lz)TwWedNF0W`Zm-`4x$FGKn;AtwSR$H(6^|}{DKO^ z_XRs~IBMKzEWi#Pg#-$PsECeY53Iy47_^fA`hl6)9A}}g}tcAl- z{l;Kz^qec*=NmDa_U%aKJo63(t^71<4=+9D!}H(;EAGejMu5 zpF$1%ovZt=wSmMtd!b&z<562Y2SauLms3zmwm6GXk?%pJ?x6D&DzL9m&tFFk^b^)a zpLI49p{VvK)Hp3L1UsPmWjOm{5c8X%6n0=fszZ&J>=p!JW9rRODei@us4phrNK}9? z;CL*?O!QxGw`Kr7M7;omaS8_Ev#xywdLcBdr=UH54fF9B>P69LgS}4asFmlSRxlbB z$OKdXPouVKHI`rrD)8QgHt_MN=cb_gFU5Aas*wE0QaDOOeY}7vcoP+Q{6>3Sl28Nm zMxFlAs1z?k1-=IB;Vx9aa@2V5q0Yp4_xWv%q3*ZIZb{rG@~``tLW5G=2X*ZRqXt}! z8fZIeYYrgWZQjKV*nhL_|0SybFQ^IbqXLY1*^bj1wFTWU4Ev!nQQ%Qf$0ty)(5GCz z6ho;WM6KxWsDZ0c1OI>x@E(R^=oYRnwnFXkYZ!%ZqWV{&p8Eu~plg_b-hB#+D51#S z|E{PG!%-3DqduRE3UmQ#@1H|uWCM1`?Wn*mVgz2t9Q502w`?Tpy|Dl_PBD(w{ohSN z?_~d1?0|u&RE1+hOh8541GTbYsKYoG7049qit{iH4`CkOKqfHR+w7lqci{-?RX7S; zZP(X0`@f7rOBzaXHlD+I*#A}gv-Q zx%HZzc+l&7BhtPb3ov3Q{XGhEDGbF=aTvCG!`=c9wW2c2!tXH~Q+L__KHyZkEA zhV16#;|Wy1C421u@i>YjsR#biZplPEL|{kJ(+4yDWcU0uYERFj_V6<5kX56$B&5{7 z7h+MjqbDX}4z|HX7=@+ihkwVucp8&1YMJ(rsCgF6aI#Jku`YJ))TNX_3qdN$Dq!ThtaqJ+u{B<$$tw97ikE_fVb@F zj6g-$7~?S+>*6pB#PQCjob$0i?JKYn&*5z>K42%_SZ3$hgSBX{!T|i-qfn2+W!G>A zld0cx^|lA?8!i?7X&-=Wof(E2V1%oWarFWWq5TQ$g7Z*Y^fpG~m$($GQR8?E-?jrS zLUmk$THzMgz7uslOHq*@K%J4J=!5U0_PP?)?<3cK0c%pf7$+5}pyCiqm kuxnCNSMFGLW>P@Q4eK*P%WAHx8@XZ0o~W`~d*%lJ4}VW?aR2}S diff --git a/translations/de/LC_MESSAGES/messages.po b/translations/de/LC_MESSAGES/messages.po index ba607700..596d79a6 100644 --- a/translations/de/LC_MESSAGES/messages.po +++ b/translations/de/LC_MESSAGES/messages.po @@ -11,8 +11,8 @@ msgid "" msgstr "" "Project-Id-Version: OctoPrint\n" "Report-Msgid-Bugs-To: i18n@octoprint.org\n" -"POT-Creation-Date: 2015-06-20 01:02+0200\n" -"PO-Revision-Date: 2015-06-20 01:04+0100\n" +"POT-Creation-Date: 2015-06-21 17:58+0200\n" +"PO-Revision-Date: 2015-06-21 18:00+0100\n" "Last-Translator: Gina Häußge \n" "Language-Team: German (http://www.transifex.com/projects/p/octoprint/" "language/de/)\n" @@ -139,97 +139,97 @@ msgstr "Bestätigen" msgid "Plugin Manager" msgstr "Pluginmanager" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:272 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:132 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:275 msgid "Installing plugin..." msgstr "Installiere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:132 msgid "Installing plugin from uploaded archive..." msgstr "Installiere Plugin von hochgeladenem Archiv..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:144 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:220 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:297 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:327 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:571 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:588 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:605 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:147 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:223 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:300 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:330 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:544 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:574 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:591 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:608 msgid "Something went wrong" msgstr "Etwas ist schief gegangen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:145 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:221 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:298 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:328 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:148 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:224 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:301 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:331 msgid "Please consult octoprint.log for details" msgstr "Bitte konsultiere octoprint.log für Details" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:274 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:277 #, python-format msgid "Installing plugin \"%(name)s\" from %(url)s..." msgstr "Installiere Plugin \"%(name)s\" von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:279 #, python-format msgid "Installing plugin from %(url)s..." msgstr "Installiere Plugin von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:279 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:282 msgid "Reinstalling plugin..." msgstr "Reinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:280 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:283 #, python-format msgid "Reinstalling plugin \"%(name)s\" from %(url)s..." msgstr "Reinstalliere Plugin \"%(name)s\" von %(url)s..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:321 msgid "Uninstalling plugin..." msgstr "Deinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:321 #, python-format msgid "Uninstalling plugin \"%(name)s\"" msgstr "Deinstalliere Plugin \"%(name)s\"" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 msgid "Reinstall" msgstr "Reinstallieren" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:130 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:146 msgid "Install" msgstr "Installieren" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 msgid "Incompatible" msgstr "Inkompatibel" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:371 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:374 +#: src/octoprint/templates/overlays/reloadui.jinja2:9 msgid "Reload now" msgstr "Jetzt neu laden" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:440 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:443 msgid "Done!" msgstr "Fertig!" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Enable Plugin" msgstr "Plugin enablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Disable Plugin" msgstr "Plugin disablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:525 -#, python-format +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:528 msgid "Plugin installed" msgstr "Plugin installiert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:526 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:529 msgid "" "A plugin was installed successfully, however it was impossible to detect " "which one. Please Restart OctoPrint to make sure everything will be " @@ -239,16 +239,16 @@ msgstr "" "detektieren, welches. Bitte starte OctoPrint neu um sicherzustellen, dass " "alles ordnungsgemäß registriert wird." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:530 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 #, python-format msgid "Plugin \"%(name)s\" reinstalled" msgstr "Plugin \"%(name)s\" reinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:531 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:534 msgid "The plugin was reinstalled successfully" msgstr "Das Plugin wurde erfolgreich reinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:532 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 msgid "" "The plugin was reinstalled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -256,7 +256,7 @@ msgstr "" "Das Plugin wurde erfolgreich reinstalliert, es ist aber ein Neustart von " "OctoPrint notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:536 msgid "" "The plugin was reinstalled successfully, however a reload of the page is " "needed for that to take effect." @@ -264,16 +264,16 @@ msgstr "" "Das Plugin wurde erfolgreich reinstalliert, es ist aber ein Neuladen der " "Seite notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:538 #, python-format msgid "Plugin \"%(name)s\" installed" msgstr "Plugin \"%(name)s\" installiert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:536 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:539 msgid "The plugin was installed successfully" msgstr "Das Plugin wurde erfolgreich installiert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:537 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:540 msgid "" "The plugin was installed successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -281,7 +281,7 @@ msgstr "" "Das Plugin wurde erfolgreich installiert, es ist jedoch ein Neustart von " "OctoPrint notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:538 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 msgid "" "The plugin was installed successfully, however a reload of the page is " "needed for that to take effect." @@ -289,19 +289,19 @@ msgstr "" "Das Plugin wurde erfolgreich installiert, es ist jedoch ein Neuladen der " "Seite notwendig bevor es genutzt werden kann." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:549 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:552 #, python-format msgid "Reinstalling the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" "Reinstallation des Plugins von URL \"%(url)s\" fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:551 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:554 #, python-format msgid "Installing the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" "Installation des Plugins von URL \"%(url)s\" fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:555 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:558 #, python-format msgid "" "Reinstalling the plugin from URL \"%(url)s\" failed, please see the log for " @@ -310,7 +310,7 @@ msgstr "" "Reinstallation des Plugins von URL \"%(url)s\" fehlgeschlagen, bitte " "konsultiere das Log für Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:557 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:560 #, python-format msgid "" "Installing the plugin from URL \"%(url)s\" failed, please see the log for " @@ -319,16 +319,16 @@ msgstr "" "Installation des Plugins von URL \"%(url)s\" fehlgeschlagen, bitte " "konsultiere das Log für Details" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:566 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:569 #, python-format msgid "Plugin \"%(name)s\" uninstalled" msgstr "Plugin \"%(name)s\" deinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:567 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:570 msgid "The plugin was uninstalled successfully" msgstr "Das Plugin wurde erfolgreich deinstalliert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:568 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:571 msgid "" "The plugin was uninstalled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -336,7 +336,7 @@ msgstr "" "Das Plugin wurde erfolgreich deinstalliert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:569 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:572 msgid "" "The plugin was uninstalled successfully, however a reload of the page is " "needed for that to take effect." @@ -344,27 +344,27 @@ msgstr "" "Das Plugin wurde erfolgreich deinstalliert, es ist jedoch ein Neuladen der " "Seite notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:573 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:576 #, python-format msgid "Uninstalling the plugin failed: %(reason)s" msgstr "Deinstallation des Plugins fehlgeschlagen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:575 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:578 msgid "Uninstalling the plugin failed, please see the log for details." msgstr "" "Deinstallation des Plugins fehlgeschlagen, bitte konsultiere das Log für " "Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:583 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:586 #, python-format msgid "Plugin \"%(name)s\" enabled" msgstr "Plugin \"%(name)s\" aktiviert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:584 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:587 msgid "The plugin was enabled successfully." msgstr "Das Plugin wurde erfolgreich aktiviert." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:585 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:588 msgid "" "The plugin was enabled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -372,7 +372,7 @@ msgstr "" "Das Plugin wurde erfolgreich aktiviert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:586 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:589 msgid "" "The plugin was enabled successfully, however a reload of the page is needed " "for that to take effect." @@ -380,28 +380,28 @@ msgstr "" "Das Plugin wurde erfolgreich aktiviert, es ist jedoch ein Neuladen der Seite " "notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:590 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:607 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:593 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:610 #, python-format msgid "Toggling the plugin failed: %(reason)s" msgstr "Togglen des Plugins fehlgeschalgen: %(reason)s" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:592 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:609 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:595 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:612 msgid "Toggling the plugin failed, please see the log for details." msgstr "" "Togglen des Plugins fehlgeschlagen, bitte konsultiere das Log für Details." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:600 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:603 #, python-format msgid "Plugin \"%(name)s\" disabled" msgstr "Plugin \"%(name)s\" deaktiviert" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:601 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:604 msgid "The plugin was disabled successfully." msgstr "Das Plugin wurde erfolgreich deaktiviert." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:602 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:605 msgid "" "The plugin was disabled successfully, however a restart of OctoPrint is " "needed for that to take effect." @@ -409,7 +409,7 @@ msgstr "" "Das Plugin wurde erfolgreich deaktiviert, es ist jedoch ein Neustart von " "OctoPrint notwendig." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:603 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:606 msgid "" "The plugin was disabled successfully, however a reload of the page is needed " "for that to take effect." @@ -546,7 +546,7 @@ msgid "" msgstr "" "Übergebe --process-dependency-links an pip install" -#: src/octoprint/plugins/softwareupdate/__init__.py:486 +#: src/octoprint/plugins/softwareupdate/__init__.py:499 #: src/octoprint/server/views.py:146 #: src/octoprint/static/js/app/viewmodels/appearance.js:11 #: src/octoprint/static/js/app/viewmodels/appearance.js:13 @@ -883,14 +883,14 @@ msgstr "Zugriff" msgid "Interface" msgstr "Interface" -#: src/octoprint/static/js/app/dataupdater.js:61 -#: src/octoprint/static/js/app/dataupdater.js:95 +#: src/octoprint/static/js/app/dataupdater.js:65 +#: src/octoprint/static/js/app/dataupdater.js:99 #: src/octoprint/static/js/app/helpers.js:436 #: src/octoprint/templates/overlays/offline.jinja2:6 msgid "Server is offline" msgstr "Der Server ist offline" -#: src/octoprint/static/js/app/dataupdater.js:62 +#: src/octoprint/static/js/app/dataupdater.js:66 msgid "" "The server appears to be offline, at least I'm not getting any response from " "it. I'll try to reconnect automatically over the next couple of " @@ -902,7 +902,7 @@ msgstr "" "erneut zu verbinden, aber Du kannst mittels des folgenden Buttons auch " "jederzeit einen manuellen Verbindungsversuch anstoßen." -#: src/octoprint/static/js/app/dataupdater.js:96 +#: src/octoprint/static/js/app/dataupdater.js:100 msgid "" "The server appears to be offline, at least I'm not getting any response from " "it. I could not reconnect automatically, but you may try a " @@ -913,31 +913,31 @@ msgstr "" "aber Du kannst mittels des folgenden Buttons einen manuellen " "Verbindungsversuch anstoßen." -#: src/octoprint/static/js/app/dataupdater.js:168 -#: src/octoprint/static/js/app/dataupdater.js:196 +#: src/octoprint/static/js/app/dataupdater.js:166 +#: src/octoprint/static/js/app/dataupdater.js:194 #, python-format msgid "Slicing ... (%(percentage)d%%)" msgstr "Slice ... (%(percentage)d%%)" -#: src/octoprint/static/js/app/dataupdater.js:185 +#: src/octoprint/static/js/app/dataupdater.js:183 msgid "Rendering timelapse" msgstr "Zeitrafferaufnahme wird gerendert" -#: src/octoprint/static/js/app/dataupdater.js:185 +#: src/octoprint/static/js/app/dataupdater.js:183 #, python-format msgid "Now rendering timelapse %(movie_basename)s" msgstr "Rendere Zeitrafferaufnahme %(movie_basename)s" -#: src/octoprint/static/js/app/dataupdater.js:187 +#: src/octoprint/static/js/app/dataupdater.js:185 msgid "Timelapse ready" msgstr "Zeitrafferaufnahme fertig" -#: src/octoprint/static/js/app/dataupdater.js:187 +#: src/octoprint/static/js/app/dataupdater.js:185 #, python-format msgid "New timelapse %(movie_basename)s is done rendering." msgstr "Neue Zeitrafferaufnahme %(movie_basename)s wurde fertig gerendert" -#: src/octoprint/static/js/app/dataupdater.js:189 +#: src/octoprint/static/js/app/dataupdater.js:187 #, python-format msgid "" "Rendering of timelapse %(movie_basename)s failed with return code " @@ -946,41 +946,41 @@ msgstr "" "Rendering der Zeitrafferaufnahme %(movie_basename)s fehlgeschlagen mit " "Returncode %(returncode)s" -#: src/octoprint/static/js/app/dataupdater.js:191 +#: src/octoprint/static/js/app/dataupdater.js:189 msgid "Rendering failed" msgstr "Rendering fehlgeschlagen" -#: src/octoprint/static/js/app/dataupdater.js:198 +#: src/octoprint/static/js/app/dataupdater.js:196 msgid "Slicing ..." msgstr "Slice ..." -#: src/octoprint/static/js/app/dataupdater.js:204 +#: src/octoprint/static/js/app/dataupdater.js:202 msgid "Slicing done" msgstr "Slicing abgeschlossen" -#: src/octoprint/static/js/app/dataupdater.js:204 +#: src/octoprint/static/js/app/dataupdater.js:202 #, python-format msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds" msgstr "%(stl)s nach %(gcode)s geslicet, dauerte %(time).2f Sekunden" -#: src/octoprint/static/js/app/dataupdater.js:214 +#: src/octoprint/static/js/app/dataupdater.js:212 #, python-format msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s" msgstr "Konnte %(stl)s nicht nach %(gcode)s slicen: %(reason)s" -#: src/octoprint/static/js/app/dataupdater.js:215 +#: src/octoprint/static/js/app/dataupdater.js:213 msgid "Slicing failed" msgstr "Slicing fehlgeschlagen" -#: src/octoprint/static/js/app/dataupdater.js:219 +#: src/octoprint/static/js/app/dataupdater.js:217 msgid "Streaming ..." msgstr "Streaming ..." -#: src/octoprint/static/js/app/dataupdater.js:225 +#: src/octoprint/static/js/app/dataupdater.js:223 msgid "Streaming done" msgstr "Streaming abgeschlossen" -#: src/octoprint/static/js/app/dataupdater.js:226 +#: src/octoprint/static/js/app/dataupdater.js:224 #, python-format msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" msgstr "%(local)s nach %(remote)s gestreamt, dauerte %(time).2f Sekunden" @@ -2311,6 +2311,20 @@ msgstr "SD-Karte ist nicht initialisiert" msgid "Attempt to reconnect" msgstr "Erneut verbinden" +#: src/octoprint/templates/overlays/reloadui.jinja2:6 +msgid "Please reload" +msgstr "Bitte die Seite neu laden" + +#: src/octoprint/templates/overlays/reloadui.jinja2:7 +msgid "" +"There is a new version of the server active now, a reload of the user " +"interface is needed. This will not interrupt any print jobs you might have " +"ongoing. Please reload the web interface now by clicking the button below." +msgstr "" +"Die Serverversion hat sich geändert, ein Neuladen des Webinterfaces ist " +"notwendig. Das hat keinen Einfluss auf deine evtl. laufenden Printjobs. " +"Bitte lade das Webinterface jetzt neu, indem du auf den Button unten klickst." + #: src/octoprint/templates/sidebar/connection.jinja2:8 msgid "Save connection settings" msgstr "Verbindungseinstellungen speichern" diff --git a/translations/messages.pot b/translations/messages.pot index 1a110bfa..677f3471 100644 --- a/translations/messages.pot +++ b/translations/messages.pot @@ -6,9 +6,9 @@ #, fuzzy msgid "" msgstr "" -"Project-Id-Version: OctoPrint 1.2.0-rc1-34-g61bd803\n" +"Project-Id-Version: OctoPrint 1.2.0-rc3-2-g33ea9c3-dirty\n" "Report-Msgid-Bugs-To: i18n@octoprint.org\n" -"POT-Creation-Date: 2015-06-20 01:02+0200\n" +"POT-Creation-Date: 2015-06-21 17:58+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -132,246 +132,247 @@ msgstr "" msgid "Plugin Manager" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:272 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:132 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:275 msgid "Installing plugin..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:129 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:132 msgid "Installing plugin from uploaded archive..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:144 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:220 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:297 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:327 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:571 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:588 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:605 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:147 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:223 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:300 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:330 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:544 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:574 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:591 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:608 msgid "Something went wrong" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:145 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:221 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:298 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:328 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:148 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:224 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:301 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:331 msgid "Please consult octoprint.log for details" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:274 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:277 #, python-format msgid "Installing plugin \"%(name)s\" from %(url)s..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:279 #, python-format msgid "Installing plugin from %(url)s..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:279 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:282 msgid "Reinstalling plugin..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:280 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:283 #, python-format msgid "Reinstalling plugin \"%(name)s\" from %(url)s..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:321 msgid "Uninstalling plugin..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:318 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:321 #, python-format msgid "Uninstalling plugin \"%(name)s\"" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 msgid "Reinstall" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:130 #: src/octoprint/plugins/pluginmanager/templates/pluginmanager_settings.jinja2:146 msgid "Install" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:353 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 msgid "Incompatible" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:371 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:374 +#: src/octoprint/templates/overlays/reloadui.jinja2:9 msgid "Reload now" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:440 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:443 msgid "Done!" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Enable Plugin" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:460 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Disable Plugin" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:525 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:528 msgid "Plugin installed" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:526 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:529 msgid "" "A plugin was installed successfully, however it was impossible to detect " "which one. Please Restart OctoPrint to make sure everything will be " "registered properly" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:530 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 #, python-format msgid "Plugin \"%(name)s\" reinstalled" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:531 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:534 msgid "The plugin was reinstalled successfully" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:532 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 msgid "" "The plugin was reinstalled successfully, however a restart of OctoPrint " "is needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:533 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:536 msgid "" "The plugin was reinstalled successfully, however a reload of the page is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:535 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:538 #, python-format msgid "Plugin \"%(name)s\" installed" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:536 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:539 msgid "The plugin was installed successfully" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:537 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:540 msgid "" "The plugin was installed successfully, however a restart of OctoPrint is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:538 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:541 msgid "" "The plugin was installed successfully, however a reload of the page is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:549 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:552 #, python-format msgid "Reinstalling the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:551 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:554 #, python-format msgid "Installing the plugin from URL \"%(url)s\" failed: %(reason)s" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:555 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:558 #, python-format msgid "" "Reinstalling the plugin from URL \"%(url)s\" failed, please see the log " "for details." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:557 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:560 #, python-format msgid "" "Installing the plugin from URL \"%(url)s\" failed, please see the log for" " details." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:566 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:569 #, python-format msgid "Plugin \"%(name)s\" uninstalled" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:567 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:570 msgid "The plugin was uninstalled successfully" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:568 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:571 msgid "" "The plugin was uninstalled successfully, however a restart of OctoPrint " "is needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:569 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:572 msgid "" "The plugin was uninstalled successfully, however a reload of the page is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:573 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:576 #, python-format msgid "Uninstalling the plugin failed: %(reason)s" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:575 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:578 msgid "Uninstalling the plugin failed, please see the log for details." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:583 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:586 #, python-format msgid "Plugin \"%(name)s\" enabled" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:584 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:587 msgid "The plugin was enabled successfully." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:585 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:588 msgid "" "The plugin was enabled successfully, however a restart of OctoPrint is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:586 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:589 msgid "" "The plugin was enabled successfully, however a reload of the page is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:590 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:607 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:593 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:610 #, python-format msgid "Toggling the plugin failed: %(reason)s" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:592 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:609 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:595 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:612 msgid "Toggling the plugin failed, please see the log for details." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:600 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:603 #, python-format msgid "Plugin \"%(name)s\" disabled" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:601 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:604 msgid "The plugin was disabled successfully." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:602 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:605 msgid "" "The plugin was disabled successfully, however a restart of OctoPrint is " "needed for that to take effect." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:603 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:606 msgid "" "The plugin was disabled successfully, however a reload of the page is " "needed for that to take effect." @@ -498,7 +499,7 @@ msgstr "" msgid "Use --process-dependency-links with pip install" msgstr "" -#: src/octoprint/plugins/softwareupdate/__init__.py:486 +#: src/octoprint/plugins/softwareupdate/__init__.py:499 #: src/octoprint/server/views.py:146 #: src/octoprint/static/js/app/viewmodels/appearance.js:11 #: src/octoprint/static/js/app/viewmodels/appearance.js:13 @@ -805,14 +806,14 @@ msgstr "" msgid "Interface" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:61 -#: src/octoprint/static/js/app/dataupdater.js:95 +#: src/octoprint/static/js/app/dataupdater.js:65 +#: src/octoprint/static/js/app/dataupdater.js:99 #: src/octoprint/static/js/app/helpers.js:436 #: src/octoprint/templates/overlays/offline.jinja2:6 msgid "Server is offline" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:62 +#: src/octoprint/static/js/app/dataupdater.js:66 msgid "" "The server appears to be offline, at least I'm not getting any response " "from it. I'll try to reconnect automatically over the next couple" @@ -820,79 +821,79 @@ msgid "" "anytime using the button below." msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:96 +#: src/octoprint/static/js/app/dataupdater.js:100 msgid "" "The server appears to be offline, at least I'm not getting any response " "from it. I could not reconnect automatically, but you " "may try a manual reconnect using the button below." msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:168 -#: src/octoprint/static/js/app/dataupdater.js:196 +#: src/octoprint/static/js/app/dataupdater.js:166 +#: src/octoprint/static/js/app/dataupdater.js:194 #, python-format msgid "Slicing ... (%(percentage)d%%)" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:185 +#: src/octoprint/static/js/app/dataupdater.js:183 msgid "Rendering timelapse" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:185 +#: src/octoprint/static/js/app/dataupdater.js:183 #, python-format msgid "Now rendering timelapse %(movie_basename)s" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:187 +#: src/octoprint/static/js/app/dataupdater.js:185 msgid "Timelapse ready" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:187 +#: src/octoprint/static/js/app/dataupdater.js:185 #, python-format msgid "New timelapse %(movie_basename)s is done rendering." msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:189 +#: src/octoprint/static/js/app/dataupdater.js:187 #, python-format msgid "" "Rendering of timelapse %(movie_basename)s failed with return code " "%(returncode)s" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:191 +#: src/octoprint/static/js/app/dataupdater.js:189 msgid "Rendering failed" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:198 +#: src/octoprint/static/js/app/dataupdater.js:196 msgid "Slicing ..." msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:204 +#: src/octoprint/static/js/app/dataupdater.js:202 msgid "Slicing done" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:204 +#: src/octoprint/static/js/app/dataupdater.js:202 #, python-format msgid "Sliced %(stl)s to %(gcode)s, took %(time).2f seconds" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:214 +#: src/octoprint/static/js/app/dataupdater.js:212 #, python-format msgid "Could not slice %(stl)s to %(gcode)s: %(reason)s" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:215 +#: src/octoprint/static/js/app/dataupdater.js:213 msgid "Slicing failed" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:219 +#: src/octoprint/static/js/app/dataupdater.js:217 msgid "Streaming ..." msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:225 +#: src/octoprint/static/js/app/dataupdater.js:223 msgid "Streaming done" msgstr "" -#: src/octoprint/static/js/app/dataupdater.js:226 +#: src/octoprint/static/js/app/dataupdater.js:224 #, python-format msgid "Streamed %(local)s to %(remote)s on SD, took %(time).2f seconds" msgstr "" @@ -2125,6 +2126,18 @@ msgstr "" msgid "Attempt to reconnect" msgstr "" +#: src/octoprint/templates/overlays/reloadui.jinja2:6 +msgid "Please reload" +msgstr "" + +#: src/octoprint/templates/overlays/reloadui.jinja2:7 +msgid "" +"There is a new version of the server active now, a reload of the user " +"interface is needed. This will not interrupt any print jobs you might " +"have ongoing. Please reload the web interface now by clicking the button " +"below." +msgstr "" + #: src/octoprint/templates/sidebar/connection.jinja2:8 msgid "Save connection settings" msgstr "" From 7e6ddaf0d6a92cfa3be7426a0359a94f6b7dcef6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 22 Jun 2015 12:59:39 +0200 Subject: [PATCH 13/17] Plugins can now have a folder for plugin related data Path can be queried from settings. --- src/octoprint/plugin/__init__.py | 11 +++++++++++ src/octoprint/settings.py | 3 ++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/octoprint/plugin/__init__.py b/src/octoprint/plugin/__init__.py index 4dde566f..ce7224b3 100644 --- a/src/octoprint/plugin/__init__.py +++ b/src/octoprint/plugin/__init__.py @@ -426,6 +426,17 @@ class PluginSettings(object): filename += ".log" return os.path.join(self.settings.getBaseFolder("logs"), filename) + def get_plugin_data_folder(self): + """ + Retrieves the path to a data folder specifically for the plugin. + + Plugins may use this for storing additional data. + """ + path = os.path.join(self.settings.getBaseFolder("data"), self.plugin_key) + if not os.path.isdir(path): + os.makedirs(path) + return path + def __getattr__(self, item): all_access_methods = self.access_methods.keys() + self.deprecated_access_methods.keys() if item in all_access_methods: diff --git a/src/octoprint/settings.py b/src/octoprint/settings.py index f4b2cf09..15ca4df9 100644 --- a/src/octoprint/settings.py +++ b/src/octoprint/settings.py @@ -156,7 +156,8 @@ default_settings = { "printerProfiles": None, "scripts": None, "translations": None, - "generated": None + "generated": None, + "data": None }, "temperature": { "profiles": [ From 326fc943b728b212187094964a4c57241df8a2e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 22 Jun 2015 13:00:29 +0200 Subject: [PATCH 14/17] Plugin Manager: Cache repository list locally Reduces requests against github upon server restarts. --- .../plugins/pluginmanager/__init__.py | 54 +++++++++++++++++-- 1 file changed, 49 insertions(+), 5 deletions(-) diff --git a/src/octoprint/plugins/pluginmanager/__init__.py b/src/octoprint/plugins/pluginmanager/__init__.py index 3b254b33..e59de75e 100644 --- a/src/octoprint/plugins/pluginmanager/__init__.py +++ b/src/octoprint/plugins/pluginmanager/__init__.py @@ -21,6 +21,7 @@ import sarge import sys import requests import re +import os class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, octoprint.plugin.TemplatePlugin, @@ -37,9 +38,13 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, self._repository_available = False self._repository_plugins = [] + self._repository_cache_path = None + self._repository_cache_ttl = 0 def initialize(self): self._console_logger = logging.getLogger("octoprint.plugins.pluginmanager.console") + self._repository_cache_path = os.path.join(self._settings.get_plugin_data_folder(), "plugins.json") + self._repository_cache_ttl = self._settings.get_int(["repository_ttl"]) * 60 ##~~ StartupPlugin @@ -52,17 +57,22 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, self._console_logger.setLevel(logging.DEBUG) self._console_logger.propagate = False - self._repository_available = self._refresh_repository() + self._repository_available = self._fetch_repository_from_disk() ##~~ SettingsPlugin def get_settings_defaults(self): return dict( repository="http://plugins.octoprint.org/plugins.json", + repository_ttl=24*60, pip=None, dependency_links=False ) + def on_settings_save(self, data): + octoprint.plugin.SettingsPlugin.on_settings_save(self, data) + self._repository_cache_ttl = self._settings.get_int(["repository_ttl"]) * 60 + ##~~ AssetPlugin def get_assets(self): @@ -499,14 +509,48 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, elif plugin.enabled and plugin.key not in self._pending_disable: self._pending_disable.add(plugin.key) - def _refresh_repository(self): + def _fetch_repository_from_disk(self): + repo_data = None + if os.path.isfile(self._repository_cache_path): + import time + mtime = os.path.getmtime(self._repository_cache_path) + if mtime + self._repository_cache_ttl >= time.time() > mtime: + try: + import json + with open(self._repository_cache_path) as f: + repo_data = json.load(f) + self._logger.info("Loaded plugin repository data from disk, was still valid") + except: + self._logger.exception("Error while loading repository data from {}".format(self._repository_cache_path)) + + return self._refresh_repository(repo_data=repo_data) + + def _fetch_repository_from_url(self): import requests repository_url = self._settings.get(["repository"]) try: r = requests.get(repository_url) + self._logger.info("Loaded plugin repository data from {}".format(repository_url)) except Exception as e: - self._logger.warn("Could not fetch plugins from repository at {repository_url}: {message}".format(repository_url=repository_url, message=str(e))) - return False + self._logger.exception("Could not fetch plugins from repository at {repository_url}: {message}".format(repository_url=repository_url, message=str(e))) + return None + + repo_data = r.json() + + try: + import json + with open(self._repository_cache_path, "w+b") as f: + json.dump(repo_data, f) + except Exception as e: + self._logger.exception("Error while saving repository data to {}: {}".format(self._repository_cache_path, str(e))) + + return repo_data + + def _refresh_repository(self, repo_data=None): + if repo_data is None: + repo_data = self._fetch_repository_from_url() + if repo_data is None: + return False current_os = self._get_os() octoprint_version = self._get_octoprint_version() @@ -539,7 +583,7 @@ class PluginManagerPlugin(octoprint.plugin.SimpleApiPlugin, return result - self._repository_plugins = map(map_repository_entry, r.json()) + self._repository_plugins = map(map_repository_entry, repo_data) return True def _get_os(self): From 0f818a313d51f7b98c86b7f9070a18d78cabae01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 22 Jun 2015 13:03:23 +0200 Subject: [PATCH 15/17] Software Update: Default to pkg_resources for version comparison That's also able to cope with 0.3a and similar "non-semantic" version schemes. Semantic version comparison can still be forced by setting the compare_type in the check to "semantic". Strict equality check can be set similarly by using the value "unequal". --- .../version_checks/github_release.py | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/octoprint/plugins/softwareupdate/version_checks/github_release.py b/src/octoprint/plugins/softwareupdate/version_checks/github_release.py index 94823eef..0d2abf69 100644 --- a/src/octoprint/plugins/softwareupdate/version_checks/github_release.py +++ b/src/octoprint/plugins/softwareupdate/version_checks/github_release.py @@ -48,11 +48,19 @@ def _is_current(release_information, compare_type, custom=None): if release_information["remote"]["value"] is None: return True - if not compare_type in ("semantic", "unequal", "custom") or compare_type == "custom" and custom is None: - compare_type = "semantic" + if not compare_type in ("python", "semantic", "unequal", "custom") or compare_type == "custom" and custom is None: + compare_type = "python" try: - if compare_type == "semantic": + if compare_type == "python": + import pkg_resources + + local_version = pkg_resources.parse_version(release_information["local"]["value"]) + remote_version = pkg_resources.parse_version(release_information["remote"]["value"]) + + return local_version >= remote_version + + elif compare_type == "semantic": import semantic_version local_version = semantic_version.Version(release_information["local"]["value"]) @@ -79,7 +87,7 @@ def get_latest(target, check, custom_compare=None): current = check["current"] remote_name, remote_tag = _get_latest_release(check["user"], check["repo"], include_prerelease=check["prerelease"] == True if "prerelease" in check else False) - compare_type = check["release_compare"] if "release_compare" in check else "semantic" + compare_type = check["release_compare"] if "release_compare" in check else "python" information =dict( local=dict(name=current, value=current), From 030b6b447881e215d7fcc1b4e2c3911986d549cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 22 Jun 2015 13:05:03 +0200 Subject: [PATCH 16/17] Software Update: version cache will be written to disk Reduces number of requests done against (rate limited) github API, especially after consecutive server restarts. Forcing the update check still will query the API. --- .../plugins/softwareupdate/__init__.py | 52 ++++++++++++++++++- 1 file changed, 50 insertions(+), 2 deletions(-) diff --git a/src/octoprint/plugins/softwareupdate/__init__.py b/src/octoprint/plugins/softwareupdate/__init__.py index fd3bd0d1..779c6af0 100644 --- a/src/octoprint/plugins/softwareupdate/__init__.py +++ b/src/octoprint/plugins/softwareupdate/__init__.py @@ -37,9 +37,13 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, self._version_cache = dict() self._version_cache_ttl = 0 + self._version_cache_path = None + self._version_cache_dirty = False def initialize(self): self._version_cache_ttl = self._settings.get_int(["cache_ttl"]) * 60 + self._version_cache_path = os.path.join(self._settings.get_plugin_data_folder(), "versioncache.yaml") + self._load_version_cache() def refresh_checks(name, plugin): self._refresh_configured_checks = True @@ -67,6 +71,41 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, return self._configured_checks + def _load_version_cache(self): + if not os.path.isfile(self._version_cache_path): + return + + import yaml + try: + with open(self._version_cache_path) as f: + data = yaml.safe_load(f) + except: + self._logger.exception("Error while loading version cache from disk") + else: + self._version_cache = data + self._version_cache_dirty = False + self._logger.info("Loaded version cache from disk") + + def _save_version_cache(self): + import tempfile + import yaml + import shutil + + file_obj = tempfile.NamedTemporaryFile(delete=False) + try: + yaml.safe_dump(self._version_cache, stream=file_obj, default_flow_style=False, indent=" ", allow_unicode=True) + file_obj.close() + shutil.move(file_obj.name, self._version_cache_path) + + self._version_cache_dirty = False + self._logger.info("Saved version cache to disk") + finally: + try: + if os.path.exists(file_obj.name): + os.remove(file_obj.name) + except Exception as e: + self._logger.warn("Could not delete file {}: {}".format(file_obj.name, str(e))) + #~~ SettingsPlugin API def get_settings_defaults(self): @@ -84,7 +123,7 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, "octoprint_restart_command": None, "environment_restart_command": None, - "cache_ttl": 60, + "cache_ttl": 24 * 60, } def on_settings_save(self, data): @@ -280,6 +319,8 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, local_value = target_information["local"]["value"] information[target]["displayVersion"] = check["displayVersion"].format(octoprint_version=octoprint_version, local_name=local_name, local_value=local_value) + if self._version_cache_dirty: + self._save_version_cache() return information, update_available, update_possible def _get_current_version(self, target, check, force=False): @@ -289,7 +330,8 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, if target in self._version_cache and not force: timestamp, information, update_available, update_possible = self._version_cache[target] - if timestamp + self._version_cache_ttl >= time.time(): + if timestamp + self._version_cache_ttl >= time.time() > timestamp: + # we also check that timestamp < now to not get confused too much by clock changes return information, update_available, update_possible information = dict() @@ -314,6 +356,7 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, update_possible = False self._version_cache[target] = (time.time(), information, update_available, update_possible) + self._version_cache_dirty = True return information, update_available, update_possible def _send_client_message(self, message_type, data=None): @@ -390,6 +433,8 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, self._send_client_message("error", dict(results=target_results)) else: + self._save_version_cache() + # otherwise the update process was a success, but we might still have to restart if restart_type is not None and restart_type in ("octoprint", "environment"): # one of our updates requires a restart of either type "octoprint" or "environment". Let's see if @@ -468,6 +513,9 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, # load will overwrite our changes we just made self._settings.save() + del self._version_cache[target] + self._version_cache_dirty = True + return target_error, target_result def _perform_restart(self, restart_command): From e230cfb3f3766018aceb0b3988bc16e37f02147f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gina=20H=C3=A4u=C3=9Fge?= Date: Mon, 22 Jun 2015 13:07:22 +0200 Subject: [PATCH 17/17] Software Update fix: Use pip command line instead of module --- .../plugins/softwareupdate/__init__.py | 3 + .../plugins/softwareupdate/updaters/pip.py | 111 +++++++++++++++--- 2 files changed, 98 insertions(+), 16 deletions(-) diff --git a/src/octoprint/plugins/softwareupdate/__init__.py b/src/octoprint/plugins/softwareupdate/__init__.py index 779c6af0..1efdb064 100644 --- a/src/octoprint/plugins/softwareupdate/__init__.py +++ b/src/octoprint/plugins/softwareupdate/__init__.py @@ -122,6 +122,7 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, "octoprint_restart_command": None, "environment_restart_command": None, + "pip_command": None, "cache_ttl": 24 * 60, } @@ -571,6 +572,8 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, if "update_script" in check: return updaters.update_script elif "pip" in check: + if not "pip_command" in check and self._settings.get(["pip_command"]) is not None: + check["pip_command"] = self._settings.get(["pip_command"]) return updaters.pip elif "python_updater" in check: return updaters.python_updater diff --git a/src/octoprint/plugins/softwareupdate/updaters/pip.py b/src/octoprint/plugins/softwareupdate/updaters/pip.py index 3b1eeac4..c6f8e590 100644 --- a/src/octoprint/plugins/softwareupdate/updaters/pip.py +++ b/src/octoprint/plugins/softwareupdate/updaters/pip.py @@ -7,19 +7,19 @@ __copyright__ = "Copyright (C) 2014 The OctoPrint Project - Released under terms import logging +import sarge +import sys -try: - import pip as _pip -except: - _pip = None - +logger = logging.getLogger("octoprint.plugins.softwareupdate.updaters.pip") +console_logger = logging.getLogger("octoprint.plugins.softwareupdate.updaters.pip.console") def can_perform_update(target, check): - return "pip" in check and _pip is not None - + return "pip" in check def perform_update(target, check, target_version): - logger = logging.getLogger("octoprint.plugins.softwareupdate.updaters.pip") + pip_command = None + if "pip_command" in check: + pip_command = check["pip_command"] install_arg = check["pip"].format(target_version=target_version) @@ -27,15 +27,94 @@ def perform_update(target, check, target_version): pip_args = ["install", check["pip"].format(target_version=target_version, target=target_version)] if "dependency_links" in check and check["dependency_links"]: - pip_args += "--process-dependency-links" + pip_args += ["--process-dependency-links"] - _pip.main(pip_args) + _call_pip(pip_args, pip_command=pip_command) - if "force_reinstall" in check and check["force_reinstall"]: - # if force_reinstall is true, we need to install the package a second time, this time forcing its reinstall - # without forcing its dependencies too - logger.debug("Target. %s, executing pip install %s --ignore-reinstalled --force-reinstall --no-deps" % (target, install_arg)) - pip_args += ["--ignore-installed", "--force-reinstall", "--no-deps"] - _pip.main(pip_args) + logger.debug("Target. %s, executing pip install %s --ignore-reinstalled --force-reinstall --no-deps" % (target, install_arg)) + pip_args += ["--ignore-installed", "--force-reinstall", "--no-deps"] + _call_pip(pip_args, pip_command=pip_command) return "ok" + +def _call_pip(args, pip_command=None): + if pip_command is None: + import os + python_command = sys.executable + binary_dir = os.path.dirname(python_command) + + pip_command = os.path.join(binary_dir, "pip") + if sys.platform == "win32": + # Windows is a bit special... first of all the file will be called pip.exe, not just pip, and secondly + # for a non-virtualenv install (e.g. global install) the pip binary will not be located in the + # same folder as python.exe, but in a subfolder Scripts, e.g. + # + # C:\Python2.7\ + # |- python.exe + # `- Scripts + # `- pip.exe + + # virtual env? + pip_command = os.path.join(binary_dir, "pip.exe") + + if not os.path.isfile(pip_command): + # nope, let's try the Scripts folder then + scripts_dir = os.path.join(binary_dir, "Scripts") + if os.path.isdir(scripts_dir): + pip_command = os.path.join(scripts_dir, "pip.exe") + + if not os.path.isfile(pip_command) or not os.access(pip_command, os.X_OK): + raise RuntimeError(u"No pip path configured and {pip_command} does not exist or is not executable, can't install".format(**locals())) + + command = [pip_command] + args + + logger.debug(u"Calling: {}".format(" ".join(command))) + + p = sarge.run(" ".join(command), shell=True, async=True, stdout=sarge.Capture(), stderr=sarge.Capture()) + p.wait_events() + + all_stdout = [] + all_stderr = [] + try: + while p.returncode is None: + line = p.stderr.readline(timeout=0.5) + if line: + _log_stderr(line) + all_stderr.append(line) + + line = p.stdout.readline(timeout=0.5) + if line: + _log_stdout(line) + all_stdout.append(line) + + p.commands[0].poll() + + finally: + p.close() + + stderr = p.stderr.text + if stderr: + split_lines = stderr.split("\n") + _log_stderr(*split_lines) + all_stderr += split_lines + + stdout = p.stdout.text + if stdout: + split_lines = stdout.split("\n") + _log_stdout(*split_lines) + all_stdout += split_lines + + return p.returncode, all_stdout, all_stderr + +def _log_stdout(*lines): + _log(lines, prefix=">", stream="stdout") + +def _log_stderr(*lines): + _log(lines, prefix="!", stream="stderr") + +def _log(lines, prefix=None, stream=None, strip=True): + if strip: + lines = map(lambda x: x.strip(), lines) + for line in lines: + console_logger.debug(u"{prefix} {line}".format(**locals())) +