diff options
Diffstat (limited to 'nikola/plugins/command/bootswatch_theme.py')
| -rw-r--r-- | nikola/plugins/command/bootswatch_theme.py | 103 |
1 files changed, 103 insertions, 0 deletions
diff --git a/nikola/plugins/command/bootswatch_theme.py b/nikola/plugins/command/bootswatch_theme.py new file mode 100644 index 0000000..eb27f94 --- /dev/null +++ b/nikola/plugins/command/bootswatch_theme.py @@ -0,0 +1,103 @@ +# -*- coding: utf-8 -*- + +# Copyright © 2012-2013 Roberto Alsina and others. + +# Permission is hereby granted, free of charge, to any +# person obtaining a copy of this software and associated +# documentation files (the "Software"), to deal in the +# Software without restriction, including without limitation +# the rights to use, copy, modify, merge, publish, +# distribute, sublicense, and/or sell copies of the +# Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: +# +# The above copyright notice and this permission notice +# shall be included in all copies or substantial portions of +# the Software. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY +# KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE +# WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR +# PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS +# OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +# OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +# SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +from __future__ import print_function +import os + +try: + import requests +except ImportError: + requests = None # NOQA + +from nikola.plugin_categories import Command +from nikola import utils + +LOGGER = utils.get_logger('bootswatch_theme', utils.STDERR_HANDLER) + + +class CommandBootswatchTheme(Command): + """Given a swatch name from bootswatch.com and a parent theme, creates a custom theme.""" + + name = "bootswatch_theme" + doc_usage = "[options]" + doc_purpose = "given a swatch name from bootswatch.com and a parent theme, creates a custom"\ + " theme" + cmd_options = [ + { + 'name': 'name', + 'short': 'n', + 'long': 'name', + 'default': 'custom', + 'type': str, + 'help': 'New theme name (default: custom)', + }, + { + 'name': 'swatch', + 'short': 's', + 'default': 'slate', + 'type': str, + 'help': 'Name of the swatch from bootswatch.com.' + }, + { + 'name': 'parent', + 'short': 'p', + 'long': 'parent', + 'default': 'bootstrap3', + 'help': 'Parent theme name (default: bootstrap3)', + }, + ] + + def _execute(self, options, args): + """Given a swatch name and a parent theme, creates a custom theme.""" + if requests is None: + utils.req_missing(['requests'], 'install Bootswatch themes') + + name = options['name'] + swatch = options['swatch'] + parent = options['parent'] + version = '' + + # See if we need bootswatch for bootstrap v2 or v3 + themes = utils.get_theme_chain(parent) + if 'bootstrap3' not in themes: + version = '2' + elif 'bootstrap' not in themes: + LOGGER.warn('"bootswatch_theme" only makes sense for themes that use bootstrap') + + LOGGER.notice("Creating '{0}' theme from '{1}' and '{2}'".format(name, swatch, parent)) + utils.makedirs(os.path.join('themes', name, 'assets', 'css')) + for fname in ('bootstrap.min.css', 'bootstrap.css'): + url = '/'.join(('http://bootswatch.com', version, swatch, fname)) + LOGGER.notice("Downloading: " + url) + data = requests.get(url).text + with open(os.path.join('themes', name, 'assets', 'css', fname), + 'wb+') as output: + output.write(data.encode('utf-8')) + + with open(os.path.join('themes', name, 'parent'), 'wb+') as output: + output.write(parent.encode('utf-8')) + LOGGER.notice('Theme created. Change the THEME setting to "{0}" to use ' + 'it.'.format(name)) |
