Initial commit of LunaGen.
7
.gitattributes
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
*.otf filter=lfs diff=lfs merge=lfs -text
|
||||
*.jpg filter=lfs diff=lfs merge=lfs -text
|
||||
*.webp filter=lfs diff=lfs merge=lfs -text
|
||||
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||
*.blend filter=lfs diff=lfs merge=lfs -text
|
||||
*.mp4 filter=lfs diff=lfs merge=lfs -text
|
339
LunaGen/doc/README.rst
Normal file
@ -0,0 +1,339 @@
|
||||
LunaGen Guide
|
||||
=============
|
||||
|
||||
..contents::
|
||||
|
||||
LunaGen is a static website generator for episodic media created
|
||||
to support the "Lunatics_!" open animated series project. The site
|
||||
structure it is designed for has:
|
||||
|
||||
* An index page with lists of episodes in (possibly) multiple series.
|
||||
* A page for each episode, with structure determined by the theme and data.
|
||||
* Additional special list pages for Characters, Settings, Sponsors, and Affiliates.
|
||||
* Any additional hand-created pages desired.
|
||||
|
||||
The data driving the site is authored directly in YAML_ format.
|
||||
|
||||
The templates used for site generation (which can be overridden in themes) are
|
||||
written in Jinja2_.
|
||||
|
||||
In addition, both theme and data also contain site "skeletons", which provide additional
|
||||
files needed: most notably the CSS style sheets in the theme and the necessary images
|
||||
and static HTML pages you want to use in your site source data directory.
|
||||
|
||||
It is very likely you will want to create a custom theme for your site. Please see
|
||||
the `Theme Author Guide`_ for how to do that. This `Site Author Guide`_ is targeted
|
||||
at users who simply want to use the package to generate a website using an existing
|
||||
theme. Should you want to make changes to the code itself, you'll want to read the
|
||||
`Developer Guide`.
|
||||
|
||||
Alternatives
|
||||
------------
|
||||
|
||||
Is LunaGen for you? LunaGen sacrifices generality in order to provide an extremely
|
||||
simple authoring environment for publishing episodic multimedia content.
|
||||
|
||||
I do not recommend it for publishing textual content simply because
|
||||
it lacks any sophisticated markup language. It is also not a general purpose
|
||||
content management system, as it is very specific to episodic data, and only
|
||||
provides a few hard-coded special pages. Making all these assumptions allows
|
||||
us to keep the data we have to write to update the site very short and simple,
|
||||
but it also means we can't stretch the software much to do other tasks.
|
||||
|
||||
If you want a more text-intensive site, like a static blog listing, you should
|
||||
probably check out more robust solutions like Pelican_ or Jekyll_, which are
|
||||
optimized for that kind of use. Perhaps in the future we'll create some kind
|
||||
of integration to allow LunaGen to be used along with other tools more easily.
|
||||
|
||||
We rejected those and designed our own generator because of the amount of
|
||||
boilerplate we'd need to add to generate simple listings of the type we wanted
|
||||
using a blog-oriented generator. Using YAML_ allows us to keep our information
|
||||
field-oriented, with only a little descriptive text needed, but without the
|
||||
overhead of a database-driven site.
|
||||
|
||||
|
||||
Site Author Guide
|
||||
-----------------
|
||||
LunaGen site data consists primarily of a set of YAML_ files and a site skeleton
|
||||
containing additional content files your site needs -- mostly images, but also
|
||||
possibly static HTML pages that will simply be copied without modification to your
|
||||
site.
|
||||
|
||||
In general, you should not include CSS files in your site skeleton. These should be
|
||||
incorporated into a custom **theme** skeleton instead. However, any files you put in
|
||||
your site skeleton will be copied to your site after the theme files, potentially
|
||||
replacing them if there is a name collision. So you *can* override CSS this way, though
|
||||
it's not recommended.
|
||||
|
||||
The YAML files for your site follow a very specific structure and some files are
|
||||
mandatory. At the top level you will find:
|
||||
|
||||
``site.yaml``
|
||||
This defines global variables needed throughout your site:
|
||||
|
||||
``sitename``
|
||||
This is the name used for your entire site. Probably the name of the show.
|
||||
It must be a simple identifier, and may be used to construct some filenames
|
||||
or variables.
|
||||
|
||||
``sitetitle``
|
||||
This is the fully-styled name for your site, which may contain punctuation
|
||||
and spaces.
|
||||
|
||||
``imgdir``
|
||||
This is the location where your images live in your site skeleton.
|
||||
Whenever a template looks for an image, this will be prepended to the
|
||||
URL. The exact location of the image below that will be determined by
|
||||
the template and is theme-specific. So you can structure your images
|
||||
anyway you like in a custom theme, but will need to learn the requirements
|
||||
of a theme if you are using someone else's.
|
||||
|
||||
``stylesheets``
|
||||
A list of stylesheets to be referenced by *every* page on your site.
|
||||
This will be included first, followed by stylesheets requested in
|
||||
other documents. TODO: this should really be in the theme.
|
||||
|
||||
``characters.yaml``
|
||||
This is the data for a special page listing your series' characters.
|
||||
TODO: should be optional.
|
||||
|
||||
``affiliates.yaml``
|
||||
List of affiliate advertisements with ``name``, ``img``, and ``url`` fields
|
||||
to generate the "affiliates banner". TODO: again, should be optional.
|
||||
|
||||
``products.yaml``
|
||||
List of product ad images to advertise your merchandise storefront.
|
||||
TODO: again, optional.
|
||||
|
||||
``software.yaml``
|
||||
A list of software banners to call out your favorite production software,
|
||||
advertising those projects so they get some support.
|
||||
TODO: again, optional.
|
||||
|
||||
|
||||
There is also an ``episodes`` directory, which contains the series and episode
|
||||
data. Within it you will find:
|
||||
|
||||
``series.yaml``
|
||||
This defines the available series of episodes, and defines several terms to
|
||||
be used inside the episode files. It consists of a list of series, each of
|
||||
which must define:
|
||||
|
||||
``name``
|
||||
Name or title of the series, to be shown to the user.
|
||||
|
||||
``order``
|
||||
This is an integer which is used to control the display order. It is
|
||||
not directly shown, and does not have to be sequential (for example
|
||||
we numbered our audiodrama series 100 to make sure it always appears
|
||||
after the animated series). It also need not be in the same order
|
||||
as the series are listed in your file.
|
||||
|
||||
``directory``
|
||||
This is a brief identifier for the series, used as the directory name
|
||||
for storing the episode files, and also as a key field.
|
||||
|
||||
``modes``
|
||||
Defines the possible production modes for each episode. Should at least
|
||||
contain a ``release`` mode for a finally-released episode, but it may
|
||||
also have earlier workflow modes, such as ``fundraising`` or ``production``,
|
||||
to show the state of the episode (and therefore what information will
|
||||
be available for it). For each mode, there is a ``template`` value telling
|
||||
what template the theme should use to format the episode.
|
||||
|
||||
TODO: this is theme-dependent, but I'm not sure how to separate it.
|
||||
|
||||
``credits``
|
||||
This is a collection of definitions for credits blocks to be used in
|
||||
your episode credits. It defines named blocks, for which the following
|
||||
should be defined:
|
||||
|
||||
``order``
|
||||
Controls the order of presentation of the fields.
|
||||
|
||||
``heading``
|
||||
What heading to show in the credits listing on the output
|
||||
page. For example, in our file, this tells us that ``animation_credits``
|
||||
should be listed as "3D Models and Animation". Optional. If
|
||||
no heading is provided, no heading will be shown.
|
||||
|
||||
``labels``
|
||||
Controls how the credits will be listed. If this is a list,
|
||||
it lists identifier and title pairs to be used in the listing.
|
||||
The order of this list controls the order of the credits (they
|
||||
may be identified in any order in the episode file).
|
||||
|
||||
The value may instead be one of the following strings:
|
||||
|
||||
``ordered``
|
||||
Credits will simply be listed in the order presented in the
|
||||
episode file, with labels expressed there.
|
||||
|
||||
``alpha``
|
||||
Credits will be listed in alphabetized order.
|
||||
|
||||
The exact behavior of the labels value is controlled by the
|
||||
credits template used, so may be theme-dependent.
|
||||
|
||||
``template``
|
||||
Determines which template will be used to display this credits
|
||||
block, determining layout behavior. The following are defined:
|
||||
|
||||
``centered_credits``
|
||||
Credits will be listed in simple order, down the middle.
|
||||
No columns are used, even on a wide screen. Typically used
|
||||
for main credits.
|
||||
|
||||
``basic_credits``
|
||||
Used for a variety of credit listings. Will try to save some
|
||||
space by using columns to fill the screen better.
|
||||
|
||||
``cast_credits``
|
||||
Designed to display paired credits, as in cast listings, with
|
||||
character/actor pairings.
|
||||
|
||||
``music_credits``
|
||||
This displays credits in blocks with named fields for each
|
||||
title. This changes the interpretation of labels to refer
|
||||
to the labels used in the individual blocks.
|
||||
|
||||
``sponsortypes``
|
||||
Definitions for your sponsors. Determines what categories you have
|
||||
and how they will be listed. Note that defining the sponsors here
|
||||
means you can have a different system for different series.
|
||||
|
||||
For each type listed, the following fields may be defined:
|
||||
|
||||
``limit``
|
||||
An integer expressing a limit on how many of this kind of sponsor
|
||||
is accepted and will be listed (more than this will not be displayed).
|
||||
|
||||
``page``
|
||||
An integer expressing the number of sponsors to be included in a single
|
||||
block in the listing (this is used to space the sponsors out through
|
||||
the credits).
|
||||
|
||||
``excludes``
|
||||
The name of another sponsortype that can't be used on the same episode
|
||||
as this one. Should suppress display of the other, but this isn't
|
||||
implemented.
|
||||
|
||||
``template``
|
||||
Template name to use for displaying a list of these sponsors.
|
||||
|
||||
``desc``
|
||||
Description of the sponsor type. Will be used to create an informational
|
||||
page for viewers and potential sponsors.
|
||||
|
||||
|
||||
In the ``episodes`` directory, you will also find subdirectories for each series
|
||||
using the directory names defined above. Inside each are files for each episode,
|
||||
with episode-specific data:
|
||||
|
||||
*episode*``.yaml``
|
||||
|
||||
The following fields are required:
|
||||
|
||||
``series``
|
||||
Backlink to the series identifier.
|
||||
|
||||
``episode``
|
||||
The episode number -- an integer.
|
||||
TODO: maybe change this to 'number' so we have episode.number instead
|
||||
of episode.episode?
|
||||
|
||||
``mode``
|
||||
Status of the episode, such as whether it's released, in-development,
|
||||
in-production, etc. The value should be one of the values defined in
|
||||
``modes`` in the ``series.yaml`` file. The value may also control
|
||||
how other information in this file is handled and presented (and which
|
||||
values are needed). In fact, this may be one way to handle information
|
||||
that isn't available yet, such as animation credits for an episode that's
|
||||
just in development.
|
||||
|
||||
``title``
|
||||
The title presented for the episode. Used in several places.
|
||||
|
||||
``poster``
|
||||
Image filename to be used to represent the episode. Ours are square
|
||||
600x600 pixel images, but the format you use is theme-dependent.
|
||||
|
||||
``status``
|
||||
A brief status message to be included under the title. Good for release
|
||||
dates or fundraising messages.
|
||||
|
||||
``description``
|
||||
One-paragraph description of the episode. The "blurb".
|
||||
|
||||
``credits``
|
||||
The fields defined in this category must be the ones defined in the
|
||||
series ``credits`` field. Here you will list the actual credits to
|
||||
use, in a format determined by the template you listed.
|
||||
|
||||
``sponsors``
|
||||
The actual sponsors, in formats determined by the templates you defined
|
||||
in the series' ``sponsortypes`` fields. Typically includes ``name``,
|
||||
``url``, and ``img`` fields for graphic sponsor types, or just a list of
|
||||
strings for simple named credits (like Patrons or Backers).
|
||||
|
||||
``ordered`` and ``cast_credits`` require pairs to be defined of
|
||||
credit name and credit, like this::
|
||||
|
||||
- - Director
|
||||
- Terry Hancock
|
||||
|
||||
- - Writer
|
||||
- Rosalyn Hunter
|
||||
|
||||
For credit blocks with listed labeled credits, the credits should
|
||||
be given as mappings, using the identifiers you defined, like this::
|
||||
|
||||
mech_models:
|
||||
- Chris Kuhn
|
||||
|
||||
Other fields are dependent on the mode, but may include:
|
||||
|
||||
``videos``
|
||||
Videos to display in the video carousel for the episode page, typically
|
||||
including at least a preview. Ours also include the full episode, a
|
||||
brief explainer about our business model, and a thank-you message from
|
||||
the creators. Each video need to define ``id``, ``name``, ``url``,
|
||||
and ``btn``, needed by the video template.
|
||||
|
||||
``product``
|
||||
Defines a product to pitch on the page. We use this to direct viewers to
|
||||
the DVD or download bundle releases of our episode in our Gumroad store.
|
||||
Values are defined by how they are used in the template. Ours provides:
|
||||
``img``, ``url``, ``title``, and two message fields, ``msg1`` and ``msg2``
|
||||
which are displayed under certain circumstances.
|
||||
|
||||
``funding``
|
||||
A block defining fields for a crowdfunding campaign, which may include
|
||||
multiple campaigns on separate platforms. This provides a combined display
|
||||
of funds raised, and may include pre-sales, matching funds, sponsorships,
|
||||
and fixed or flexible goal fundraising from crowdfunding platforms.
|
||||
|
||||
TODO:
|
||||
Currently this is a display-only feature and requires manual updating, but
|
||||
we might provide some kind of plugin system for updating this when the site
|
||||
is regenerated.
|
||||
|
||||
Theme Author Guide
|
||||
------------------
|
||||
|
||||
To be added: should explain the files, templates, and stylesheets a theme needs to
|
||||
define and how they will be used.
|
||||
|
||||
|
||||
Developer Guide
|
||||
---------------
|
||||
|
||||
To be added: should explain how LunaGen works and how to contribute to it.
|
||||
|
||||
|
||||
|
||||
.. _Lunatics: http://lunatics.tv
|
||||
.. _YAML: https://yaml.org/
|
||||
.. _Jinja2: https://palletsprojects.com/p/jinja/
|
||||
.. _Pelican: https://blog.getpelican.com/
|
||||
.. _Jekyll: https://jekyllrb.com/
|
121
LunaGen/src/lunagen.py
Executable file
@ -0,0 +1,121 @@
|
||||
#!/usr/bin/python3
|
||||
# encoding: utf-8
|
||||
'''
|
||||
lunagen -- "Lunatics!" Project Release Site Generator
|
||||
|
||||
LunaGen generates a small static HTML website based on YAML
|
||||
data documents containing the key release information. This
|
||||
generates an index.html file containing the episode lists
|
||||
for all series, individual release pages for each episode,
|
||||
and additional pages for character list and story background.
|
||||
|
||||
This is meant to be a fan-focused site.
|
||||
|
||||
It also contains affiliate link, sponsor, advertising, and
|
||||
other fundraising elements.
|
||||
|
||||
@author: Terry Hancock
|
||||
|
||||
@copyright: 2019 Anansi Spaceworks.
|
||||
|
||||
@license: GNU General Public License, version 2.0 or later. (Python code)
|
||||
Creative Commons Attribution-ShareAlike, version 3.0 or later. (Website Templates).
|
||||
|
||||
@contact: digitante@gmail.com
|
||||
'''
|
||||
|
||||
import os, sys
|
||||
from optparse import OptionParser
|
||||
|
||||
import lunagen
|
||||
|
||||
def main(argv=None):
|
||||
'''Command line options.'''
|
||||
|
||||
program_name = os.path.basename(sys.argv[0])
|
||||
program_version = "v0.1"
|
||||
program_build_date = "%s" % lunagen.Config.__updated__
|
||||
|
||||
program_version_string = '%%prog %s (%s)' % (program_version, program_build_date)
|
||||
program_longdesc = '''\
|
||||
LunaGen is a static HTML website generator designed for releasing
|
||||
a series of episodes (technically: a series of series of episodes).
|
||||
|
||||
Data is authored using the YAML structured data language, which allows
|
||||
for episode metadata and descriptions to be written in a human-friendly
|
||||
format, which is then formatted into HTML using Jinja2 templates.
|
||||
|
||||
Once generated, the site is static and can simply be uploaded to a
|
||||
standard web server with minimal or no configuration (like a static web host).
|
||||
|
||||
It was originally created to generate the release pages for
|
||||
Anansi Spaceworks' "Lunatics!" series.
|
||||
|
||||
For details, please see the 'examples' and 'doc' directories.
|
||||
'''
|
||||
program_license = "Copyright 2019 Terry Hancock (Anansi Spaceworks) \
|
||||
Licensed under the GNU General Public License, version 2.0\n"
|
||||
|
||||
if argv is None:
|
||||
argv = sys.argv[1:]
|
||||
#try:
|
||||
# setup option parser
|
||||
parser = OptionParser(version=program_version_string, epilog=program_longdesc, description=program_license)
|
||||
parser.add_option("-i", "--in", dest="src", help="set input path [default: %default]", metavar="FILE")
|
||||
parser.add_option("-o", "--out", dest="tgt", help="set output path [default: %default]", metavar="FILE")
|
||||
parser.add_option("-v", "--verbose", dest="verbose", action="count", help="set verbosity level [default: %default]")
|
||||
parser.add_option("-S", "--seed", dest="seed", help="set random number seed [default: None]", type="int")
|
||||
|
||||
|
||||
# process options
|
||||
(opts, args) = parser.parse_args(argv)
|
||||
|
||||
if opts.verbose:
|
||||
verbose = opts.verbose
|
||||
else:
|
||||
verbose = 0
|
||||
|
||||
if verbose:
|
||||
print("Opts = ", opts)
|
||||
print("Args = ", args)
|
||||
|
||||
if opts.src:
|
||||
src = opts.src
|
||||
elif args:
|
||||
src = args.pop(0)
|
||||
else:
|
||||
src = './site'
|
||||
|
||||
if opts.tgt:
|
||||
tgt = opts.tgt
|
||||
elif args:
|
||||
tgt = args.pop(0)
|
||||
else:
|
||||
tgt = './build'
|
||||
|
||||
if verbose: print("Source = ", src)
|
||||
if verbose: print("Target = ", tgt)
|
||||
|
||||
lunagen.LunaGen(src, tgt, verbose, opts.seed).gensite()
|
||||
|
||||
if __name__ == "__main__":
|
||||
# if lunagen.Config.DEBUG:
|
||||
# #sys.argv.append("-h")
|
||||
# sys.argv.append("-v")
|
||||
# if lunagen.Config.TESTRUN:
|
||||
# import doctest
|
||||
# doctest.testmod()
|
||||
# if lunagen.Config.PROFILE:
|
||||
# import cProfile
|
||||
# import pstats
|
||||
# profile_filename = 'lunagen_profile.txt'
|
||||
# cProfile.run('main()', profile_filename)
|
||||
# statsfile = open("profile_stats.txt", "wb")
|
||||
# p = pstats.Stats(profile_filename, stream=statsfile)
|
||||
# stats = p.strip_dirs().sort_stats('cumulative')
|
||||
# stats.print_stats()
|
||||
# statsfile.close()
|
||||
# sys.exit(0)
|
||||
|
||||
|
||||
sys.exit(main())
|
1
LunaGen/src/lunagen/__init__.py
Normal file
@ -0,0 +1 @@
|
||||
from .main import *
|
70
LunaGen/src/lunagen/addon.py
Normal file
@ -0,0 +1,70 @@
|
||||
'''
|
||||
Created on Oct 24, 2021
|
||||
|
||||
@author: terry
|
||||
'''
|
||||
|
||||
import os
|
||||
from distutils.dir_util import remove_tree, copy_tree
|
||||
|
||||
class LunaGenAddOn(object):
|
||||
"""
|
||||
Abstract base class for LunaGen Addons.
|
||||
"""
|
||||
|
||||
name = 'my_addon' # Replace with string name of add-on (should match directory name).
|
||||
desc = """\
|
||||
An add-on to demonstrate add-on design.
|
||||
Replace this text with a brief description of your add-on's purpose.
|
||||
"""
|
||||
|
||||
@staticmethod
|
||||
def load(site):
|
||||
"""
|
||||
Load the site data that the add-on needs to function.
|
||||
|
||||
Note that this is site data that the site designer has to provide,
|
||||
which the addon will then interpret.
|
||||
Client is the LunaGen instance, which subclasses jinja2.Environment.
|
||||
Mandatory -- you must implement a loader.
|
||||
"""
|
||||
raise NotImplementedError
|
||||
|
||||
@classmethod
|
||||
def copy_skeleton(cls, site):
|
||||
skeleton = os.path.join(os.path.dirname(cls.file), 'skeleton')
|
||||
#
|
||||
print("Copying skeleton for %s from %s." % (cls.name, skeleton))
|
||||
#
|
||||
copy_tree(skeleton, site.tgtdir, verbose=site.verbose)
|
||||
|
||||
@staticmethod
|
||||
def render(site):
|
||||
"""
|
||||
Render templates to images or do other tasks to prepare target site.
|
||||
Optional.
|
||||
|
||||
- Focused on images or other binary data
|
||||
- Should not be dependent on site data that might change
|
||||
- may have additional dependencies (e.g. Inkscape or ImageMagick) on
|
||||
software not installed on the server
|
||||
- not run when RE-generating the site.
|
||||
"""
|
||||
pass
|
||||
|
||||
@staticmethod
|
||||
def generate(site):
|
||||
"""
|
||||
Generate a page or pages in the target site.
|
||||
Optional.
|
||||
|
||||
- Produces PAGES of HTML, SVG, etc.
|
||||
- Uses templates provide by the chain of sources
|
||||
- Should provide a default template, unless its using a standard site template
|
||||
(i.e. don't leave it up to the theme)
|
||||
- Dynamic. Regenerated in every site update.
|
||||
"""
|
||||
pass
|
||||
|
||||
|
||||
|
2
LunaGen/src/lunagen/addons/__init__.py
Normal file
@ -0,0 +1,2 @@
|
||||
# Addons should appear in this directory.
|
||||
# Do not put code in this file.
|
101
LunaGen/src/lunagen/addons/affiliates/affiliates.css
Normal file
@ -0,0 +1,101 @@
|
||||
/* Sponsorship Ad */
|
||||
|
||||
.sponsorship_packages_ad {
|
||||
font-family: BioliniumBold;
|
||||
font-size: 20pt;
|
||||
text-align: center;
|
||||
color: #ffffee;
|
||||
transition: none;
|
||||
border-style: solid;
|
||||
border-width: 3pt;
|
||||
border-color: blue;
|
||||
background-color: #222233;
|
||||
border-radius: 4vw;
|
||||
margin: 1pt;
|
||||
padding: 5pt;
|
||||
}
|
||||
|
||||
|
||||
/* Affiliate Ads */
|
||||
|
||||
.affiliate_carousel {
|
||||
width: 100%;
|
||||
min-width: 100%;
|
||||
max-width: 100%;
|
||||
height: 1.5in;
|
||||
overflow: hidden;
|
||||
display: block;
|
||||
position: relative;
|
||||
padding: 0px;
|
||||
background-color: red;
|
||||
}
|
||||
|
||||
.affiliate_content {
|
||||
position: absolute;
|
||||
top: 0in;
|
||||
left: 0in;
|
||||
width: 42in;
|
||||
height: 1.5in;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
display: flex;
|
||||
justify-content: space-around;
|
||||
align-content: center;
|
||||
animation-name: affiliate_scroll;
|
||||
animation-duration: 300s;
|
||||
animation-iteration-count: infinite;
|
||||
animation-timing-function: linear;
|
||||
flex-shrink: 3in;
|
||||
flex-grow: 18in;
|
||||
background-color: black;
|
||||
}
|
||||
|
||||
@keyframes affiliate_scroll {
|
||||
from { left: 0in; }
|
||||
to { left: -21in; }
|
||||
}
|
||||
|
||||
.affiliate_item {
|
||||
padding: 2px;
|
||||
margin: 3px;
|
||||
background-color: black;
|
||||
width: 3in;
|
||||
height: 1.5in;
|
||||
position: relative;
|
||||
color: black;
|
||||
border-style: solid;
|
||||
border-color: black;
|
||||
border-width: 3pt;
|
||||
}
|
||||
|
||||
.affiliate_image {
|
||||
width: 3in;
|
||||
height: 1.4in;
|
||||
background-color: black;
|
||||
position: absolute;
|
||||
left: 0px;
|
||||
top: 0px;
|
||||
}
|
||||
|
||||
@media only screen and (max-width: 600px), (max-height: 600px) {
|
||||
.affiliate_image,
|
||||
.affiliate_item {
|
||||
width: 4in;
|
||||
height: 0.9in;
|
||||
max-width: 1.9in;
|
||||
min-width: 1.9in;
|
||||
max-height: 0.9in;
|
||||
min-height: 0.9in;
|
||||
}
|
||||
.affiliate_carousel {
|
||||
height: 0.9in;
|
||||
}
|
||||
.affiliate_content {
|
||||
width: 28in;
|
||||
height: 1in;
|
||||
}
|
||||
@keyframes affiliate_scroll {
|
||||
from { left: 0in; }
|
||||
to { left: -14in; }
|
||||
}
|
||||
}
|
45
LunaGen/src/lunagen/addons/affiliates/affiliates.py
Normal file
@ -0,0 +1,45 @@
|
||||
'''
|
||||
Created on Oct 24, 2021
|
||||
|
||||
@author: terry
|
||||
'''
|
||||
|
||||
import os, random
|
||||
import yaml
|
||||
import lunagen.addon
|
||||
|
||||
class Affiliates(lunagen.addon.LunaGenAddOn):
|
||||
"""
|
||||
Affiliates advertising bar.
|
||||
"""
|
||||
name = 'affiliates'
|
||||
desc = """\
|
||||
Randomly selects affiliate link ads from a list and sets them to
|
||||
display on a scrolling bar on the page.
|
||||
"""
|
||||
file = __file__
|
||||
|
||||
@staticmethod
|
||||
def load(site):
|
||||
if site.verbose: print("Loading affiliates data.")
|
||||
try:
|
||||
with open(os.path.join(site.datadir, 'affiliates.yaml')) as aff_file:
|
||||
affiliates = yaml.safe_load(aff_file)
|
||||
stylesheets = site.sitedata['stylesheets']
|
||||
site.sitedata.update(affiliates)
|
||||
site.sitedata['stylesheets'] = site._collect_stylesheets(affiliates)
|
||||
site.sitedata['affiliates'] = random.sample(
|
||||
affiliates['affiliates'], min( int(affiliates['affiliates_at_once']),
|
||||
len(affiliates['affiliates'])))
|
||||
|
||||
# Generates a single banner default:
|
||||
site.sitedata['banners'] = iter(['affiliates_banner.j2'])
|
||||
site._copy_skeleton(os.path.join(os.path.dirname(__file__), 'skeleton'))
|
||||
|
||||
|
||||
except FileNotFoundError:
|
||||
print("No affiliates.yaml file, so affiliates list is empty.")
|
||||
site.sitedata['affiliates'] = []
|
||||
|
||||
|
||||
|
147
LunaGen/src/lunagen/addons/affiliates/affiliates.yaml
Normal file
@ -0,0 +1,147 @@
|
||||
# This file documents the sitedata values needed by the Affiliates Banner add-on.
|
||||
---
|
||||
|
||||
stylesheets:
|
||||
- affiliates
|
||||
|
||||
affiliates_at_once: 7 # How many banners do you want to rotate at a time?
|
||||
|
||||
|
||||
affiliates_message: >
|
||||
We benefit when you support these projects and services!
|
||||
# A text caption that appears with the banner
|
||||
|
||||
affiliate_image_path: 'affiliates/'
|
||||
# TODO: not yet implemented
|
||||
# Relative path from site root to location affiliate banners are stored
|
||||
|
||||
affiliates: # Data for each banner - unlimited (randomly selected on generation)
|
||||
- name: Ardour
|
||||
url: https://ardour.org
|
||||
img: ardour.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Audacity
|
||||
url: https://audacityteam.org
|
||||
img: audacity.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Blender
|
||||
url: https://blender.org
|
||||
img: blender.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Blender Cloud
|
||||
url: https://cloud.blender.org
|
||||
img: blender_cloud.png
|
||||
type: Open Movie Platform
|
||||
|
||||
- name: BlendSwap
|
||||
url: https://blendswap.com
|
||||
img: blendswap.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: Creative Commons
|
||||
url: https://www.creativecommons.org
|
||||
img: creativecommons.png
|
||||
type: Free Culture Advocacy Group
|
||||
|
||||
- name: Debian
|
||||
url: https://debian.org
|
||||
img: debian.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Ethic Cinema
|
||||
url: http://ethiccinema.org
|
||||
img: ethiccinema.png
|
||||
type: Free Culture Advocacy Group
|
||||
|
||||
- name: Free Software Foundation
|
||||
url: https://www.fsf.org
|
||||
img: freesoftwarefoundation.png
|
||||
type: Free Software Advocacy Group
|
||||
|
||||
- name: Free Sound
|
||||
url: https://freesound.org
|
||||
img: freesound.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: GIMP
|
||||
url: https://gimp.org
|
||||
img: gimp.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Inkscape
|
||||
url: https://inkscape.org
|
||||
img: inkscape.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Internet Archive
|
||||
url: https://archive.org
|
||||
img: internet_archive.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: Jamendo
|
||||
url: https://jamendo.com
|
||||
img: jamendo.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: Kdenlive
|
||||
url: https://kdenlive.org
|
||||
img: kdenlive.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Krita
|
||||
url: https://krita.org
|
||||
img: krita.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Mastodon
|
||||
url: http://mastodon.social
|
||||
img: mastodon.png
|
||||
type: Social Media Platform We Use
|
||||
|
||||
- name: Morevna Project
|
||||
url: https://morevnaproject.org
|
||||
img: morevnaproject.png
|
||||
type: Free Culture Project
|
||||
|
||||
- name: MusOpen
|
||||
url: https://musopen.org
|
||||
img: musopen.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: Olive Video Editor
|
||||
url: https://olivevideoeditor.org
|
||||
img: olivevideoeditor.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Public Domain Files
|
||||
url: http://www.publicdomainfiles.com
|
||||
img: publicdomainfiles.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: Public Knowledge
|
||||
url: https://publicknowledge.org
|
||||
img: publicknowledge.png
|
||||
type: Free Culture Advocacy Group
|
||||
|
||||
- name: Question Copyright
|
||||
url: https://questioncopyright.org
|
||||
img: questioncopyright.png
|
||||
type: Free Culture Advocacy Group
|
||||
|
||||
- name: Software Freedom Conservancy
|
||||
url: https://sfconservancy.org
|
||||
img: sfconservancy.png
|
||||
type: Free Software Advocacy Group
|
||||
|
||||
- name: Ubuntu Studio
|
||||
url: https://ubuntustudio.org
|
||||
img: ubuntu_studio.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Urchn
|
||||
url: https://urchn.org
|
||||
img: urchn.png
|
||||
type: Free Culture Studio
|
25
LunaGen/src/lunagen/addons/affiliates/affiliates_banner.j2
Normal file
@ -0,0 +1,25 @@
|
||||
{# INCLUDE #}
|
||||
{% if affiliates %}
|
||||
<!-- Affiliate Links Banner Bar (INCLUDE) -->
|
||||
<div id="AffiliateLinks" class="banner_bar">
|
||||
<p class="fine_print">
|
||||
{% if affiliates_message is defined %}
|
||||
{{ affiliates_message }}</p>
|
||||
{% else %}
|
||||
Affiliate links: commissions support our project.</p>
|
||||
{% endif %}
|
||||
<div class="affiliate_carousel">
|
||||
<div class="affiliate_content">
|
||||
{% for i in range(2) %}
|
||||
{% for affiliate in affiliates %}
|
||||
<div class="affiliate_item">
|
||||
<a href="{{affiliate.url}}" target="_blank" rel="nofollow" ><img src="{{imgdir}}/affiliates/{{affiliate.img}}"
|
||||
alt="{{affiliate.name | escape}}" title="{{affiliate.name | escape}} - {{affiliate.type}}"
|
||||
class="affiliate_image" /></a>
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
||||
</div> <!-- AffiliateLinks -->
|
||||
{% endif %}
|
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/ardour.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/audacity.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/blender.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/blendswap.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/creativecommons.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/debian.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/ethiccinema.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/freesoftwarefoundation.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/freesound.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/gimp.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/inkscape.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/internet_archive.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/jamendo.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/kdenlive.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/krita.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/lunatics.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/mastodon.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/morevnaproject.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/musopen.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/olivevideoeditor.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/publicdomainfiles.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/publicknowledge.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/questioncopyright.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/sfconservancy.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/ubuntu_studio.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/affiliates/skeleton/images/affiliates/urchn.png
(Stored with Git LFS)
Normal file
26
LunaGen/src/lunagen/addons/products/products.css
Normal file
@ -0,0 +1,26 @@
|
||||
/* Store products banner */
|
||||
|
||||
.store_banner {
|
||||
width: 100%;
|
||||
min-height: 0.5in;
|
||||
max-height: 2in;
|
||||
overflow: hidden;
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
flex-width: 2in;
|
||||
justify-content: center;
|
||||
}
|
||||
|
||||
.product_img {
|
||||
width: 1in;
|
||||
height: 0.5in;
|
||||
display: inline-block;
|
||||
padding: 0px;
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
@media only screen and (min-width: 7in) {
|
||||
.product_img { width: 2in; height: 1in; }
|
||||
}
|
||||
|
||||
|
38
LunaGen/src/lunagen/addons/products/products.py
Normal file
@ -0,0 +1,38 @@
|
||||
'''
|
||||
Created on Oct 27, 2021
|
||||
|
||||
@author: terry
|
||||
'''
|
||||
|
||||
import os
|
||||
import yaml
|
||||
import lunagen.addon
|
||||
|
||||
class Products(lunagen.addon.LunaGenAddOn):
|
||||
"""
|
||||
Products with Banners.
|
||||
"""
|
||||
name = 'products'
|
||||
desc = """\
|
||||
Display a set of product banners for merch store.
|
||||
"""
|
||||
file = __file__
|
||||
|
||||
@staticmethod
|
||||
def load(site):
|
||||
if site.verbose: print("Loading store products data.")
|
||||
try:
|
||||
with open(os.path.join(site.datadir, 'products.yaml')) as prod_file:
|
||||
products = yaml.safe_load(prod_file)
|
||||
# stylesheets = site.sitedata['stylesheets']
|
||||
site.sitedata.update(products)
|
||||
site.sitedata['stylesheets'] = site._collect_stylesheets(products)
|
||||
except FileNotFoundError:
|
||||
print("No products.yaml file, so products list is empty.")
|
||||
site.sitedata['products'] = []
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
BIN
LunaGen/src/lunagen/addons/products/skeleton/images/products/store_books.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/products/skeleton/images/products/store_digitalperks.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/products/skeleton/images/products/store_hardmedia.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/products/skeleton/images/products/store_novelties.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/products/skeleton/images/products/store_posters.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/products/skeleton/images/products/store_subscriptions.png
(Stored with Git LFS)
Normal file
11
LunaGen/src/lunagen/addons/products/store_banner.j2
Normal file
@ -0,0 +1,11 @@
|
||||
{# INCLUDE #}
|
||||
<!-- Store Banner INCLUDE -->
|
||||
<div id="store_banner" class="banner_bar">
|
||||
<p class="fine_print">Lunatics! Shop: Profits support our project.</p>
|
||||
<div class="store_banner">
|
||||
{%- for product in products %}
|
||||
<a href="{{product.url}}"><img src="{{imgdir}}/products/{{product.img}}" class="product_img"
|
||||
alt="{{product.name}}" title="{{product.desc}}" /></a>
|
||||
{%- endfor %}
|
||||
</div>
|
||||
</div>
|
346119
LunaGen/src/lunagen/addons/products/store_products.svg
Normal file
After Width: | Height: | Size: 46 MiB |
@ -0,0 +1,291 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="88"
|
||||
height="31"
|
||||
viewBox="0 0 88 31"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="1.0.2 (1.0.2+r75+1)"
|
||||
sodipodi:docname="eclipse.png.svg"
|
||||
inkscape:export-filename="/project/terry/Dev/eclipse-workspace/LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/eclipse.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
id="vlpc"
|
||||
x1="151"
|
||||
x2="112"
|
||||
y1="192.4"
|
||||
y2="137.3"
|
||||
gradientTransform="matrix(0.5625,0,0,0.568,-9.4,-5.305)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#ffd43b"
|
||||
offset="0"
|
||||
id="stop875" />
|
||||
<stop
|
||||
style="stop-color:#ffe873"
|
||||
offset="1"
|
||||
id="stop877" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="vlpb"
|
||||
x1="26.65"
|
||||
x2="135.7"
|
||||
y1="20.6"
|
||||
y2="114.4"
|
||||
gradientTransform="matrix(0.5625,0,0,0.568,-9.4,-5.305)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#5a9fd4"
|
||||
offset="0"
|
||||
id="stop880" />
|
||||
<stop
|
||||
style="stop-color:#306998"
|
||||
offset="1"
|
||||
id="stop882" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="vlpa"
|
||||
cx="61.52"
|
||||
cy="132.3"
|
||||
r="29.04"
|
||||
gradientTransform="matrix(2.383e-8,-0.2964,1.437,4.684e-7,-128.5,150.5)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:.498"
|
||||
offset="0"
|
||||
id="stop885" />
|
||||
<stop
|
||||
style="stop-color:#7f7f7f;stop-opacity:0"
|
||||
offset="1"
|
||||
id="stop887" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#878787"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.840909"
|
||||
inkscape:cx="44.25254"
|
||||
inkscape:cy="24.286204"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="2880"
|
||||
inkscape:window-height="1620"
|
||||
inkscape:window-x="826"
|
||||
inkscape:window-y="228"
|
||||
inkscape:window-maximized="0">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid833"
|
||||
originx="4"
|
||||
originy="1"
|
||||
spacingx="8"
|
||||
spacingy="5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g1091"
|
||||
transform="matrix(0.18193017,0,0,0.18193017,-11.670632,-53.420151)">
|
||||
<path
|
||||
fill="#2c2255"
|
||||
d="M 101.124,392.936 H 84.38 c 2.217,7.605 6.331,14.422 12.354,20.445 9.602,9.604 21.148,14.398 34.65,14.398 2.699,0 5.314,-0.201 7.854,-0.584 10.17,-1.535 19.074,-6.133 26.703,-13.814 6.062,-6.021 10.205,-12.84 12.439,-20.445 h -6.795 -9.936 z"
|
||||
id="path991" />
|
||||
<g
|
||||
id="g997">
|
||||
<path
|
||||
fill="#2c2255"
|
||||
d="m 91.891,370.194 h -8.747 c -0.32,1.922 -0.538,3.884 -0.637,5.896 h 10.396 5.215 75.275 6.871 c -0.1,-2.012 -0.318,-3.974 -0.641,-5.896"
|
||||
id="path993" />
|
||||
|
||||
<path
|
||||
fill="#2c2255"
|
||||
d="m 82.507,381.565 c 0.099,2.013 0.316,3.975 0.637,5.896 h 9.094 6.893 73.648 6.846 c 0.322,-1.921 0.542,-3.883 0.642,-5.896"
|
||||
id="path995" />
|
||||
|
||||
</g>
|
||||
<path
|
||||
fill="#2c2255"
|
||||
d="m 178.382,364.718 c -2.232,-7.626 -6.376,-14.474 -12.441,-20.54 -7.609,-7.608 -16.488,-12.174 -26.625,-13.71 -2.564,-0.389 -5.205,-0.593 -7.932,-0.593 -13.502,0 -25.049,4.769 -34.65,14.303 -6.025,6.066 -10.141,12.914 -12.357,20.54"
|
||||
id="path999" />
|
||||
<g
|
||||
id="g1003">
|
||||
<path
|
||||
fill="#f7941e"
|
||||
d="m 79.6,378.829 c 0,-25.824 19.395,-47.281 44.626,-51.055 -0.626,-0.023 -1.255,-0.049 -1.887,-0.049 -28.314,0 -51.269,22.881 -51.269,51.104 0,28.224 22.954,51.103 51.269,51.103 0.634,0 1.263,-0.023 1.891,-0.047 C 98.995,426.111 79.6,404.654 79.6,378.829 Z"
|
||||
id="path1001" />
|
||||
|
||||
</g>
|
||||
<rect
|
||||
x="350.664"
|
||||
y="323.66299"
|
||||
fill="#f7941e"
|
||||
width="10.197"
|
||||
height="12.912"
|
||||
id="rect1005" />
|
||||
<path
|
||||
fill="#2c2255"
|
||||
d="m 265.529,376.799 v 4.986 h -46.885 c 0.442,7.022 2.558,12.369 6.345,16.044 3.788,3.678 9.062,5.514 15.822,5.514 3.916,0 7.712,-0.479 11.39,-1.438 3.676,-0.959 7.322,-2.402 10.945,-4.324 v 9.645 c -3.658,1.553 -7.408,2.734 -11.251,3.549 -3.843,0.812 -7.74,1.219 -11.693,1.219 -9.901,0 -17.743,-2.881 -23.525,-8.646 -5.782,-5.764 -8.673,-13.556 -8.673,-23.384 0,-10.16 2.743,-18.225 8.229,-24.19 5.486,-5.967 12.886,-8.951 22.195,-8.951 8.351,0 14.954,2.688 19.812,8.063 4.86,5.37 7.289,12.676 7.289,21.913 m -10.197,-2.992 c -0.075,-5.578 -1.636,-10.03 -4.683,-13.354 -3.049,-3.326 -7.085,-4.988 -12.109,-4.988 -5.69,0 -10.244,1.607 -13.661,4.822 -3.418,3.213 -5.385,7.74 -5.902,13.576 z"
|
||||
id="path1007" />
|
||||
<path
|
||||
fill="#2c2255"
|
||||
d="m 318.422,350.698 v 9.53 c -2.883,-1.588 -5.773,-2.778 -8.673,-3.573 -2.901,-0.795 -5.829,-1.191 -8.785,-1.191 -6.614,0 -11.749,2.096 -15.405,6.289 -3.658,4.193 -5.487,10.078 -5.487,17.65 0,7.573 1.829,13.459 5.487,17.651 3.656,4.195 8.791,6.289 15.405,6.289 2.956,0 5.884,-0.396 8.785,-1.188 2.897,-0.795 5.79,-1.986 8.673,-3.576 V 408 c -2.846,1.33 -5.793,2.328 -8.84,2.992 -3.05,0.666 -6.289,0.998 -9.727,0.998 -9.348,0 -16.773,-2.938 -22.277,-8.812 -5.506,-5.873 -8.258,-13.798 -8.258,-23.774 0,-10.121 2.779,-18.084 8.34,-23.886 5.56,-5.799 13.182,-8.7 22.859,-8.7 3.142,0 6.208,0.325 9.202,0.971 2.992,0.645 5.892,1.616 8.701,2.909"
|
||||
id="path1009" />
|
||||
<rect
|
||||
x="327.64301"
|
||||
y="324.151"
|
||||
fill="#2c2255"
|
||||
width="10.199"
|
||||
height="86.231003"
|
||||
id="rect1011" />
|
||||
<path
|
||||
fill="#2c2255"
|
||||
d="m 350.664,348.312 h 10.197 v 62.07 h -10.197 z"
|
||||
id="path1013" />
|
||||
<path
|
||||
fill="#2c2255"
|
||||
d="m 383.549,401.072 v 32.92 h -10.252 v -85.68 h 10.252 v 9.423 c 2.145,-3.693 4.852,-6.438 8.12,-8.23 3.271,-1.789 7.177,-2.688 11.722,-2.688 7.537,0 13.661,2.991 18.37,8.979 4.711,5.986 7.065,13.855 7.065,23.607 0,9.756 -2.354,17.625 -7.065,23.608 -4.709,5.984 -10.833,8.979 -18.37,8.979 -4.545,0 -8.451,-0.896 -11.722,-2.689 -3.271,-1.789 -5.978,-4.533 -8.12,-8.229 m 34.693,-21.669 c 0,-7.5 -1.543,-13.384 -4.628,-17.65 -3.085,-4.266 -7.324,-6.399 -12.72,-6.399 -5.396,0 -9.636,2.133 -12.719,6.399 -3.085,4.269 -4.629,10.15 -4.629,17.65 0,7.502 1.544,13.387 4.629,17.651 3.083,4.27 7.323,6.4 12.719,6.4 5.396,0 9.635,-2.133 12.72,-6.4 3.085,-4.264 4.628,-10.149 4.628,-17.651"
|
||||
id="path1015" />
|
||||
<path
|
||||
fill="#2c2255"
|
||||
d="m 476.788,350.143 v 9.644 c -2.884,-1.478 -5.875,-2.586 -8.979,-3.326 -3.104,-0.738 -6.317,-1.106 -9.643,-1.106 -5.062,0 -8.857,0.774 -11.39,2.327 -2.531,1.552 -3.794,3.879 -3.794,6.982 0,2.363 0.901,4.221 2.714,5.57 1.81,1.348 5.447,2.631 10.918,3.852 l 3.489,0.775 c 7.241,1.553 12.388,3.739 15.436,6.567 3.049,2.826 4.573,6.771 4.573,11.83 0,5.765 -2.282,10.326 -6.848,13.689 -4.562,3.359 -10.833,5.043 -18.812,5.043 -3.324,0 -6.789,-0.324 -10.394,-0.969 -3.603,-0.646 -7.396,-1.617 -11.389,-2.91 V 397.58 c 3.771,1.961 7.482,3.428 11.14,4.408 3.658,0.979 7.278,1.467 10.862,1.467 4.804,0 8.496,-0.82 11.084,-2.465 2.587,-1.646 3.878,-3.963 3.878,-6.955 0,-2.771 -0.932,-4.896 -2.796,-6.375 -1.867,-1.478 -5.959,-2.9 -12.278,-4.269 l -3.545,-0.829 c -6.316,-1.33 -10.881,-3.371 -13.688,-6.123 -2.809,-2.752 -4.212,-6.529 -4.212,-11.334 0,-5.839 2.068,-10.345 6.207,-13.521 4.138,-3.178 10.013,-4.768 17.623,-4.768 3.769,0 7.314,0.276 10.641,0.83 3.328,0.558 6.394,1.388 9.203,2.497"
|
||||
id="path1017" />
|
||||
<path
|
||||
fill="#2c2255"
|
||||
d="m 540.93,376.799 v 4.986 h -46.885 c 0.443,7.022 2.558,12.369 6.347,16.044 3.785,3.678 9.062,5.514 15.82,5.514 3.918,0 7.713,-0.479 11.39,-1.438 3.678,-0.959 7.323,-2.402 10.946,-4.324 v 9.645 c -3.659,1.553 -7.409,2.734 -11.252,3.549 -3.841,0.812 -7.739,1.219 -11.69,1.219 -9.903,0 -17.744,-2.881 -23.524,-8.646 -5.784,-5.764 -8.675,-13.556 -8.675,-23.384 0,-10.16 2.744,-18.225 8.229,-24.19 5.486,-5.968 12.889,-8.951 22.196,-8.951 8.349,0 14.954,2.688 19.812,8.063 4.856,5.37 7.286,12.676 7.286,21.913 m -10.197,-2.992 c -0.076,-5.578 -1.636,-10.03 -4.686,-13.354 -3.049,-3.326 -7.086,-4.988 -12.106,-4.988 -5.689,0 -10.244,1.607 -13.66,4.822 -3.418,3.213 -5.389,7.74 -5.903,13.576 z"
|
||||
id="path1019" />
|
||||
<g
|
||||
id="g1042">
|
||||
|
||||
<linearGradient
|
||||
id="SVGID_1_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="502.3848"
|
||||
y1="-40.075699"
|
||||
x2="502.3848"
|
||||
y2="-113.7106"
|
||||
gradientTransform="translate(-371,474.5)">
|
||||
<stop
|
||||
offset="0.3033"
|
||||
style="stop-color:#473788"
|
||||
id="stop1021" />
|
||||
|
||||
<stop
|
||||
offset="0.872"
|
||||
style="stop-color:#2C2255"
|
||||
id="stop1023" />
|
||||
|
||||
</linearGradient>
|
||||
|
||||
<path
|
||||
fill="url(#SVGID_1_)"
|
||||
d="m 164.653,376.089 c -0.164,-2.021 -0.504,-3.992 -1.012,-5.896 h -64.51 c -0.508,1.902 -0.849,3.874 -1.013,5.896 z"
|
||||
id="path1026"
|
||||
style="fill:url(#SVGID_1_)" />
|
||||
|
||||
|
||||
<linearGradient
|
||||
id="SVGID_2_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="502.38571"
|
||||
y1="-40.074699"
|
||||
x2="502.38571"
|
||||
y2="-113.7096"
|
||||
gradientTransform="translate(-371,474.5)">
|
||||
<stop
|
||||
offset="0.3033"
|
||||
style="stop-color:#473788"
|
||||
id="stop1028" />
|
||||
|
||||
<stop
|
||||
offset="0.872"
|
||||
style="stop-color:#2C2255"
|
||||
id="stop1030" />
|
||||
|
||||
</linearGradient>
|
||||
|
||||
<path
|
||||
fill="url(#SVGID_2_)"
|
||||
d="M 164.653,381.565 H 98.119 c 0.164,2.021 0.503,3.991 1.012,5.896 h 64.511 c 0.508,-1.904 0.847,-3.875 1.011,-5.896 z"
|
||||
id="path1033"
|
||||
style="fill:url(#SVGID_2_)" />
|
||||
|
||||
|
||||
<linearGradient
|
||||
id="SVGID_3_"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
x1="502.38571"
|
||||
y1="-40.077599"
|
||||
x2="502.38571"
|
||||
y2="-113.7071"
|
||||
gradientTransform="translate(-371,474.5)">
|
||||
<stop
|
||||
offset="0.3033"
|
||||
style="stop-color:#473788"
|
||||
id="stop1035" />
|
||||
|
||||
<stop
|
||||
offset="0.8631"
|
||||
style="stop-color:#2C2255"
|
||||
id="stop1037" />
|
||||
|
||||
</linearGradient>
|
||||
|
||||
<path
|
||||
fill="url(#SVGID_3_)"
|
||||
d="m 131.386,412.217 c 13.397,0 24.945,-7.893 30.263,-19.281 h -60.526 c 5.318,11.388 16.866,19.281 30.263,19.281 z"
|
||||
id="path1040"
|
||||
style="fill:url(#SVGID_3_)" />
|
||||
|
||||
</g>
|
||||
<g
|
||||
id="g1050">
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="m 93.188,381.565 h 4.884 66.706 8.763 6.657 c 0.046,-0.871 0.072,-1.748 0.072,-2.632 0,-0.955 -0.035,-1.901 -0.089,-2.845 H 173.54 164.777 98.071 92.842 82.507 c -0.054,0.942 -0.089,1.89 -0.089,2.845 0,0.884 0.026,1.761 0.072,2.632 z"
|
||||
id="path1044" />
|
||||
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="M 100.928,364.718 H 84.376 c -0.544,1.783 -0.895,3.612 -1.232,5.477 h 8.525 7.259 64.679 9.16 6.547 c -0.338,-1.863 -0.773,-3.692 -1.316,-5.477"
|
||||
id="path1046" />
|
||||
|
||||
<path
|
||||
fill="#ffffff"
|
||||
d="m 173.026,387.46 h -9.16 -64.678 -6.912 -9.133 c 0.328,1.863 0.701,3.691 1.236,5.476 h 16.807 60.682 9.962 6.488 c 0.534,-1.783 0.965,-3.611 1.294,-5.476 z"
|
||||
id="path1048" />
|
||||
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 20 KiB |
@ -0,0 +1,190 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="88"
|
||||
height="31"
|
||||
viewBox="0 0 88 31"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="1.0.2 (1.0.2+r75+1)"
|
||||
sodipodi:docname="jinja2.png.svg"
|
||||
inkscape:export-filename="/project/terry/Dev/eclipse-workspace/LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/jinja2.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
id="vlpc"
|
||||
x1="151"
|
||||
x2="112"
|
||||
y1="192.4"
|
||||
y2="137.3"
|
||||
gradientTransform="matrix(0.5625,0,0,0.568,-9.4,-5.305)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#ffd43b"
|
||||
offset="0"
|
||||
id="stop875" />
|
||||
<stop
|
||||
style="stop-color:#ffe873"
|
||||
offset="1"
|
||||
id="stop877" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="vlpb"
|
||||
x1="26.65"
|
||||
x2="135.7"
|
||||
y1="20.6"
|
||||
y2="114.4"
|
||||
gradientTransform="matrix(0.5625,0,0,0.568,-9.4,-5.305)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#5a9fd4"
|
||||
offset="0"
|
||||
id="stop880" />
|
||||
<stop
|
||||
style="stop-color:#306998"
|
||||
offset="1"
|
||||
id="stop882" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="vlpa"
|
||||
cx="61.52"
|
||||
cy="132.3"
|
||||
r="29.04"
|
||||
gradientTransform="matrix(2.383e-8,-0.2964,1.437,4.684e-7,-128.5,150.5)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:.498"
|
||||
offset="0"
|
||||
id="stop885" />
|
||||
<stop
|
||||
style="stop-color:#7f7f7f;stop-opacity:0"
|
||||
offset="1"
|
||||
id="stop887" />
|
||||
</radialGradient>
|
||||
<linearGradient
|
||||
id="linearGradient6558">
|
||||
<stop
|
||||
style="stop-color:#575757;stop-opacity:1;"
|
||||
offset="0"
|
||||
id="stop6560" />
|
||||
<stop
|
||||
style="stop-color:#2f2f2f;stop-opacity:1;"
|
||||
offset="1"
|
||||
id="stop6562" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6558"
|
||||
id="radialGradient6564"
|
||||
cx="61.297766"
|
||||
cy="60.910986"
|
||||
fx="61.297766"
|
||||
fy="60.910986"
|
||||
r="44.688254"
|
||||
gradientTransform="matrix(1,0,0,0.945104,0,3.343747)"
|
||||
gradientUnits="userSpaceOnUse" />
|
||||
<radialGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6558"
|
||||
id="radialGradient6580"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(1,0,0,0.945104,0.355158,3.334402)"
|
||||
cx="61.297766"
|
||||
cy="60.910986"
|
||||
fx="61.297766"
|
||||
fy="60.910986"
|
||||
r="44.688254" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6558"
|
||||
id="linearGradient4173"
|
||||
x1="255.15521"
|
||||
y1="32.347946"
|
||||
x2="279.8912"
|
||||
y2="32.347946"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.8073249,0,0,0.8073249,57.960878,7.4036303)" />
|
||||
<linearGradient
|
||||
inkscape:collect="always"
|
||||
xlink:href="#linearGradient6558"
|
||||
id="linearGradient5145"
|
||||
gradientUnits="userSpaceOnUse"
|
||||
gradientTransform="matrix(0.7902775,0,0,0.82474,60.019977,8.0684132)"
|
||||
x1="255.15521"
|
||||
y1="32.347946"
|
||||
x2="279.8912"
|
||||
y2="32.347946" />
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#9bacc2"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="16.745574"
|
||||
inkscape:cx="56.700057"
|
||||
inkscape:cy="24.358228"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="2760"
|
||||
inkscape:window-height="1620"
|
||||
inkscape:window-x="826"
|
||||
inkscape:window-y="228"
|
||||
inkscape:window-maximized="0">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid833"
|
||||
originx="4"
|
||||
originy="1"
|
||||
spacingx="8"
|
||||
spacingy="5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
id="layer1-6"
|
||||
transform="matrix(0.3125897,0,0,0.3125897,-2.5493525,-3.5275979)">
|
||||
<path
|
||||
style="font-style:normal;font-weight:normal;font-size:12px;font-family:'Bitstream Vera Sans';fill:#f4f4f4;fill-opacity:1;stroke:#e7e7e7;stroke-width:0.8;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 165.36463,80.874808 v 0 H 153.32556 V 81.8344 h -5.67562 V 36.035583 h 17.71469 V 20.333129 c 5.21691,0.697954 7.7107,1.744785 7.48146,3.140492 -0.0574,0.581637 -0.63064,1.075973 -1.71985,1.483003 v 11.078959 h 17.97271 v 46.496703 h -5.76162 v -1.657478 h -12.21109 v 22.070672 h -5.76161 V 80.874808 M 153.32556,55.489173 v 0 h 12.03907 V 41.793146 h -12.03907 v 13.696027 m 17.80068,0 v 0 h 12.21109 V 41.793146 h -12.21109 v 13.696027 m 12.21109,5.844804 v 0 h -12.21109 v 13.696029 h 12.21109 V 61.333977 m -17.9727,0 v 0 h -12.03907 v 13.696029 h 12.03907 V 61.333977 m -32.50566,-1.919185 c 4.47172,3.722091 8.14072,8.520056 11.00721,14.393909 l -4.72964,3.576671 c -1.89187,-4.419927 -4.50034,-8.258302 -7.8254,-11.515132 v 37.07524 h -5.6756 V 68.57455 c -3.32512,3.373143 -7.10883,6.339157 -11.35118,8.89806 l -4.64367,-4.100084 c 11.86713,-6.28096 20.98243,-17.883314 27.34599,-34.807109 h -20.72447 v -5.844802 h 9.54533 V 20.333129 c 5.04491,0.697954 7.51007,1.715709 7.39545,3.053254 -0.0574,0.6398 -0.63064,1.163211 -1.71992,1.570241 v 7.763991 h 9.28736 l 2.83781,4.012854 c -2.9238,8.781791 -6.50687,16.342223 -10.74927,22.681323 m 121.25119,-9.944891 v 0 -29.136772 c 5.10227,0.697954 7.56739,1.715709 7.39546,3.053254 -0.0574,0.523486 -0.45863,0.959661 -1.2039,1.308534 -8e-5,6.9e-5 -8e-5,6.9e-5 0,0 v 0 l -0.51594,0.261707 v 24.513277 h 17.37074 v 5.75757 h -17.37074 v 38.558241 h 21.67038 v 5.844798 h -49.10238 v -5.844798 h 21.75638 V 55.227471 h -17.8867 v -5.75757 h 17.8867 m -28.54986,9.857653 c 5.56081,3.780244 10.06115,8.549139 13.50097,14.306681 l -4.2997,4.012844 c -3.15312,-5.466757 -6.93682,-9.712231 -11.35113,-12.736431 v 38.034832 h -5.6756 V 67.44049 c -4.81565,4.187341 -10.03262,7.589531 -15.65084,10.206589 l -4.21373,-4.449026 c 14.79091,-6.280952 26.14212,-17.825156 34.0535,-34.632636 h -26.57205 v -5.844802 h 12.64111 V 20.333129 c 5.04491,0.697954 7.51008,1.715709 7.39546,3.053254 -0.0574,0.6398 -0.63064,1.163211 -1.71992,1.570241 v 7.763991 h 12.55509 l 2.5798,4.012854 c -3.66905,8.781791 -8.08339,16.313142 -13.24296,22.594085"
|
||||
id="text4761" />
|
||||
<path
|
||||
style="font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:44.0979px;line-height:125%;font-family:Candara;text-align:start;writing-mode:lr-tb;text-anchor:start;fill:#b41717;fill-opacity:1;stroke:#7f2828;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 149.14708,37.774469 c -0.16901,3.34343 -0.30182,7.049756 -0.39837,11.118987 -0.0724,4.069298 -0.36691,21.747872 -0.36687,26.630966 -4e-5,3.541373 -0.32596,6.466844 -0.97778,8.776413 -0.65187,2.309587 -1.67794,4.256236 -3.07821,5.839944 -1.37616,1.583715 -3.15063,2.760504 -5.32346,3.53036 -2.17286,0.769857 -4.78028,1.154796 -7.82225,1.154796 -2.34186,0 -4.44227,-0.230955 -6.30125,-0.692886 l 0.54321,-4.817119 c 1.71413,0.72587 3.50068,1.088804 5.35967,1.088803 2.07628,1e-6 3.88698,-0.263951 5.43213,-0.791857 1.56925,-0.549895 2.81261,-1.396743 3.73006,-2.540541 0.94154,-1.143787 1.60546,-2.551531 1.99176,-4.223235 0.41041,-1.671688 0.61562,-3.860289 0.61564,-6.565815 -2e-5,-9.986166 0.0772,-31.624028 -0.28495,-38.508816 h 6.88067 m 17.2379,42.958228 h -6.55474 c 0.33797,-4.399199 0.50699,-9.425285 0.50699,-15.078273 0,-6.356824 -0.42252,-11.690857 -1.2675,-16.002105 l 7.24284,-0.890836 c -0.28973,4.597196 -0.43458,10.228167 -0.43458,16.892941 0,5.279055 0.169,10.305141 0.50699,15.078273 m 1.52103,-41.242538 c -3e-5,1.121835 -0.39841,2.100656 -1.19511,2.936461 -0.79672,0.813895 -1.91935,1.220822 -3.3679,1.220779 -1.23128,4.3e-5 -2.197,-0.351895 -2.89712,-1.055804 -0.676,-0.725826 -1.014,-1.594668 -1.014,-2.606525 0,-1.099766 0.41043,-2.056585 1.23127,-2.870479 0.82084,-0.813811 1.95554,-1.220738 3.40412,-1.22078 1.18296,4.2e-5 2.11248,0.362972 2.78848,1.088798 0.70013,0.703917 1.05023,1.539764 1.05026,2.50755 m 38.82147,41.242538 h -6.59097 c 0.53112,-5.784948 0.79668,-12.097798 0.79669,-18.938575 -1e-5,-3.387366 -0.7605,-5.696945 -2.28146,-6.928751 -1.49687,-1.253741 -3.64555,-1.880624 -6.4461,-1.880657 -3.42833,3.3e-5 -6.59099,1.132821 -9.48811,3.398385 0,7.500662 0.0483,15.617188 0.14485,24.349598 h -6.59096 c 0.4104,-7.478639 0.61565,-12.889655 0.61565,-16.233065 0,-5.147043 -0.53117,-10.140139 -1.59344,-14.979293 l 6.37371,-0.824846 0.68805,4.025268 h 0.28972 c 3.57312,-2.947438 7.39972,-4.421169 11.47988,-4.421194 4.00766,2.5e-5 7.11,0.813887 9.30702,2.441551 2.19694,1.605745 3.29546,4.476216 3.29547,8.611445 -1e-5,0.417944 -0.0242,1.242799 -0.0724,2.474555 -0.0483,1.231797 -0.0725,2.056643 -0.0725,2.474552 -2e-5,3.673348 0.0483,9.150352 0.14486,16.431027 m 15.97043,-32.037204 c -0.41044,6.818789 -0.61566,13.659548 -0.61566,20.522287 0,1.825681 0.0604,4.245239 0.18107,7.258688 0.1449,2.991457 0.21728,5.026091 0.21731,6.103895 -3e-5,7.104705 -2.96958,11.415924 -8.90868,12.933661 l -1.81071,-2.50754 c 2.14871,-1.649718 3.47656,-3.409399 3.98354,-5.279053 0.74843,-2.683519 1.12265,-8.402478 1.12265,-17.156896 0,-9.392287 -0.48283,-16.409005 -1.44856,-21.050196 l 7.27904,-0.824846 m 1.55719,-9.205334 c 0,1.121835 -0.39837,2.100656 -1.19504,2.936461 -0.79674,0.813895 -1.91937,1.220822 -3.36793,1.220779 -1.23129,4.3e-5 -2.19698,-0.351895 -2.89713,-1.055804 -0.676,-0.725826 -1.014,-1.594668 -1.014,-2.606525 0,-1.099766 0.41044,-2.056585 1.23131,-2.870479 0.82085,-0.813811 1.95554,-1.220738 3.40409,-1.22078 1.183,4.2e-5 2.11249,0.362972 2.78852,1.088798 0.70011,0.703917 1.05018,1.539764 1.05018,2.50755 m 35.34498,41.242538 -5.68562,0.197964 c -0.28973,-1.077804 -0.43459,-2.100616 -0.43456,-3.068445 h -0.36216 c -2.96957,2.463556 -7.01347,3.69533 -12.13168,3.695331 -2.77644,-10e-7 -5.16656,-0.736865 -7.17043,-2.210599 -2.00385,-1.495727 -3.00575,-3.618341 -3.00575,-6.367849 0,-3.387375 1.56926,-6.103883 4.70781,-8.149525 3.13856,-2.067607 8.96898,-3.156414 17.49144,-3.266409 0.0724,-0.52789 0.10859,-1.132779 0.10861,-1.814668 -2e-5,-2.705494 -0.7967,-4.509161 -2.39009,-5.411023 -1.56933,-0.901813 -3.95946,-1.352727 -7.17044,-1.35276 -3.7904,3.3e-5 -7.52043,0.428954 -11.19011,1.28677 l 0.6156,-4.553183 c 3.62141,-0.945791 7.78603,-1.418709 12.49388,-1.418734 4.29737,2.5e-5 7.61701,0.813887 9.95887,2.441551 2.34183,1.605745 3.51274,4.355245 3.51279,8.248507 -5e-5,1.033844 -0.0604,2.914492 -0.18109,5.641983 -0.0966,2.705525 -0.14487,4.509198 -0.14485,5.411024 -2e-5,4.003281 0.32589,7.566633 0.97778,10.690065 m -6.40989,-6.400841 c -0.12074,-3.343387 -0.1811,-6.34584 -0.18106,-9.007372 -4.53886,1.4e-5 -7.99127,0.307959 -10.35726,0.923834 -3.95939,1.099813 -5.93909,3.20043 -5.93909,6.301859 0,2.991466 2.31766,4.487194 6.9531,4.487189 3.98354,5e-6 7.15828,-0.901832 9.52431,-2.70551"
|
||||
id="text3736"
|
||||
sodipodi:nodetypes="ccsscssccscccsccccsccsccsscsssccccscscccsccccscsssccscscccscccsscsssccccccscsccscsccscscsccccssc" />
|
||||
<path
|
||||
style="fill:url(#radialGradient6564);fill-opacity:1;fill-rule:evenodd;stroke:#323232;stroke-width:1;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
|
||||
d="m 105.45673,18.675923 c 0,0 -17.244781,8.242538 -31.283896,10.061975 -14.039107,1.819435 -40.8124,3.639673 -46.127212,2.355358 -5.314804,-1.284315 -9.129977,-2.78406 -9.129977,-2.78406 l 1.105796,3.747387 -3.411928,2.995888 0.604887,1.069255 1.40352,0.105914 4.30981,0.534612 0.604891,1.926657 2.405354,0.216875 1.205046,4.065143 c 0,0 5.111743,0.428701 6.615932,0.428701 1.504189,0 4.513013,-0.211826 4.513013,-0.211826 l 0.09924,1.603855 1.1058,0.211838 v 1.820732 l -2.410085,2.143532 0.60489,0.105912 v 0.746456 c 0,0 -5.41635,0.43203 -7.622506,0.110963 -2.206144,-0.321084 -2.608554,-0.322804 -2.608554,-0.322804 l -0.198489,0.211841 -0.09924,0.963328 h 0.500925 l 0.198474,4.176089 11.133671,-0.4287 -0.803363,14.449903 -0.09925,1.815695 -9.4277,-0.534626 -0.09924,-3.853303 h 2.102918 l 0.203211,-1.497956 1.904434,-0.4287 0.302448,-0.423665 -7.12158,-1.714818 -5.415611,1.603855 0.902596,0.751503 h 0.902612 l 0.09924,1.286116 1.904445,0.105912 v 3.747387 l -2.102919,0.53463 0.401674,0.852369 0.500925,0.322785 v 2.889986 h 1.304284 v 13.375612 l -2.107646,0.322791 0.302437,3.853297 1.29956,0.216875 -0.198476,8.775868 5.718048,0.1059 -1.205036,-8.669926 8.624341,-0.211842 -0.600161,4.705689 -0.80336,3.318679 8.723576,0.10591 0.09924,-8.558977 6.015767,-0.534612 -0.29772,5.45717 -0.203201,3.207719 h 5.117899 l -0.20321,-8.775853 0.704123,0.110964 0.198485,-4.176105 h -0.803361 l -0.297723,-1.714818 -0.500924,-4.922556 0.198485,-5.668996 h 1.101071 v -3.424601 l -1.403517,0.10591 0.203199,-4.039919 1.630357,-0.161388 0.07561,-1.311334 0.926236,-0.136182 0.949857,-0.721236 -5.713334,-1.175154 -5.666072,1.255848 0.552898,0.907857 0.600162,-0.05044 0.699398,-0.02522 0.1276,1.654296 1.578368,-0.07565 0.02835,3.58095 -6.795506,-0.15635 0.226837,-3.828095 0.222099,-3.480075 v -4.574549 l 0.20321,-4.81663 13.609913,-0.696015 16.194854,-0.933059 0.151215,3.076591 -0.576523,7.383817 -0.250464,6.874418 -5.963796,-0.105915 -0.02835,-4.816629 2.206879,-0.08069 0.09925,-1.361781 0.902596,-0.136178 -0.04726,-0.267302 0.90261,-0.05044 0.500912,-0.670795 -6.743521,-1.578651 -6.719895,1.44247 0.477288,0.832193 0.751385,-0.05549 v 0.378277 h 0.926233 v 1.523161 l 1.980057,0.02522 -0.02364,4.226529 h -2.003678 l -0.02835,0.963331 0.704124,0.08069 -0.07561,3.666695 1.479132,0.08071 -0.174851,14.530598 -1.956419,0.398445 0.02363,0.696015 h 0.680499 v 3.72217 h 1.124707 l -0.297722,5.083953 -0.378048,4.438358 7.121569,0.1866 -0.226828,-3.853298 -0.524546,-3.207722 -0.103963,-2.784073 6.044121,-0.105914 -0.174851,4.307231 -0.02835,4.549316 3.411932,0.26731 4.635874,-0.1866 1.455507,-0.42872 -0.80337,-2.436048 -0.198478,-3.828092 -0.378047,-2.728585 5.765306,-0.211826 -0.250459,3.343904 -0.02363,5.245327 2.30612,0.21183 2.282498,-0.0504 1.101077,-0.348 -0.652135,-4.978015 -0.222116,-3.747394 0.978216,-0.105915 0.02363,-3.343902 0.274093,-0.05548 -0.04728,-0.721233 h -1.129421 l -0.226827,-2.461285 -0.09924,-10.677284 0.850626,-0.02522 v -3.505308 l 0.354416,0.05549 v -0.696017 l -1.25702,-0.110961 0.02835,-4.06514 2.102917,-0.186605 -0.122861,-1.366825 0.926237,-0.08069 -0.052,-0.267314 1.228675,-0.61532 -6.24261,-1.255849 -6.341832,1.286115 0.401673,0.746456 0.978213,-0.0807 0.05199,0.32279 h 0.826987 l 0.04726,1.603855 2.05567,-0.02522 0.174848,3.934007 -7.268076,-0.05547 -0.850624,-5.911092 -0.680487,-3.132083 -0.548183,-5.618557 0.326073,-3.288431 14.488882,-1.099496 0.04726,-4.897336 0.727755,-0.186608 -0.04724,-0.746454 -0.552908,-0.322787 c -1.14e-4,0 -7.922562,1.174894 -10.429546,1.442468 -0.706297,0.07537 -0.652807,0.07042 -1.228673,0.13113 l -0.07561,-0.907852 -2.996075,-1.568554 0.03781,-1.825778 1.030198,-0.03027 0.0756,-2.51171 c 0,0 6.139781,-0.402974 8.421138,-0.938108 2.281355,-0.535141 5.51485,-1.069244 5.51485,-1.069244 l 1.531113,-4.145836 3.033892,-0.882633 0.250451,-0.696015 6.86639,-1.901424 0.77974,-0.640542 -2.60858,-5.699265 0.25048,-1.286117 1.32792,-0.696013 0.95457,-2.915207 z m -32.989856,21.727805 -0.03781,2.072926 1.554746,0.06556 -0.09924,1.96701 -3.048061,1.997266 -0.189019,0.57497 1.228671,0.01009 -0.0095,0.484186 -9.31428,0.453923 0.06143,-1.37691 0.425312,-0.685933 0.02835,-0.438784 0.0095,-0.948193 0.264629,-0.630458 0.09924,-0.509392 v -0.363141 l 0.401684,-1.603871 z m -19.479186,1.765256 -0.226835,1.392043 0.727746,0.857404 -0.04725,1.497955 0.675763,1.044022 -0.17485,1.230631 0.500923,0.721234 -9.503313,0.373227 -0.02363,-0.317741 1.101086,-0.13618 0.05197,-0.403482 -2.405367,-1.3063 -0.127589,-2.088047 1.15306,-0.05547 0.09925,-2.249446 z m 14.063574,32.107534 5.765308,0.373224 -0.198471,7.762091 0.751371,6.365024 -6.115005,-0.211839 z m -38.608682,0.322786 9.229227,0.479138 -0.803361,5.35126 v 4.498891 l 0.652137,2.511709 -9.026014,0.428704 z m 59.066078,0.05044 V 87.92449 l -5.864545,0.428706 -0.203201,-7.010602 -0.652148,-6.531449 z m -44.421242,0.29757 6.819132,0.02522 0.07089,12.306371 -6.365468,0.110961 -0.326075,-3.989484 -0.02363,-3.959223 z"
|
||||
id="path4735" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 17 KiB |
@ -0,0 +1,163 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="88"
|
||||
height="31"
|
||||
viewBox="0 0 88 31"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="1.0.2 (1.0.2+r75+1)"
|
||||
sodipodi:docname="python.png.svg"
|
||||
inkscape:export-filename="/project/terry/Dev/eclipse-workspace/LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/python.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
id="vlpc"
|
||||
x1="151"
|
||||
x2="112"
|
||||
y1="192.4"
|
||||
y2="137.3"
|
||||
gradientTransform="matrix(0.5625,0,0,0.568,-9.4,-5.305)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#ffd43b"
|
||||
offset="0"
|
||||
id="stop875" />
|
||||
<stop
|
||||
style="stop-color:#ffe873"
|
||||
offset="1"
|
||||
id="stop877" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="vlpb"
|
||||
x1="26.65"
|
||||
x2="135.7"
|
||||
y1="20.6"
|
||||
y2="114.4"
|
||||
gradientTransform="matrix(0.5625,0,0,0.568,-9.4,-5.305)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#5a9fd4"
|
||||
offset="0"
|
||||
id="stop880" />
|
||||
<stop
|
||||
style="stop-color:#306998"
|
||||
offset="1"
|
||||
id="stop882" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="vlpa"
|
||||
cx="61.52"
|
||||
cy="132.3"
|
||||
r="29.04"
|
||||
gradientTransform="matrix(2.383e-8,-0.2964,1.437,4.684e-7,-128.5,150.5)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:.498"
|
||||
offset="0"
|
||||
id="stop885" />
|
||||
<stop
|
||||
style="stop-color:#7f7f7f;stop-opacity:0"
|
||||
offset="1"
|
||||
id="stop887" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#f2f2f2"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="11.840909"
|
||||
inkscape:cx="39.016852"
|
||||
inkscape:cy="16.456077"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="2880"
|
||||
inkscape:window-height="1620"
|
||||
inkscape:window-x="826"
|
||||
inkscape:window-y="228"
|
||||
inkscape:window-maximized="0">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid833"
|
||||
originx="4"
|
||||
originy="1"
|
||||
spacingx="8"
|
||||
spacingy="5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g935"
|
||||
transform="matrix(0.17720589,0,0,0.17720589,0.93636347,5.0256392)">
|
||||
<path
|
||||
d="m 184.6,61.93 c 0,-14.56 -4.152,-22.04 -12.46,-22.45 -3.304,-0.156 -6.531,0.3704 -9.669,1.589 -2.505,0.8967 -4.191,1.784 -5.078,2.68 v 34.76 c 5.312,3.334 10.03,4.883 14.14,4.64 8.704,-0.5751 13.06,-7.642 13.06,-21.22 z m 10.24,0.6043 c 0,7.398 -1.735,13.54 -5.224,18.42 -3.889,5.527 -9.279,8.373 -16.17,8.529 -5.195,0.1657 -10.55,-1.462 -16.05,-4.874 v 31.59 l -8.909,-3.178 v -70.12 c 1.462,-1.793 3.343,-3.334 5.624,-4.64 5.302,-3.09 11.75,-4.679 19.33,-4.757 l 0.1267,0.1267 c 6.93,-0.08773 12.27,2.758 16.02,8.529 3.499,5.293 5.254,12.08 5.254,20.37 z"
|
||||
style="fill:#646464"
|
||||
id="path892" />
|
||||
<path
|
||||
d="m 249.3,83.27 c 0,9.923 -0.9942,16.79 -2.983,20.62 -1.998,3.821 -5.8,6.872 -11.41,9.143 -4.552,1.793 -9.474,2.768 -14.76,2.934 l -1.472,-5.614 c 5.371,-0.731 9.153,-1.462 11.35,-2.193 4.318,-1.462 7.281,-3.704 8.909,-6.706 1.306,-2.447 1.949,-7.115 1.949,-14.03 v -2.32 c -6.092,2.768 -12.48,4.143 -19.15,4.143 -4.386,0 -8.256,-1.374 -11.59,-4.143 -3.743,-3.012 -5.614,-6.833 -5.614,-11.46 v -37.08 l 8.909,-3.051 v 37.32 c 0,3.987 1.287,7.057 3.86,9.211 2.573,2.154 5.907,3.187 9.991,3.109 4.084,-0.08773 8.46,-1.667 13.11,-4.757 v -43.54 h 8.909 v 48.41 z"
|
||||
style="fill:#646464"
|
||||
id="path894" />
|
||||
<path
|
||||
d="m 284.1,89 c -1.062,0.08772 -2.037,0.1267 -2.934,0.1267 -5.039,0 -8.967,-1.199 -11.77,-3.606 -2.797,-2.408 -4.201,-5.731 -4.201,-9.971 v -35.09 h -6.102 v -5.605 h 6.102 v -14.88 l 8.899,-3.168 v 18.05 h 10.01 v 5.605 h -10.01 v 34.85 c 0,3.343 0.8967,5.712 2.69,7.096 1.54,1.14 3.987,1.793 7.32,1.959 v 4.64 z"
|
||||
style="fill:#646464"
|
||||
id="path896" />
|
||||
<path
|
||||
d="m 338,88.27 h -8.909 V 53.88 c 0,-3.499 -0.8188,-6.511 -2.447,-9.026 -1.881,-2.846 -4.493,-4.269 -7.846,-4.269 -4.084,0 -9.192,2.154 -15.32,6.462 v 41.22 h -8.909 V 6.067 L 303.478,3.26 V 40.7 c 5.692,-4.143 11.91,-6.219 18.67,-6.219 4.718,0 8.538,1.589 11.46,4.757 2.934,3.168 4.396,7.115 4.396,11.83 v 37.19 z"
|
||||
style="fill:#646464"
|
||||
id="path898" />
|
||||
<path
|
||||
d="m 385.4,60.53 c 0,-5.595 -1.062,-10.21 -3.178,-13.87 -2.515,-4.454 -6.423,-6.803 -11.71,-7.047 -9.767,0.5653 -14.64,7.564 -14.64,20.98 0,6.15 1.014,11.29 3.061,15.41 2.612,5.254 6.531,7.846 11.76,7.759 9.806,-0.07798 14.71,-7.817 14.71,-23.23 z m 9.757,0.05848 c 0,7.963 -2.037,14.59 -6.102,19.88 -4.474,5.926 -10.65,8.899 -18.54,8.899 -7.817,0 -13.91,-2.973 -18.31,-8.899 -3.987,-5.293 -5.975,-11.92 -5.975,-19.88 0,-7.486 2.154,-13.78 6.462,-18.91 4.552,-5.439 10.54,-8.168 17.93,-8.168 7.398,0 13.42,2.729 18.06,8.168 4.308,5.127 6.462,11.42 6.462,18.91 z"
|
||||
style="fill:#646464"
|
||||
id="path900" />
|
||||
<path
|
||||
d="m 446.2,88.27 h -8.909 V 51.93 c 0,-3.987 -1.199,-7.096 -3.597,-9.338 -2.398,-2.232 -5.595,-3.314 -9.581,-3.226 -4.23,0.07798 -8.256,1.462 -12.08,4.143 v 44.76 h -8.909 v -45.86 c 5.127,-3.733 9.845,-6.17 14.15,-7.31 4.065,-1.062 7.651,-1.589 10.74,-1.589 2.115,0 4.104,0.2047 5.975,0.6141 3.499,0.809 6.345,2.31 8.538,4.513 2.447,2.437 3.665,5.361 3.665,8.782 v 40.85 z"
|
||||
style="fill:#646464"
|
||||
id="path902" />
|
||||
<path
|
||||
d="M 60.51,6.398 C 55.926,6.4193 51.549,6.8102 47.7,7.492 36.35,9.497 34.29,13.692 34.29,21.432 v 10.22 H 61.1 v 3.406 H 34.29 24.23 c -7.792,0 -14.62,4.684 -16.75,13.59 -2.462,10.21 -2.571,16.59 0,27.25 1.906,7.938 6.458,13.59 14.25,13.59 h 9.219 v -12.25 c 0,-8.85 7.657,-16.66 16.75,-16.66 h 26.78 c 7.455,0 13.41,-6.138 13.41,-13.62 v -25.53 c 0,-7.266 -6.13,-12.72 -13.41,-13.94 C 69.873,6.7213 65.094,6.373 60.509,6.394 Z m -14.5,8.219 c 2.77,0 5.031,2.299 5.031,5.125 -2e-6,2.816 -2.262,5.094 -5.031,5.094 -2.779,-10e-7 -5.031,-2.277 -5.031,-5.094 -10e-7,-2.826 2.252,-5.125 5.031,-5.125 z"
|
||||
style="fill:url(#vlpb)"
|
||||
id="path904" />
|
||||
<path
|
||||
d="m 91.23,35.05 v 11.91 c 0,9.231 -7.826,17 -16.75,17 H 47.7 c -7.336,0 -13.41,6.278 -13.41,13.62 v 25.53 c 0,7.266 6.319,11.54 13.41,13.62 8.487,2.496 16.63,2.947 26.78,0 6.75,-1.954 13.41,-5.888 13.41,-13.62 V 92.89 H 61.11 v -3.406 h 26.78 13.41 c 7.792,0 10.7,-5.435 13.41,-13.59 2.799,-8.399 2.68,-16.48 0,-27.25 -1.926,-7.757 -5.604,-13.59 -13.41,-13.59 H 91.24 Z M 76.17,99.71 c 2.779,3e-6 5.031,2.277 5.031,5.094 -2e-6,2.826 -2.252,5.125 -5.031,5.125 -2.77,0 -5.031,-2.299 -5.031,-5.125 2e-6,-2.816 2.262,-5.094 5.031,-5.094 z"
|
||||
style="fill:url(#vlpc)"
|
||||
id="path906" />
|
||||
<path
|
||||
d="m 463.6,26.91 h 1.562 v -9.796 h 3.7 V 15.946 H 459.9 v 1.168 h 3.7 v 9.796 m 6.647,0 h 1.334 v -8.947 l 2.896,8.946 h 1.486 l 3.018,-8.916 v 8.917 h 1.456 V 15.95 h -1.926 l -3.298,9.393 -2.813,-9.393 h -2.153 v 10.96"
|
||||
style="fill:#646464"
|
||||
id="path908" />
|
||||
<path
|
||||
transform="matrix(0.7341,0,0,0.8095,16.25,27.01)"
|
||||
d="m 110.5,132.3 a 48.95,8.607 0 1 1 -97.9,0 48.95,8.607 0 1 1 97.9,0 z"
|
||||
style="opacity:0.4438;fill:url(#vlpa)"
|
||||
id="path910" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 8.1 KiB |
@ -0,0 +1,142 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="88"
|
||||
height="31"
|
||||
viewBox="0 0 88 31"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="1.0.2 (1.0.2+r75+1)"
|
||||
sodipodi:docname="yaml.png.svg"
|
||||
inkscape:export-filename="/project/terry/Dev/eclipse-workspace/LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/yaml.png"
|
||||
inkscape:export-xdpi="96"
|
||||
inkscape:export-ydpi="96">
|
||||
<defs
|
||||
id="defs2">
|
||||
<linearGradient
|
||||
id="vlpc"
|
||||
x1="151"
|
||||
x2="112"
|
||||
y1="192.4"
|
||||
y2="137.3"
|
||||
gradientTransform="matrix(0.5625,0,0,0.568,-9.4,-5.305)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#ffd43b"
|
||||
offset="0"
|
||||
id="stop875" />
|
||||
<stop
|
||||
style="stop-color:#ffe873"
|
||||
offset="1"
|
||||
id="stop877" />
|
||||
</linearGradient>
|
||||
<linearGradient
|
||||
id="vlpb"
|
||||
x1="26.65"
|
||||
x2="135.7"
|
||||
y1="20.6"
|
||||
y2="114.4"
|
||||
gradientTransform="matrix(0.5625,0,0,0.568,-9.4,-5.305)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#5a9fd4"
|
||||
offset="0"
|
||||
id="stop880" />
|
||||
<stop
|
||||
style="stop-color:#306998"
|
||||
offset="1"
|
||||
id="stop882" />
|
||||
</linearGradient>
|
||||
<radialGradient
|
||||
id="vlpa"
|
||||
cx="61.52"
|
||||
cy="132.3"
|
||||
r="29.04"
|
||||
gradientTransform="matrix(2.383e-8,-0.2964,1.437,4.684e-7,-128.5,150.5)"
|
||||
gradientUnits="userSpaceOnUse">
|
||||
<stop
|
||||
style="stop-color:#b8b8b8;stop-opacity:.498"
|
||||
offset="0"
|
||||
id="stop885" />
|
||||
<stop
|
||||
style="stop-color:#7f7f7f;stop-opacity:0"
|
||||
offset="1"
|
||||
id="stop887" />
|
||||
</radialGradient>
|
||||
</defs>
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#fff986"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="1"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="16.745574"
|
||||
inkscape:cx="45.927489"
|
||||
inkscape:cy="31.26044"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="2760"
|
||||
inkscape:window-height="1620"
|
||||
inkscape:window-x="826"
|
||||
inkscape:window-y="228"
|
||||
inkscape:window-maximized="0">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid833"
|
||||
originx="4"
|
||||
originy="1"
|
||||
spacingx="8"
|
||||
spacingy="5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g1739"
|
||||
transform="matrix(0.26044222,0,0,0.26044222,2.4594659,1.1756779)">
|
||||
<polygon
|
||||
points="73,1 258,1 258,19 318,109 1,109 "
|
||||
style="fill:#ffffff;stroke:#000000;stroke-width:1"
|
||||
id="polygon1716" />
|
||||
<polygon
|
||||
points="25,109 1,109 37,55 1,1 25,1 49,37 73,1 97,1 "
|
||||
style="fill:#000000;stroke:#000000;stroke-width:1"
|
||||
id="polygon1718" />
|
||||
<polygon
|
||||
points="103,109 127,109 127,1 103,1 31,109 55,109 103,37 "
|
||||
style="fill:#000000;stroke:#000000;stroke-width:1"
|
||||
id="polygon1720" />
|
||||
<polygon
|
||||
points="156,1 132,1 132,109 156,109 156,37 180,73 204,37 204,109 228,109 228,1 198,1 180,37 "
|
||||
style="fill:#000000;stroke:#000000;stroke-width:1"
|
||||
id="polygon1722" />
|
||||
<polygon
|
||||
points="258,1 234,1 234,109 318,109 302,85 258,85 "
|
||||
style="fill:#000000;stroke:#000000;stroke-width:1"
|
||||
id="polygon1724" />
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 4.1 KiB |
@ -0,0 +1,63 @@
|
||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
width="88"
|
||||
height="31"
|
||||
viewBox="0 0 88 31"
|
||||
version="1.1"
|
||||
id="svg8"
|
||||
inkscape:version="1.0.2 (1.0.2+r75+1)"
|
||||
sodipodi:docname="software_banner-88x31.svg">
|
||||
<defs
|
||||
id="defs2" />
|
||||
<sodipodi:namedview
|
||||
id="base"
|
||||
pagecolor="#ffffff"
|
||||
bordercolor="#666666"
|
||||
borderopacity="1.0"
|
||||
inkscape:pageopacity="0.0"
|
||||
inkscape:pageshadow="2"
|
||||
inkscape:zoom="16.745574"
|
||||
inkscape:cx="39.74974"
|
||||
inkscape:cy="16.148352"
|
||||
inkscape:document-units="px"
|
||||
inkscape:current-layer="layer1"
|
||||
inkscape:document-rotation="0"
|
||||
showgrid="true"
|
||||
units="px"
|
||||
inkscape:window-width="2880"
|
||||
inkscape:window-height="1620"
|
||||
inkscape:window-x="826"
|
||||
inkscape:window-y="228"
|
||||
inkscape:window-maximized="0">
|
||||
<inkscape:grid
|
||||
type="xygrid"
|
||||
id="grid833"
|
||||
originx="4"
|
||||
originy="1"
|
||||
spacingx="8"
|
||||
spacingy="5" />
|
||||
</sodipodi:namedview>
|
||||
<metadata
|
||||
id="metadata5">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title></dc:title>
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1" />
|
||||
</svg>
|
After Width: | Height: | Size: 1.7 KiB |
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/aegisub.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/ansible.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/apache.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/ardour.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/audacity.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/blender.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/brasero.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/chromium.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/dvdstyler.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/eclipse.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/gimp.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/gitea.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/inkscape.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/jinja2.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/kate.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/kdenlive.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/krita.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/libreoffice.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/mediawiki.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/mumble.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/mypaint.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/mysql.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/obs.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/openoffice.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/papagayo-ng.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/papagayo_ng.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/python.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/rapidsvn.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/renderchan.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/resourcespace.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/scribus.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/subversion.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/synfig.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/tactic.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/trac.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/ubuntustudio.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/vim.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/vlc.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/vokoscreen.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/wordpress.png
(Stored with Git LFS)
Normal file
BIN
LunaGen/src/lunagen/addons/softwarelist/skeleton/images/icons/yaml.png
(Stored with Git LFS)
Normal file
7
LunaGen/src/lunagen/addons/softwarelist/software.j2
Normal file
@ -0,0 +1,7 @@
|
||||
{# Software List INCLUDE #}
|
||||
<div id="software_icon_array" class="software_icon_array">
|
||||
{%- for software in softwarelist %}
|
||||
<a href="{{software.url}}" target="blank" rel="nofollow" ><img src="{{imgdir}}/icons/{{software.img}}" width="88" height="31" border="0"
|
||||
alt="{{software.name}}" title="{{software.name}} - {{software.desc}}" /></a>
|
||||
{%- endfor %}
|
||||
</div><!--software_block-->
|
139
LunaGen/src/lunagen/addons/softwarelist/software.yaml
Normal file
@ -0,0 +1,139 @@
|
||||
# Software list
|
||||
---
|
||||
softwarelist:
|
||||
- name: Aegisub
|
||||
desc: Subtitle editor
|
||||
url: http://www.aegisub.org/
|
||||
img: aegisub.png
|
||||
|
||||
- name: Ansible
|
||||
desc: Provisioning automation system
|
||||
url: https://www.ansible.com/
|
||||
img: ansible.png
|
||||
|
||||
- name: Ardour
|
||||
desc: Digital audio workstation
|
||||
url: http://ardour.org/
|
||||
img: ardour.png
|
||||
|
||||
- name: Audacity
|
||||
desc: Audio recorder and editor
|
||||
url: http://web.audacityteam.org/
|
||||
img: audacity.png
|
||||
|
||||
- name: Brasero
|
||||
desc: Optical disk burning utility
|
||||
url: https://wiki.gnome.org/Apps/Brasero
|
||||
img: brasero.png
|
||||
|
||||
- name: DVDStyler
|
||||
desc: DVD mastering tool
|
||||
url: https://www.dvdstyler.org/en/
|
||||
img: dvdstyler.png
|
||||
|
||||
- name: GIMP
|
||||
desc: Image Manipulation Package
|
||||
url: http://www.gimp.org/
|
||||
img: gimp.png
|
||||
|
||||
- name: Inkscape
|
||||
desc: 2D vector graphic editing application
|
||||
url: http://www.inkscape.org/
|
||||
img: inkscape.png
|
||||
|
||||
- name: Kdenlive
|
||||
desc: Non-linear video editor
|
||||
url: http://kdenlive.org/
|
||||
img: kdenlive.png
|
||||
|
||||
- name: Krita
|
||||
desc: Digital painting application
|
||||
url: http://www.krita.org/
|
||||
img: krita.png
|
||||
|
||||
- name: LibreOffice
|
||||
desc: Office Suite
|
||||
url: https://www.libreoffice.org
|
||||
img: libreoffice.png
|
||||
|
||||
- name: MediaWiki
|
||||
desc: Collaborative document editing platform
|
||||
url: http://mediawiki.org/
|
||||
img: mediawiki.png
|
||||
|
||||
- name: Mumble
|
||||
desc: VOIP teleconferencing package
|
||||
url: https://wiki.mumble.info/
|
||||
img: mumble.png
|
||||
|
||||
- name: MyPaint
|
||||
desc: Digital painting application
|
||||
url: http://mypaint.org/about/
|
||||
img: mypaint.png
|
||||
|
||||
- name: OBS Studio
|
||||
desc: Screencasting package
|
||||
url: https://obsproject.com/
|
||||
img: obs.png
|
||||
|
||||
- name: Papagayo-NG
|
||||
desc: Lipsinc animation editor
|
||||
url: https://morevnaproject.org/papagayo-ng/
|
||||
img: papagayo-ng.png
|
||||
|
||||
- name: RapidSVN
|
||||
desc: Subversion (version control) client
|
||||
url: https://rapidsvn.org/
|
||||
img: rapidsvn.png
|
||||
|
||||
- name: RenderChan
|
||||
desc: Render management system
|
||||
url: https://morevnaproject.org/renderchan
|
||||
img: renderchan.png
|
||||
|
||||
- name: Resource Space
|
||||
desc: Digital asset management system
|
||||
url: https://www.resourcespace.com/
|
||||
img: resourcespace.png
|
||||
|
||||
- name: Subversion
|
||||
desc: Version control system
|
||||
url: https://subversion.apache.org/
|
||||
img: subversion.png
|
||||
|
||||
- name: Synfig
|
||||
desc: 2D animation package
|
||||
url: http://synfig.org/
|
||||
img: synfig.png
|
||||
|
||||
- name: TACTIC
|
||||
desc: Digital asset and project management system
|
||||
url: https://southpawtech.com/tactic-open-source/
|
||||
img: tactic.png
|
||||
|
||||
- name: Trac
|
||||
desc: Version control web interface (for Subversion)
|
||||
url: https://trac.edgewall.org/
|
||||
img: trac.png
|
||||
|
||||
- name: Ubuntu Studio
|
||||
desc: Multimedia distribution of GNU/Linux
|
||||
url: https://ubuntustudio.org/
|
||||
img: ubuntustudio.png
|
||||
|
||||
- name: VLC
|
||||
desc: Media player
|
||||
url: https://www.videolan.org/index.html
|
||||
img: vlc.png
|
||||
|
||||
- name: Vokoscreen
|
||||
desc: Screencasting software
|
||||
url: http://linuxecke.volkoh.de/vokoscreen/vokoscreen.html
|
||||
img: vokoscreen.png
|
||||
|
||||
- name: Wordpress
|
||||
desc: Content management system
|
||||
url: https://wordpress.org/
|
||||
img: wordpress.png
|
||||
|
||||
|
37
LunaGen/src/lunagen/addons/softwarelist/softwarelist.py
Normal file
@ -0,0 +1,37 @@
|
||||
'''
|
||||
Created on Oct 27, 2021
|
||||
|
||||
@author: terry
|
||||
'''
|
||||
|
||||
import os, random
|
||||
import yaml
|
||||
import lunagen.addon
|
||||
|
||||
class SoftwareList(lunagen.addon.LunaGenAddOn):
|
||||
"""
|
||||
Software List with Banners.
|
||||
"""
|
||||
name = 'softwarelist'
|
||||
desc = """\
|
||||
Display a set of selected software mini-banners.
|
||||
"""
|
||||
file = __file__
|
||||
|
||||
@staticmethod
|
||||
def load(site):
|
||||
if site.verbose: print("Loading software data.")
|
||||
try:
|
||||
with open(os.path.join(site.datadir, 'software.yaml')) as sw_file:
|
||||
softwarelist = yaml.safe_load(sw_file)
|
||||
# stylesheets = []
|
||||
# if 'stylesheets' in site.sitedata:
|
||||
# stylesheets.extend(site.sitedata['stylesheets'])
|
||||
site.sitedata.update(softwarelist)
|
||||
site.sitedata['stylesheets'] = site._collect_stylesheets(softwarelist)
|
||||
except FileNotFoundError:
|
||||
print("No software.yaml file, so software list is empty.")
|
||||
site.sitedata['softwarelist'] = []
|
||||
|
||||
|
||||
|
444
LunaGen/src/lunagen/main.py
Normal file
@ -0,0 +1,444 @@
|
||||
'''
|
||||
Created on Oct 23, 2021
|
||||
|
||||
@author: terry
|
||||
'''
|
||||
|
||||
|
||||
import os, random, importlib
|
||||
#from shutil import copytree, rmtree
|
||||
from distutils.dir_util import remove_tree, copy_tree
|
||||
from collections import OrderedDict
|
||||
|
||||
import yaml
|
||||
import jinja2
|
||||
import lunagen.addon
|
||||
|
||||
print("Addon variable:")
|
||||
print(repr(lunagen.addon))
|
||||
|
||||
|
||||
def demo():
|
||||
print("Am able to load and run code from 'lunagen' library.")
|
||||
|
||||
class Config(object):
|
||||
"""
|
||||
Installation configuration variables.
|
||||
|
||||
TODO: Probably change this to load from a YAML file in the future.
|
||||
"""
|
||||
__all__ = []
|
||||
__version__ = 0.1
|
||||
__date__ = '2019-09-19'
|
||||
__updated__ = '2019-09-19'
|
||||
|
||||
DEBUG = True
|
||||
TESTRUN = False
|
||||
PROFILE = False
|
||||
THEMES = '../themes'
|
||||
|
||||
class LunaGen(jinja2.Environment):
|
||||
"""
|
||||
Generator for a LunaGen site, based on contents of srcdir:
|
||||
|
||||
<srcdir>/data - YAML files (handwritten content)
|
||||
<srcdir>/templates - Jinja2 site templates
|
||||
<srcdir>/skeleton - unchanging parts of the site (copied)
|
||||
|
||||
The new site is created in <tgtdir>.
|
||||
"""
|
||||
def __init__(self, srcdir, tgtdir=None, verbosity=0, seed=None):
|
||||
|
||||
self.srcdir = os.path.abspath(srcdir)
|
||||
if not tgtdir:
|
||||
self.tgtdir = os.path.join(self.srcdir, 'site')
|
||||
else:
|
||||
self.tgtdir = os.path.abspath(tgtdir)
|
||||
self.datadir = os.path.join(self.srcdir, 'data')
|
||||
self.templates = os.path.join(self.srcdir, 'templates')
|
||||
self.skeleton = os.path.join(self.srcdir, 'skeleton')
|
||||
|
||||
if verbosity:
|
||||
self.verbose = verbosity
|
||||
else:
|
||||
self.verbose = 0
|
||||
|
||||
if seed is not None:
|
||||
if self.verbose: print("Setting random number seed to %d", seed)
|
||||
# Useful for testing
|
||||
random.seed(seed)
|
||||
|
||||
if self.verbose:
|
||||
print("Verbose mode %d" % self.verbose)
|
||||
print("Source directory: %s" % self.srcdir)
|
||||
print("Target directory: %s" % self.tgtdir)
|
||||
print("YAML content should be in: %s" % self.datadir)
|
||||
print("Jinja2 templates should be in: %s" % self.templates)
|
||||
print("Skeleton website should be in: %s" % self.skeleton)
|
||||
|
||||
|
||||
#TODO: Could make sure these directories exist
|
||||
|
||||
|
||||
# Create the internal "queues" dictionary
|
||||
self._queues = {}
|
||||
|
||||
# Load up the data from YAML files:
|
||||
self._load_sitedata()
|
||||
self._load_theme()
|
||||
|
||||
self.template_paths = [
|
||||
self.templates, # Designer's own templates override all
|
||||
self.theme['path'], # Theme templates
|
||||
]
|
||||
|
||||
self.load_site_addons()
|
||||
|
||||
self.template_paths.append(
|
||||
os.path.join(os.path.dirname(__file__), 'templates')
|
||||
)
|
||||
|
||||
if self.verbose:
|
||||
print("Template source paths:")
|
||||
for template_path in self.template_paths:
|
||||
print(" %s" % template_path)
|
||||
print("\n")
|
||||
|
||||
# TODO: The following are the loaders we want to move into add-ons
|
||||
#self._load_affiliates()
|
||||
#self._load_softwarelist()
|
||||
#self._load_products()
|
||||
|
||||
self._load_serieslist()
|
||||
|
||||
super().__init__(
|
||||
loader=jinja2.ChoiceLoader(
|
||||
[jinja2.FileSystemLoader(p) for p in self.template_paths]
|
||||
),
|
||||
autoescape=jinja2.select_autoescape(['html','xml'])
|
||||
)
|
||||
|
||||
@staticmethod
|
||||
def _paginate(seq, pagesize):
|
||||
"""
|
||||
Given a sequence of objects, break it into a book of
|
||||
pages, each containing no more than pagesize objects:
|
||||
|
||||
>>> test = [1,'2','three', 4, 5, 'six', 'seven', 8, 9, True, False, None, 0]
|
||||
>>> LunaGen._paginate(test, 4)
|
||||
[[1, '2', 'three', 4], [5, 'six', 'seven', 8], [9, True, False, None], [0]]
|
||||
>>>
|
||||
"""
|
||||
book = []
|
||||
page = []
|
||||
for i,ob in enumerate(seq):
|
||||
if i%pagesize==0:
|
||||
if i>0: book.append(page)
|
||||
page = []
|
||||
page.append(ob)
|
||||
if len(page)>0:
|
||||
book.append(page)
|
||||
return book
|
||||
|
||||
@staticmethod
|
||||
def _paginate_sponsors(series, episode):
|
||||
"""
|
||||
Regroup sponsors into pages which:
|
||||
- Contain only one kind of sponsor
|
||||
- Contain no more than the 'page' limit number of sponsors per page
|
||||
- Are tagged with the sponsortype so we can find the right template for them:
|
||||
|
||||
>>> series = {'sponsortypes':
|
||||
... {'A':{'page':1,'limit':1},
|
||||
... 'B':{'page':3, 'limit':10},
|
||||
... 'C':{'page':4, 'limit':20}}}
|
||||
...
|
||||
>>> episode = {'sponsors':
|
||||
... {'A':list(range(2)),
|
||||
... 'B':list(range(7)),
|
||||
... 'C':list(range(22))}}
|
||||
...
|
||||
>>> LunaGen._paginate_sponsors(series, episode)
|
||||
[('A', [0]), ('B', [0, 1, 2]), ('B', [3, 4, 5]), ('B', [6]), ('C', [0, 1, 2, 3]), ('C', [4, 5, 6, 7]), ('C', [8, 9, 10, 11]), ('C', [12, 13, 14, 15]), ('C', [16, 17, 18, 19])]
|
||||
>>>
|
||||
"""
|
||||
paged_sponsors = []
|
||||
for spkey, sponsortype in series['sponsortypes'].items():
|
||||
if spkey not in episode['sponsors']:
|
||||
episode['sponsors'][spkey] = []
|
||||
#if 'excludes' in sponsortype:
|
||||
# for excluded in sponsortype['excludes']:
|
||||
# if excluded in episode['sponsors'] and episode['sponsors'][excluded]:
|
||||
# print("WARNING: excluded sponsortype %s will be ignored, because of existing %s." %
|
||||
# (excluded, spkey))
|
||||
if 'page'in sponsortype:
|
||||
paged = LunaGen._paginate(
|
||||
episode['sponsors'][spkey][:sponsortype['limit']],
|
||||
sponsortype['page'])
|
||||
tags = [spkey] * len(paged)
|
||||
paged_sponsors.extend(zip(tags, paged))
|
||||
return paged_sponsors
|
||||
|
||||
|
||||
@staticmethod
|
||||
def _fix_series(series):
|
||||
"""
|
||||
Modify series data to correct certain datatypes that are not
|
||||
natively supported by YAML (like OrderedDict):
|
||||
>>> series = {'credits':{
|
||||
... 'a':{'labels':'ordered'},
|
||||
... 'b':{'labels':[['A','-A-'],['B','-B-']]}}}
|
||||
...
|
||||
>>> LunaGen._fix_series(series)
|
||||
>>> series['credits']['b']['labels']
|
||||
OrderedDict([('A', '-A-'), ('B', '-B-')])
|
||||
>>>
|
||||
"""
|
||||
for key, credit in series['credits'].items():
|
||||
if type(credit['labels']) != type(''):
|
||||
credit['labels']=OrderedDict(credit['labels'])
|
||||
|
||||
def _collect_stylesheets(self, *extras):
|
||||
"""
|
||||
Collect a list of unique stylesheets from various stylesheet
|
||||
requirements from theme, site, and data from extra pages.
|
||||
"""
|
||||
stylesheets = []
|
||||
if 'stylesheets' in self.theme:
|
||||
stylesheets.extend(self.theme['stylesheets'])
|
||||
if 'stylesheets' in self.sitedata:
|
||||
stylesheets.extend(self.sitedata['stylesheets'])
|
||||
for extra in extras:
|
||||
if 'stylesheets' in extra:
|
||||
stylesheets.extend(extra['stylesheets'])
|
||||
stylesheets = [s for i,s in enumerate(stylesheets) if s not in stylesheets[:i]]
|
||||
return stylesheets
|
||||
|
||||
def _load_sitedata(self):
|
||||
if self.verbose: print("Loading global site data.")
|
||||
with open(os.path.join(self.datadir, 'site.yaml'), 'rt') as sitedatafile:
|
||||
self.sitedata = yaml.safe_load(sitedatafile)
|
||||
|
||||
def _load_theme(self):
|
||||
if self.verbose: print("Loading theme data.")
|
||||
self.theme = { 'stylesheets':[] } # Default values
|
||||
themedir = os.path.join(Config.THEMES, self.sitedata['theme'])
|
||||
if not os.path.exists(themedir):
|
||||
raise FileNotFoundError("Theme directory %s not found!" % themedir)
|
||||
with open(os.path.join(themedir, 'theme.yaml'), 'rt') as themedatafile:
|
||||
self.theme.update(yaml.safe_load(themedatafile))
|
||||
self.theme['path'] = themedir
|
||||
|
||||
def load_site_addons(self):
|
||||
"""
|
||||
Load the addons listed in the site.yaml file, in
|
||||
the order specified.
|
||||
"""
|
||||
self.addons = []
|
||||
if 'addons' in self.sitedata and self.sitedata['addons']:
|
||||
for addon_name in self.sitedata['addons']:
|
||||
# Import the add-on module
|
||||
if self.verbose: print("Add-on to load: %s" % addon_name)
|
||||
addon_mod = importlib.import_module(
|
||||
'.' + '.'.join(('addons', addon_name, addon_name)),
|
||||
package='lunagen')
|
||||
# Register location for templates:
|
||||
self.template_paths.append(os.path.join(os.path.dirname(__file__),
|
||||
'addons', addon_name))
|
||||
# Find, instantiate, register, and initialize addon classes
|
||||
for name in addon_mod.__dict__:
|
||||
ob = addon_mod.__dict__[name]
|
||||
if (isinstance(ob, type) and
|
||||
issubclass(ob, lunagen.addon.LunaGenAddOn) and
|
||||
ob.name in self.sitedata['addons']):
|
||||
self.addons.append(ob())
|
||||
|
||||
for ob in self.addons:
|
||||
ob.load(self)
|
||||
ob.render(self)
|
||||
if self.verbose:
|
||||
for addon in self.addons:
|
||||
print ("Add-on '%s' data loaded and rendered." % addon.name)
|
||||
|
||||
def _load_serieslist(self):
|
||||
if self.verbose: print("Loading series data")
|
||||
try:
|
||||
with open(os.path.join(self.datadir, 'episodes', 'series.yaml'),'rt') as seriesfile:
|
||||
self.serieslist = yaml.safe_load(seriesfile)['serieslist']
|
||||
|
||||
#
|
||||
print("serieslist: ", self.serieslist)
|
||||
#
|
||||
for series in self.serieslist:
|
||||
self._fix_series(series)
|
||||
episodes = []
|
||||
seriesdir = os.path.join(self.datadir, 'episodes', series['directory'])
|
||||
episode_filenames = [f for f in os.listdir(seriesdir) if f.endswith('.yaml')]
|
||||
for episode_filename in episode_filenames:
|
||||
if self.verbose: print("Loading episode from %s" % episode_filename)
|
||||
with open(os.path.join(seriesdir, episode_filename), 'rt') as episode_file:
|
||||
episodes.append(yaml.safe_load(episode_file))
|
||||
# Sort by episode number specified in the files:
|
||||
try:
|
||||
episodes.sort(key=lambda a: int(a['episode']))
|
||||
except KeyError:
|
||||
print("Some episode YAML files may not have an 'episode' number entry?")
|
||||
series['episodes'] = episodes
|
||||
except FileNotFoundError:
|
||||
print("No series.yaml file, so no series loaded.")
|
||||
#self.sitedata['serieslist'] = []
|
||||
self.serieslist = []
|
||||
|
||||
|
||||
def _copy_skeleton(self, skeleton=None):
|
||||
if not skeleton:
|
||||
skeleton = self.skeleton
|
||||
if os.path.exists(self.tgtdir):
|
||||
remove_tree(self.tgtdir, verbose=self.verbose)
|
||||
|
||||
if self.verbose: print("Copying source skeleton.")
|
||||
copy_tree(os.path.join(self.srcdir, 'skeleton'), self.tgtdir, verbose=self.verbose)
|
||||
|
||||
if self.verbose: print("Copying add-on skeletons.")
|
||||
for ao in self.addons:
|
||||
ao.copy_skeleton(self)
|
||||
|
||||
if self.verbose: print("Copying the theme skeleton.")
|
||||
copy_tree(os.path.join(self.theme['path'], 'skeleton'), self.tgtdir, verbose=self.verbose)
|
||||
|
||||
if self.verbose: print("Copying the skeleton site.")
|
||||
copy_tree(skeleton, self.tgtdir, verbose=self.verbose)
|
||||
if self.verbose: print("Copying add-on skeletons.")
|
||||
|
||||
|
||||
def _gen_simple_page(self, pagename, stylesheets=()):
|
||||
|
||||
"""
|
||||
Generates a simple page with 1:1:1 Jinja2+YAML+CSS.
|
||||
|
||||
The YAML and CSS pages are optional. If no file exists
|
||||
for them, they will be ignored and the page generated
|
||||
with only the template and global data and/or style.
|
||||
"""
|
||||
if self.verbose: print("Creating '%s' page" % pagename)
|
||||
jinja2_name = pagename + '.j2'
|
||||
yaml_path = os.path.join(self.datadir, pagename+'.yaml')
|
||||
css_path = os.path.join(self.tgtdir, pagename+'.css')
|
||||
# Assumes skeleton already copied
|
||||
data = {} # Defaults can be set here
|
||||
data.update(self.sitedata) # Global data
|
||||
if os.path.exists(yaml_path):
|
||||
with open(yaml_path, 'rt') as yaml_file:
|
||||
data.update(yaml.safe_load(yaml_file)) # Page data
|
||||
data['stylesheets'] = self._collect_stylesheets(data)
|
||||
# Add CSS if not already present:
|
||||
if os.path.exists(css_path) and pagename not in data['stylesheets']:
|
||||
data['stylesheets'].append(pagename)
|
||||
if self.verbose: print("Generating '%s.html' from template." % pagename)
|
||||
html = self.get_template(jinja2_name).render(data)
|
||||
with open(os.path.join(self.tgtdir, pagename+'.html'), 'wt') as page:
|
||||
page.write(html)
|
||||
|
||||
def _gen_index(self):
|
||||
"""
|
||||
Generate an index page, if the skeleton doesn't already have one.
|
||||
"""
|
||||
if not os.path.exists(os.path.join(self.tgtdir, 'index.html')):
|
||||
if self.verbose: print("Generating the Index page.")
|
||||
#
|
||||
if 'affiliates' in self.sitedata:
|
||||
print("affiliates = %s" % repr(self.sitedata['affiliates']))
|
||||
else:
|
||||
print("No 'affiliates' value in sitedata.")
|
||||
#
|
||||
data = {}
|
||||
data.update(self.sitedata)
|
||||
data['next'] = next # Adds iterator capability
|
||||
data['stylesheets'] = self._collect_stylesheets() #self.sitedata['stylesheets'])
|
||||
if 'episode_as_index' in self.sitedata and self.sitedata['episode_as_index']:
|
||||
data['serieslist'] = self.serieslist
|
||||
data['banners'] = iter(['affiliates_banner.j2',
|
||||
'store_banner.j2',
|
||||
'sponsoropps_banner.j2'])
|
||||
data['stylesheets'].extend(self._collect_stylesheets(
|
||||
self.sitedata['episode_list_page']))
|
||||
|
||||
html = self.get_template('index.j2').render(data)
|
||||
with open(os.path.join(self.tgtdir, 'index.html'), 'wt') as page:
|
||||
page.write(html)
|
||||
else:
|
||||
if self.verbose: print("Found 'index.html', so not generated.")
|
||||
|
||||
def _gen_episode_list_page(self):
|
||||
"""
|
||||
Generate a page linking to all of the individual episodes,
|
||||
grouped into "series" (or "seasons").
|
||||
|
||||
#Currently hard-coded to be saved as 'index.html' for the site.
|
||||
"""
|
||||
if self.verbose: print("Generating the Index (Episode List) page.")
|
||||
if 'render_as' in self.sitedata['episode_list_page']:
|
||||
render_as = self.sitedata['episode_list_page']['render_as']
|
||||
else:
|
||||
render_as = 'index.html'
|
||||
data = {}
|
||||
data.update(self.sitedata)
|
||||
data['serieslist'] = self.serieslist
|
||||
data['banners'] = iter(['affiliates_banner.j2', 'store_banner.j2', 'sponsoropps_banner.j2'])
|
||||
data['stylesheets'] = self._collect_stylesheets(self.sitedata['episode_list_page'])
|
||||
data['next'] = next # Adds iterator capability
|
||||
html = self.get_template('episode_list.j2').render(data)
|
||||
with open(os.path.join(self.tgtdir, render_as), 'wt') as page:
|
||||
page.write(html)
|
||||
|
||||
def _gen_episode_pages(self):
|
||||
"""
|
||||
Generate a page for each episode in each series.
|
||||
"""
|
||||
if self.verbose: print("Generating episode pages...")
|
||||
|
||||
if 'stylesheets' in self.sitedata['episode_pages']:
|
||||
stylesheets = self.sitedata['episode_pages']['stylesheets']
|
||||
else:
|
||||
stylesheets = []
|
||||
|
||||
for series in self.serieslist:
|
||||
for episode in series['episodes']:
|
||||
paged_sponsors = self._paginate_sponsors(series, episode)
|
||||
episode['paged_sponsors'] = iter(paged_sponsors)
|
||||
data = {}
|
||||
data.update(self.sitedata)
|
||||
data['series'] = series
|
||||
data['episode'] = episode
|
||||
data['stylesheets'] = self._collect_stylesheets(self.sitedata['episode_pages'],episode)
|
||||
data['next'] = next # Expose built-in function
|
||||
data['banners'] = ['affiliates_banner.j2']
|
||||
html = self.get_template('episode_page.j2').render(data)
|
||||
filename = episode['series'] +'E' + ('%2.2d' % int(episode['episode'])) + '.html'
|
||||
os.makedirs(os.path.join(self.tgtdir, series['directory']), exist_ok=True)
|
||||
with open(os.path.join(self.tgtdir, series['directory'], filename), 'wt') as page:
|
||||
page.write(html)
|
||||
|
||||
def gensite(self):
|
||||
"""
|
||||
Generate the site, using the data we've accumulated.
|
||||
"""
|
||||
self._copy_skeleton()
|
||||
self.regen_site()
|
||||
|
||||
def regen_site(self):
|
||||
if 'simple_pages' in self.sitedata and self.sitedata['simple_pages']:
|
||||
for page in self.sitedata['simple_pages']:
|
||||
self._gen_simple_page(page)
|
||||
#if 'serieslist' in self.sitedata and self.sitedata['serieslist']:
|
||||
if self.serieslist:
|
||||
self._gen_episode_list_page()
|
||||
self._gen_episode_pages()
|
||||
else:
|
||||
print("Not generating series & episode pages: serieslist empty.")
|
||||
self._gen_index()
|
||||
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
pass
|
235
LunaGen/src/skeleton/w3.css
Normal file
@ -0,0 +1,235 @@
|
||||
/* W3.CSS 4.15 December 2020 by Jan Egil and Borge Refsnes */
|
||||
html{box-sizing:border-box}*,*:before,*:after{box-sizing:inherit}
|
||||
/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */
|
||||
html{-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}
|
||||
article,aside,details,figcaption,figure,footer,header,main,menu,nav,section{display:block}summary{display:list-item}
|
||||
audio,canvas,progress,video{display:inline-block}progress{vertical-align:baseline}
|
||||
audio:not([controls]){display:none;height:0}[hidden],template{display:none}
|
||||
a{background-color:transparent}a:active,a:hover{outline-width:0}
|
||||
abbr[title]{border-bottom:none;text-decoration:underline;text-decoration:underline dotted}
|
||||
b,strong{font-weight:bolder}dfn{font-style:italic}mark{background:#ff0;color:#000}
|
||||
small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}
|
||||
sub{bottom:-0.25em}sup{top:-0.5em}figure{margin:1em 40px}img{border-style:none}
|
||||
code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}hr{box-sizing:content-box;height:0;overflow:visible}
|
||||
button,input,select,textarea,optgroup{font:inherit;margin:0}optgroup{font-weight:bold}
|
||||
button,input{overflow:visible}button,select{text-transform:none}
|
||||
button,[type=button],[type=reset],[type=submit]{-webkit-appearance:button}
|
||||
button::-moz-focus-inner,[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner{border-style:none;padding:0}
|
||||
button:-moz-focusring,[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring{outline:1px dotted ButtonText}
|
||||
fieldset{border:1px solid #c0c0c0;margin:0 2px;padding:.35em .625em .75em}
|
||||
legend{color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}
|
||||
[type=checkbox],[type=radio]{padding:0}
|
||||
[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}
|
||||
[type=search]{-webkit-appearance:textfield;outline-offset:-2px}
|
||||
[type=search]::-webkit-search-decoration{-webkit-appearance:none}
|
||||
::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}
|
||||
/* End extract */
|
||||
html,body{font-family:Verdana,sans-serif;font-size:15px;line-height:1.5}html{overflow-x:hidden}
|
||||
h1{font-size:36px}h2{font-size:30px}h3{font-size:24px}h4{font-size:20px}h5{font-size:18px}h6{font-size:16px}
|
||||
.w3-serif{font-family:serif}.w3-sans-serif{font-family:sans-serif}.w3-cursive{font-family:cursive}.w3-monospace{font-family:monospace}
|
||||
h1,h2,h3,h4,h5,h6{font-family:"Segoe UI",Arial,sans-serif;font-weight:400;margin:10px 0}.w3-wide{letter-spacing:4px}
|
||||
hr{border:0;border-top:1px solid #eee;margin:20px 0}
|
||||
.w3-image{max-width:100%;height:auto}img{vertical-align:middle}a{color:inherit}
|
||||
.w3-table,.w3-table-all{border-collapse:collapse;border-spacing:0;width:100%;display:table}.w3-table-all{border:1px solid #ccc}
|
||||
.w3-bordered tr,.w3-table-all tr{border-bottom:1px solid #ddd}.w3-striped tbody tr:nth-child(even){background-color:#f1f1f1}
|
||||
.w3-table-all tr:nth-child(odd){background-color:#fff}.w3-table-all tr:nth-child(even){background-color:#f1f1f1}
|
||||
.w3-hoverable tbody tr:hover,.w3-ul.w3-hoverable li:hover{background-color:#ccc}.w3-centered tr th,.w3-centered tr td{text-align:center}
|
||||
.w3-table td,.w3-table th,.w3-table-all td,.w3-table-all th{padding:8px 8px;display:table-cell;text-align:left;vertical-align:top}
|
||||
.w3-table th:first-child,.w3-table td:first-child,.w3-table-all th:first-child,.w3-table-all td:first-child{padding-left:16px}
|
||||
.w3-btn,.w3-button{border:none;display:inline-block;padding:8px 16px;vertical-align:middle;overflow:hidden;text-decoration:none;color:inherit;background-color:inherit;text-align:center;cursor:pointer;white-space:nowrap}
|
||||
.w3-btn:hover{box-shadow:0 8px 16px 0 rgba(0,0,0,0.2),0 6px 20px 0 rgba(0,0,0,0.19)}
|
||||
.w3-btn,.w3-button{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}
|
||||
.w3-disabled,.w3-btn:disabled,.w3-button:disabled{cursor:not-allowed;opacity:0.3}.w3-disabled *,:disabled *{pointer-events:none}
|
||||
.w3-btn.w3-disabled:hover,.w3-btn:disabled:hover{box-shadow:none}
|
||||
.w3-badge,.w3-tag{background-color:#000;color:#fff;display:inline-block;padding-left:8px;padding-right:8px;text-align:center}.w3-badge{border-radius:50%}
|
||||
.w3-ul{list-style-type:none;padding:0;margin:0}.w3-ul li{padding:8px 16px;border-bottom:1px solid #ddd}.w3-ul li:last-child{border-bottom:none}
|
||||
.w3-tooltip,.w3-display-container{position:relative}.w3-tooltip .w3-text{display:none}.w3-tooltip:hover .w3-text{display:inline-block}
|
||||
.w3-ripple:active{opacity:0.5}.w3-ripple{transition:opacity 0s}
|
||||
.w3-input{padding:8px;display:block;border:none;border-bottom:1px solid #ccc;width:100%}
|
||||
.w3-select{padding:9px 0;width:100%;border:none;border-bottom:1px solid #ccc}
|
||||
.w3-dropdown-click,.w3-dropdown-hover{position:relative;display:inline-block;cursor:pointer}
|
||||
.w3-dropdown-hover:hover .w3-dropdown-content{display:block}
|
||||
.w3-dropdown-hover:first-child,.w3-dropdown-click:hover{background-color:#ccc;color:#000}
|
||||
.w3-dropdown-hover:hover > .w3-button:first-child,.w3-dropdown-click:hover > .w3-button:first-child{background-color:#ccc;color:#000}
|
||||
.w3-dropdown-content{cursor:auto;color:#000;background-color:#fff;display:none;position:absolute;min-width:160px;margin:0;padding:0;z-index:1}
|
||||
.w3-check,.w3-radio{width:24px;height:24px;position:relative;top:6px}
|
||||
.w3-sidebar{height:100%;width:200px;background-color:#fff;position:fixed!important;z-index:1;overflow:auto}
|
||||
.w3-bar-block .w3-dropdown-hover,.w3-bar-block .w3-dropdown-click{width:100%}
|
||||
.w3-bar-block .w3-dropdown-hover .w3-dropdown-content,.w3-bar-block .w3-dropdown-click .w3-dropdown-content{min-width:100%}
|
||||
.w3-bar-block .w3-dropdown-hover .w3-button,.w3-bar-block .w3-dropdown-click .w3-button{width:100%;text-align:left;padding:8px 16px}
|
||||
.w3-main,#main{transition:margin-left .4s}
|
||||
.w3-modal{z-index:3;display:none;padding-top:100px;position:fixed;left:0;top:0;width:100%;height:100%;overflow:auto;background-color:rgb(0,0,0);background-color:rgba(0,0,0,0.4)}
|
||||
.w3-modal-content{margin:auto;background-color:#fff;position:relative;padding:0;outline:0;width:600px}
|
||||
.w3-bar{width:100%;overflow:hidden}.w3-center .w3-bar{display:inline-block;width:auto}
|
||||
.w3-bar .w3-bar-item{padding:8px 16px;float:left;width:auto;border:none;display:block;outline:0}
|
||||
.w3-bar .w3-dropdown-hover,.w3-bar .w3-dropdown-click{position:static;float:left}
|
||||
.w3-bar .w3-button{white-space:normal}
|
||||
.w3-bar-block .w3-bar-item{width:100%;display:block;padding:8px 16px;text-align:left;border:none;white-space:normal;float:none;outline:0}
|
||||
.w3-bar-block.w3-center .w3-bar-item{text-align:center}.w3-block{display:block;width:100%}
|
||||
.w3-responsive{display:block;overflow-x:auto}
|
||||
.w3-container:after,.w3-container:before,.w3-panel:after,.w3-panel:before,.w3-row:after,.w3-row:before,.w3-row-padding:after,.w3-row-padding:before,
|
||||
.w3-cell-row:before,.w3-cell-row:after,.w3-clear:after,.w3-clear:before,.w3-bar:before,.w3-bar:after{content:"";display:table;clear:both}
|
||||
.w3-col,.w3-half,.w3-third,.w3-twothird,.w3-threequarter,.w3-quarter{float:left;width:100%}
|
||||
.w3-col.s1{width:8.33333%}.w3-col.s2{width:16.66666%}.w3-col.s3{width:24.99999%}.w3-col.s4{width:33.33333%}
|
||||
.w3-col.s5{width:41.66666%}.w3-col.s6{width:49.99999%}.w3-col.s7{width:58.33333%}.w3-col.s8{width:66.66666%}
|
||||
.w3-col.s9{width:74.99999%}.w3-col.s10{width:83.33333%}.w3-col.s11{width:91.66666%}.w3-col.s12{width:99.99999%}
|
||||
@media (min-width:601px){.w3-col.m1{width:8.33333%}.w3-col.m2{width:16.66666%}.w3-col.m3,.w3-quarter{width:24.99999%}.w3-col.m4,.w3-third{width:33.33333%}
|
||||
.w3-col.m5{width:41.66666%}.w3-col.m6,.w3-half{width:49.99999%}.w3-col.m7{width:58.33333%}.w3-col.m8,.w3-twothird{width:66.66666%}
|
||||
.w3-col.m9,.w3-threequarter{width:74.99999%}.w3-col.m10{width:83.33333%}.w3-col.m11{width:91.66666%}.w3-col.m12{width:99.99999%}}
|
||||
@media (min-width:993px){.w3-col.l1{width:8.33333%}.w3-col.l2{width:16.66666%}.w3-col.l3{width:24.99999%}.w3-col.l4{width:33.33333%}
|
||||
.w3-col.l5{width:41.66666%}.w3-col.l6{width:49.99999%}.w3-col.l7{width:58.33333%}.w3-col.l8{width:66.66666%}
|
||||
.w3-col.l9{width:74.99999%}.w3-col.l10{width:83.33333%}.w3-col.l11{width:91.66666%}.w3-col.l12{width:99.99999%}}
|
||||
.w3-rest{overflow:hidden}.w3-stretch{margin-left:-16px;margin-right:-16px}
|
||||
.w3-content,.w3-auto{margin-left:auto;margin-right:auto}.w3-content{max-width:980px}.w3-auto{max-width:1140px}
|
||||
.w3-cell-row{display:table;width:100%}.w3-cell{display:table-cell}
|
||||
.w3-cell-top{vertical-align:top}.w3-cell-middle{vertical-align:middle}.w3-cell-bottom{vertical-align:bottom}
|
||||
.w3-hide{display:none!important}.w3-show-block,.w3-show{display:block!important}.w3-show-inline-block{display:inline-block!important}
|
||||
@media (max-width:1205px){.w3-auto{max-width:95%}}
|
||||
@media (max-width:600px){.w3-modal-content{margin:0 10px;width:auto!important}.w3-modal{padding-top:30px}
|
||||
.w3-dropdown-hover.w3-mobile .w3-dropdown-content,.w3-dropdown-click.w3-mobile .w3-dropdown-content{position:relative}
|
||||
.w3-hide-small{display:none!important}.w3-mobile{display:block;width:100%!important}.w3-bar-item.w3-mobile,.w3-dropdown-hover.w3-mobile,.w3-dropdown-click.w3-mobile{text-align:center}
|
||||
.w3-dropdown-hover.w3-mobile,.w3-dropdown-hover.w3-mobile .w3-btn,.w3-dropdown-hover.w3-mobile .w3-button,.w3-dropdown-click.w3-mobile,.w3-dropdown-click.w3-mobile .w3-btn,.w3-dropdown-click.w3-mobile .w3-button{width:100%}}
|
||||
@media (max-width:768px){.w3-modal-content{width:500px}.w3-modal{padding-top:50px}}
|
||||
@media (min-width:993px){.w3-modal-content{width:900px}.w3-hide-large{display:none!important}.w3-sidebar.w3-collapse{display:block!important}}
|
||||
@media (max-width:992px) and (min-width:601px){.w3-hide-medium{display:none!important}}
|
||||
@media (max-width:992px){.w3-sidebar.w3-collapse{display:none}.w3-main{margin-left:0!important;margin-right:0!important}.w3-auto{max-width:100%}}
|
||||
.w3-top,.w3-bottom{position:fixed;width:100%;z-index:1}.w3-top{top:0}.w3-bottom{bottom:0}
|
||||
.w3-overlay{position:fixed;display:none;width:100%;height:100%;top:0;left:0;right:0;bottom:0;background-color:rgba(0,0,0,0.5);z-index:2}
|
||||
.w3-display-topleft{position:absolute;left:0;top:0}.w3-display-topright{position:absolute;right:0;top:0}
|
||||
.w3-display-bottomleft{position:absolute;left:0;bottom:0}.w3-display-bottomright{position:absolute;right:0;bottom:0}
|
||||
.w3-display-middle{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);-ms-transform:translate(-50%,-50%)}
|
||||
.w3-display-left{position:absolute;top:50%;left:0%;transform:translate(0%,-50%);-ms-transform:translate(-0%,-50%)}
|
||||
.w3-display-right{position:absolute;top:50%;right:0%;transform:translate(0%,-50%);-ms-transform:translate(0%,-50%)}
|
||||
.w3-display-topmiddle{position:absolute;left:50%;top:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
|
||||
.w3-display-bottommiddle{position:absolute;left:50%;bottom:0;transform:translate(-50%,0%);-ms-transform:translate(-50%,0%)}
|
||||
.w3-display-container:hover .w3-display-hover{display:block}.w3-display-container:hover span.w3-display-hover{display:inline-block}.w3-display-hover{display:none}
|
||||
.w3-display-position{position:absolute}
|
||||
.w3-circle{border-radius:50%}
|
||||
.w3-round-small{border-radius:2px}.w3-round,.w3-round-medium{border-radius:4px}.w3-round-large{border-radius:8px}.w3-round-xlarge{border-radius:16px}.w3-round-xxlarge{border-radius:32px}
|
||||
.w3-row-padding,.w3-row-padding>.w3-half,.w3-row-padding>.w3-third,.w3-row-padding>.w3-twothird,.w3-row-padding>.w3-threequarter,.w3-row-padding>.w3-quarter,.w3-row-padding>.w3-col{padding:0 8px}
|
||||
.w3-container,.w3-panel{padding:0.01em 16px}.w3-panel{margin-top:16px;margin-bottom:16px}
|
||||
.w3-code,.w3-codespan{font-family:Consolas,"courier new";font-size:16px}
|
||||
.w3-code{width:auto;background-color:#fff;padding:8px 12px;border-left:4px solid #4CAF50;word-wrap:break-word}
|
||||
.w3-codespan{color:crimson;background-color:#f1f1f1;padding-left:4px;padding-right:4px;font-size:110%}
|
||||
.w3-card,.w3-card-2{box-shadow:0 2px 5px 0 rgba(0,0,0,0.16),0 2px 10px 0 rgba(0,0,0,0.12)}
|
||||
.w3-card-4,.w3-hover-shadow:hover{box-shadow:0 4px 10px 0 rgba(0,0,0,0.2),0 4px 20px 0 rgba(0,0,0,0.19)}
|
||||
.w3-spin{animation:w3-spin 2s infinite linear}@keyframes w3-spin{0%{transform:rotate(0deg)}100%{transform:rotate(359deg)}}
|
||||
.w3-animate-fading{animation:fading 10s infinite}@keyframes fading{0%{opacity:0}50%{opacity:1}100%{opacity:0}}
|
||||
.w3-animate-opacity{animation:opac 0.8s}@keyframes opac{from{opacity:0} to{opacity:1}}
|
||||
.w3-animate-top{position:relative;animation:animatetop 0.4s}@keyframes animatetop{from{top:-300px;opacity:0} to{top:0;opacity:1}}
|
||||
.w3-animate-left{position:relative;animation:animateleft 0.4s}@keyframes animateleft{from{left:-300px;opacity:0} to{left:0;opacity:1}}
|
||||
.w3-animate-right{position:relative;animation:animateright 0.4s}@keyframes animateright{from{right:-300px;opacity:0} to{right:0;opacity:1}}
|
||||
.w3-animate-bottom{position:relative;animation:animatebottom 0.4s}@keyframes animatebottom{from{bottom:-300px;opacity:0} to{bottom:0;opacity:1}}
|
||||
.w3-animate-zoom {animation:animatezoom 0.6s}@keyframes animatezoom{from{transform:scale(0)} to{transform:scale(1)}}
|
||||
.w3-animate-input{transition:width 0.4s ease-in-out}.w3-animate-input:focus{width:100%!important}
|
||||
.w3-opacity,.w3-hover-opacity:hover{opacity:0.60}.w3-opacity-off,.w3-hover-opacity-off:hover{opacity:1}
|
||||
.w3-opacity-max{opacity:0.25}.w3-opacity-min{opacity:0.75}
|
||||
.w3-greyscale-max,.w3-grayscale-max,.w3-hover-greyscale:hover,.w3-hover-grayscale:hover{filter:grayscale(100%)}
|
||||
.w3-greyscale,.w3-grayscale{filter:grayscale(75%)}.w3-greyscale-min,.w3-grayscale-min{filter:grayscale(50%)}
|
||||
.w3-sepia{filter:sepia(75%)}.w3-sepia-max,.w3-hover-sepia:hover{filter:sepia(100%)}.w3-sepia-min{filter:sepia(50%)}
|
||||
.w3-tiny{font-size:10px!important}.w3-small{font-size:12px!important}.w3-medium{font-size:15px!important}.w3-large{font-size:18px!important}
|
||||
.w3-xlarge{font-size:24px!important}.w3-xxlarge{font-size:36px!important}.w3-xxxlarge{font-size:48px!important}.w3-jumbo{font-size:64px!important}
|
||||
.w3-left-align{text-align:left!important}.w3-right-align{text-align:right!important}.w3-justify{text-align:justify!important}.w3-center{text-align:center!important}
|
||||
.w3-border-0{border:0!important}.w3-border{border:1px solid #ccc!important}
|
||||
.w3-border-top{border-top:1px solid #ccc!important}.w3-border-bottom{border-bottom:1px solid #ccc!important}
|
||||
.w3-border-left{border-left:1px solid #ccc!important}.w3-border-right{border-right:1px solid #ccc!important}
|
||||
.w3-topbar{border-top:6px solid #ccc!important}.w3-bottombar{border-bottom:6px solid #ccc!important}
|
||||
.w3-leftbar{border-left:6px solid #ccc!important}.w3-rightbar{border-right:6px solid #ccc!important}
|
||||
.w3-section,.w3-code{margin-top:16px!important;margin-bottom:16px!important}
|
||||
.w3-margin{margin:16px!important}.w3-margin-top{margin-top:16px!important}.w3-margin-bottom{margin-bottom:16px!important}
|
||||
.w3-margin-left{margin-left:16px!important}.w3-margin-right{margin-right:16px!important}
|
||||
.w3-padding-small{padding:4px 8px!important}.w3-padding{padding:8px 16px!important}.w3-padding-large{padding:12px 24px!important}
|
||||
.w3-padding-16{padding-top:16px!important;padding-bottom:16px!important}.w3-padding-24{padding-top:24px!important;padding-bottom:24px!important}
|
||||
.w3-padding-32{padding-top:32px!important;padding-bottom:32px!important}.w3-padding-48{padding-top:48px!important;padding-bottom:48px!important}
|
||||
.w3-padding-64{padding-top:64px!important;padding-bottom:64px!important}
|
||||
.w3-padding-top-64{padding-top:64px!important}.w3-padding-top-48{padding-top:48px!important}
|
||||
.w3-padding-top-32{padding-top:32px!important}.w3-padding-top-24{padding-top:24px!important}
|
||||
.w3-left{float:left!important}.w3-right{float:right!important}
|
||||
.w3-button:hover{color:#000!important;background-color:#ccc!important}
|
||||
.w3-transparent,.w3-hover-none:hover{background-color:transparent!important}
|
||||
.w3-hover-none:hover{box-shadow:none!important}
|
||||
/* Colors */
|
||||
.w3-amber,.w3-hover-amber:hover{color:#000!important;background-color:#ffc107!important}
|
||||
.w3-aqua,.w3-hover-aqua:hover{color:#000!important;background-color:#00ffff!important}
|
||||
.w3-blue,.w3-hover-blue:hover{color:#fff!important;background-color:#2196F3!important}
|
||||
.w3-light-blue,.w3-hover-light-blue:hover{color:#000!important;background-color:#87CEEB!important}
|
||||
.w3-brown,.w3-hover-brown:hover{color:#fff!important;background-color:#795548!important}
|
||||
.w3-cyan,.w3-hover-cyan:hover{color:#000!important;background-color:#00bcd4!important}
|
||||
.w3-blue-grey,.w3-hover-blue-grey:hover,.w3-blue-gray,.w3-hover-blue-gray:hover{color:#fff!important;background-color:#607d8b!important}
|
||||
.w3-green,.w3-hover-green:hover{color:#fff!important;background-color:#4CAF50!important}
|
||||
.w3-light-green,.w3-hover-light-green:hover{color:#000!important;background-color:#8bc34a!important}
|
||||
.w3-indigo,.w3-hover-indigo:hover{color:#fff!important;background-color:#3f51b5!important}
|
||||
.w3-khaki,.w3-hover-khaki:hover{color:#000!important;background-color:#f0e68c!important}
|
||||
.w3-lime,.w3-hover-lime:hover{color:#000!important;background-color:#cddc39!important}
|
||||
.w3-orange,.w3-hover-orange:hover{color:#000!important;background-color:#ff9800!important}
|
||||
.w3-deep-orange,.w3-hover-deep-orange:hover{color:#fff!important;background-color:#ff5722!important}
|
||||
.w3-pink,.w3-hover-pink:hover{color:#fff!important;background-color:#e91e63!important}
|
||||
.w3-purple,.w3-hover-purple:hover{color:#fff!important;background-color:#9c27b0!important}
|
||||
.w3-deep-purple,.w3-hover-deep-purple:hover{color:#fff!important;background-color:#673ab7!important}
|
||||
.w3-red,.w3-hover-red:hover{color:#fff!important;background-color:#f44336!important}
|
||||
.w3-sand,.w3-hover-sand:hover{color:#000!important;background-color:#fdf5e6!important}
|
||||
.w3-teal,.w3-hover-teal:hover{color:#fff!important;background-color:#009688!important}
|
||||
.w3-yellow,.w3-hover-yellow:hover{color:#000!important;background-color:#ffeb3b!important}
|
||||
.w3-white,.w3-hover-white:hover{color:#000!important;background-color:#fff!important}
|
||||
.w3-black,.w3-hover-black:hover{color:#fff!important;background-color:#000!important}
|
||||
.w3-grey,.w3-hover-grey:hover,.w3-gray,.w3-hover-gray:hover{color:#000!important;background-color:#9e9e9e!important}
|
||||
.w3-light-grey,.w3-hover-light-grey:hover,.w3-light-gray,.w3-hover-light-gray:hover{color:#000!important;background-color:#f1f1f1!important}
|
||||
.w3-dark-grey,.w3-hover-dark-grey:hover,.w3-dark-gray,.w3-hover-dark-gray:hover{color:#fff!important;background-color:#616161!important}
|
||||
.w3-pale-red,.w3-hover-pale-red:hover{color:#000!important;background-color:#ffdddd!important}
|
||||
.w3-pale-green,.w3-hover-pale-green:hover{color:#000!important;background-color:#ddffdd!important}
|
||||
.w3-pale-yellow,.w3-hover-pale-yellow:hover{color:#000!important;background-color:#ffffcc!important}
|
||||
.w3-pale-blue,.w3-hover-pale-blue:hover{color:#000!important;background-color:#ddffff!important}
|
||||
.w3-text-amber,.w3-hover-text-amber:hover{color:#ffc107!important}
|
||||
.w3-text-aqua,.w3-hover-text-aqua:hover{color:#00ffff!important}
|
||||
.w3-text-blue,.w3-hover-text-blue:hover{color:#2196F3!important}
|
||||
.w3-text-light-blue,.w3-hover-text-light-blue:hover{color:#87CEEB!important}
|
||||
.w3-text-brown,.w3-hover-text-brown:hover{color:#795548!important}
|
||||
.w3-text-cyan,.w3-hover-text-cyan:hover{color:#00bcd4!important}
|
||||
.w3-text-blue-grey,.w3-hover-text-blue-grey:hover,.w3-text-blue-gray,.w3-hover-text-blue-gray:hover{color:#607d8b!important}
|
||||
.w3-text-green,.w3-hover-text-green:hover{color:#4CAF50!important}
|
||||
.w3-text-light-green,.w3-hover-text-light-green:hover{color:#8bc34a!important}
|
||||
.w3-text-indigo,.w3-hover-text-indigo:hover{color:#3f51b5!important}
|
||||
.w3-text-khaki,.w3-hover-text-khaki:hover{color:#b4aa50!important}
|
||||
.w3-text-lime,.w3-hover-text-lime:hover{color:#cddc39!important}
|
||||
.w3-text-orange,.w3-hover-text-orange:hover{color:#ff9800!important}
|
||||
.w3-text-deep-orange,.w3-hover-text-deep-orange:hover{color:#ff5722!important}
|
||||
.w3-text-pink,.w3-hover-text-pink:hover{color:#e91e63!important}
|
||||
.w3-text-purple,.w3-hover-text-purple:hover{color:#9c27b0!important}
|
||||
.w3-text-deep-purple,.w3-hover-text-deep-purple:hover{color:#673ab7!important}
|
||||
.w3-text-red,.w3-hover-text-red:hover{color:#f44336!important}
|
||||
.w3-text-sand,.w3-hover-text-sand:hover{color:#fdf5e6!important}
|
||||
.w3-text-teal,.w3-hover-text-teal:hover{color:#009688!important}
|
||||
.w3-text-yellow,.w3-hover-text-yellow:hover{color:#d2be0e!important}
|
||||
.w3-text-white,.w3-hover-text-white:hover{color:#fff!important}
|
||||
.w3-text-black,.w3-hover-text-black:hover{color:#000!important}
|
||||
.w3-text-grey,.w3-hover-text-grey:hover,.w3-text-gray,.w3-hover-text-gray:hover{color:#757575!important}
|
||||
.w3-text-light-grey,.w3-hover-text-light-grey:hover,.w3-text-light-gray,.w3-hover-text-light-gray:hover{color:#f1f1f1!important}
|
||||
.w3-text-dark-grey,.w3-hover-text-dark-grey:hover,.w3-text-dark-gray,.w3-hover-text-dark-gray:hover{color:#3a3a3a!important}
|
||||
.w3-border-amber,.w3-hover-border-amber:hover{border-color:#ffc107!important}
|
||||
.w3-border-aqua,.w3-hover-border-aqua:hover{border-color:#00ffff!important}
|
||||
.w3-border-blue,.w3-hover-border-blue:hover{border-color:#2196F3!important}
|
||||
.w3-border-light-blue,.w3-hover-border-light-blue:hover{border-color:#87CEEB!important}
|
||||
.w3-border-brown,.w3-hover-border-brown:hover{border-color:#795548!important}
|
||||
.w3-border-cyan,.w3-hover-border-cyan:hover{border-color:#00bcd4!important}
|
||||
.w3-border-blue-grey,.w3-hover-border-blue-grey:hover,.w3-border-blue-gray,.w3-hover-border-blue-gray:hover{border-color:#607d8b!important}
|
||||
.w3-border-green,.w3-hover-border-green:hover{border-color:#4CAF50!important}
|
||||
.w3-border-light-green,.w3-hover-border-light-green:hover{border-color:#8bc34a!important}
|
||||
.w3-border-indigo,.w3-hover-border-indigo:hover{border-color:#3f51b5!important}
|
||||
.w3-border-khaki,.w3-hover-border-khaki:hover{border-color:#f0e68c!important}
|
||||
.w3-border-lime,.w3-hover-border-lime:hover{border-color:#cddc39!important}
|
||||
.w3-border-orange,.w3-hover-border-orange:hover{border-color:#ff9800!important}
|
||||
.w3-border-deep-orange,.w3-hover-border-deep-orange:hover{border-color:#ff5722!important}
|
||||
.w3-border-pink,.w3-hover-border-pink:hover{border-color:#e91e63!important}
|
||||
.w3-border-purple,.w3-hover-border-purple:hover{border-color:#9c27b0!important}
|
||||
.w3-border-deep-purple,.w3-hover-border-deep-purple:hover{border-color:#673ab7!important}
|
||||
.w3-border-red,.w3-hover-border-red:hover{border-color:#f44336!important}
|
||||
.w3-border-sand,.w3-hover-border-sand:hover{border-color:#fdf5e6!important}
|
||||
.w3-border-teal,.w3-hover-border-teal:hover{border-color:#009688!important}
|
||||
.w3-border-yellow,.w3-hover-border-yellow:hover{border-color:#ffeb3b!important}
|
||||
.w3-border-white,.w3-hover-border-white:hover{border-color:#fff!important}
|
||||
.w3-border-black,.w3-hover-border-black:hover{border-color:#000!important}
|
||||
.w3-border-grey,.w3-hover-border-grey:hover,.w3-border-gray,.w3-hover-border-gray:hover{border-color:#9e9e9e!important}
|
||||
.w3-border-light-grey,.w3-hover-border-light-grey:hover,.w3-border-light-gray,.w3-hover-border-light-gray:hover{border-color:#f1f1f1!important}
|
||||
.w3-border-dark-grey,.w3-hover-border-dark-grey:hover,.w3-border-dark-gray,.w3-hover-border-dark-gray:hover{border-color:#616161!important}
|
||||
.w3-border-pale-red,.w3-hover-border-pale-red:hover{border-color:#ffe7e7!important}.w3-border-pale-green,.w3-hover-border-pale-green:hover{border-color:#e7ffe7!important}
|
||||
.w3-border-pale-yellow,.w3-hover-border-pale-yellow:hover{border-color:#ffffcc!important}.w3-border-pale-blue,.w3-hover-border-pale-blue:hover{border-color:#e7ffff!important}
|
142
LunaGen/testdata/affiliates/data/affiliates.yaml
vendored
Normal file
@ -0,0 +1,142 @@
|
||||
# Affiliates Ad data
|
||||
# This is a MOCK-UP, using popular Free Culture / Open Source projects
|
||||
# We do not have any actual affiliation with these sites
|
||||
#
|
||||
---
|
||||
stylesheets:
|
||||
- affiliates
|
||||
# It's awkward to have too many affiliate links at one time, so
|
||||
# the script will choose a number of them at random on each refresh
|
||||
# we need to tell it how many we want:
|
||||
affiliates_at_once: 7
|
||||
|
||||
affiliates_message: >
|
||||
We benefit when you support these projects and services!
|
||||
|
||||
affiliates:
|
||||
- name: Ardour
|
||||
url: https://ardour.org
|
||||
img: ardour.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Audacity
|
||||
url: https://audacityteam.org
|
||||
img: audacity.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Blender
|
||||
url: https://blender.org
|
||||
img: blender.png
|
||||
type: Software We Use
|
||||
|
||||
- name: BlendSwap
|
||||
url: https://blendswap.com
|
||||
img: blendswap.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: Creative Commons
|
||||
url: https://www.creativecommons.org
|
||||
img: creativecommons.png
|
||||
type: Free Culture Advocacy Group
|
||||
|
||||
- name: Debian
|
||||
url: https://debian.org
|
||||
img: debian.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Ethic Cinema
|
||||
url: http://ethiccinema.org
|
||||
img: ethiccinema.png
|
||||
type: Free Culture Advocacy Group
|
||||
|
||||
- name: Free Software Foundation
|
||||
url: https://www.fsf.org
|
||||
img: freesoftwarefoundation.png
|
||||
type: Free Software Advocacy Group
|
||||
|
||||
- name: Free Sound
|
||||
url: https://freesound.org
|
||||
img: freesound.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: GIMP
|
||||
url: https://gimp.org
|
||||
img: gimp.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Inkscape
|
||||
url: https://inkscape.org
|
||||
img: inkscape.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Internet Archive
|
||||
url: https://archive.org
|
||||
img: internet_archive.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: Jamendo
|
||||
url: https://jamendo.com
|
||||
img: jamendo.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: Kdenlive
|
||||
url: https://kdenlive.org
|
||||
img: kdenlive.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Krita
|
||||
url: https://krita.org
|
||||
img: krita.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Mastodon
|
||||
url: http://mastodon.social
|
||||
img: mastodon.png
|
||||
type: Social Media Platform We Use
|
||||
|
||||
- name: Morevna Project
|
||||
url: https://morevnaproject.org
|
||||
img: morevnaproject.png
|
||||
type: Free Culture Project
|
||||
|
||||
- name: MusOpen
|
||||
url: https://musopen.org
|
||||
img: musopen.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: Olive Video Editor
|
||||
url: https://olivevideoeditor.org
|
||||
img: olivevideoeditor.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Public Domain Files
|
||||
url: http://www.publicdomainfiles.com
|
||||
img: publicdomainfiles.png
|
||||
type: Shared Asset Archive
|
||||
|
||||
- name: Public Knowledge
|
||||
url: https://publicknowledge.org
|
||||
img: publicknowledge.png
|
||||
type: Free Culture Advocacy Group
|
||||
|
||||
- name: Question Copyright
|
||||
url: https://questioncopyright.org
|
||||
img: questioncopyright.png
|
||||
type: Free Culture Advocacy Group
|
||||
|
||||
- name: Software Freedom Conservancy
|
||||
url: https://sfconservancy.org
|
||||
img: sfconservancy.png
|
||||
type: Free Software Advocacy Group
|
||||
|
||||
- name: Ubuntu Studio
|
||||
url: https://ubuntustudio.org
|
||||
img: ubuntu_studio.png
|
||||
type: Software We Use
|
||||
|
||||
- name: Urchn
|
||||
url: https://urchn.org
|
||||
img: urchn.png
|
||||
type: Free Culture Studio
|
||||
|
||||
|
13
LunaGen/testdata/affiliates/data/site.yaml
vendored
Normal file
@ -0,0 +1,13 @@
|
||||
# Global data for the site
|
||||
# ALL templates will have access to these
|
||||
---
|
||||
sitename: affiliates
|
||||
sitetitle: Affiliates Banner Example
|
||||
imgdir: images
|
||||
theme: default
|
||||
stylesheets:
|
||||
- affiliates
|
||||
|
||||
addons:
|
||||
- affiliates
|
||||
|