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 diff --git a/src/octoprint/filemanager/analysis.py b/src/octoprint/filemanager/analysis.py index ca7edabb..cd4ca7fd 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 @@ -188,20 +194,26 @@ 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}) - 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/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/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/plugins/pluginmanager/__init__.py b/src/octoprint/plugins/pluginmanager/__init__.py index e7bde03c..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): @@ -241,12 +251,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() @@ -480,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() @@ -520,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): 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."); diff --git a/src/octoprint/plugins/softwareupdate/__init__.py b/src/octoprint/plugins/softwareupdate/__init__.py index 0d2c96af..1efdb064 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): @@ -83,8 +122,9 @@ class SoftwareUpdatePlugin(octoprint.plugin.BlueprintPlugin, "octoprint_restart_command": None, "environment_restart_command": None, + "pip_command": None, - "cache_ttl": 60, + "cache_ttl": 24 * 60, } def on_settings_save(self, data): @@ -92,7 +132,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: @@ -100,15 +140,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", 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") @@ -129,6 +172,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 = [] @@ -264,6 +320,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): @@ -273,7 +331,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() @@ -298,6 +357,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): @@ -374,6 +434,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 @@ -452,6 +514,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): @@ -507,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())) + 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), 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 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: 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/settings.py b/src/octoprint/settings.py index a024338b..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": [ @@ -789,7 +790,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 +808,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 +833,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 +854,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 +865,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 +876,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): @@ -969,7 +970,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 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 6684edf9..6b4f5396 100644 Binary files a/src/octoprint/translations/de/LC_MESSAGES/messages.mo and b/src/octoprint/translations/de/LC_MESSAGES/messages.mo differ diff --git a/src/octoprint/translations/de/LC_MESSAGES/messages.po b/src/octoprint/translations/de/LC_MESSAGES/messages.po index 68ea56f9..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-09 14:48+0200\n" -"PO-Revision-Date: 2015-06-09 14:48+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" @@ -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:132 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:275 msgid "Installing plugin..." msgstr "Installiere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:110 +#: 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: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: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: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: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:236 +#: 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:238 +#: 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:241 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:282 msgid "Reinstalling plugin..." msgstr "Reinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:242 +#: 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:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:321 msgid "Uninstalling plugin..." msgstr "Deinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: 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:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 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: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:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 msgid "Incompatible" msgstr "Inkompatibel" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:331 +#: 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:400 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:443 msgid "Done!" msgstr "Fertig!" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Enable Plugin" msgstr "Plugin enablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Disable Plugin" msgstr "Plugin disablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:479 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:528 +msgid "Plugin installed" +msgstr "Plugin installiert" + +#: 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 "" +"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:533 #, 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:534 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:535 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:536 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:538 #, 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:539 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:540 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:541 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: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:500 +#: 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:504 +#: 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 " @@ -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:560 #, 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:569 #, 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:570 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:571 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:572 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: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:524 +#: 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:532 +#: 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:533 +#: 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:534 +#: 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." @@ -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:589 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: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:541 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:558 +#: 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:549 +#: 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:550 +#: 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:551 +#: 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." @@ -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:606 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: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 @@ -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 "" @@ -853,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/helpers.js:423 +#: 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 " @@ -872,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 " @@ -883,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 " @@ -916,56 +946,56 @@ 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" -#: 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" @@ -2281,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/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) diff --git a/translations/de/LC_MESSAGES/messages.mo b/translations/de/LC_MESSAGES/messages.mo index 6684edf9..6b4f5396 100644 Binary files a/translations/de/LC_MESSAGES/messages.mo and b/translations/de/LC_MESSAGES/messages.mo differ diff --git a/translations/de/LC_MESSAGES/messages.po b/translations/de/LC_MESSAGES/messages.po index 68ea56f9..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-09 14:48+0200\n" -"PO-Revision-Date: 2015-06-09 14:48+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" @@ -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:132 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:275 msgid "Installing plugin..." msgstr "Installiere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:110 +#: 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: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: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: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: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:236 +#: 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:238 +#: 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:241 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:282 msgid "Reinstalling plugin..." msgstr "Reinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:242 +#: 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:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:321 msgid "Uninstalling plugin..." msgstr "Deinstalliere Plugin..." -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: 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:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 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: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:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 msgid "Incompatible" msgstr "Inkompatibel" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:331 +#: 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:400 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:443 msgid "Done!" msgstr "Fertig!" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Enable Plugin" msgstr "Plugin enablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Disable Plugin" msgstr "Plugin disablen" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:479 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:528 +msgid "Plugin installed" +msgstr "Plugin installiert" + +#: 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 "" +"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:533 #, 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:534 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:535 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:536 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:538 #, 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:539 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:540 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:541 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: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:500 +#: 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:504 +#: 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 " @@ -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:560 #, 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:569 #, 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:570 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:571 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:572 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: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:524 +#: 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:532 +#: 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:533 +#: 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:534 +#: 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." @@ -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:589 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: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:541 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:558 +#: 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:549 +#: 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:550 +#: 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:551 +#: 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." @@ -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:606 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: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 @@ -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 "" @@ -853,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/helpers.js:423 +#: 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 " @@ -872,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 " @@ -883,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 " @@ -916,56 +946,56 @@ 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" -#: 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" @@ -2281,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 1305bef0..677f3471 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-rc3-2-g33ea9c3-dirty\n" "Report-Msgid-Bugs-To: i18n@octoprint.org\n" -"POT-Creation-Date: 2015-06-09 14:48+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" @@ -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,308 @@ 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:132 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:275 msgid "Installing plugin..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:110 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:132 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: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: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: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:236 +#: 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:238 +#: 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:241 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:282 msgid "Reinstalling plugin..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:242 +#: 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:276 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:321 msgid "Uninstalling plugin..." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:276 +#: 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:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 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: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:313 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:356 msgid "Incompatible" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:331 +#: 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:400 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:443 msgid "Done!" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Enable Plugin" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:420 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:463 msgid "Disable Plugin" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:479 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:528 +msgid "Plugin installed" +msgstr "" + +#: 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:533 #, 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:534 msgid "The plugin was reinstalled successfully" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:481 +#: 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:482 +#: 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:484 +#: 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:485 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:539 msgid "The plugin was installed successfully" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:486 +#: 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:487 +#: 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:498 +#: 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:500 +#: 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:504 +#: 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:506 +#: 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:515 +#: 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:516 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:570 msgid "The plugin was uninstalled successfully" msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:517 +#: 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:518 +#: 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:522 +#: 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:524 +#: 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:532 +#: 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:533 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:587 msgid "The plugin was enabled successfully." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:534 +#: 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:535 +#: 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:539 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:556 +#: 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:541 -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:558 +#: 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:549 +#: 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:550 +#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:604 msgid "The plugin was disabled successfully." msgstr "" -#: src/octoprint/plugins/pluginmanager/static/js/pluginmanager.js:551 +#: 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:552 +#: 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." 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 +437,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: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 @@ -480,142 +508,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 +674,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 "" @@ -783,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/helpers.js:423 +#: 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" @@ -798,94 +821,94 @@ 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 "" -#: 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 +1124,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 +1267,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 "" @@ -2103,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 ""