├── .github └── FUNDING.yml ├── .gitignore ├── README.md ├── conf.py ├── files ├── assets │ ├── css │ │ └── custom.css │ ├── img │ │ ├── footer │ │ │ ├── facebook.svg │ │ │ ├── mastodon.svg │ │ │ ├── rss.svg │ │ │ ├── twitter.svg │ │ │ └── youtube.svg │ │ └── umr-wht-48x48.png │ └── js │ │ ├── bjqs-1.3.js │ │ ├── bjqs-1.3.min.js │ │ ├── bootstrap.3.3.6.min.js │ │ ├── downloads.js │ │ ├── jquery-1.12.2.min.js │ │ └── ubuntu-mate-triangles.js ├── browserconfig.xml ├── favicon-114.png ├── favicon-120.png ├── favicon-144.png ├── favicon-150.png ├── favicon-152.png ├── favicon-16.png ├── favicon-160.png ├── favicon-196.png ├── favicon-310.png ├── favicon-32.png ├── favicon-57.png ├── favicon-64.png ├── favicon-70.png ├── favicon-72.png ├── favicon-76.png ├── favicon-96.png ├── favicon.ico ├── faviconit-instructions.txt ├── manifest.json └── pages │ ├── shop-eu-frame.html │ └── shop-us-frame.html ├── images ├── merch │ ├── book │ │ ├── upgrading-from-win-osx.jpg │ │ └── using-ubuntu-mate.jpg │ ├── entroware │ │ ├── aether_front_mate.jpg │ │ ├── apollo_front_mate.jpg │ │ ├── ares.jpg │ │ ├── athena_front_mate.jpg │ │ ├── aura.jpg │ │ ├── helios_front_mate.jpg │ │ ├── hybris_front_mate.jpg │ │ ├── kratos_front_mate.jpg │ │ ├── nyx.jpg │ │ ├── orion_front_mate.jpg │ │ ├── poseidon.jpg │ │ ├── proteus_front_mate.jpg │ │ └── zeus_front_mate.jpg │ ├── hellotux │ │ ├── flashdrive.jpg │ │ ├── ubuntu-mate-polo-kiwi-back.jpg │ │ ├── ubuntu-mate-polo-kiwi-front.jpg │ │ ├── ubuntu-mate-t-white-back.jpg │ │ ├── ubuntu-mate-t-white-front.jpg │ │ ├── ubuntumate_hoodie_blackgray-1.jpg │ │ ├── ubuntumate_hoodie_blackgray-2.jpg │ │ ├── ubuntumate_hoodie_blackgray-3.jpg │ │ ├── ubuntumate_jacket_black-1.png │ │ └── ubuntumate_jacket_black-2.png │ ├── libretrend │ │ └── LB_TripleBox_0.jpg │ ├── spreadshirt │ │ ├── white-mug.png │ │ └── white-t-shirt.png │ └── unixstickers │ │ ├── Ubuntu-MATE-Badge.png │ │ ├── Ubuntu-MATE-Keyboard.png │ │ ├── Ubuntu-MATE-Pin.png │ │ └── Ubuntu-MATE-Shaped.png └── sponsors │ ├── entroware.png │ ├── firstcolo.png │ ├── hellotux.png │ ├── libretrend-black.png │ ├── libretrend-white.png │ ├── libretrend.png │ ├── osdisc.png │ ├── prometeus.png │ ├── spreadshirt-guarantee.png │ └── unixstickers.png ├── pages ├── 40x.md ├── 50x.md ├── index.md ├── shop-eu.md └── shop-us.md ├── plugins └── __init__.py ├── scripts └── minify.sh ├── state_data.json └── themes └── United ├── assets └── css │ ├── bootstrap.css │ ├── bootstrap.css.original │ ├── bootstrap.min.css │ └── bootstrap.min.css.original ├── parent └── templates ├── base.tmpl └── gallery.tmpl /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] 4 | patreon: ubuntu_mate 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: ubuntumate 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | custom: https://ubuntu-mate.org/donate 10 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .doit.db 2 | *.pyc 3 | www/ 4 | output/ 5 | cache/ 6 | __pycache__ 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ubuntu-mate.boutique 2 | 3 | #### Archived 4 | 5 | The Boutique shop is now the **Emporium** and can be found 6 | at https://ubuntu-mate.org/shop/ instead. 7 | 8 | This website has been merged with: 9 | 10 | * https://github.com/ubuntu-mate/ubuntu-mate.org 11 | -------------------------------------------------------------------------------- /conf.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | 3 | from __future__ import unicode_literals 4 | import time 5 | import json 6 | 7 | # !! This is the configuration of Nikola. !! # 8 | # !! You should edit it to your liking. !! # 9 | 10 | 11 | # ! Some settings can be different in different languages. 12 | # ! A comment stating (translatable) is used to denote those. 13 | # ! There are two ways to specify a translatable setting: 14 | # ! (a) BLOG_TITLE = "My Blog" 15 | # ! (b) BLOG_TITLE = {"en": "My Blog", "es": "Mi Blog"} 16 | # ! Option (a) is used when you don't want that setting translated. 17 | # ! Option (b) is used for settings that are different in different languages. 18 | 19 | 20 | # Data about this site 21 | BLOG_AUTHOR = "Ubuntu MATE Merchandise Team" # (translatable) 22 | BLOG_TITLE = "Ubuntu MATE Boutique" # (translatable) 23 | # This is the main URL for your site. It will be used 24 | # in a prominent link. Don't forget the protocol (http/https)! 25 | SITE_URL = "https://ubuntu-mate.boutique/" 26 | # This is the URL where Nikola's output will be deployed. 27 | # If not set, defaults to SITE_URL 28 | # BASE_URL = "http://getnikola.com/" 29 | BLOG_EMAIL = "shop@ubuntu-mate.org" 30 | BLOG_DESCRIPTION = "Ubuntu MATE, for a retrospective future." # (translatable) 31 | 32 | # Nikola is multilingual! 33 | # 34 | # Currently supported languages are: 35 | # 36 | # en English 37 | # ar Arabic 38 | # az Azerbaijani 39 | # bg Bulgarian 40 | # bs Bosnian 41 | # ca Catalan 42 | # cs Czech [ALTERNATIVELY cz] 43 | # da Danish 44 | # de German 45 | # el Greek [NOT gr] 46 | # eo Esperanto 47 | # es Spanish 48 | # et Estonian 49 | # eu Basque 50 | # fa Persian 51 | # fi Finnish 52 | # fr French 53 | # hi Hindi 54 | # hr Croatian 55 | # hu Hungarian 56 | # id Indonesian 57 | # it Italian 58 | # ja Japanese [NOT jp] 59 | # ko Korean 60 | # nb Norwegian Bokmål 61 | # nl Dutch 62 | # pa Punjabi 63 | # pl Polish 64 | # pt Portuguese 65 | # pt_br Portuguese (Brazil) 66 | # ru Russian 67 | # sk Slovak 68 | # sl Slovene 69 | # sr Serbian (Cyrillic) 70 | # sr_latin Serbian (Latin) 71 | # sv Swedish 72 | # tr Turkish [NOT tr_TR] 73 | # uk Ukrainian 74 | # ur Urdu 75 | # zh_cn Chinese (Simplified) 76 | # 77 | # If you want to use Nikola with a non-supported language you have to provide 78 | # a module containing the necessary translations 79 | # (cf. the modules at nikola/data/themes/base/messages/). 80 | # If a specific post is not translated to a language, then the version 81 | # in the default language will be shown instead. 82 | 83 | # What is the default language? 84 | DEFAULT_LANG = "en" 85 | 86 | # What other languages do you have? 87 | # The format is {"translationcode" : "path/to/translation" } 88 | # the path will be used as a prefix for the generated pages location 89 | TRANSLATIONS = { 90 | DEFAULT_LANG: "", 91 | # Example for another language: 92 | # "es": "./es", 93 | } 94 | 95 | # What will translated input files be named like? 96 | 97 | # If you have a page something.rst, then something.pl.rst will be considered 98 | # its Polish translation. 99 | # (in the above example: path == "something", ext == "rst", lang == "pl") 100 | # this pattern is also used for metadata: 101 | # something.meta -> something.pl.meta 102 | 103 | TRANSLATIONS_PATTERN = "{path}.{lang}.{ext}" 104 | 105 | # Links for the sidebar / navigation bar. (translatable) 106 | # This is a dict. The keys are languages, and values are tuples. 107 | # 108 | # For regular links: 109 | # ('https://getnikola.com/', 'Nikola Homepage') 110 | # 111 | # For submenus: 112 | # ( 113 | # ( 114 | # ('https://apple.com/', 'Apple'), 115 | # ('https://orange.com/', 'Orange'), 116 | # ), 117 | # 'Fruits' 118 | # ) 119 | # 120 | # WARNING: Support for submenus is theme-dependent. 121 | # Only one level of submenus is supported. 122 | # WARNING: Some themes, including the default Bootstrap 3 theme, 123 | # may present issues if the menu is too large. 124 | # (in bootstrap3, the navbar can grow too large and cover contents.) 125 | # WARNING: If you link to directories, make sure to follow 126 | # ``STRIP_INDEXES``. If it’s set to ``True``, end your links 127 | # with a ``/``, otherwise end them with ``/index.html`` — or 128 | # else they won’t be highlighted when active. 129 | NAVIGATION_LINKS = { 130 | DEFAULT_LANG: ( 131 | ("https://ubuntu-mate.org/about/", "About"), 132 | ("https://ubuntu-mate.org/blog/", "Blog"), 133 | ("https://ubuntu-mate.org/community", "Community"), 134 | ("https://ubuntu-mate.org/download/", "Download"), 135 | ("https://ubuntu-mate.org/team/", "Team"), 136 | ("https://ubuntu-mate.org/donate/", "Donate"), 137 | ("https://ubuntu-mate.community/wiki", "Wiki"), 138 | ("https://ubuntu-mate.boutique/", "Shop"), 139 | ), 140 | } 141 | 142 | # Name of the theme to use. 143 | THEME = "United" 144 | 145 | # Primary color of your theme. This will be used to customize your theme and 146 | # auto-generate related colors in POSTS_SECTION_COLORS. Must be a HEX value. 147 | THEME_COLOR = '#87A752' 148 | 149 | # POSTS and PAGES contains (wildcard, destination, template) tuples. 150 | # 151 | # The wildcard is used to generate a list of reSt source files 152 | # (whatever/thing.txt). 153 | # 154 | # That fragment could have an associated metadata file (whatever/thing.meta), 155 | # and optionally translated files (example for Spanish, with code "es"): 156 | # whatever/thing.es.txt and whatever/thing.es.meta 157 | # 158 | # This assumes you use the default TRANSLATIONS_PATTERN. 159 | # 160 | # From those files, a set of HTML fragment files will be generated: 161 | # cache/whatever/thing.html (and maybe cache/whatever/thing.html.es) 162 | # 163 | # These files are combined with the template to produce rendered 164 | # pages, which will be placed at 165 | # output / TRANSLATIONS[lang] / destination / pagename.html 166 | # 167 | # where "pagename" is the "slug" specified in the metadata file. 168 | # 169 | # The difference between POSTS and PAGES is that POSTS are added 170 | # to feeds and are considered part of a blog, while PAGES are 171 | # just independent HTML pages. 172 | # 173 | 174 | POSTS = ( 175 | ("blog/*.rst", "blog", "post.tmpl"), 176 | ("blog/*.md", "blog", "post.tmpl"), 177 | ) 178 | PAGES = ( 179 | ("pages/*.rst", "", "story.tmpl"), 180 | ("pages/*.md", "", "story.tmpl"), 181 | ) 182 | 183 | # Below this point, everything is optional 184 | 185 | # Post's dates are considered in UTC by default, if you want to use 186 | # another time zone, please set TIMEZONE to match. Check the available 187 | # list from Wikipedia: 188 | # https://en.wikipedia.org/wiki/List_of_tz_database_time_zones 189 | # (e.g. 'Europe/Zurich') 190 | # Also, if you want to use a different time zone in some of your posts, 191 | # you can use the ISO 8601/RFC 3339 format (ex. 2012-03-30T23:00:00+02:00) 192 | TIMEZONE = "UTC" 193 | 194 | # If you want to use ISO 8601 (also valid RFC 3339) throughout Nikola 195 | # (especially in new_post), set this to True. 196 | # Note that this does not affect DATE_FORMAT. 197 | # FORCE_ISO8601 = False 198 | 199 | # Date format used to display post dates. (translatable) 200 | # (str used by datetime.datetime.strftime) 201 | # DATE_FORMAT = '%Y-%m-%d %H:%M' 202 | 203 | # Date format used to display post dates, if local dates are used. (translatable) 204 | # (str used by moment.js) 205 | # JS_DATE_FORMAT = 'YYYY-MM-DD HH:mm' 206 | 207 | # Date fanciness. 208 | # 209 | # 0 = using DATE_FORMAT and TIMEZONE 210 | # 1 = using JS_DATE_FORMAT and local user time (via moment.js) 211 | # 2 = using a string like “2 days ago” 212 | # 213 | # Your theme must support it, bootstrap and bootstrap3 already do. 214 | # DATE_FANCINESS = 0 215 | 216 | # While Nikola can select a sensible locale for each language, 217 | # sometimes explicit control can come handy. 218 | # In this file we express locales in the string form that 219 | # python's locales will accept in your OS, by example 220 | # "en_US.utf8" in Unix-like OS, "English_United States" in Windows. 221 | # LOCALES = dict mapping language --> explicit locale for the languages 222 | # in TRANSLATIONS. You can omit one or more keys. 223 | # LOCALE_FALLBACK = locale to use when an explicit locale is unavailable 224 | # LOCALE_DEFAULT = locale to use for languages not mentioned in LOCALES; if 225 | # not set the default Nikola mapping is used. 226 | # One or more folders containing files to be copied as-is into the output. 227 | # The format is a dictionary of {source: relative destination}. 228 | # Default is: 229 | FILES_FOLDERS = {'files': ''} 230 | # Which means copy 'files' into 'output' 231 | # One or more folders containing listings to be processed and stored into 232 | # the output. The format is a dictionary of {source: relative destination}. 233 | # Default is: 234 | # LISTINGS_FOLDERS = {'listings': 'listings'} 235 | # Which means process listings from 'listings' into 'output/listings' 236 | 237 | # A mapping of languages to file-extensions that represent that language. 238 | # Feel free to add or delete extensions to any list, but don't add any new 239 | # compilers unless you write the interface for it yourself. 240 | # 241 | # 'rest' is reStructuredText 242 | # 'markdown' is MarkDown 243 | # 'html' assumes the file is HTML and just copies it 244 | COMPILERS = { 245 | "rest": ('.rst', '.txt'), 246 | "markdown": ('.md', '.mdown', '.markdown'), 247 | "textile": ('.textile',), 248 | "txt2tags": ('.t2t',), 249 | "bbcode": ('.bb',), 250 | "wiki": ('.wiki',), 251 | "ipynb": ('.ipynb',), 252 | "html": ('.html', '.htm'), 253 | # PHP files are rendered the usual way (i.e. with the full templates). 254 | # The resulting files have .php extensions, making it possible to run 255 | # them without reconfiguring your server to recognize them. 256 | "php": ('.php',), 257 | # Pandoc detects the input from the source filename 258 | # but is disabled by default as it would conflict 259 | # with many of the others. 260 | # "pandoc": ('.rst', '.md', '.txt'), 261 | } 262 | 263 | # Create by default posts in one file format? 264 | # Set to False for two-file posts, with separate metadata. 265 | # ONE_FILE_POSTS = True 266 | 267 | # If this is set to True, the DEFAULT_LANG version will be displayed for 268 | # untranslated posts. 269 | # If this is set to False, then posts that are not translated to a language 270 | # LANG will not be visible at all in the pages in that language. 271 | # Formerly known as HIDE_UNTRANSLATED_POSTS (inverse) 272 | # SHOW_UNTRANSLATED_POSTS = True 273 | 274 | # Nikola supports logo display. If you have one, you can put the URL here. 275 | # Final output is . 276 | # The URL may be relative to the site root. 277 | LOGO_URL = '/assets/img/umr-wht-48x48.png' 278 | 279 | # If you want to hide the title of your website (for example, if your logo 280 | # already contains the text), set this to False. 281 | SHOW_BLOG_TITLE = False 282 | 283 | # Writes tag cloud data in form of tag_cloud_data.json. 284 | # Warning: this option will change its default value to False in v8! 285 | WRITE_TAG_CLOUD = True 286 | 287 | # Generate pages for each section. The site must have at least two sections 288 | # for this option to take effect. It wouldn't build for just one section. 289 | POSTS_SECTIONS = True 290 | 291 | # Setting this to False generates a list page instead of an index. Indexes 292 | # are the default and will apply GENERATE_ATOM if set. 293 | # POSTS_SECTIONS_ARE_INDEXES = True 294 | 295 | # Each post and section page will have an associated color that can be used 296 | # to style them with a recognizable color detail across your site. A color 297 | # is assigned to each section based on shifting the hue of your THEME_COLOR 298 | # at least 7.5 % while leaving the lightness and saturation untouched in the 299 | # HUSL colorspace. You can overwrite colors by assigning them colors in HEX. 300 | # POSTS_SECTION_COLORS = { 301 | # DEFAULT_LANG: { 302 | # 'posts': '#49b11bf', 303 | # 'reviews': '#ffe200', 304 | # }, 305 | # } 306 | 307 | # Associate a description with a section. For use in meta description on 308 | # section index pages or elsewhere in themes. 309 | # POSTS_SECTION_DESCRIPTIONS = { 310 | # DEFAULT_LANG: { 311 | # 'how-to': 'Learn how-to things properly with these amazing tutorials.', 312 | # }, 313 | # } 314 | 315 | # Sections are determined by their output directory as set in POSTS by default, 316 | # but can alternatively be determined from file metadata instead. 317 | # POSTS_SECTION_FROM_META = False 318 | 319 | # Names are determined from the output directory name automatically or the 320 | # metadata label. Unless overwritten below, names will use title cased and 321 | # hyphens replaced by spaces. 322 | # POSTS_SECTION_NAME = { 323 | # DEFAULT_LANG: { 324 | # 'posts': 'Blog Posts', 325 | # 'uncategorized': 'Odds and Ends', 326 | # }, 327 | # } 328 | 329 | # Titles for per-section index pages. Can be either one string where "{name}" 330 | # is substituted or the POSTS_SECTION_NAME, or a dict of sections. Note 331 | # that the INDEX_PAGES option is also applied to section page titles. 332 | # POSTS_SECTION_TITLE = { 333 | # DEFAULT_LANG: { 334 | # 'how-to': 'How-to and Tutorials', 335 | # }, 336 | # } 337 | 338 | # Paths for different autogenerated bits. These are combined with the 339 | # translation paths. 340 | 341 | # Final locations are: 342 | # output / TRANSLATION[lang] / TAG_PATH / index.html (list of tags) 343 | # output / TRANSLATION[lang] / TAG_PATH / tag.html (list of posts for a tag) 344 | # output / TRANSLATION[lang] / TAG_PATH / tag.xml (RSS feed for a tag) 345 | # (translatable) 346 | TAG_PATH = "tags" 347 | 348 | # See TAG_PATH's "list of tags" for the default setting value. Can be overwritten 349 | # here any path relative to the output directory. 350 | # (translatable) 351 | # TAGS_INDEX_PATH = "tags.html" 352 | 353 | # If TAG_PAGES_ARE_INDEXES is set to True, each tag's page will contain 354 | # the posts themselves. If set to False, it will be just a list of links. 355 | # TAG_PAGES_ARE_INDEXES = False 356 | 357 | # Set descriptions for tag pages to make them more interesting. The 358 | # default is no description. The value is used in the meta description 359 | # and displayed underneath the tag list or index page’s title. 360 | # TAG_PAGES_DESCRIPTIONS = { 361 | # DEFAULT_LANG: { 362 | # "blogging": "Meta-blog posts about blogging about blogging.", 363 | # "open source": "My contributions to my many, varied, ever-changing, and eternal libre software projects." 364 | # }, 365 | # } 366 | 367 | # Set special titles for tag pages. The default is "Posts about TAG". 368 | # TAG_PAGES_TITLES = { 369 | # DEFAULT_LANG: { 370 | # "blogging": "Meta-posts about blogging", 371 | # "open source": "Posts about open source software" 372 | # }, 373 | # } 374 | 375 | # If you do not want to display a tag publicly, you can mark it as hidden. 376 | # The tag will not be displayed on the tag list page, the tag cloud and posts. 377 | # Tag pages will still be generated. 378 | HIDDEN_TAGS = ['mathjax'] 379 | 380 | # Only include tags on the tag list/overview page if there are at least 381 | # TAGLIST_MINIMUM_POSTS number of posts or more with every tag. Every tag 382 | # page is still generated, linked from posts, and included in the sitemap. 383 | # However, more obscure tags can be hidden from the tag index page. 384 | # TAGLIST_MINIMUM_POSTS = 1 385 | 386 | # Final locations are: 387 | # output / TRANSLATION[lang] / CATEGORY_PATH / index.html (list of categories) 388 | # output / TRANSLATION[lang] / CATEGORY_PATH / CATEGORY_PREFIX category.html (list of posts for a category) 389 | # output / TRANSLATION[lang] / CATEGORY_PATH / CATEGORY_PREFIX category.xml (RSS feed for a category) 390 | # (translatable) 391 | # CATEGORY_PATH = "categories" 392 | # CATEGORY_PREFIX = "cat_" 393 | 394 | # If CATEGORY_ALLOW_HIERARCHIES is set to True, categories can be organized in 395 | # hierarchies. For a post, the whole path in the hierarchy must be specified, 396 | # using a forward slash ('/') to separate paths. Use a backslash ('\') to escape 397 | # a forward slash or a backslash (i.e. '\//\\' is a path specifying the 398 | # subcategory called '\' of the top-level category called '/'). 399 | CATEGORY_ALLOW_HIERARCHIES = False 400 | # If CATEGORY_OUTPUT_FLAT_HIERARCHY is set to True, the output written to output 401 | # contains only the name of the leaf category and not the whole path. 402 | CATEGORY_OUTPUT_FLAT_HIERARCHY = False 403 | 404 | # If CATEGORY_PAGES_ARE_INDEXES is set to True, each category's page will contain 405 | # the posts themselves. If set to False, it will be just a list of links. 406 | # CATEGORY_PAGES_ARE_INDEXES = False 407 | 408 | # Set descriptions for category pages to make them more interesting. The 409 | # default is no description. The value is used in the meta description 410 | # and displayed underneath the category list or index page’s title. 411 | # CATEGORY_PAGES_DESCRIPTIONS = { 412 | # DEFAULT_LANG: { 413 | # "blogging": "Meta-blog posts about blogging about blogging.", 414 | # "open source": "My contributions to my many, varied, ever-changing, and eternal libre software projects." 415 | # }, 416 | # } 417 | 418 | # Set special titles for category pages. The default is "Posts about CATEGORY". 419 | # CATEGORY_PAGES_TITLES = { 420 | # DEFAULT_LANG: { 421 | # "blogging": "Meta-posts about blogging", 422 | # "open source": "Posts about open source software" 423 | # }, 424 | # } 425 | 426 | # If you do not want to display a category publicly, you can mark it as hidden. 427 | # The category will not be displayed on the category list page. 428 | # Category pages will still be generated. 429 | HIDDEN_CATEGORIES = [] 430 | 431 | # If ENABLE_AUTHOR_PAGES is set to True and there is more than one 432 | # author, author pages are generated. 433 | # ENABLE_AUTHOR_PAGES = True 434 | 435 | # Final locations are: 436 | # output / TRANSLATION[lang] / AUTHOR_PATH / index.html (list of tags) 437 | # output / TRANSLATION[lang] / AUTHOR_PATH / author.html (list of posts for a tag) 438 | # output / TRANSLATION[lang] / AUTHOR_PATH / author.xml (RSS feed for a tag) 439 | # AUTHOR_PATH = "authors" 440 | 441 | # If AUTHOR_PAGES_ARE_INDEXES is set to True, each author's page will contain 442 | # the posts themselves. If set to False, it will be just a list of links. 443 | # AUTHOR_PAGES_ARE_INDEXES = False 444 | 445 | # Set descriptions for author pages to make them more interesting. The 446 | # default is no description. The value is used in the meta description 447 | # and displayed underneath the author list or index page’s title. 448 | # AUTHOR_PAGES_DESCRIPTIONS = { 449 | # DEFAULT_LANG: { 450 | # "Juanjo Conti": "Python coder and writer.", 451 | # "Roberto Alsina": "Nikola father." 452 | # }, 453 | # } 454 | 455 | 456 | # If you do not want to display an author publicly, you can mark it as hidden. 457 | # The author will not be displayed on the author list page and posts. 458 | # Tag pages will still be generated. 459 | HIDDEN_AUTHORS = ['Guest'] 460 | 461 | # Final location for the main blog page and sibling paginated pages is 462 | # output / TRANSLATION[lang] / INDEX_PATH / index-*.html 463 | INDEX_PATH = "blog" 464 | 465 | # Create per-month archives instead of per-year 466 | # CREATE_MONTHLY_ARCHIVE = False 467 | # Create one large archive instead of per-year 468 | # CREATE_SINGLE_ARCHIVE = False 469 | # Create year, month, and day archives each with a (long) list of posts 470 | # (overrides both CREATE_MONTHLY_ARCHIVE and CREATE_SINGLE_ARCHIVE) 471 | # CREATE_FULL_ARCHIVES = False 472 | # If monthly archives or full archives are created, adds also one archive per day 473 | # CREATE_DAILY_ARCHIVE = False 474 | # Final locations for the archives are: 475 | # output / TRANSLATION[lang] / ARCHIVE_PATH / ARCHIVE_FILENAME 476 | # output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / index.html 477 | # output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / index.html 478 | # output / TRANSLATION[lang] / ARCHIVE_PATH / YEAR / MONTH / DAY / index.html 479 | ARCHIVE_PATH = "archive" 480 | ARCHIVE_FILENAME = "index.html" 481 | 482 | # If ARCHIVES_ARE_INDEXES is set to True, each archive page which contains a list 483 | # of posts will contain the posts themselves. If set to False, it will be just a 484 | # list of links. 485 | # ARCHIVES_ARE_INDEXES = False 486 | 487 | # URLs to other posts/pages can take 3 forms: 488 | # rel_path: a relative URL to the current page/post (default) 489 | # full_path: a URL with the full path from the root 490 | # absolute: a complete URL (that includes the SITE_URL) 491 | # URL_TYPE = 'rel_path' 492 | 493 | # If USE_BASE_TAG is True, then all HTML files will include 494 | # something like to help 495 | # the browser resolve relative links. 496 | # In some rare cases, this will be a problem, and you can 497 | # disable it by setting USE_BASE_TAG to False. 498 | # USE_BASE_TAG = True 499 | 500 | # Final location for the blog main RSS feed is: 501 | # output / TRANSLATION[lang] / RSS_PATH / rss.xml 502 | # RSS_PATH = "" 503 | 504 | # Slug the Tag URL. Easier for users to type, special characters are 505 | # often removed or replaced as well. 506 | # SLUG_TAG_PATH = True 507 | # Slug the Author URL. Easier for users to type, special characters are 508 | # often removed or replaced as well. 509 | # SLUG_AUTHOR_PATH = True 510 | 511 | # A list of redirection tuples, [("foo/from.html", "/bar/to.html")]. 512 | # 513 | # A HTML file will be created in output/foo/from.html that redirects 514 | # to the "/bar/to.html" URL. notice that the "from" side MUST be a 515 | # relative URL. 516 | # 517 | # If you don't need any of these, just set to [] 518 | REDIRECTIONS = [] 519 | 520 | # Presets of commands to execute to deploy. Can be anything, for 521 | # example, you may use rsync: 522 | # "rsync -rav --delete output/ joe@my.site:/srv/www/site" 523 | # And then do a backup, or run `nikola ping` from the `ping` 524 | # plugin (`nikola plugin -i ping`). Or run `nikola check -l`. 525 | # You may also want to use github_deploy (see below). 526 | # You can define multiple presets and specify them as arguments 527 | # to `nikola deploy`. If no arguments are specified, a preset 528 | # named `default` will be executed. You can use as many presets 529 | # in a `nikola deploy` command as you like. 530 | DEPLOY_COMMANDS = { 531 | 'default': [ 532 | 'rsync -a --delete output/ www/', 533 | 'find www -type d -exec chmod 755 {} \;', 534 | 'find www -type f -exec chmod 644 {} \;', 535 | 'rsync -a -e "ssh -o StrictHostKeyChecking=no" --delete www/ matey@man.ubuntu-mate.net:ubuntu-mate.boutique/', 536 | 'rsync -a -e "ssh -o StrictHostKeyChecking=no" --delete www/ matey@yor.ubuntu-mate.net:ubuntu-mate.boutique/', 537 | ] 538 | } 539 | 540 | # For user.github.io OR organization.github.io pages, the DEPLOY branch 541 | # MUST be 'master', and 'gh-pages' for other repositories. 542 | # GITHUB_SOURCE_BRANCH = 'master' 543 | # GITHUB_DEPLOY_BRANCH = 'gh-pages' 544 | 545 | # The name of the remote where you wish to push to, using github_deploy. 546 | # GITHUB_REMOTE_NAME = 'origin' 547 | 548 | # Where the output site should be located 549 | # If you don't use an absolute path, it will be considered as relative 550 | # to the location of conf.py 551 | # OUTPUT_FOLDER = 'output' 552 | 553 | # where the "cache" of partial generated content should be located 554 | # default: 'cache' 555 | # CACHE_FOLDER = 'cache' 556 | 557 | # Filters to apply to the output. 558 | # A directory where the keys are either: a file extensions, or 559 | # a tuple of file extensions. 560 | # 561 | # And the value is a list of commands to be applied in order. 562 | # 563 | # Each command must be either: 564 | # 565 | # A string containing a '%s' which will 566 | # be replaced with a filename. The command *must* produce output 567 | # in place. 568 | # 569 | # Or: 570 | # 571 | # A python callable, which will be called with the filename as 572 | # argument. 573 | # 574 | # By default, only .php files uses filters to inject PHP into 575 | # Nikola’s templates. All other filters must be enabled through FILTERS. 576 | # 577 | # Many filters are shipped with Nikola. A list is available in the manual: 578 | # 579 | # 580 | from nikola import filters 581 | FILTERS = { 582 | ".html": [filters.typogrify], 583 | ".jpg": [filters.jpegoptim], 584 | ".jpeg": [filters.jpegoptim], 585 | ".json": [filters.jsonminify], 586 | ".png": [filters.optipng], 587 | ".xml": [filters.xmlminify], 588 | } 589 | 590 | # Expert setting! Create a gzipped copy of each generated file. Cheap server- 591 | # side optimization for very high traffic sites or low memory servers. 592 | GZIP_FILES = True 593 | # File extensions that will be compressed 594 | # GZIP_EXTENSIONS = ('.txt', '.htm', '.html', '.css', '.js', '.json', '.atom', '.xml') 595 | # Use an external gzip command? None means no. 596 | # Example: GZIP_COMMAND = "pigz -k {filename}" 597 | # GZIP_COMMAND = None 598 | # Make sure the server does not return a "Accept-Ranges: bytes" header for 599 | # files compressed by this option! OR make sure that a ranged request does not 600 | # return partial content of another representation for these resources. Do not 601 | # use this feature if you do not understand what this means. 602 | 603 | # Compiler to process LESS files. 604 | LESS_COMPILER = 'lessc' 605 | 606 | # A list of options to pass to the LESS compiler. 607 | # Final command is: LESS_COMPILER LESS_OPTIONS file.less 608 | LESS_OPTIONS = [] 609 | 610 | # Compiler to process Sass files. 611 | # SASS_COMPILER = 'sass' 612 | 613 | # A list of options to pass to the Sass compiler. 614 | # Final command is: SASS_COMPILER SASS_OPTIONS file.s(a|c)ss 615 | # SASS_OPTIONS = [] 616 | 617 | # ############################################################################# 618 | # Image Gallery Options 619 | # ############################################################################# 620 | 621 | # One or more folders containing galleries. The format is a dictionary of 622 | # {"source": "relative_destination"}, where galleries are looked for in 623 | # "source/" and the results will be located in 624 | # "OUTPUT_PATH/relative_destination/gallery_name" 625 | # Default is: 626 | GALLERY_FOLDERS = {"gallery": "gallery"} 627 | # More gallery options: 628 | THUMBNAIL_SIZE = 320 629 | MAX_IMAGE_SIZE = 1280 630 | USE_FILENAME_AS_TITLE = True 631 | # EXTRA_IMAGE_EXTENSIONS = [] 632 | # 633 | # If set to False, it will sort by filename instead. Defaults to True 634 | GALLERY_SORT_BY_DATE = False 635 | # 636 | # Folders containing images to be used in normal posts or pages. Images will be 637 | # scaled down according to IMAGE_THUMBNAIL_SIZE and MAX_IMAGE_SIZE options, but 638 | # will have to be referenced manually to be visible on the site 639 | # (the thumbnail has ``.thumbnail`` added before the file extension). 640 | # The format is a dictionary of {source: relative destination}. 641 | 642 | IMAGE_FOLDERS = {'images': 'images'} 643 | # IMAGE_THUMBNAIL_SIZE = 400 644 | 645 | # ############################################################################# 646 | # HTML fragments and diverse things that are used by the templates 647 | # ############################################################################# 648 | 649 | # Data about post-per-page indexes. 650 | # INDEXES_PAGES defaults to ' old posts, page %d' or ' page %d' (translated), 651 | # depending on the value of INDEXES_PAGES_MAIN. 652 | # 653 | # (translatable) If the following is empty, defaults to BLOG_TITLE: 654 | # INDEXES_TITLE = "" 655 | # 656 | # (translatable) If the following is empty, defaults to ' [old posts,] page %d' (see above): 657 | # INDEXES_PAGES = "" 658 | # 659 | # If the following is True, INDEXES_PAGES is also displayed on the main (the 660 | # newest) index page (index.html): 661 | # INDEXES_PAGES_MAIN = False 662 | # 663 | # If the following is True, index-1.html has the oldest posts, index-2.html the 664 | # second-oldest posts, etc., and index.html has the newest posts. This ensures 665 | # that all posts on index-x.html will forever stay on that page, now matter how 666 | # many new posts are added. 667 | # If False, index-1.html has the second-newest posts, index-2.html the third-newest, 668 | # and index-n.html the oldest posts. When this is active, old posts can be moved 669 | # to other index pages when new posts are added. 670 | # INDEXES_STATIC = True 671 | # 672 | # (translatable) If PRETTY_URLS is set to True, this setting will be used to create 673 | # prettier URLs for index pages, such as page/2/index.html instead of index-2.html. 674 | # Valid values for this settings are: 675 | # * False, 676 | # * a list or tuple, specifying the path to be generated, 677 | # * a dictionary mapping languages to lists or tuples. 678 | # Every list or tuple must consist of strings which are used to combine the path; 679 | # for example: 680 | # ['page', '{number}', '{index_file}'] 681 | # The replacements 682 | # {number} --> (logical) page number; 683 | # {old_number} --> the page number inserted into index-n.html before (zero for 684 | # the main page); 685 | # {index_file} --> value of option INDEX_FILE 686 | # are made. 687 | # Note that in case INDEXES_PAGES_MAIN is set to True, a redirection will be created 688 | # for the full URL with the page number of the main page to the normal (shorter) main 689 | # page URL. 690 | # INDEXES_PRETTY_PAGE_URL = False 691 | 692 | # Color scheme to be used for code blocks. If your theme provides 693 | # "assets/css/code.css" this is ignored. 694 | # Can be any of: 695 | # algol 696 | # algol_nu 697 | # arduino 698 | # autumn 699 | # borland 700 | # bw 701 | # colorful 702 | # default 703 | # emacs 704 | # friendly 705 | # fruity 706 | # igor 707 | # lovelace 708 | # manni 709 | # monokai 710 | # murphy 711 | # native 712 | # paraiso_dark 713 | # paraiso_light 714 | # pastie 715 | # perldoc 716 | # rrt 717 | # tango 718 | # trac 719 | # vim 720 | # vs 721 | # xcode 722 | # This list MAY be incomplete since pygments adds styles every now and then. 723 | # CODE_COLOR_SCHEME = 'default' 724 | 725 | # If you use 'site-reveal' theme you can select several subthemes 726 | # THEME_REVEAL_CONFIG_SUBTHEME = 'sky' 727 | # You can also use: beige/serif/simple/night/default 728 | 729 | # Again, if you use 'site-reveal' theme you can select several transitions 730 | # between the slides 731 | # THEME_REVEAL_CONFIG_TRANSITION = 'cube' 732 | # You can also use: page/concave/linear/none/default 733 | 734 | # FAVICONS contains (name, file, size) tuples. 735 | # Used to create favicon link like this: 736 | # 737 | # FAVICONS = ( 738 | # ("icon", "/favicon.ico", "16x16"), 739 | # ("icon", "/icon_128x128.png", "128x128"), 740 | # ) 741 | 742 | # Show teasers (instead of full posts) in indexes? Defaults to False. 743 | # INDEX_TEASERS = False 744 | 745 | # HTML fragments with the Read more... links. 746 | # The following tags exist and are replaced for you: 747 | # {link} A link to the full post page. 748 | # {read_more} The string “Read more” in the current language. 749 | # {reading_time} An estimate of how long it will take to read the post. 750 | # {remaining_reading_time} An estimate of how long it will take to read the post, sans the teaser. 751 | # {min_remaining_read} The string “{remaining_reading_time} min remaining to read” in the current language. 752 | # {paragraph_count} The amount of paragraphs in the post. 753 | # {remaining_paragraph_count} The amount of paragraphs in the post, sans the teaser. 754 | # {{ A literal { (U+007B LEFT CURLY BRACKET) 755 | # }} A literal } (U+007D RIGHT CURLY BRACKET) 756 | 757 | # 'Read more...' for the index page, if INDEX_TEASERS is True (translatable) 758 | INDEX_READ_MORE_LINK = '

{read_more}…

' 759 | # 'Read more...' for the feeds, if FEED_TEASERS is True (translatable) 760 | FEED_READ_MORE_LINK = '

{read_more}… ({min_remaining_read})

' 761 | 762 | # Append a URL query to the FEED_READ_MORE_LINK in Atom and RSS feeds. Advanced 763 | # option used for traffic source tracking. 764 | # Minimum example for use with Piwik: "pk_campaign=feed" 765 | # The following tags exist and are replaced for you: 766 | # {feedRelUri} A relative link to the feed. 767 | # {feedFormat} The name of the syndication format. 768 | # Example using replacement for use with Google Analytics: 769 | # "utm_source={feedRelUri}&utm_medium=nikola_feed&utm_campaign={feedFormat}_feed" 770 | FEED_LINKS_APPEND_QUERY = False 771 | 772 | # A HTML fragment describing the license, for the sidebar. 773 | # (translatable) 774 | LICENSE = "" 775 | # I recommend using the Creative Commons' wizard: 776 | # https://creativecommons.org/choose/ 777 | # LICENSE = """ 778 | # 779 | # Creative Commons License BY-NC-SA""" 782 | LICENSE = """ 783 | ubuntu-mate.boutique is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License. 784 |
785 | Ubuntu is a trademark of Canonical Ltd. 786 | """ 787 | 788 | SOCIAL_ICONS=""" 789 | Blog RSS Feed 790 | Ubuntu MATE on Mastodon 791 | Ubuntu MATE on Twitter 792 | Ubuntu MATE on Facebook 793 | Ubuntu MATE on YouTube 794 | """ 795 | 796 | FOOTER_LINKS=""" 797 | Logo Guidelines 798 |
799 | Recent Site Changes 800 | 804 | """ 805 | 806 | # A small copyright notice for the page footer (in HTML). 807 | # (translatable) 808 | #CONTENT_FOOTER = 'Contents © {date} {author} - Powered by Nikola {license}' 809 | CONTENT_FOOTER = """ 810 | 811 | 823 | """ 824 | 825 | # Things that will be passed to CONTENT_FOOTER.format(). This is done 826 | # for translatability, as dicts are not formattable. Nikola will 827 | # intelligently format the setting properly. 828 | # The setting takes a dict. The keys are languages. The values are 829 | # tuples of tuples of positional arguments and dicts of keyword arguments 830 | # to format(). For example, {'en': (('Hello'), {'target': 'World'})} 831 | # results in CONTENT_FOOTER['en'].format('Hello', target='World'). 832 | # WARNING: If you do not use multiple languages with CONTENT_FOOTER, this 833 | # still needs to be a dict of this format. (it can be empty if you 834 | # do not need formatting) 835 | # (translatable) 836 | CONTENT_FOOTER_FORMATS = { 837 | DEFAULT_LANG: ( 838 | (), 839 | { 840 | "email": BLOG_EMAIL, 841 | "author": BLOG_AUTHOR, 842 | "date": time.gmtime().tm_year, 843 | "license": LICENSE, 844 | "social_icons": SOCIAL_ICONS, 845 | "footer_links": FOOTER_LINKS 846 | } 847 | ) 848 | } 849 | 850 | # To use comments, you can choose between different third party comment 851 | # systems. The following comment systems are supported by Nikola: 852 | # disqus, facebook, googleplus, intensedebate, isso, livefyre, muut 853 | # You can leave this option blank to disable comments. 854 | COMMENT_SYSTEM = "disqus" 855 | # And you also need to add your COMMENT_SYSTEM_ID which 856 | # depends on what comment system you use. The default is 857 | # "nikolademo" which is a test account for Disqus. More information 858 | # is in the manual. 859 | COMMENT_SYSTEM_ID = "ubuntumate" 860 | 861 | # Enable annotations using annotateit.org? 862 | # If set to False, you can still enable them for individual posts and pages 863 | # setting the "annotations" metadata. 864 | # If set to True, you can disable them for individual posts and pages using 865 | # the "noannotations" metadata. 866 | # ANNOTATIONS = False 867 | 868 | # Create index.html for page (story) folders? 869 | # WARNING: if a page would conflict with the index file (usually 870 | # caused by setting slug to `index`), the STORY_INDEX 871 | # will not be generated for that directory. 872 | # STORY_INDEX = False 873 | # Enable comments on story pages? 874 | # COMMENTS_IN_STORIES = False 875 | # Enable comments on picture gallery pages? 876 | # COMMENTS_IN_GALLERIES = False 877 | 878 | # What file should be used for directory indexes? 879 | # Defaults to index.html 880 | # Common other alternatives: default.html for IIS, index.php 881 | # INDEX_FILE = "index.html" 882 | 883 | # If a link ends in /index.html, drop the index.html part. 884 | # http://mysite/foo/bar/index.html => http://mysite/foo/bar/ 885 | # (Uses the INDEX_FILE setting, so if that is, say, default.html, 886 | # it will instead /foo/default.html => /foo) 887 | # (Note: This was briefly STRIP_INDEX_HTML in v 5.4.3 and 5.4.4) 888 | STRIP_INDEXES = True 889 | 890 | # Should the sitemap list directories which only include other directories 891 | # and no files. 892 | # Default to True 893 | # If this is False 894 | # e.g. /2012 includes only /01, /02, /03, /04, ...: don't add it to the sitemap 895 | # if /2012 includes any files (including index.html)... add it to the sitemap 896 | # SITEMAP_INCLUDE_FILELESS_DIRS = True 897 | 898 | # List of files relative to the server root (!) that will be asked to be excluded 899 | # from indexing and other robotic spidering. * is supported. Will only be effective 900 | # if SITE_URL points to server root. The list is used to exclude resources from 901 | # /robots.txt and /sitemap.xml, and to inform search engines about /sitemapindex.xml. 902 | # ROBOTS_EXCLUSIONS = ["/archive.html", "/category/*.html"] 903 | 904 | # Instead of putting files in .html, put them in /index.html. 905 | # No web server configuration is required. Also enables STRIP_INDEXES. 906 | # This can be disabled on a per-page/post basis by adding 907 | # .. pretty_url: False 908 | # to the metadata. 909 | PRETTY_URLS = True 910 | 911 | # If True, publish future dated posts right away instead of scheduling them. 912 | # Defaults to False. 913 | FUTURE_IS_NOW = False 914 | 915 | # If True, future dated posts are allowed in deployed output 916 | # Only the individual posts are published/deployed; not in indexes/sitemap 917 | # Generally, you want FUTURE_IS_NOW and DEPLOY_FUTURE to be the same value. 918 | DEPLOY_FUTURE = False 919 | # If False, draft posts will not be deployed 920 | DEPLOY_DRAFTS = False 921 | 922 | # Allows scheduling of posts using the rule specified here (new_post -s) 923 | # Specify an iCal Recurrence Rule: http://www.kanzaki.com/docs/ical/rrule.html 924 | # SCHEDULE_RULE = '' 925 | # If True, use the scheduling rule to all posts by default 926 | # SCHEDULE_ALL = False 927 | 928 | # Do you want a add a Mathjax config file? 929 | # MATHJAX_CONFIG = "" 930 | 931 | # If you are using the compile-ipynb plugin, just add this one: 932 | # MATHJAX_CONFIG = """ 933 | # 946 | # """ 947 | # Want to use KaTeX instead of MathJax? While KaTeX is less featureful, 948 | # it's faster and the output looks better. 949 | # If you set USE_KATEX to True, you also need to add an extra CSS file 950 | # like this: 951 | # EXTRA_HEAD_DATA = """""" 952 | # USE_KATEX = False 953 | 954 | # Do you want to customize the nbconversion of your IPython notebook? 955 | # IPYNB_CONFIG = {} 956 | # With the following example configuration you can use a custom jinja template 957 | # called `toggle.tpl` which has to be located in your site/blog main folder: 958 | # IPYNB_CONFIG = {'Exporter':{'template_file': 'toggle'}} 959 | 960 | # What Markdown extensions to enable? 961 | # You will also get gist, nikola and podcast because those are 962 | # done in the code, hope you don't mind ;-) 963 | # Note: most Nikola-specific extensions are done via the Nikola plugin system, 964 | # with the MarkdownExtension class and should not be added here. 965 | # The default is ['fenced_code', 'codehilite'] 966 | MARKDOWN_EXTENSIONS = ['fenced_code', 'codehilite', 'extra'] 967 | 968 | # Extra options to pass to the pandoc comand. 969 | # by default, it's empty, is a list of strings, for example 970 | # ['-F', 'pandoc-citeproc', '--bibliography=/Users/foo/references.bib'] 971 | # PANDOC_OPTIONS = [] 972 | 973 | # Social buttons. This is sample code for AddThis (which was the default for a 974 | # long time). Insert anything you want here, or even make it empty (which is 975 | # the default right now) 976 | # (translatable) 977 | # SOCIAL_BUTTONS_CODE = """ 978 | # 979 | #
980 | # Share 981 | #
  • 982 | #
  • 983 | #
  • 984 | #
  • 985 | #
986 | #
987 | # 988 | # 989 | # """ 990 | 991 | # Show link to source for the posts? 992 | # Formerly known as HIDE_SOURCELINK (inverse) 993 | SHOW_SOURCELINK = False 994 | # Copy the source files for your pages? 995 | # Setting it to False implies SHOW_SOURCELINK = False 996 | COPY_SOURCES = False 997 | 998 | # Modify the number of Post per Index Page 999 | # Defaults to 10 1000 | INDEX_DISPLAY_POST_COUNT = 5 1001 | 1002 | # By default, Nikola generates RSS files for the website and for tags, and 1003 | # links to it. Set this to False to disable everything RSS-related. 1004 | # GENERATE_RSS = True 1005 | 1006 | # By default, Nikola does not generates Atom files for indexes and links to 1007 | # them. Generate Atom for tags by setting TAG_PAGES_ARE_INDEXES to True. 1008 | # Atom feeds are built based on INDEX_DISPLAY_POST_COUNT and not FEED_LENGTH 1009 | # Switch between plain-text summaries and full HTML content using the 1010 | # FEED_TEASER option. FEED_LINKS_APPEND_QUERY is also respected. Atom feeds 1011 | # are generated even for old indexes and have pagination link relations 1012 | # between each other. Old Atom feeds with no changes are marked as archived. 1013 | # GENERATE_ATOM = False 1014 | 1015 | # Only inlclude teasers in Atom and RSS feeds. Disabling include the full 1016 | # content. Defaults to True. 1017 | # FEED_TEASERS = True 1018 | 1019 | # Strip HTML from Atom annd RSS feed summaries and content. Defaults to False. 1020 | # FEED_PLAIN = False 1021 | 1022 | # Number of posts in Atom and RSS feeds. 1023 | # FEED_LENGTH = 10 1024 | 1025 | # Include preview image as a
at the top of the entry. 1026 | # Requires FEED_PLAIN = False. If the preview image is found in the content, 1027 | # it will not be included again. Image will be included as-is, aim to optmize 1028 | # the image source for Feedly, Apple News, Flipboard, and other popular clients. 1029 | # FEED_PREVIEWIMAGE = True 1030 | 1031 | # RSS_LINK is a HTML fragment to link the RSS or Atom feeds. If set to None, 1032 | # the base.tmpl will use the feed Nikola generates. However, you may want to 1033 | # change it for a FeedBurner feed or something else. 1034 | # RSS_LINK = None 1035 | 1036 | # A search form to search this site, for the sidebar. You can use a Google 1037 | # custom search (https://www.google.com/cse/) 1038 | # Or a DuckDuckGo search: https://duckduckgo.com/search_box.html 1039 | # Default is no search form. 1040 | # (translatable) 1041 | # SEARCH_FORM = "" 1042 | # 1043 | # This search form works for any site and looks good in the "site" theme where 1044 | # it appears on the navigation bar: 1045 | # 1046 | # SEARCH_FORM = """ 1047 | # 1048 | # 1058 | # 1059 | # """ % SITE_URL 1060 | # 1061 | # If you prefer a Google search form, here's an example that should just work: 1062 | # SEARCH_FORM = """ 1063 | # 1064 | # 1073 | # 1074 | # """ % SITE_URL 1075 | 1076 | # Use content distribution networks for jQuery, twitter-bootstrap css and js, 1077 | # and html5shiv (for older versions of Internet Explorer) 1078 | # If this is True, jQuery and html5shiv are served from the Google CDN and 1079 | # Bootstrap is served from BootstrapCDN (provided by MaxCDN) 1080 | # Set this to False if you want to host your site without requiring access to 1081 | # external resources. 1082 | # USE_CDN = False 1083 | # Check for USE_CDN compatibility. 1084 | # If you are using custom themes, have configured the CSS properly and are 1085 | # receiving warnings about incompatibility but believe they are incorrect, you 1086 | # can set this to False. 1087 | # USE_CDN_WARNING = True 1088 | 1089 | # Extra things you want in the pages HEAD tag. This will be added right 1090 | # before 1091 | # (translatable) 1092 | EXTRA_HEAD_DATA = """ 1093 | 1094 | 1095 | 1096 | 1097 | 1098 | 1099 | 1100 | 1101 | 1102 | 1103 | 1104 | 1105 | 1106 | 1107 | 1108 | 1109 | 1110 | 1111 | 1112 | 1113 | 1114 | 1115 | 1116 | """ 1117 | 1118 | # Google Analytics or whatever else you use. Added to the bottom of 1119 | # in the default template (base.tmpl). 1120 | # (translatable) 1121 | BODY_END = "" 1122 | 1123 | # The possibility to extract metadata from the filename by using a 1124 | # regular expression. 1125 | # To make it work you need to name parts of your regular expression. 1126 | # The following names will be used to extract metadata: 1127 | # - title 1128 | # - slug 1129 | # - date 1130 | # - tags 1131 | # - link 1132 | # - description 1133 | # 1134 | # An example re is the following: 1135 | # '(?P\d{4}-\d{2}-\d{2})-(?P.*)-(?P.*)\.md' 1136 | # FILE_METADATA_REGEXP = None 1137 | 1138 | # If you hate "Filenames with Capital Letters and Spaces.md", you should 1139 | # set this to true. 1140 | UNSLUGIFY_TITLES = False 1141 | 1142 | # Additional metadata that is added to a post when creating a new_post 1143 | ADDITIONAL_METADATA = { 1144 | 'author': 'Webmaster' 1145 | } 1146 | 1147 | # Nikola supports Open Graph Protocol data for enhancing link sharing and 1148 | # discoverability of your site on Facebook, Google+, and other services. 1149 | # Open Graph is enabled by default. 1150 | # USE_OPEN_GRAPH = True 1151 | 1152 | # Nikola supports Twitter Card summaries, but they are disabled by default. 1153 | # They make it possible for you to attach media to Tweets that link 1154 | # to your content. 1155 | # 1156 | # IMPORTANT: 1157 | # Please note, that you need to opt-in for using Twitter Cards! 1158 | # To do this please visit https://cards-dev.twitter.com/validator 1159 | # 1160 | # Uncomment and modify to following lines to match your accounts. 1161 | # Images displayed come from the `previewimage` meta tag. 1162 | # You can specify the card type by using the `card` parameter in TWITTER_CARD. 1163 | TWITTER_CARD = { 1164 | 'use_twitter_cards': True, # enable Twitter Cards 1165 | 'card': 'summary', # Card type, you can also use 'summary_large_image', 1166 | # see https://dev.twitter.com/cards/types 1167 | 'site': '@ubuntu_mate', # twitter nick for the website 1168 | 'creator': '@m_wimpress', # Username for the content creator / author. 1169 | } 1170 | 1171 | # If webassets is installed, bundle JS and CSS into single files to make 1172 | # site loading faster in a HTTP/1.1 environment but is not recommended for 1173 | # HTTP/2.0 when caching is used. Defaults to True. 1174 | # USE_BUNDLES = True 1175 | 1176 | # Plugins you don't want to use. Be careful :-) 1177 | # DISABLED_PLUGINS = ["render_galleries"] 1178 | 1179 | # Add the absolute paths to directories containing plugins to use them. 1180 | # For example, the `plugins` directory of your clone of the Nikola plugins 1181 | # repository. 1182 | # EXTRA_PLUGINS_DIRS = [] 1183 | 1184 | # List of regular expressions, links matching them will always be considered 1185 | # valid by "nikola check -l" 1186 | # LINK_CHECK_WHITELIST = [] 1187 | 1188 | # If set to True, enable optional hyphenation in your posts (requires pyphen) 1189 | # Enabling hyphenation has been shown to break math support in some cases, 1190 | # use with caution. 1191 | # HYPHENATE = False 1192 | 1193 | # The <hN> tags in HTML generated by certain compilers (reST/Markdown) 1194 | # will be demoted by that much (1 → h1 will become h2 and so on) 1195 | # This was a hidden feature of the Markdown and reST compilers in the 1196 | # past. Useful especially if your post titles are in <h1> tags too, for 1197 | # example. 1198 | # (defaults to 1.) 1199 | # DEMOTE_HEADERS = 1 1200 | 1201 | # If you don’t like slugified file names ([a-z0-9] and a literal dash), 1202 | # and would prefer to use all the characters your file system allows. 1203 | # USE WITH CARE! This is also not guaranteed to be perfect, and may 1204 | # sometimes crash Nikola, your web server, or eat your cat. 1205 | # USE_SLUGIFY = True 1206 | 1207 | # Templates will use those filters, along with the defaults. 1208 | # Consult your engine's documentation on filters if you need help defining 1209 | # those. 1210 | # TEMPLATE_FILTERS = {} 1211 | 1212 | # Put in global_context things you want available on all your templates. 1213 | # It can be anything, data, functions, modules, etc. 1214 | GLOBAL_CONTEXT = {} 1215 | 1216 | # Add functions here and they will be called with template 1217 | # GLOBAL_CONTEXT as parameter when the template is about to be 1218 | # rendered 1219 | GLOBAL_CONTEXT_FILLER = [] 1220 | -------------------------------------------------------------------------------- /files/assets/css/custom.css: -------------------------------------------------------------------------------- 1 | /************************************* 2 | General / Bootstrap Overrides 3 | *************************************/ 4 | a { 5 | cursor: pointer; 6 | } 7 | 8 | .btn-default { 9 | background: linear-gradient(#ffffff, #f5f4f3); 10 | color: black; 11 | } 12 | 13 | .btn-default:focus, 14 | .btn-default:hover { 15 | background: linear-gradient(#f5f4f3, #ffffff); 16 | color: black; 17 | } 18 | 19 | .btn var { 20 | font-style: normal; 21 | } 22 | 23 | .help-tooltip { 24 | cursor: help; 25 | color: gray; 26 | display: inline-block; 27 | padding-left: 0.5em; 28 | } 29 | 30 | code { 31 | color: green; 32 | } 33 | 34 | kbd { 35 | background-color: #f5f5f5; 36 | color: #333; 37 | box-shadow: 0 0px 1px rgba(0,0,0,1); 38 | } 39 | 40 | h4 { 41 | margin-top: 24px; 42 | } 43 | 44 | /************************************* 45 | No margin for social icon in navbar 46 | **************************************/ 47 | .no-margin { 48 | margin-top: 0px; 49 | margin-bottom: 0px; 50 | margin-left: 0px; 51 | margin-right: 0px; 52 | } 53 | 54 | #banner-fade, 55 | #banner-slide { 56 | margin-bottom: 60px; 57 | } 58 | 59 | /************************************* 60 | bjqs library 61 | /************************************/ 62 | ul.bjqs{position:relative; list-style:none;padding:0;margin:0;overflow:hidden; display:none;} 63 | li.bjqs-slide{position:absolute; display:none;} 64 | ul.bjqs-controls{list-style:none;margin:0;padding:0;z-index:9999;} 65 | ul.bjqs-controls.v-centered li a{position:absolute;} 66 | ul.bjqs-controls.v-centered li.bjqs-next a{right:0; color:black;} 67 | ul.bjqs-controls.v-centered li.bjqs-prev a{left:0; color:black;} 68 | ol.bjqs-markers{list-style: none; padding: 0; margin: 0; width:100%;} 69 | ol.bjqs-markers.h-centered{text-align: center;} 70 | ol.bjqs-markers li{display:inline; } 71 | ol.bjqs-markers li a{display:inline-block;} 72 | p.bjqs-caption{display:block;width:96%;margin:0;padding:2%;position:absolute;bottom:0;} 73 | 74 | ul.bjqs-controls.v-centered li a{ 75 | background: #eee; 76 | color: #87A556; 77 | text-decoration: none; 78 | 79 | display: block; 80 | margin-bottom: 0px; 81 | font-weight: normal; 82 | text-align: center; 83 | vertical-align: middle; 84 | cursor: pointer; 85 | background-image: none; 86 | border: 1px solid transparent; 87 | white-space: nowrap; 88 | padding: 8px 12px; 89 | font-size: 14px; 90 | line-height: 1.42857; 91 | border-radius: 4px; 92 | -moz-user-select: none; 93 | } 94 | 95 | ul.bjqs-controls.v-centered li a:hover{ 96 | background:#87A556; 97 | color:#fff; 98 | } 99 | 100 | ol.bjqs-markers li a { 101 | padding:5px 10px; 102 | background:#87A556; 103 | color:#fff; 104 | margin:5px; 105 | text-decoration: none; 106 | } 107 | 108 | ol.bjqs-markers li.active-marker a, 109 | ol.bjqs-markers li a:hover { 110 | background: #DD4814; 111 | } 112 | 113 | p.bjqs-caption { 114 | background: rgba(255,255,255,0.5); 115 | } 116 | 117 | /************************************* 118 | Footer 119 | *************************************/ 120 | #mate-footer { 121 | text-align: center; 122 | background-color: #87A556; 123 | align-content: center; 124 | align-items: center; 125 | width: auto; 126 | color: #fff; 127 | padding: 1em 0; 128 | } 129 | 130 | #mate-footer .left { 131 | width: 70%; 132 | display: inline-block; 133 | float: left; 134 | text-align: left; 135 | } 136 | 137 | #mate-footer .right { 138 | width: 30%; 139 | display: inline-block; 140 | float: right; 141 | text-align: right; 142 | } 143 | 144 | #mate-footer #copyright { 145 | margin-bottom: 1em; 146 | } 147 | 148 | #mate-footer a { 149 | color: white; 150 | } 151 | 152 | #mate-footer .links a + a { 153 | margin-left: 1em; 154 | } 155 | 156 | #mate-footer #license { 157 | font-size: 0.9em; 158 | } 159 | 160 | #mate-footer #social img { 161 | height: 2em; 162 | width: 2em; 163 | margin: 1em .1em; 164 | } 165 | 166 | #mate-footer #social img:hover { 167 | opacity: 0.75; 168 | background-color: #9AB270; 169 | } 170 | 171 | #mate-footer .separator { 172 | display: inline-block; 173 | width: 1px; 174 | height: 1.5em; 175 | border-left: 1px solid white; 176 | vertical-align: middle; 177 | margin: 0 0.4em; 178 | } 179 | 180 | /************************************* 181 | Spacing and header colours 182 | *************************************/ 183 | .navbar-default { 184 | padding-top: 4px; 185 | padding-bottom: 4px; 186 | border-color: #87A556; 187 | } 188 | 189 | .navbar-default .navbar-collapse, .navbar-default .navbar-form { 190 | border-color: #87A556; 191 | } 192 | 193 | article { 194 | margin: 6em 0; 195 | } 196 | 197 | .entry-content { 198 | margin-top: 1em; 199 | } 200 | 201 | .post-text img { 202 | margin: 1em 0; 203 | } 204 | 205 | /************************************* 206 | Sticky Footer 207 | *************************************/ 208 | .body-content { 209 | min-height: calc(100vh - 106px); 210 | } 211 | 212 | #mate-footer { 213 | min-height: 96px; 214 | } 215 | 216 | /************************************* 217 | Home Page Greeting 218 | *************************************/ 219 | .greetings { 220 | padding: 0; 221 | } 222 | 223 | .greetings img { 224 | width: 220px; 225 | height: 220px; 226 | display: inline-block; 227 | margin-top: 6em; 228 | float: left; 229 | } 230 | 231 | .greetings .description { 232 | display: inline-block; 233 | width: calc(100% - 220px - 1em); 234 | margin-top: 6em; 235 | padding-left: 2em; 236 | } 237 | 238 | .greetings h2 { 239 | color: white; 240 | font-size: 38px; 241 | } 242 | 243 | .greetings p { 244 | color: white; 245 | font-size: 22px; 246 | } 247 | 248 | @media screen and (max-width:767px) { 249 | .greetings .description { 250 | width: 100%; 251 | margin-top: 4em; 252 | } 253 | } 254 | 255 | /************************************* 256 | Alignment for images 257 | **************************************/ 258 | img.centered { 259 | display: block; 260 | margin-left: auto; 261 | margin-right: auto; 262 | } 263 | 264 | img.left { 265 | margin-right: 10px; 266 | float: left; 267 | } 268 | 269 | img.right { 270 | margin-right: 10px; 271 | float: right; 272 | } 273 | 274 | -------------------------------------------------------------------------------- /files/assets/img/footer/facebook.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | enable-background="new 0 0 32 32" 11 | height="32px" 12 | id="Layer_1" 13 | version="1.0" 14 | viewBox="0 0 32 32" 15 | width="32px" 16 | xml:space="preserve" 17 | inkscape:version="0.91 r13725" 18 | sodipodi:docname="facebook.svg"><metadata 19 | id="metadata24"><rdf:RDF><cc:Work 20 | rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type 21 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs 22 | id="defs22" /><sodipodi:namedview 23 | pagecolor="#ffffff" 24 | bordercolor="#666666" 25 | borderopacity="1" 26 | objecttolerance="10" 27 | gridtolerance="10" 28 | guidetolerance="10" 29 | inkscape:pageopacity="0" 30 | inkscape:pageshadow="2" 31 | inkscape:window-width="1920" 32 | inkscape:window-height="1004" 33 | id="namedview20" 34 | showgrid="false" 35 | inkscape:zoom="7.375" 36 | inkscape:cx="16" 37 | inkscape:cy="16" 38 | inkscape:window-x="0" 39 | inkscape:window-y="24" 40 | inkscape:window-maximized="1" 41 | inkscape:current-layer="g3" /><g 42 | id="g3"><path 43 | d="M32,30c0,1.104-0.896,2-2,2H2c-1.104,0-2-0.896-2-2V2c0-1.104,0.896-2,2-2h28c1.104,0,2,0.896,2,2V30z" 44 | fill="#3B5998" 45 | id="path5" 46 | style="fill:#ffffff" /><path 47 | d="M22,32V20h4l1-5h-5v-2c0-2,1.002-3,3-3h2V5c-1,0-2.24,0-4,0c-3.675,0-6,2.881-6,7v3h-4v5h4v12H22z" 48 | fill="#FFFFFF" 49 | id="f" 50 | style="fill:#87a556;fill-opacity:1" /></g><g 51 | id="g8" /><g 52 | id="g10" /><g 53 | id="g12" /><g 54 | id="g14" /><g 55 | id="g16" /><g 56 | id="g18" /></svg> -------------------------------------------------------------------------------- /files/assets/img/footer/mastodon.svg: -------------------------------------------------------------------------------- 1 | <svg id="svg6" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns="http://www.w3.org/2000/svg" height="32" width="32" version="1.1" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" viewBox="0 0 29.999995 29.999997"> 2 | <metadata id="metadata12"> 3 | <rdf:RDF> 4 | <cc:Work rdf:about=""> 5 | <dc:format>image/svg+xml</dc:format> 6 | <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> 7 | <dc:title/> 8 | </cc:Work> 9 | </rdf:RDF> 10 | </metadata> 11 | <path id="path5" style="stroke-width:.93750;fill:#ffffff" d="m30 28.125c0 1.035-.84 1.875-1.875 1.875h-26.25c-1.035 0-1.875-.84-1.875-1.875v-26.25c0-1.035 0.84-1.875 1.875-1.875h26.25c1.035 0 1.875.84 1.875 1.875z"/> 12 | <g id="g830" transform="matrix(.10506 0 0 .10506 -.86463 26.442)"> 13 | <path id="path2" d="m254.61-85.823c-3.1812 16.366-28.492 34.278-57.562 37.749-15.159 1.8088-30.084 3.4712-45.999 2.7412-26.028-1.1925-46.565-6.2125-46.565-6.2125 0 2.5338.15625 4.9462.46875 7.2025 3.3838 25.686 25.47 27.225 46.391 27.942 21.116.7225 39.919-5.2062 39.919-5.2062l.8675 19.09s-14.77 7.9312-41.081 9.39c-14.509.7975-32.524-.365-53.506-5.9188-45.523-12.044-53.349-60.553-54.546-109.77-.365-14.614-.14-28.394-.14-39.919 0-50.33 32.976-65.082 32.976-65.082 16.628-7.6362 45.159-10.848 74.82-11.09h.72875c29.661.2425 58.211 3.4538 74.838 11.09 0 0 32.975 14.752 32.975 65.082 0 0 .41375 37.134-4.5988 62.915" style="fill:#87a556"/> 14 | <path id="path4" d="m220.31-144.83v60.941h-24.15v-59.15c0-12.469-5.2462-18.798-15.74-18.798-11.602 0-17.418 7.5075-17.418 22.352v32.376h-24.001v-32.376c0-14.845-5.8162-22.352-17.419-22.352-10.494 0-15.74 6.3288-15.74 18.798v59.15h-24.137v-60.94c0-12.455 3.1712-22.352 9.5412-29.675 6.5688-7.3225 15.171-11.076 25.85-11.076 12.355 0 21.711 4.7488 27.898 14.248l6.0138 10.081 6.015-10.081c6.185-9.4988 15.541-14.248 27.898-14.248 10.678 0 19.28 3.7538 25.85 11.076 6.3688 7.3225 9.54 17.22 9.54 29.675" style="fill:#ffffff"/> 15 | </g> 16 | </svg> 17 | -------------------------------------------------------------------------------- /files/assets/img/footer/rss.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | version="1.1" 11 | width="32" 12 | height="32" 13 | viewBox="0 0 32 32" 14 | id="svg2" 15 | inkscape:version="0.91 r13725" 16 | sodipodi:docname="rss.svg"> 17 | <metadata 18 | id="metadata10"> 19 | <rdf:RDF> 20 | <cc:Work 21 | rdf:about=""> 22 | <dc:format>image/svg+xml</dc:format> 23 | <dc:type 24 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> 25 | <dc:title></dc:title> 26 | </cc:Work> 27 | </rdf:RDF> 28 | </metadata> 29 | <defs 30 | id="defs8" /> 31 | <sodipodi:namedview 32 | pagecolor="#ffffff" 33 | bordercolor="#666666" 34 | borderopacity="1" 35 | objecttolerance="10" 36 | gridtolerance="10" 37 | guidetolerance="10" 38 | inkscape:pageopacity="0" 39 | inkscape:pageshadow="2" 40 | inkscape:window-width="1920" 41 | inkscape:window-height="1004" 42 | id="namedview6" 43 | showgrid="false" 44 | fit-margin-top="0" 45 | fit-margin-left="0" 46 | fit-margin-right="0" 47 | fit-margin-bottom="0" 48 | inkscape:zoom="7.375" 49 | inkscape:cx="17.184257" 50 | inkscape:cy="15.381101" 51 | inkscape:window-x="0" 52 | inkscape:window-y="24" 53 | inkscape:window-maximized="1" 54 | inkscape:current-layer="svg2" /> 55 | <path 56 | inkscape:connector-curvature="0" 57 | style="clip-rule:evenodd;fill:#ffffff;fill-rule:evenodd" 58 | d="m 32,30 c 0,1.104 -0.896,2 -2,2 L 2,32 C 0.896,32 0,31.104 0,30 L 0,2 C 0,0.896 0.896,0 2,0 l 28,0 c 1.104,0 2,0.896 2,2 l 0,28 z" 59 | id="path5" /> 60 | <path 61 | d="m 4.4745763,4.4745763 0,4.3220337 c 10.3436377,0 18.7288137,8.385178 18.7288137,18.728814 l 4.322034,0 c 0,-12.73063 -10.320216,-23.0508477 -23.0508477,-23.0508477 z m 0,8.6440677 0,4.322034 c 5.5696517,0 10.0847457,4.515092 10.0847457,10.084746 l 4.322034,0 c 0,-7.956641 -6.450135,-14.40678 -14.4067797,-14.40678 z m 2.8813557,8.644068 c -1.591329,0 -2.8813557,1.290026 -2.8813557,2.881356 0,1.591329 1.2900267,2.881356 2.8813557,2.881356 1.591329,0 2.881356,-1.290027 2.881356,-2.881356 0,-1.59133 -1.290027,-2.881356 -2.881356,-2.881356 z" 62 | style="fill:#87a556;fill-opacity:1" 63 | id="path4" 64 | inkscape:connector-curvature="0" /> 65 | </svg> 66 | -------------------------------------------------------------------------------- /files/assets/img/footer/twitter.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | enable-background="new 0 0 32 32" 11 | height="32px" 12 | id="Layer_1" 13 | version="1.0" 14 | viewBox="0 0 32 32" 15 | width="32px" 16 | xml:space="preserve" 17 | inkscape:version="0.91 r13725" 18 | sodipodi:docname="twitter.svg"><metadata 19 | id="metadata25"><rdf:RDF><cc:Work 20 | rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type 21 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs 22 | id="defs23" /><sodipodi:namedview 23 | pagecolor="#ffffff" 24 | bordercolor="#666666" 25 | borderopacity="1" 26 | objecttolerance="10" 27 | gridtolerance="10" 28 | guidetolerance="10" 29 | inkscape:pageopacity="0" 30 | inkscape:pageshadow="2" 31 | inkscape:window-width="1920" 32 | inkscape:window-height="1004" 33 | id="namedview21" 34 | showgrid="false" 35 | inkscape:zoom="7.375" 36 | inkscape:cx="16" 37 | inkscape:cy="16" 38 | inkscape:window-x="0" 39 | inkscape:window-y="24" 40 | inkscape:window-maximized="1" 41 | inkscape:current-layer="g3" /><g 42 | id="g3"><path 43 | d="M32,30c0,1.104-0.896,2-2,2H2c-1.104,0-2-0.896-2-2V2c0-1.104,0.896-2,2-2h28c1.104,0,2,0.896,2,2V30z" 44 | fill="#55ACEE" 45 | id="path5" 46 | style="fill:#ffffff" /><path 47 | d="M25.987,9.894c-0.736,0.322-1.525,0.537-2.357,0.635c0.85-0.498,1.5-1.289,1.806-2.231 c-0.792,0.461-1.67,0.797-2.605,0.978C22.083,8.491,21.017,8,19.838,8c-2.266,0-4.1,1.807-4.1,4.038 c0,0.314,0.036,0.625,0.104,0.922c-3.407-0.172-6.429-1.779-8.452-4.221c-0.352,0.597-0.556,1.29-0.556,2.032 c0,1.399,0.726,2.635,1.824,3.36c-0.671-0.022-1.304-0.203-1.856-0.506c-0.001,0.017-0.001,0.034-0.001,0.052 c0,1.955,1.414,3.589,3.29,3.96c-0.343,0.09-0.705,0.142-1.081,0.142c-0.264,0-0.52-0.024-0.77-0.072 c0.52,1.604,2.034,2.771,3.828,2.805C10.67,21.594,8.9,22.24,6.979,22.24c-0.33,0-0.658-0.018-0.979-0.056 c1.814,1.145,3.971,1.813,6.287,1.813c7.541,0,11.666-6.154,11.666-11.491c0-0.173-0.005-0.35-0.012-0.521 C24.741,11.414,25.438,10.703,25.987,9.894z" 48 | fill="#FFFFFF" 49 | id="path7" 50 | style="fill:#87a556;fill-opacity:1" /></g><g 51 | id="g9" /><g 52 | id="g11" /><g 53 | id="g13" /><g 54 | id="g15" /><g 55 | id="g17" /><g 56 | id="g19" /></svg> -------------------------------------------------------------------------------- /files/assets/img/footer/youtube.svg: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> 2 | <svg 3 | xmlns:dc="http://purl.org/dc/elements/1.1/" 4 | xmlns:cc="http://creativecommons.org/ns#" 5 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 6 | xmlns:svg="http://www.w3.org/2000/svg" 7 | xmlns="http://www.w3.org/2000/svg" 8 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" 9 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" 10 | enable-background="new 0 0 32 32" 11 | height="32px" 12 | id="Layer_1" 13 | version="1.0" 14 | viewBox="0 0 32 32" 15 | width="32px" 16 | xml:space="preserve" 17 | inkscape:version="0.92.3 (unknown)" 18 | sodipodi:docname="youtube.svg"><metadata 19 | id="metadata25"><rdf:RDF><cc:Work 20 | rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type 21 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs 22 | id="defs23" /><sodipodi:namedview 23 | pagecolor="#ffffff" 24 | bordercolor="#666666" 25 | borderopacity="1" 26 | objecttolerance="10" 27 | gridtolerance="10" 28 | guidetolerance="10" 29 | inkscape:pageopacity="0" 30 | inkscape:pageshadow="2" 31 | inkscape:window-width="1920" 32 | inkscape:window-height="1004" 33 | id="namedview21" 34 | showgrid="false" 35 | inkscape:zoom="10.429825" 36 | inkscape:cx="9.1071589" 37 | inkscape:cy="25.083352" 38 | inkscape:window-x="0" 39 | inkscape:window-y="24" 40 | inkscape:window-maximized="1" 41 | inkscape:current-layer="g3" /><g 42 | id="g3"><path 43 | d="M32,30c0,1.104-0.896,2-2,2H2c-1.104,0-2-0.896-2-2V2c0-1.104,0.896-2,2-2h28c1.104,0,2,0.896,2,2V30z" 44 | fill="#55ACEE" 45 | id="path5" 46 | style="fill:#ffffff" /><path 47 | id="path820" 48 | d="M 27.498498,10.202878 C 27.222471,9.1635746 26.409224,8.345046 25.376644,8.0672648 23.50501,7.5625129 15.999995,7.5625129 15.999995,7.5625129 c 0,0 -7.5049704,0 -9.3766393,0.5047519 -1.0325792,0.2778241 -1.845836,1.0963098 -2.1218537,2.1356132 -0.5015021,1.883803 -0.5015021,5.814175 -0.5015021,5.814175 0,0 0,3.930379 0.5015021,5.814174 0.2760177,1.039312 1.0892745,1.823729 2.1218537,2.101509 1.871669,0.504751 9.3766393,0.504751 9.3766393,0.504751 0,0 7.504972,0 9.376649,-0.504751 1.03258,-0.27778 1.845827,-1.062197 2.121854,-2.10151 C 28,19.947432 28,16.017052 28,16.017052 c 0,0 0,-3.930371 -0.501502,-5.814174 z m -13.95306,9.382665 v -7.13698 l 6.272696,3.568577 z" 49 | inkscape:connector-curvature="0" 50 | style="fill:#87a556;fill-opacity:1;stroke-width:0.04394525" /></g><g 51 | id="g9" /><g 52 | id="g11" /><g 53 | id="g13" /><g 54 | id="g15" /><g 55 | id="g17" /><g 56 | id="g19" /></svg> -------------------------------------------------------------------------------- /files/assets/img/umr-wht-48x48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/assets/img/umr-wht-48x48.png -------------------------------------------------------------------------------- /files/assets/js/bjqs-1.3.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Basic jQuery Slider plug-in v.1.3 3 | * 4 | * http://www.basic-slider.com 5 | * 6 | * Authored by John Cobb 7 | * http://www.johncobb.name 8 | * @john0514 9 | * 10 | * Copyright 2011, John Cobb 11 | * License: GNU General Public License, version 3 (GPL-3.0) 12 | * http://www.opensource.org/licenses/gpl-3.0.html 13 | * 14 | */ 15 | 16 | ;(function($) { 17 | 18 | "use strict"; 19 | 20 | $.fn.bjqs = function(o) { 21 | 22 | // slider default settings 23 | var defaults = { 24 | 25 | // w + h to enforce consistency 26 | width : 700, 27 | height : 300, 28 | 29 | // transition valuess 30 | animtype : 'fade', 31 | animduration : 450, // length of transition 32 | animspeed : 4000, // delay between transitions 33 | automatic : true, // enable/disable automatic slide rotation 34 | 35 | // control and marker configuration 36 | showcontrols : true, // enable/disable next + previous UI elements 37 | centercontrols : true, // vertically center controls 38 | nexttext : 'Next', // text/html inside next UI element 39 | prevtext : 'Prev', // text/html inside previous UI element 40 | showmarkers : true, // enable/disable individual slide UI markers 41 | centermarkers : true, // horizontally center markers 42 | 43 | // interaction values 44 | keyboardnav : true, // enable/disable keyboard navigation 45 | hoverpause : true, // enable/disable pause slides on hover 46 | 47 | // presentational options 48 | usecaptions : true, // enable/disable captions using img title attribute 49 | randomstart : false, // start from a random slide 50 | responsive : false // enable responsive behaviour 51 | 52 | }; 53 | 54 | // create settings from defauls and user options 55 | var settings = $.extend({}, defaults, o); 56 | 57 | // slider elements 58 | var $wrapper = this, 59 | $slider = $wrapper.find('ul.bjqs'), 60 | $slides = $slider.children('li'), 61 | 62 | // control elements 63 | $c_wrapper = null, 64 | $c_fwd = null, 65 | $c_prev = null, 66 | 67 | // marker elements 68 | $m_wrapper = null, 69 | $m_markers = null, 70 | 71 | // elements for slide animation 72 | $canvas = null, 73 | $clone_first = null, 74 | $clone_last = null; 75 | 76 | // state management object 77 | var state = { 78 | slidecount : $slides.length, // total number of slides 79 | animating : false, // bool: is transition is progress 80 | paused : false, // bool: is the slider paused 81 | currentslide : 1, // current slide being viewed (not 0 based) 82 | nextslide : 0, // slide to view next (not 0 based) 83 | currentindex : 0, // current slide being viewed (0 based) 84 | nextindex : 0, // slide to view next (0 based) 85 | interval : null // interval for automatic rotation 86 | }; 87 | 88 | var responsive = { 89 | width : null, 90 | height : null, 91 | ratio : null 92 | }; 93 | 94 | // helpful variables 95 | var vars = { 96 | fwd : 'forward', 97 | prev : 'previous' 98 | }; 99 | 100 | // run through options and initialise settings 101 | var init = function() { 102 | 103 | // differentiate slider li from content li 104 | $slides.addClass('bjqs-slide'); 105 | 106 | // conf dimensions, responsive or static 107 | if( settings.responsive ){ 108 | conf_responsive(); 109 | } 110 | else{ 111 | conf_static(); 112 | } 113 | 114 | // configurations only avaliable if more than 1 slide 115 | if( state.slidecount > 1 ){ 116 | 117 | // enable random start 118 | if (settings.randomstart){ 119 | conf_random(); 120 | } 121 | 122 | // create and show controls 123 | if( settings.showcontrols ){ 124 | conf_controls(); 125 | } 126 | 127 | // create and show markers 128 | if( settings.showmarkers ){ 129 | conf_markers(); 130 | } 131 | 132 | // enable slidenumboard navigation 133 | if( settings.keyboardnav ){ 134 | conf_keynav(); 135 | } 136 | 137 | // enable pause on hover 138 | if (settings.hoverpause && settings.automatic){ 139 | conf_hoverpause(); 140 | } 141 | 142 | // conf slide animation 143 | if (settings.animtype === 'slide'){ 144 | conf_slide(); 145 | } 146 | 147 | } else { 148 | // Stop automatic animation, because we only have one slide! 149 | settings.automatic = false; 150 | } 151 | 152 | if(settings.usecaptions){ 153 | conf_captions(); 154 | } 155 | 156 | // TODO: need to accomodate random start for slide transition setting 157 | if(settings.animtype === 'slide' && !settings.randomstart){ 158 | state.currentindex = 1; 159 | state.currentslide = 2; 160 | } 161 | 162 | // slide components are hidden by default, show them now 163 | $slider.show(); 164 | $slides.eq(state.currentindex).show(); 165 | 166 | // Finally, if automatic is set to true, kick off the interval 167 | if(settings.automatic){ 168 | state.interval = setInterval(function () { 169 | go(vars.fwd, false); 170 | }, settings.animspeed); 171 | } 172 | 173 | }; 174 | 175 | var conf_responsive = function() { 176 | 177 | responsive.width = $wrapper.outerWidth(); 178 | responsive.ratio = responsive.width/settings.width, 179 | responsive.height = settings.height * responsive.ratio; 180 | 181 | if(settings.animtype === 'fade'){ 182 | 183 | // initial setup 184 | $slides.css({ 185 | 'height' : settings.height, 186 | 'width' : '100%' 187 | }); 188 | $slides.children('img').css({ 189 | 'height' : settings.height, 190 | 'width' : '100%' 191 | }); 192 | $slider.css({ 193 | 'height' : settings.height, 194 | 'width' : '100%' 195 | }); 196 | $wrapper.css({ 197 | 'height' : settings.height, 198 | 'max-width' : settings.width, 199 | 'position' : 'relative' 200 | }); 201 | 202 | if(responsive.width < settings.width){ 203 | 204 | $slides.css({ 205 | 'height' : responsive.height 206 | }); 207 | $slides.children('img').css({ 208 | 'height' : responsive.height 209 | }); 210 | $slider.css({ 211 | 'height' : responsive.height 212 | }); 213 | $wrapper.css({ 214 | 'height' : responsive.height 215 | }); 216 | 217 | } 218 | 219 | $(window).resize(function() { 220 | 221 | // calculate and update dimensions 222 | responsive.width = $wrapper.outerWidth(); 223 | responsive.ratio = responsive.width/settings.width, 224 | responsive.height = settings.height * responsive.ratio; 225 | 226 | $slides.css({ 227 | 'height' : responsive.height 228 | }); 229 | $slides.children('img').css({ 230 | 'height' : responsive.height 231 | }); 232 | $slider.css({ 233 | 'height' : responsive.height 234 | }); 235 | $wrapper.css({ 236 | 'height' : responsive.height 237 | }); 238 | 239 | }); 240 | 241 | } 242 | 243 | if(settings.animtype === 'slide'){ 244 | 245 | // initial setup 246 | $slides.css({ 247 | 'height' : settings.height, 248 | 'width' : settings.width 249 | }); 250 | $slides.children('img').css({ 251 | 'height' : settings.height, 252 | 'width' : settings.width 253 | }); 254 | $slider.css({ 255 | 'height' : settings.height, 256 | 'width' : settings.width * settings.slidecount 257 | }); 258 | $wrapper.css({ 259 | 'height' : settings.height, 260 | 'max-width' : settings.width, 261 | 'position' : 'relative' 262 | }); 263 | 264 | if(responsive.width < settings.width){ 265 | 266 | $slides.css({ 267 | 'height' : responsive.height 268 | }); 269 | $slides.children('img').css({ 270 | 'height' : responsive.height 271 | }); 272 | $slider.css({ 273 | 'height' : responsive.height 274 | }); 275 | $wrapper.css({ 276 | 'height' : responsive.height 277 | }); 278 | 279 | } 280 | 281 | $(window).resize(function() { 282 | 283 | // calculate and update dimensions 284 | responsive.width = $wrapper.outerWidth(), 285 | responsive.ratio = responsive.width/settings.width, 286 | responsive.height = settings.height * responsive.ratio; 287 | 288 | $slides.css({ 289 | 'height' : responsive.height, 290 | 'width' : responsive.width 291 | }); 292 | $slides.children('img').css({ 293 | 'height' : responsive.height, 294 | 'width' : responsive.width 295 | }); 296 | $slider.css({ 297 | 'height' : responsive.height, 298 | 'width' : responsive.width * settings.slidecount 299 | }); 300 | $wrapper.css({ 301 | 'height' : responsive.height 302 | }); 303 | $canvas.css({ 304 | 'height' : responsive.height, 305 | 'width' : responsive.width 306 | }); 307 | 308 | resize_complete(function(){ 309 | go(false,state.currentslide); 310 | }, 200, "some unique string"); 311 | 312 | }); 313 | 314 | } 315 | 316 | }; 317 | 318 | var resize_complete = (function () { 319 | 320 | var timers = {}; 321 | 322 | return function (callback, ms, uniqueId) { 323 | if (!uniqueId) { 324 | uniqueId = "Don't call this twice without a uniqueId"; 325 | } 326 | if (timers[uniqueId]) { 327 | clearTimeout (timers[uniqueId]); 328 | } 329 | timers[uniqueId] = setTimeout(callback, ms); 330 | }; 331 | 332 | })(); 333 | 334 | // enforce fixed sizing on slides, slider and wrapper 335 | var conf_static = function() { 336 | 337 | $slides.css({ 338 | 'height' : settings.height, 339 | 'width' : settings.width 340 | }); 341 | $slider.css({ 342 | 'height' : settings.height, 343 | 'width' : settings.width 344 | }); 345 | $wrapper.css({ 346 | 'height' : settings.height, 347 | 'width' : settings.width, 348 | 'position' : 'relative' 349 | }); 350 | 351 | }; 352 | 353 | var conf_slide = function() { 354 | 355 | // create two extra elements which are clones of the first and last slides 356 | $clone_first = $slides.eq(0).clone(); 357 | $clone_last = $slides.eq(state.slidecount-1).clone(); 358 | 359 | // add them to the DOM where we need them 360 | $clone_first.attr({'data-clone' : 'last', 'data-slide' : 0}).appendTo($slider).show(); 361 | $clone_last.attr({'data-clone' : 'first', 'data-slide' : 0}).prependTo($slider).show(); 362 | 363 | // update the elements object 364 | $slides = $slider.children('li'); 365 | state.slidecount = $slides.length; 366 | 367 | // create a 'canvas' element which is neccessary for the slide animation to work 368 | $canvas = $('<div class="bjqs-wrapper"></div>'); 369 | 370 | // if the slider is responsive && the calculated width is less than the max width 371 | if(settings.responsive && (responsive.width < settings.width)){ 372 | 373 | $canvas.css({ 374 | 'width' : responsive.width, 375 | 'height' : responsive.height, 376 | 'overflow' : 'hidden', 377 | 'position' : 'relative' 378 | }); 379 | 380 | // update the dimensions to the slider to accomodate all the slides side by side 381 | $slider.css({ 382 | 'width' : responsive.width * (state.slidecount + 2), 383 | 'left' : -responsive.width * state.currentslide 384 | }); 385 | 386 | } 387 | else { 388 | 389 | $canvas.css({ 390 | 'width' : settings.width, 391 | 'height' : settings.height, 392 | 'overflow' : 'hidden', 393 | 'position' : 'relative' 394 | }); 395 | 396 | // update the dimensions to the slider to accomodate all the slides side by side 397 | $slider.css({ 398 | 'width' : settings.width * (state.slidecount + 2), 399 | 'left' : -settings.width * state.currentslide 400 | }); 401 | 402 | } 403 | 404 | // add some inline styles which will align our slides for left-right sliding 405 | $slides.css({ 406 | 'float' : 'left', 407 | 'position' : 'relative', 408 | 'display' : 'list-item' 409 | }); 410 | 411 | // 'everything.. in it's right place' 412 | $canvas.prependTo($wrapper); 413 | $slider.appendTo($canvas); 414 | 415 | }; 416 | 417 | var conf_controls = function() { 418 | 419 | // create the elements for the controls 420 | $c_wrapper = $('<ul class="bjqs-controls"></ul>'); 421 | $c_fwd = $('<li class="bjqs-next"><a href="#" data-direction="'+ vars.fwd +'"><span class="fa fa-chevron-right"></span></a></li>'); 422 | $c_prev = $('<li class="bjqs-prev"><a href="#" data-direction="'+ vars.prev +'"><span class="fa fa-chevron-left"></span></a></li>'); 423 | 424 | // bind click events 425 | $c_wrapper.on('click','a',function(e){ 426 | 427 | e.preventDefault(); 428 | var direction = $(this).attr('data-direction'); 429 | 430 | if(!state.animating){ 431 | 432 | if(direction === vars.fwd){ 433 | go(vars.fwd,false); 434 | } 435 | 436 | if(direction === vars.prev){ 437 | go(vars.prev,false); 438 | } 439 | 440 | } 441 | 442 | }); 443 | 444 | // put 'em all together 445 | $c_prev.appendTo($c_wrapper); 446 | $c_fwd.appendTo($c_wrapper); 447 | $c_wrapper.appendTo($wrapper); 448 | 449 | // vertically center the controls 450 | if (settings.centercontrols) { 451 | 452 | $c_wrapper.addClass('v-centered'); 453 | 454 | // calculate offset % for vertical positioning 455 | var offset_px = ($wrapper.height() - $c_fwd.children('a').outerHeight()) / 2, 456 | ratio = (offset_px / settings.height) * 100, 457 | offset = ratio + '%'; 458 | 459 | $c_fwd.find('a').css('top', offset); 460 | $c_prev.find('a').css('top', offset); 461 | 462 | } 463 | 464 | }; 465 | 466 | var conf_markers = function() { 467 | 468 | // create a wrapper for our markers 469 | $m_wrapper = $('<ol class="bjqs-markers"></ol>'); 470 | 471 | // for every slide, create a marker 472 | $.each($slides, function(key, slide){ 473 | 474 | var slidenum = key + 1, 475 | gotoslide = key + 1; 476 | 477 | if(settings.animtype === 'slide'){ 478 | // + 2 to account for clones 479 | gotoslide = key + 2; 480 | } 481 | 482 | var marker = $('<li><a href="#">'+ slidenum +'</a></li>'); 483 | 484 | // set the first marker to be active 485 | if(slidenum === state.currentslide){ marker.addClass('active-marker'); } 486 | 487 | // bind the click event 488 | marker.on('click','a',function(e){ 489 | e.preventDefault(); 490 | if(!state.animating && state.currentslide !== gotoslide){ 491 | go(false,gotoslide); 492 | } 493 | }); 494 | 495 | // add the marker to the wrapper 496 | marker.appendTo($m_wrapper); 497 | 498 | }); 499 | 500 | $m_wrapper.appendTo($wrapper); 501 | $m_markers = $m_wrapper.find('li'); 502 | 503 | // center the markers 504 | if (settings.centermarkers) { 505 | $m_wrapper.addClass('h-centered'); 506 | var offset = (settings.width - $m_wrapper.width()) / 2; 507 | $m_wrapper.css('left', offset); 508 | } 509 | 510 | }; 511 | 512 | var conf_keynav = function() { 513 | 514 | $(document).keyup(function (event) { 515 | 516 | if (!state.paused) { 517 | clearInterval(state.interval); 518 | state.paused = true; 519 | } 520 | 521 | if (!state.animating) { 522 | if (event.keyCode === 39) { 523 | event.preventDefault(); 524 | go(vars.fwd, false); 525 | } else if (event.keyCode === 37) { 526 | event.preventDefault(); 527 | go(vars.prev, false); 528 | } 529 | } 530 | 531 | if (state.paused && settings.automatic) { 532 | state.interval = setInterval(function () { 533 | go(vars.fwd); 534 | }, settings.animspeed); 535 | state.paused = false; 536 | } 537 | 538 | }); 539 | 540 | }; 541 | 542 | var conf_hoverpause = function() { 543 | 544 | $wrapper.hover(function () { 545 | if (!state.paused) { 546 | clearInterval(state.interval); 547 | state.paused = true; 548 | } 549 | }, function () { 550 | if (state.paused) { 551 | state.interval = setInterval(function () { 552 | go(vars.fwd, false); 553 | }, settings.animspeed); 554 | state.paused = false; 555 | } 556 | }); 557 | 558 | }; 559 | 560 | var conf_captions = function() { 561 | 562 | $.each($slides, function (key, slide) { 563 | 564 | var caption = $(slide).children('img:first-child').attr('title'); 565 | 566 | // Account for images wrapped in links 567 | if(!caption){ 568 | caption = $(slide).children('a').find('img:first-child').attr('title'); 569 | } 570 | 571 | if (caption) { 572 | caption = $('<p class="bjqs-caption">' + caption + '</p>'); 573 | caption.appendTo($(slide)); 574 | } 575 | 576 | }); 577 | 578 | }; 579 | 580 | var conf_random = function() { 581 | 582 | var rand = Math.floor(Math.random() * state.slidecount) + 1; 583 | state.currentslide = rand; 584 | state.currentindex = rand-1; 585 | 586 | }; 587 | 588 | var set_next = function(direction) { 589 | 590 | if(direction === vars.fwd){ 591 | 592 | if($slides.eq(state.currentindex).next().length){ 593 | state.nextindex = state.currentindex + 1; 594 | state.nextslide = state.currentslide + 1; 595 | } 596 | else{ 597 | state.nextindex = 0; 598 | state.nextslide = 1; 599 | } 600 | 601 | } 602 | else{ 603 | 604 | if($slides.eq(state.currentindex).prev().length){ 605 | state.nextindex = state.currentindex - 1; 606 | state.nextslide = state.currentslide - 1; 607 | } 608 | else{ 609 | state.nextindex = state.slidecount - 1; 610 | state.nextslide = state.slidecount; 611 | } 612 | 613 | } 614 | 615 | }; 616 | 617 | var go = function(direction, position) { 618 | 619 | // only if we're not already doing things 620 | if(!state.animating){ 621 | 622 | // doing things 623 | state.animating = true; 624 | 625 | if(position){ 626 | state.nextslide = position; 627 | state.nextindex = position-1; 628 | } 629 | else{ 630 | set_next(direction); 631 | } 632 | 633 | // fade animation 634 | if(settings.animtype === 'fade'){ 635 | 636 | if(settings.showmarkers){ 637 | $m_markers.removeClass('active-marker'); 638 | $m_markers.eq(state.nextindex).addClass('active-marker'); 639 | } 640 | 641 | // fade out current 642 | $slides.eq(state.currentindex).fadeOut(settings.animduration); 643 | // fade in next 644 | $slides.eq(state.nextindex).fadeIn(settings.animduration, function(){ 645 | 646 | // update state variables 647 | state.animating = false; 648 | state.currentslide = state.nextslide; 649 | state.currentindex = state.nextindex; 650 | 651 | }); 652 | 653 | } 654 | 655 | // slide animation 656 | if(settings.animtype === 'slide'){ 657 | 658 | if(settings.showmarkers){ 659 | 660 | var markerindex = state.nextindex-1; 661 | 662 | if(markerindex === state.slidecount-2){ 663 | markerindex = 0; 664 | } 665 | else if(markerindex === -1){ 666 | markerindex = state.slidecount-3; 667 | } 668 | 669 | $m_markers.removeClass('active-marker'); 670 | $m_markers.eq(markerindex).addClass('active-marker'); 671 | } 672 | 673 | // if the slider is responsive && the calculated width is less than the max width 674 | if(settings.responsive && ( responsive.width < settings.width ) ){ 675 | state.slidewidth = responsive.width; 676 | } 677 | else{ 678 | state.slidewidth = settings.width; 679 | } 680 | 681 | $slider.animate({'left': -state.nextindex * state.slidewidth }, settings.animduration, function(){ 682 | 683 | state.currentslide = state.nextslide; 684 | state.currentindex = state.nextindex; 685 | 686 | // is the current slide a clone? 687 | if($slides.eq(state.currentindex).attr('data-clone') === 'last'){ 688 | 689 | // affirmative, at the last slide (clone of first) 690 | $slider.css({'left': -state.slidewidth }); 691 | state.currentslide = 2; 692 | state.currentindex = 1; 693 | 694 | } 695 | else if($slides.eq(state.currentindex).attr('data-clone') === 'first'){ 696 | 697 | // affirmative, at the fist slide (clone of last) 698 | $slider.css({'left': -state.slidewidth *(state.slidecount - 2)}); 699 | state.currentslide = state.slidecount - 1; 700 | state.currentindex = state.slidecount - 2; 701 | 702 | } 703 | 704 | state.animating = false; 705 | 706 | }); 707 | 708 | } 709 | 710 | } 711 | 712 | }; 713 | 714 | // lets get the party started :) 715 | init(); 716 | 717 | }; 718 | 719 | })(jQuery); 720 | -------------------------------------------------------------------------------- /files/assets/js/bjqs-1.3.min.js: -------------------------------------------------------------------------------- 1 | /* 2 | * Basic jQuery Slider plug-in v.1.3 3 | * 4 | * http://www.basic-slider.com 5 | * 6 | * Authored by John Cobb 7 | * http://www.johncobb.name 8 | * @john0514 9 | * 10 | * Copyright 2011, John Cobb 11 | * License: GNU General Public License, version 3 (GPL-3.0) 12 | * http://www.opensource.org/licenses/gpl-3.0.html 13 | * 14 | */(function(e){"use strict";e.fn.bjqs=function(t){var n={width:700,height:300,animtype:"fade",animduration:450,animspeed:4e3,automatic:!0,showcontrols:!0,centercontrols:!0,nexttext:"Next",prevtext:"Prev",showmarkers:!0,centermarkers:!0,keyboardnav:!0,hoverpause:!0,usecaptions:!0,randomstart:!1,responsive:!1},r=e.extend({},n,t),i=this,s=i.find("ul.bjqs"),o=s.children("li"),u=null,a=null,f=null,l=null,c=null,h=null,p=null,d=null,v={slidecount:o.length,animating:!1,paused:!1,currentslide:1,nextslide:0,currentindex:0,nextindex:0,interval:null},m={width:null,height:null,ratio:null},g={fwd:"forward",prev:"previous"},y=function(){o.addClass("bjqs-slide");r.responsive?b():E();if(v.slidecount>1){r.randomstart&&L();r.showcontrols&&x();r.showmarkers&&T();r.keyboardnav&&N();r.hoverpause&&r.automatic&&C();r.animtype==="slide"&&S()}r.usecaptions&&k();if(r.animtype==="slide"&&!r.randomstart){v.currentindex=1;v.currentslide=2}s.show();o.eq(v.currentindex).show();r.automatic&&(v.interval=setInterval(function(){O(g.fwd,!1)},r.animspeed))},b=function(){m.width=i.outerWidth();m.ratio=m.width/r.width,m.height=r.height*m.ratio;if(r.animtype==="fade"){o.css({height:r.height,width:"100%"});o.children("img").css({height:r.height,width:"100%"});s.css({height:r.height,width:"100%"});i.css({height:r.height,"max-width":r.width,position:"relative"});if(m.width<r.width){o.css({height:m.height});o.children("img").css({height:m.height});s.css({height:m.height});i.css({height:m.height})}e(window).resize(function(){m.width=i.outerWidth();m.ratio=m.width/r.width,m.height=r.height*m.ratio;o.css({height:m.height});o.children("img").css({height:m.height});s.css({height:m.height});i.css({height:m.height})})}if(r.animtype==="slide"){o.css({height:r.height,width:r.width});o.children("img").css({height:r.height,width:r.width});s.css({height:r.height,width:r.width*r.slidecount});i.css({height:r.height,"max-width":r.width,position:"relative"});if(m.width<r.width){o.css({height:m.height});o.children("img").css({height:m.height});s.css({height:m.height});i.css({height:m.height})}e(window).resize(function(){m.width=i.outerWidth(),m.ratio=m.width/r.width,m.height=r.height*m.ratio;o.css({height:m.height,width:m.width});o.children("img").css({height:m.height,width:m.width});s.css({height:m.height,width:m.width*r.slidecount});i.css({height:m.height});h.css({height:m.height,width:m.width});w(function(){O(!1,v.currentslide)},200,"some unique string")})}},w=function(){var e={};return function(t,n,r){r||(r="Don't call this twice without a uniqueId");e[r]&&clearTimeout(e[r]);e[r]=setTimeout(t,n)}}(),E=function(){o.css({height:r.height,width:r.width});s.css({height:r.height,width:r.width});i.css({height:r.height,width:r.width,position:"relative"})},S=function(){p=o.eq(0).clone();d=o.eq(v.slidecount-1).clone();p.attr({"data-clone":"last","data-slide":0}).appendTo(s).show();d.attr({"data-clone":"first","data-slide":0}).prependTo(s).show();o=s.children("li");v.slidecount=o.length;h=e('<div class="bjqs-wrapper"></div>');if(r.responsive&&m.width<r.width){h.css({width:m.width,height:m.height,overflow:"hidden",position:"relative"});s.css({width:m.width*(v.slidecount+2),left:-m.width*v.currentslide})}else{h.css({width:r.width,height:r.height,overflow:"hidden",position:"relative"});s.css({width:r.width*(v.slidecount+2),left:-r.width*v.currentslide})}o.css({"float":"left",position:"relative",display:"list-item"});h.prependTo(i);s.appendTo(h)},x=function(){u=e('<ul class="bjqs-controls"></ul>');a=e('<li class="bjqs-next"><a href="#" data-direction="'+g.fwd+'"><span class="fa fa-caret-right"></span></a></li>');f=e('<li class="bjqs-prev"><a href="#" data-direction="'+g.prev+'"><span class="fa fa-caret-left"></span></a></li>');u.on("click","a",function(t){t.preventDefault();var n=e(this).attr("data-direction");if(!v.animating){n===g.fwd&&O(g.fwd,!1);n===g.prev&&O(g.prev,!1)}});f.appendTo(u);a.appendTo(u);u.appendTo(i);if(r.centercontrols){u.addClass("v-centered");var t=(i.height()-a.children("a").outerHeight())/2,n=t/r.height*100,s=n+"%";a.find("a").css("top",s);f.find("a").css("top",s)}},T=function(){l=e('<ol class="bjqs-markers"></ol>');e.each(o,function(t,n){var i=t+1,s=t+1;r.animtype==="slide"&&(s=t+2);var o=e('<li><a href="#">'+i+"</a></li>");i===v.currentslide&&o.addClass("active-marker");o.on("click","a",function(e){e.preventDefault();!v.animating&&v.currentslide!==s&&O(!1,s)});o.appendTo(l)});l.appendTo(i);c=l.find("li");if(r.centermarkers){l.addClass("h-centered");var t=(r.width-l.width())/2;l.css("left",t)}},N=function(){e(document).keyup(function(e){if(!v.paused){clearInterval(v.interval);v.paused=!0}if(!v.animating)if(e.keyCode===39){e.preventDefault();O(g.fwd,!1)}else if(e.keyCode===37){e.preventDefault();O(g.prev,!1)}if(v.paused&&r.automatic){v.interval=setInterval(function(){O(g.fwd)},r.animspeed);v.paused=!1}})},C=function(){i.hover(function(){if(!v.paused){clearInterval(v.interval);v.paused=!0}},function(){if(v.paused){v.interval=setInterval(function(){O(g.fwd,!1)},r.animspeed);v.paused=!1}})},k=function(){e.each(o,function(t,n){var r=e(n).children("img:first-child").attr("title");r||(r=e(n).children("a").find("img:first-child").attr("title"));if(r){r=e('<p class="bjqs-caption">'+r+"</p>");r.appendTo(e(n))}})},L=function(){var e=Math.floor(Math.random()*v.slidecount)+1;v.currentslide=e;v.currentindex=e-1},A=function(e){if(e===g.fwd)if(o.eq(v.currentindex).next().length){v.nextindex=v.currentindex+1;v.nextslide=v.currentslide+1}else{v.nextindex=0;v.nextslide=1}else if(o.eq(v.currentindex).prev().length){v.nextindex=v.currentindex-1;v.nextslide=v.currentslide-1}else{v.nextindex=v.slidecount-1;v.nextslide=v.slidecount}},O=function(e,t){if(!v.animating){v.animating=!0;if(t){v.nextslide=t;v.nextindex=t-1}else A(e);if(r.animtype==="fade"){if(r.showmarkers){c.removeClass("active-marker");c.eq(v.nextindex).addClass("active-marker")}o.eq(v.currentindex).fadeOut(r.animduration);o.eq(v.nextindex).fadeIn(r.animduration,function(){v.animating=!1;v.currentslide=v.nextslide;v.currentindex=v.nextindex})}if(r.animtype==="slide"){if(r.showmarkers){var n=v.nextindex-1;n===v.slidecount-2?n=0:n===-1&&(n=v.slidecount-3);c.removeClass("active-marker");c.eq(n).addClass("active-marker")}r.responsive&&m.width<r.width?v.slidewidth=m.width:v.slidewidth=r.width;s.animate({left:-v.nextindex*v.slidewidth},r.animduration,function(){v.currentslide=v.nextslide;v.currentindex=v.nextindex;if(o.eq(v.currentindex).attr("data-clone")==="last"){s.css({left:-v.slidewidth});v.currentslide=2;v.currentindex=1}else if(o.eq(v.currentindex).attr("data-clone")==="first"){s.css({left:-v.slidewidth*(v.slidecount-2)});v.currentslide=v.slidecount-1;v.currentindex=v.slidecount-2}v.animating=!1})}}};y()}})(jQuery); 15 | -------------------------------------------------------------------------------- /files/assets/js/bootstrap.3.3.6.min.js: -------------------------------------------------------------------------------- 1 | /*! 2 | * Bootstrap v3.3.6 (http://getbootstrap.com) 3 | * Copyright 2011-2015 Twitter, Inc. 4 | * Licensed under the MIT license 5 | */ 6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap's JavaScript requires jQuery");+function(a){"use strict";var b=a.fn.jquery.split(" ")[0].split(".");if(b[0]<2&&b[1]<9||1==b[0]&&9==b[1]&&b[2]<1||b[0]>2)throw new Error("Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 3")}(jQuery),+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one("bsTransitionEnd",function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b(),a.support.transition&&(a.event.special.bsTransitionEnd={bindType:a.support.transition.end,delegateType:a.support.transition.end,handle:function(b){return a(b.target).is(this)?b.handleObj.handler.apply(this,arguments):void 0}})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var c=a(this),e=c.data("bs.alert");e||c.data("bs.alert",e=new d(this)),"string"==typeof b&&e[b].call(c)})}var c='[data-dismiss="alert"]',d=function(b){a(b).on("click",c,this.close)};d.VERSION="3.3.6",d.TRANSITION_DURATION=150,d.prototype.close=function(b){function c(){g.detach().trigger("closed.bs.alert").remove()}var e=a(this),f=e.attr("data-target");f||(f=e.attr("href"),f=f&&f.replace(/.*(?=#[^\s]*$)/,""));var g=a(f);b&&b.preventDefault(),g.length||(g=e.closest(".alert")),g.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(g.removeClass("in"),a.support.transition&&g.hasClass("fade")?g.one("bsTransitionEnd",c).emulateTransitionEnd(d.TRANSITION_DURATION):c())};var e=a.fn.alert;a.fn.alert=b,a.fn.alert.Constructor=d,a.fn.alert.noConflict=function(){return a.fn.alert=e,this},a(document).on("click.bs.alert.data-api",c,d.prototype.close)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof b&&b;e||d.data("bs.button",e=new c(this,f)),"toggle"==b?e.toggle():b&&e.setState(b)})}var c=function(b,d){this.$element=a(b),this.options=a.extend({},c.DEFAULTS,d),this.isLoading=!1};c.VERSION="3.3.6",c.DEFAULTS={loadingText:"loading..."},c.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",null==f.resetText&&d.data("resetText",d[e]()),setTimeout(a.proxy(function(){d[e](null==f[b]?this.options[b]:f[b]),"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},c.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")?(c.prop("checked")&&(a=!1),b.find(".active").removeClass("active"),this.$element.addClass("active")):"checkbox"==c.prop("type")&&(c.prop("checked")!==this.$element.hasClass("active")&&(a=!1),this.$element.toggleClass("active")),c.prop("checked",this.$element.hasClass("active")),a&&c.trigger("change")}else this.$element.attr("aria-pressed",!this.$element.hasClass("active")),this.$element.toggleClass("active")};var d=a.fn.button;a.fn.button=b,a.fn.button.Constructor=c,a.fn.button.noConflict=function(){return a.fn.button=d,this},a(document).on("click.bs.button.data-api",'[data-toggle^="button"]',function(c){var d=a(c.target);d.hasClass("btn")||(d=d.closest(".btn")),b.call(d,"toggle"),a(c.target).is('input[type="radio"]')||a(c.target).is('input[type="checkbox"]')||c.preventDefault()}).on("focus.bs.button.data-api blur.bs.button.data-api",'[data-toggle^="button"]',function(b){a(b.target).closest(".btn").toggleClass("focus",/^focus(in)?$/.test(b.type))})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},c.DEFAULTS,d.data(),"object"==typeof b&&b),g="string"==typeof b?b:f.slide;e||d.data("bs.carousel",e=new c(this,f)),"number"==typeof b?e.to(b):g?e[g]():f.interval&&e.pause().cycle()})}var c=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on("keydown.bs.carousel",a.proxy(this.keydown,this)),"hover"==this.options.pause&&!("ontouchstart"in document.documentElement)&&this.$element.on("mouseenter.bs.carousel",a.proxy(this.pause,this)).on("mouseleave.bs.carousel",a.proxy(this.cycle,this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=600,c.DEFAULTS={interval:5e3,pause:"hover",wrap:!0,keyboard:!0},c.prototype.keydown=function(a){if(!/input|textarea/i.test(a.target.tagName)){switch(a.which){case 37:this.prev();break;case 39:this.next();break;default:return}a.preventDefault()}},c.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},c.prototype.getItemIndex=function(a){return this.$items=a.parent().children(".item"),this.$items.index(a||this.$active)},c.prototype.getItemForDirection=function(a,b){var c=this.getItemIndex(b),d="prev"==a&&0===c||"next"==a&&c==this.$items.length-1;if(d&&!this.options.wrap)return b;var e="prev"==a?-1:1,f=(c+e)%this.$items.length;return this.$items.eq(f)},c.prototype.to=function(a){var b=this,c=this.getItemIndex(this.$active=this.$element.find(".item.active"));return a>this.$items.length-1||0>a?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){b.to(a)}):c==a?this.pause().cycle():this.slide(a>c?"next":"prev",this.$items.eq(a))},c.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},c.prototype.next=function(){return this.sliding?void 0:this.slide("next")},c.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},c.prototype.slide=function(b,d){var e=this.$element.find(".item.active"),f=d||this.getItemForDirection(b,e),g=this.interval,h="next"==b?"left":"right",i=this;if(f.hasClass("active"))return this.sliding=!1;var j=f[0],k=a.Event("slide.bs.carousel",{relatedTarget:j,direction:h});if(this.$element.trigger(k),!k.isDefaultPrevented()){if(this.sliding=!0,g&&this.pause(),this.$indicators.length){this.$indicators.find(".active").removeClass("active");var l=a(this.$indicators.children()[this.getItemIndex(f)]);l&&l.addClass("active")}var m=a.Event("slid.bs.carousel",{relatedTarget:j,direction:h});return a.support.transition&&this.$element.hasClass("slide")?(f.addClass(b),f[0].offsetWidth,e.addClass(h),f.addClass(h),e.one("bsTransitionEnd",function(){f.removeClass([b,h].join(" ")).addClass("active"),e.removeClass(["active",h].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger(m)},0)}).emulateTransitionEnd(c.TRANSITION_DURATION)):(e.removeClass("active"),f.addClass("active"),this.sliding=!1,this.$element.trigger(m)),g&&this.cycle(),this}};var d=a.fn.carousel;a.fn.carousel=b,a.fn.carousel.Constructor=c,a.fn.carousel.noConflict=function(){return a.fn.carousel=d,this};var e=function(c){var d,e=a(this),f=a(e.attr("data-target")||(d=e.attr("href"))&&d.replace(/.*(?=#[^\s]+$)/,""));if(f.hasClass("carousel")){var g=a.extend({},f.data(),e.data()),h=e.attr("data-slide-to");h&&(g.interval=!1),b.call(f,g),h&&f.data("bs.carousel").to(h),c.preventDefault()}};a(document).on("click.bs.carousel.data-api","[data-slide]",e).on("click.bs.carousel.data-api","[data-slide-to]",e),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var c=a(this);b.call(c,c.data())})})}(jQuery),+function(a){"use strict";function b(b){var c,d=b.attr("data-target")||(c=b.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"");return a(d)}function c(b){return this.each(function(){var c=a(this),e=c.data("bs.collapse"),f=a.extend({},d.DEFAULTS,c.data(),"object"==typeof b&&b);!e&&f.toggle&&/show|hide/.test(b)&&(f.toggle=!1),e||c.data("bs.collapse",e=new d(this,f)),"string"==typeof b&&e[b]()})}var d=function(b,c){this.$element=a(b),this.options=a.extend({},d.DEFAULTS,c),this.$trigger=a('[data-toggle="collapse"][href="#'+b.id+'"],[data-toggle="collapse"][data-target="#'+b.id+'"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};d.VERSION="3.3.6",d.TRANSITION_DURATION=350,d.DEFAULTS={toggle:!0},d.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},d.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b,e=this.$parent&&this.$parent.children(".panel").children(".in, .collapsing");if(!(e&&e.length&&(b=e.data("bs.collapse"),b&&b.transitioning))){var f=a.Event("show.bs.collapse");if(this.$element.trigger(f),!f.isDefaultPrevented()){e&&e.length&&(c.call(e,"hide"),b||e.data("bs.collapse",null));var g=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[g](0).attr("aria-expanded",!0),this.$trigger.removeClass("collapsed").attr("aria-expanded",!0),this.transitioning=1;var h=function(){this.$element.removeClass("collapsing").addClass("collapse in")[g](""),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return h.call(this);var i=a.camelCase(["scroll",g].join("-"));this.$element.one("bsTransitionEnd",a.proxy(h,this)).emulateTransitionEnd(d.TRANSITION_DURATION)[g](this.$element[0][i])}}}},d.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse in").attr("aria-expanded",!1),this.$trigger.addClass("collapsed").attr("aria-expanded",!1),this.transitioning=1;var e=function(){this.transitioning=0,this.$element.removeClass("collapsing").addClass("collapse").trigger("hidden.bs.collapse")};return a.support.transition?void this.$element[c](0).one("bsTransitionEnd",a.proxy(e,this)).emulateTransitionEnd(d.TRANSITION_DURATION):e.call(this)}}},d.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()},d.prototype.getParent=function(){return a(this.options.parent).find('[data-toggle="collapse"][data-parent="'+this.options.parent+'"]').each(a.proxy(function(c,d){var e=a(d);this.addAriaAndCollapsedClass(b(e),e)},this)).end()},d.prototype.addAriaAndCollapsedClass=function(a,b){var c=a.hasClass("in");a.attr("aria-expanded",c),b.toggleClass("collapsed",!c).attr("aria-expanded",c)};var e=a.fn.collapse;a.fn.collapse=c,a.fn.collapse.Constructor=d,a.fn.collapse.noConflict=function(){return a.fn.collapse=e,this},a(document).on("click.bs.collapse.data-api",'[data-toggle="collapse"]',function(d){var e=a(this);e.attr("data-target")||d.preventDefault();var f=b(e),g=f.data("bs.collapse"),h=g?"toggle":e.data();c.call(f,h)})}(jQuery),+function(a){"use strict";function b(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}function c(c){c&&3===c.which||(a(e).remove(),a(f).each(function(){var d=a(this),e=b(d),f={relatedTarget:this};e.hasClass("open")&&(c&&"click"==c.type&&/input|textarea/i.test(c.target.tagName)&&a.contains(e[0],c.target)||(e.trigger(c=a.Event("hide.bs.dropdown",f)),c.isDefaultPrevented()||(d.attr("aria-expanded","false"),e.removeClass("open").trigger(a.Event("hidden.bs.dropdown",f)))))}))}function d(b){return this.each(function(){var c=a(this),d=c.data("bs.dropdown");d||c.data("bs.dropdown",d=new g(this)),"string"==typeof b&&d[b].call(c)})}var e=".dropdown-backdrop",f='[data-toggle="dropdown"]',g=function(b){a(b).on("click.bs.dropdown",this.toggle)};g.VERSION="3.3.6",g.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=b(e),g=f.hasClass("open");if(c(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a(document.createElement("div")).addClass("dropdown-backdrop").insertAfter(a(this)).on("click",c);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;e.trigger("focus").attr("aria-expanded","true"),f.toggleClass("open").trigger(a.Event("shown.bs.dropdown",h))}return!1}},g.prototype.keydown=function(c){if(/(38|40|27|32)/.test(c.which)&&!/input|textarea/i.test(c.target.tagName)){var d=a(this);if(c.preventDefault(),c.stopPropagation(),!d.is(".disabled, :disabled")){var e=b(d),g=e.hasClass("open");if(!g&&27!=c.which||g&&27==c.which)return 27==c.which&&e.find(f).trigger("focus"),d.trigger("click");var h=" li:not(.disabled):visible a",i=e.find(".dropdown-menu"+h);if(i.length){var j=i.index(c.target);38==c.which&&j>0&&j--,40==c.which&&j<i.length-1&&j++,~j||(j=0),i.eq(j).trigger("focus")}}}};var h=a.fn.dropdown;a.fn.dropdown=d,a.fn.dropdown.Constructor=g,a.fn.dropdown.noConflict=function(){return a.fn.dropdown=h,this},a(document).on("click.bs.dropdown.data-api",c).on("click.bs.dropdown.data-api",".dropdown form",function(a){a.stopPropagation()}).on("click.bs.dropdown.data-api",f,g.prototype.toggle).on("keydown.bs.dropdown.data-api",f,g.prototype.keydown).on("keydown.bs.dropdown.data-api",".dropdown-menu",g.prototype.keydown)}(jQuery),+function(a){"use strict";function b(b,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},c.DEFAULTS,e.data(),"object"==typeof b&&b);f||e.data("bs.modal",f=new c(this,g)),"string"==typeof b?f[b](d):g.show&&f.show(d)})}var c=function(b,c){this.options=c,this.$body=a(document.body),this.$element=a(b),this.$dialog=this.$element.find(".modal-dialog"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(".modal-content").load(this.options.remote,a.proxy(function(){this.$element.trigger("loaded.bs.modal")},this))};c.VERSION="3.3.6",c.TRANSITION_DURATION=300,c.BACKDROP_TRANSITION_DURATION=150,c.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},c.prototype.toggle=function(a){return this.isShown?this.hide():this.show(a)},c.prototype.show=function(b){var d=this,e=a.Event("show.bs.modal",{relatedTarget:b});this.$element.trigger(e),this.isShown||e.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass("modal-open"),this.escape(),this.resize(),this.$element.on("click.dismiss.bs.modal",'[data-dismiss="modal"]',a.proxy(this.hide,this)),this.$dialog.on("mousedown.dismiss.bs.modal",function(){d.$element.one("mouseup.dismiss.bs.modal",function(b){a(b.target).is(d.$element)&&(d.ignoreBackdropClick=!0)})}),this.backdrop(function(){var e=a.support.transition&&d.$element.hasClass("fade");d.$element.parent().length||d.$element.appendTo(d.$body),d.$element.show().scrollTop(0),d.adjustDialog(),e&&d.$element[0].offsetWidth,d.$element.addClass("in"),d.enforceFocus();var f=a.Event("shown.bs.modal",{relatedTarget:b});e?d.$dialog.one("bsTransitionEnd",function(){d.$element.trigger("focus").trigger(f)}).emulateTransitionEnd(c.TRANSITION_DURATION):d.$element.trigger("focus").trigger(f)}))},c.prototype.hide=function(b){b&&b.preventDefault(),b=a.Event("hide.bs.modal"),this.$element.trigger(b),this.isShown&&!b.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),a(document).off("focusin.bs.modal"),this.$element.removeClass("in").off("click.dismiss.bs.modal").off("mouseup.dismiss.bs.modal"),this.$dialog.off("mousedown.dismiss.bs.modal"),a.support.transition&&this.$element.hasClass("fade")?this.$element.one("bsTransitionEnd",a.proxy(this.hideModal,this)).emulateTransitionEnd(c.TRANSITION_DURATION):this.hideModal())},c.prototype.enforceFocus=function(){a(document).off("focusin.bs.modal").on("focusin.bs.modal",a.proxy(function(a){this.$element[0]===a.target||this.$element.has(a.target).length||this.$element.trigger("focus")},this))},c.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on("keydown.dismiss.bs.modal",a.proxy(function(a){27==a.which&&this.hide()},this)):this.isShown||this.$element.off("keydown.dismiss.bs.modal")},c.prototype.resize=function(){this.isShown?a(window).on("resize.bs.modal",a.proxy(this.handleUpdate,this)):a(window).off("resize.bs.modal")},c.prototype.hideModal=function(){var a=this;this.$element.hide(),this.backdrop(function(){a.$body.removeClass("modal-open"),a.resetAdjustments(),a.resetScrollbar(),a.$element.trigger("hidden.bs.modal")})},c.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},c.prototype.backdrop=function(b){var d=this,e=this.$element.hasClass("fade")?"fade":"";if(this.isShown&&this.options.backdrop){var f=a.support.transition&&e;if(this.$backdrop=a(document.createElement("div")).addClass("modal-backdrop "+e).appendTo(this.$body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){return this.ignoreBackdropClick?void(this.ignoreBackdropClick=!1):void(a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus():this.hide()))},this)),f&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;f?this.$backdrop.one("bsTransitionEnd",b).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):b()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass("in");var g=function(){d.removeBackdrop(),b&&b()};a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one("bsTransitionEnd",g).emulateTransitionEnd(c.BACKDROP_TRANSITION_DURATION):g()}else b&&b()},c.prototype.handleUpdate=function(){this.adjustDialog()},c.prototype.adjustDialog=function(){var a=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&a?this.scrollbarWidth:"",paddingRight:this.bodyIsOverflowing&&!a?this.scrollbarWidth:""})},c.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:"",paddingRight:""})},c.prototype.checkScrollbar=function(){var a=window.innerWidth;if(!a){var b=document.documentElement.getBoundingClientRect();a=b.right-Math.abs(b.left)}this.bodyIsOverflowing=document.body.clientWidth<a,this.scrollbarWidth=this.measureScrollbar()},c.prototype.setScrollbar=function(){var a=parseInt(this.$body.css("padding-right")||0,10);this.originalBodyPad=document.body.style.paddingRight||"",this.bodyIsOverflowing&&this.$body.css("padding-right",a+this.scrollbarWidth)},c.prototype.resetScrollbar=function(){this.$body.css("padding-right",this.originalBodyPad)},c.prototype.measureScrollbar=function(){var a=document.createElement("div");a.className="modal-scrollbar-measure",this.$body.append(a);var b=a.offsetWidth-a.clientWidth;return this.$body[0].removeChild(a),b};var d=a.fn.modal;a.fn.modal=b,a.fn.modal.Constructor=c,a.fn.modal.noConflict=function(){return a.fn.modal=d,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(c){var d=a(this),e=d.attr("href"),f=a(d.attr("data-target")||e&&e.replace(/.*(?=#[^\s]+$)/,"")),g=f.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(e)&&e},f.data(),d.data());d.is("a")&&c.preventDefault(),f.one("show.bs.modal",function(a){a.isDefaultPrevented()||f.one("hidden.bs.modal",function(){d.is(":visible")&&d.trigger("focus")})}),b.call(f,g,this)})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tooltip"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.tooltip",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init("tooltip",a,b)};c.VERSION="3.3.6",c.TRANSITION_DURATION=150,c.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'<div class="tooltip" role="tooltip"><div class="tooltip-arrow"></div><div class="tooltip-inner"></div></div>',trigger:"hover focus",title:"",delay:0,html:!1,container:!1,viewport:{selector:"body",padding:0}},c.prototype.init=function(b,c,d){if(this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d),this.$viewport=this.options.viewport&&a(a.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error("`selector` option must be specified when initializing "+this.type+" on the window.document object!");for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},c.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},c.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusin"==b.type?"focus":"hover"]=!0),c.tip().hasClass("in")||"in"==c.hoverState?void(c.hoverState="in"):(clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show())},c.prototype.isInStateTrue=function(){for(var a in this.inState)if(this.inState[a])return!0;return!1},c.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget).data("bs."+this.type);return c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c)),b instanceof a.Event&&(c.inState["focusout"==b.type?"focus":"hover"]=!1),c.isInStateTrue()?void 0:(clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide())},c.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(b);var d=a.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(b.isDefaultPrevented()||!d)return;var e=this,f=this.tip(),g=this.getUID(this.type);this.setContent(),f.attr("id",g),this.$element.attr("aria-describedby",g),this.options.animation&&f.addClass("fade");var h="function"==typeof this.options.placement?this.options.placement.call(this,f[0],this.$element[0]):this.options.placement,i=/\s?auto?\s?/i,j=i.test(h);j&&(h=h.replace(i,"")||"top"),f.detach().css({top:0,left:0,display:"block"}).addClass(h).data("bs."+this.type,this),this.options.container?f.appendTo(this.options.container):f.insertAfter(this.$element),this.$element.trigger("inserted.bs."+this.type);var k=this.getPosition(),l=f[0].offsetWidth,m=f[0].offsetHeight;if(j){var n=h,o=this.getPosition(this.$viewport);h="bottom"==h&&k.bottom+m>o.bottom?"top":"top"==h&&k.top-m<o.top?"bottom":"right"==h&&k.right+l>o.width?"left":"left"==h&&k.left-l<o.left?"right":h,f.removeClass(n).addClass(h)}var p=this.getCalculatedOffset(h,k,l,m);this.applyPlacement(p,h);var q=function(){var a=e.hoverState;e.$element.trigger("shown.bs."+e.type),e.hoverState=null,"out"==a&&e.leave(e)};a.support.transition&&this.$tip.hasClass("fade")?f.one("bsTransitionEnd",q).emulateTransitionEnd(c.TRANSITION_DURATION):q()}},c.prototype.applyPlacement=function(b,c){var d=this.tip(),e=d[0].offsetWidth,f=d[0].offsetHeight,g=parseInt(d.css("margin-top"),10),h=parseInt(d.css("margin-left"),10);isNaN(g)&&(g=0),isNaN(h)&&(h=0),b.top+=g,b.left+=h,a.offset.setOffset(d[0],a.extend({using:function(a){d.css({top:Math.round(a.top),left:Math.round(a.left)})}},b),0),d.addClass("in");var i=d[0].offsetWidth,j=d[0].offsetHeight;"top"==c&&j!=f&&(b.top=b.top+f-j);var k=this.getViewportAdjustedDelta(c,b,i,j);k.left?b.left+=k.left:b.top+=k.top;var l=/top|bottom/.test(c),m=l?2*k.left-e+i:2*k.top-f+j,n=l?"offsetWidth":"offsetHeight";d.offset(b),this.replaceArrow(m,d[0][n],l)},c.prototype.replaceArrow=function(a,b,c){this.arrow().css(c?"left":"top",50*(1-a/b)+"%").css(c?"top":"left","")},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle();a.find(".tooltip-inner")[this.options.html?"html":"text"](b),a.removeClass("fade in top bottom left right")},c.prototype.hide=function(b){function d(){"in"!=e.hoverState&&f.detach(),e.$element.removeAttr("aria-describedby").trigger("hidden.bs."+e.type),b&&b()}var e=this,f=a(this.$tip),g=a.Event("hide.bs."+this.type);return this.$element.trigger(g),g.isDefaultPrevented()?void 0:(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one("bsTransitionEnd",d).emulateTransitionEnd(c.TRANSITION_DURATION):d(),this.hoverState=null,this)},c.prototype.fixTitle=function(){var a=this.$element;(a.attr("title")||"string"!=typeof a.attr("data-original-title"))&&a.attr("data-original-title",a.attr("title")||"").attr("title","")},c.prototype.hasContent=function(){return this.getTitle()},c.prototype.getPosition=function(b){b=b||this.$element;var c=b[0],d="BODY"==c.tagName,e=c.getBoundingClientRect();null==e.width&&(e=a.extend({},e,{width:e.right-e.left,height:e.bottom-e.top}));var f=d?{top:0,left:0}:b.offset(),g={scroll:d?document.documentElement.scrollTop||document.body.scrollTop:b.scrollTop()},h=d?{width:a(window).width(),height:a(window).height()}:null;return a.extend({},e,g,h,f)},c.prototype.getCalculatedOffset=function(a,b,c,d){return"bottom"==a?{top:b.top+b.height,left:b.left+b.width/2-c/2}:"top"==a?{top:b.top-d,left:b.left+b.width/2-c/2}:"left"==a?{top:b.top+b.height/2-d/2,left:b.left-c}:{top:b.top+b.height/2-d/2,left:b.left+b.width}},c.prototype.getViewportAdjustedDelta=function(a,b,c,d){var e={top:0,left:0};if(!this.$viewport)return e;var f=this.options.viewport&&this.options.viewport.padding||0,g=this.getPosition(this.$viewport);if(/right|left/.test(a)){var h=b.top-f-g.scroll,i=b.top+f-g.scroll+d;h<g.top?e.top=g.top-h:i>g.top+g.height&&(e.top=g.top+g.height-i)}else{var j=b.left-f,k=b.left+f+c;j<g.left?e.left=g.left-j:k>g.right&&(e.left=g.left+g.width-k)}return e},c.prototype.getTitle=function(){var a,b=this.$element,c=this.options;return a=b.attr("data-original-title")||("function"==typeof c.title?c.title.call(b[0]):c.title)},c.prototype.getUID=function(a){do a+=~~(1e6*Math.random());while(document.getElementById(a));return a},c.prototype.tip=function(){if(!this.$tip&&(this.$tip=a(this.options.template),1!=this.$tip.length))throw new Error(this.type+" `template` option must consist of exactly 1 top-level element!");return this.$tip},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".tooltip-arrow")},c.prototype.enable=function(){this.enabled=!0},c.prototype.disable=function(){this.enabled=!1},c.prototype.toggleEnabled=function(){this.enabled=!this.enabled},c.prototype.toggle=function(b){var c=this;b&&(c=a(b.currentTarget).data("bs."+this.type),c||(c=new this.constructor(b.currentTarget,this.getDelegateOptions()),a(b.currentTarget).data("bs."+this.type,c))),b?(c.inState.click=!c.inState.click,c.isInStateTrue()?c.enter(c):c.leave(c)):c.tip().hasClass("in")?c.leave(c):c.enter(c)},c.prototype.destroy=function(){var a=this;clearTimeout(this.timeout),this.hide(function(){a.$element.off("."+a.type).removeData("bs."+a.type),a.$tip&&a.$tip.detach(),a.$tip=null,a.$arrow=null,a.$viewport=null})};var d=a.fn.tooltip;a.fn.tooltip=b,a.fn.tooltip.Constructor=c,a.fn.tooltip.noConflict=function(){return a.fn.tooltip=d,this}}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof b&&b;(e||!/destroy|hide/.test(b))&&(e||d.data("bs.popover",e=new c(this,f)),"string"==typeof b&&e[b]())})}var c=function(a,b){this.init("popover",a,b)};if(!a.fn.tooltip)throw new Error("Popover requires tooltip.js");c.VERSION="3.3.6",c.DEFAULTS=a.extend({},a.fn.tooltip.Constructor.DEFAULTS,{placement:"right",trigger:"click",content:"",template:'<div class="popover" role="tooltip"><div class="arrow"></div><h3 class="popover-title"></h3><div class="popover-content"></div></div>'}),c.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),c.prototype.constructor=c,c.prototype.getDefaults=function(){return c.DEFAULTS},c.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content").children().detach().end()[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},c.prototype.hasContent=function(){return this.getTitle()||this.getContent()},c.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},c.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")};var d=a.fn.popover;a.fn.popover=b,a.fn.popover.Constructor=c,a.fn.popover.noConflict=function(){return a.fn.popover=d,this}}(jQuery),+function(a){"use strict";function b(c,d){this.$body=a(document.body),this.$scrollElement=a(a(c).is(document.body)?window:c),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||"")+" .nav li > a",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on("scroll.bs.scrollspy",a.proxy(this.process,this)),this.refresh(),this.process()}function c(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})}b.VERSION="3.3.6",b.DEFAULTS={offset:10},b.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},b.prototype.refresh=function(){var b=this,c="offset",d=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),a.isWindow(this.$scrollElement[0])||(c="position",d=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var b=a(this),e=b.data("target")||b.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[c]().top+d,e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){b.offsets.push(this[0]),b.targets.push(this[1])})},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.getScrollHeight(),d=this.options.offset+c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(this.scrollHeight!=c&&this.refresh(),b>=d)return g!=(a=f[f.length-1])&&this.activate(a);if(g&&b<e[0])return this.activeTarget=null,this.clear();for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(void 0===e[a+1]||b<e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,this.clear();var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active"); 7 | d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")},b.prototype.clear=function(){a(this.selector).parentsUntil(this.options.target,".active").removeClass("active")};var d=a.fn.scrollspy;a.fn.scrollspy=c,a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=d,this},a(window).on("load.bs.scrollspy.data-api",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);c.call(b,b.data())})})}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new c(this)),"string"==typeof b&&e[b]()})}var c=function(b){this.element=a(b)};c.VERSION="3.3.6",c.TRANSITION_DURATION=150,c.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a"),f=a.Event("hide.bs.tab",{relatedTarget:b[0]}),g=a.Event("show.bs.tab",{relatedTarget:e[0]});if(e.trigger(f),b.trigger(g),!g.isDefaultPrevented()&&!f.isDefaultPrevented()){var h=a(d);this.activate(b.closest("li"),c),this.activate(h,h.parent(),function(){e.trigger({type:"hidden.bs.tab",relatedTarget:b[0]}),b.trigger({type:"shown.bs.tab",relatedTarget:e[0]})})}}},c.prototype.activate=function(b,d,e){function f(){g.removeClass("active").find("> .dropdown-menu > .active").removeClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!1),b.addClass("active").find('[data-toggle="tab"]').attr("aria-expanded",!0),h?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu").length&&b.closest("li.dropdown").addClass("active").end().find('[data-toggle="tab"]').attr("aria-expanded",!0),e&&e()}var g=d.find("> .active"),h=e&&a.support.transition&&(g.length&&g.hasClass("fade")||!!d.find("> .fade").length);g.length&&h?g.one("bsTransitionEnd",f).emulateTransitionEnd(c.TRANSITION_DURATION):f(),g.removeClass("in")};var d=a.fn.tab;a.fn.tab=b,a.fn.tab.Constructor=c,a.fn.tab.noConflict=function(){return a.fn.tab=d,this};var e=function(c){c.preventDefault(),b.call(a(this),"show")};a(document).on("click.bs.tab.data-api",'[data-toggle="tab"]',e).on("click.bs.tab.data-api",'[data-toggle="pill"]',e)}(jQuery),+function(a){"use strict";function b(b){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof b&&b;e||d.data("bs.affix",e=new c(this,f)),"string"==typeof b&&e[b]()})}var c=function(b,d){this.options=a.extend({},c.DEFAULTS,d),this.$target=a(this.options.target).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(b),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};c.VERSION="3.3.6",c.RESET="affix affix-top affix-bottom",c.DEFAULTS={offset:0,target:window},c.prototype.getState=function(a,b,c,d){var e=this.$target.scrollTop(),f=this.$element.offset(),g=this.$target.height();if(null!=c&&"top"==this.affixed)return c>e?"top":!1;if("bottom"==this.affixed)return null!=c?e+this.unpin<=f.top?!1:"bottom":a-d>=e+g?!1:"bottom";var h=null==this.affixed,i=h?e:f.top,j=h?g:b;return null!=c&&c>=e?"top":null!=d&&i+j>=a-d?"bottom":!1},c.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(c.RESET).addClass("affix");var a=this.$target.scrollTop(),b=this.$element.offset();return this.pinnedOffset=b.top-a},c.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},c.prototype.checkPosition=function(){if(this.$element.is(":visible")){var b=this.$element.height(),d=this.options.offset,e=d.top,f=d.bottom,g=Math.max(a(document).height(),a(document.body).height());"object"!=typeof d&&(f=e=d),"function"==typeof e&&(e=d.top(this.$element)),"function"==typeof f&&(f=d.bottom(this.$element));var h=this.getState(g,b,e,f);if(this.affixed!=h){null!=this.unpin&&this.$element.css("top","");var i="affix"+(h?"-"+h:""),j=a.Event(i+".bs.affix");if(this.$element.trigger(j),j.isDefaultPrevented())return;this.affixed=h,this.unpin="bottom"==h?this.getPinnedOffset():null,this.$element.removeClass(c.RESET).addClass(i).trigger(i.replace("affix","affixed")+".bs.affix")}"bottom"==h&&this.$element.offset({top:g-b-f})}};var d=a.fn.affix;a.fn.affix=b,a.fn.affix.Constructor=c,a.fn.affix.noConflict=function(){return a.fn.affix=d,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var c=a(this),d=c.data();d.offset=d.offset||{},null!=d.offsetBottom&&(d.offset.bottom=d.offsetBottom),null!=d.offsetTop&&(d.offset.top=d.offsetTop),b.call(c,d)})})}(jQuery); -------------------------------------------------------------------------------- /files/assets/js/downloads.js: -------------------------------------------------------------------------------- 1 | download_ani_speed = 250; 2 | var arch; 3 | var downloads = {}; 4 | 5 | function getFilename(url) { 6 | var tokens = url.split("/"); 7 | return tokens[tokens.length - 1]; 8 | } 9 | 10 | $.ajax({ 11 | type: "GET", 12 | url: "/assets/downloads.json", 13 | dataType: "json", 14 | success: function(data) { downloads = data; }, 15 | async: true 16 | }); 17 | 18 | function setArch(a, friendly_name) { 19 | arch = a; 20 | $(".arch-option").removeClass("selected"); 21 | $("#" + arch).addClass("selected"); 22 | $("#arch-list").addClass("exit"); 23 | $(".arch-choice").html(friendly_name); 24 | setTimeout(function() { 25 | $("#arch-list").hide().removeClass("exit"); 26 | $("#arch-selected").fadeIn(download_ani_speed); 27 | $("#release-list").addClass("entry").show(); 28 | }, download_ani_speed); 29 | 30 | // Only show releases that support this architecture. 31 | var releases = Object.keys(downloads); 32 | releases.forEach(function(release) { 33 | if (downloads[release].hasOwnProperty(arch) === true) { 34 | $("#" + release).show(); 35 | } else { 36 | $("#" + release).hide(); 37 | return; 38 | } 39 | 40 | var elementSelector = "#" + release + " > .details > "; 41 | 42 | // Show warning colour if a pre-release 43 | $(elementSelector + ".support").removeClass("support-ends").removeClass("support-preview"); 44 | if (downloads[release]["pre-release"] === true) { 45 | $(elementSelector + ".support").addClass("support-preview"); 46 | } else { 47 | $(elementSelector + ".support").addClass("support-ends"); 48 | } 49 | 50 | // Get details about distro, including alternates. 51 | $(elementSelector + ".name").html(downloads[release]["name"]); 52 | $(elementSelector + ".description").html(downloads[release]["description"]); 53 | $(elementSelector + ".support").html(downloads[release]["support"]); 54 | 55 | if (downloads[release][arch].hasOwnProperty("alt-name")) { 56 | $(elementSelector + ".name").html(downloads[release][arch]["alt-name"]); 57 | } 58 | 59 | if (downloads[release][arch].hasOwnProperty("alt-description")) { 60 | $(elementSelector + ".description").html(downloads[release][arch]["alt-description"]); 61 | } 62 | 63 | if (downloads[release][arch].hasOwnProperty("alt-support")) { 64 | $(elementSelector + ".support").html(downloads[release][arch]["alt-support"]); 65 | } 66 | }); 67 | } 68 | 69 | function goBackToArch() { 70 | $(".arch-option").removeClass("selected"); 71 | $("#arch-list").addClass("entry"); 72 | $("#release-list").addClass("exit"); 73 | setTimeout(function() { 74 | $("#release-list").hide().removeClass("exit"); 75 | $("#arch-list").addClass("entry").show(); 76 | }, download_ani_speed); 77 | } 78 | 79 | function setRelease(codename) { 80 | $(".release-option").removeClass("selected"); 81 | $("#" + codename).addClass("selected"); 82 | $("#release-list").addClass("exit"); 83 | setTimeout(function() { 84 | $("#release-list").hide().removeClass("exit"); 85 | $("#release-selected").fadeIn(download_ani_speed); 86 | $("#details-list").addClass("entry").show(); 87 | }, download_ani_speed); 88 | 89 | var release = downloads[codename]; 90 | var links = downloads[codename][arch]; 91 | 92 | var name = $("#" + codename + " .details h4").html(); 93 | var description = $("#" + codename + " .details p").html(); 94 | var support = $("#" + codename + " .details div").html(); 95 | $("#selected-release").html(name); 96 | 97 | // Update artwork 98 | $("#artwork-background").attr("style", "background-image:url(" + release["background-url"] + ")"); 99 | 100 | // Update links and text on the page 101 | $("#release-notes").attr("href", release["release-notes"]); 102 | $("#torrent-download").attr("href", links["torrent"]); 103 | $("#magnet-download").attr("href", links["magnet-uri"]); 104 | $("#direct-download").attr("href", links["direct"]); 105 | $("#other-downloads").attr("href", release["other-downloads"]); 106 | $("#sha256sum").html(links["sha256sum"]); 107 | $("#download-size").html(links["download-size"]); 108 | $("#torrent-download var").html(getFilename(links["torrent"])); 109 | $("#direct-download var").html(getFilename(links["direct"])); 110 | 111 | // Special considerations for Raspberry Pi, Pocket and Pocket 2. 112 | if (arch == "armhf" || arch == "gpd-pocket") { 113 | $("#mirrors").hide(); 114 | $("#getting-started").hide(); 115 | } else { 116 | $("#mirrors").show(); 117 | $("#getting-started").show(); 118 | } 119 | 120 | // Update PayPal buttons 121 | $(".tip-name").attr("value", "Ubuntu MATE " + name + " " + arch + " Download Tip"); 122 | 123 | // Experimental can be dangerous. 124 | if (release["pre-release"] === true) { 125 | $("#pre-release-warning").show(); 126 | } else { 127 | $("#pre-release-warning").hide(); 128 | } 129 | } 130 | 131 | function goBackToRelease() { 132 | $(".release-option").removeClass("selected"); 133 | $("#release-list").addClass("entry"); 134 | $("#details-list").addClass("exit"); 135 | setTimeout(function() { 136 | $("#details-list").hide().removeClass("exit"); 137 | $("#release-list").addClass("entry").show(); 138 | }, download_ani_speed); 139 | } 140 | -------------------------------------------------------------------------------- /files/assets/js/ubuntu-mate-triangles.js: -------------------------------------------------------------------------------- 1 | (function() { 2 | // Build the container and animate in the triangles. 3 | var container = $("#ubuntu-mate-triangles"); 4 | 5 | function generate_triangle(orientation) { 6 | var brightness = Math.random() + 1; 7 | var fade_class = ""; 8 | if (Math.random() > 0.6) { 9 | fade_class = "fade-even"; 10 | } else { 11 | fade_class = "fade-odd"; 12 | } 13 | return "<img class='triangle " + orientation + " " + fade_class + "' src='/assets/img/ubuntu-mate-triangle.svg' style='filter:grayscale(1) brightness(" + brightness + ")' />"; 14 | } 15 | 16 | function generate_square() { 17 | return("<div class='square'>" + 18 | generate_triangle("left") + 19 | generate_triangle("top") + 20 | generate_triangle("right") + 21 | generate_triangle("bottom") + 22 | "</div>"); 23 | } 24 | 25 | var htmlBuffer = ""; 26 | var maxToGenerate = 25; 27 | if (window.innerWidth > 1250) { 28 | maxToGenerate = 50; 29 | } 30 | for (x = 0; x < maxToGenerate; x++) { 31 | htmlBuffer += generate_square(); 32 | } 33 | container.append(htmlBuffer); 34 | 35 | })(); 36 | -------------------------------------------------------------------------------- /files/browserconfig.xml: -------------------------------------------------------------------------------- 1 | <?xml version="1.0" encoding="utf-8"?> 2 | <browserconfig> 3 | <msapplication> 4 | <tile> 5 | <square70x70logo src="/favicon-70.png"/> 6 | <square150x150logo src="/favicon-150.png"/> 7 | <square310x310logo src="/favicon-310.png"/> 8 | <TileColor>#87A556</TileColor> 9 | </tile> 10 | </msapplication> 11 | </browserconfig> 12 | -------------------------------------------------------------------------------- /files/favicon-114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-114.png -------------------------------------------------------------------------------- /files/favicon-120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-120.png -------------------------------------------------------------------------------- /files/favicon-144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-144.png -------------------------------------------------------------------------------- /files/favicon-150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-150.png -------------------------------------------------------------------------------- /files/favicon-152.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-152.png -------------------------------------------------------------------------------- /files/favicon-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-16.png -------------------------------------------------------------------------------- /files/favicon-160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-160.png -------------------------------------------------------------------------------- /files/favicon-196.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-196.png -------------------------------------------------------------------------------- /files/favicon-310.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-310.png -------------------------------------------------------------------------------- /files/favicon-32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-32.png -------------------------------------------------------------------------------- /files/favicon-57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-57.png -------------------------------------------------------------------------------- /files/favicon-64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-64.png -------------------------------------------------------------------------------- /files/favicon-70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-70.png -------------------------------------------------------------------------------- /files/favicon-72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-72.png -------------------------------------------------------------------------------- /files/favicon-76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-76.png -------------------------------------------------------------------------------- /files/favicon-96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon-96.png -------------------------------------------------------------------------------- /files/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/files/favicon.ico -------------------------------------------------------------------------------- /files/faviconit-instructions.txt: -------------------------------------------------------------------------------- 1 | thanks for using faviconit! 2 | copy the files to your site and add this code inside the HTML <HEAD> tag: 3 | 4 | <!-- ****** faviconit.com favicons ****** --> 5 | <link rel="shortcut icon" href="/favicon.ico"> 6 | <link rel="icon" sizes="16x16 32x32 64x64" href="/favicon.ico"> 7 | <link rel="icon" type="image/png" sizes="196x196" href="/favicon-196.png"> 8 | <link rel="icon" type="image/png" sizes="160x160" href="/favicon-160.png"> 9 | <link rel="icon" type="image/png" sizes="96x96" href="/favicon-96.png"> 10 | <link rel="icon" type="image/png" sizes="64x64" href="/favicon-64.png"> 11 | <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32.png"> 12 | <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16.png"> 13 | <link rel="apple-touch-icon" sizes="152x152" href="/favicon-152.png"> 14 | <link rel="apple-touch-icon" sizes="144x144" href="/favicon-144.png"> 15 | <link rel="apple-touch-icon" sizes="120x120" href="/favicon-120.png"> 16 | <link rel="apple-touch-icon" sizes="114x114" href="/favicon-114.png"> 17 | <link rel="apple-touch-icon" sizes="76x76" href="/favicon-76.png"> 18 | <link rel="apple-touch-icon" sizes="72x72" href="/favicon-72.png"> 19 | <link rel="apple-touch-icon" href="/favicon-57.png"> 20 | <meta name="msapplication-TileColor" content="#FFFFFF"> 21 | <meta name="msapplication-TileImage" content="/favicon-144.png"> 22 | <meta name="msapplication-config" content="/browserconfig.xml"> 23 | <!-- ****** faviconit.com favicons ****** --> -------------------------------------------------------------------------------- /files/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "manifest_version": 2, 3 | "version": "1", 4 | "name": "Ubuntu MATE", 5 | "short_name": "Ubuntu MATE", 6 | "description": "For a retrospective future", 7 | "default_locale": "en", 8 | "icons": [ 9 | { 10 | "src": "favicon-32.png", 11 | "sizes": "32x32", 12 | "type": "image/png", 13 | "density": 0.75 14 | }, 15 | { 16 | "src": "favicon-57.png", 17 | "sizes": "57x57", 18 | "type": "image/png", 19 | "density": 1.0 20 | }, 21 | { 22 | "src": "favicon-64.png", 23 | "sizes": "64x64", 24 | "type": "image/png", 25 | "density": 1.5 26 | }, 27 | { 28 | "src": "favicon-96.png", 29 | "sizes": "96x96", 30 | "type": "image/png", 31 | "density": 2.0 32 | }, 33 | { 34 | "src": "favicon-144.png", 35 | "sizes": "144x144", 36 | "type": "image/png", 37 | "density": 3.0 38 | }, 39 | { 40 | "src": "favicon-196.png", 41 | "sizes": "196x196", 42 | "type": "image/png", 43 | "density": 4.0 44 | }, 45 | { 46 | "src": "favicon-310.png", 47 | "sizes": "310x310", 48 | "type": "image/png", 49 | "density": 5.0 50 | } 51 | ], 52 | "start_url": "/", 53 | "display": "browser", 54 | "background_color": "#87A556", 55 | "theme_color": "#87A556", 56 | "orientation": "any" 57 | } 58 | -------------------------------------------------------------------------------- /files/pages/shop-eu-frame.html: -------------------------------------------------------------------------------- 1 | <!DOCTYPE html> 2 | <html prefix="og: http://ogp.me/ns# article: http://ogp.me/ns/article# " lang="en"> 3 | <head> 4 | <meta charset="utf-8"> 5 | <meta name="viewport" content="width=device-width, initial-scale=1"> 6 | <title>Ubuntu MATE Boutique | Europe 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /files/pages/shop-us-frame.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Ubuntu MATE Boutique | Americas 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 | 32 | 40 | 41 | 42 | 43 | 44 | -------------------------------------------------------------------------------- /images/merch/book/upgrading-from-win-osx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/book/upgrading-from-win-osx.jpg -------------------------------------------------------------------------------- /images/merch/book/using-ubuntu-mate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/book/using-ubuntu-mate.jpg -------------------------------------------------------------------------------- /images/merch/entroware/aether_front_mate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/aether_front_mate.jpg -------------------------------------------------------------------------------- /images/merch/entroware/apollo_front_mate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/apollo_front_mate.jpg -------------------------------------------------------------------------------- /images/merch/entroware/ares.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/ares.jpg -------------------------------------------------------------------------------- /images/merch/entroware/athena_front_mate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/athena_front_mate.jpg -------------------------------------------------------------------------------- /images/merch/entroware/aura.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/aura.jpg -------------------------------------------------------------------------------- /images/merch/entroware/helios_front_mate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/helios_front_mate.jpg -------------------------------------------------------------------------------- /images/merch/entroware/hybris_front_mate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/hybris_front_mate.jpg -------------------------------------------------------------------------------- /images/merch/entroware/kratos_front_mate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/kratos_front_mate.jpg -------------------------------------------------------------------------------- /images/merch/entroware/nyx.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/nyx.jpg -------------------------------------------------------------------------------- /images/merch/entroware/orion_front_mate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/orion_front_mate.jpg -------------------------------------------------------------------------------- /images/merch/entroware/poseidon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/poseidon.jpg -------------------------------------------------------------------------------- /images/merch/entroware/proteus_front_mate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/proteus_front_mate.jpg -------------------------------------------------------------------------------- /images/merch/entroware/zeus_front_mate.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/entroware/zeus_front_mate.jpg -------------------------------------------------------------------------------- /images/merch/hellotux/flashdrive.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/hellotux/flashdrive.jpg -------------------------------------------------------------------------------- /images/merch/hellotux/ubuntu-mate-polo-kiwi-back.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/hellotux/ubuntu-mate-polo-kiwi-back.jpg -------------------------------------------------------------------------------- /images/merch/hellotux/ubuntu-mate-polo-kiwi-front.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/hellotux/ubuntu-mate-polo-kiwi-front.jpg -------------------------------------------------------------------------------- /images/merch/hellotux/ubuntu-mate-t-white-back.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/hellotux/ubuntu-mate-t-white-back.jpg -------------------------------------------------------------------------------- /images/merch/hellotux/ubuntu-mate-t-white-front.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/hellotux/ubuntu-mate-t-white-front.jpg -------------------------------------------------------------------------------- /images/merch/hellotux/ubuntumate_hoodie_blackgray-1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/hellotux/ubuntumate_hoodie_blackgray-1.jpg -------------------------------------------------------------------------------- /images/merch/hellotux/ubuntumate_hoodie_blackgray-2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/hellotux/ubuntumate_hoodie_blackgray-2.jpg -------------------------------------------------------------------------------- /images/merch/hellotux/ubuntumate_hoodie_blackgray-3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/hellotux/ubuntumate_hoodie_blackgray-3.jpg -------------------------------------------------------------------------------- /images/merch/hellotux/ubuntumate_jacket_black-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/hellotux/ubuntumate_jacket_black-1.png -------------------------------------------------------------------------------- /images/merch/hellotux/ubuntumate_jacket_black-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/hellotux/ubuntumate_jacket_black-2.png -------------------------------------------------------------------------------- /images/merch/libretrend/LB_TripleBox_0.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/libretrend/LB_TripleBox_0.jpg -------------------------------------------------------------------------------- /images/merch/spreadshirt/white-mug.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/spreadshirt/white-mug.png -------------------------------------------------------------------------------- /images/merch/spreadshirt/white-t-shirt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/spreadshirt/white-t-shirt.png -------------------------------------------------------------------------------- /images/merch/unixstickers/Ubuntu-MATE-Badge.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/unixstickers/Ubuntu-MATE-Badge.png -------------------------------------------------------------------------------- /images/merch/unixstickers/Ubuntu-MATE-Keyboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/unixstickers/Ubuntu-MATE-Keyboard.png -------------------------------------------------------------------------------- /images/merch/unixstickers/Ubuntu-MATE-Pin.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/unixstickers/Ubuntu-MATE-Pin.png -------------------------------------------------------------------------------- /images/merch/unixstickers/Ubuntu-MATE-Shaped.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/merch/unixstickers/Ubuntu-MATE-Shaped.png -------------------------------------------------------------------------------- /images/sponsors/entroware.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/sponsors/entroware.png -------------------------------------------------------------------------------- /images/sponsors/firstcolo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/sponsors/firstcolo.png -------------------------------------------------------------------------------- /images/sponsors/hellotux.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/sponsors/hellotux.png -------------------------------------------------------------------------------- /images/sponsors/libretrend-black.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/sponsors/libretrend-black.png -------------------------------------------------------------------------------- /images/sponsors/libretrend-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/sponsors/libretrend-white.png -------------------------------------------------------------------------------- /images/sponsors/libretrend.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/sponsors/libretrend.png -------------------------------------------------------------------------------- /images/sponsors/osdisc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/sponsors/osdisc.png -------------------------------------------------------------------------------- /images/sponsors/prometeus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/sponsors/prometeus.png -------------------------------------------------------------------------------- /images/sponsors/spreadshirt-guarantee.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/sponsors/spreadshirt-guarantee.png -------------------------------------------------------------------------------- /images/sponsors/unixstickers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ubuntu-mate/ubuntu-mate.boutique/5c70ed4cecc66ac8f3dac37633ab1808dce4a5c3/images/sponsors/unixstickers.png -------------------------------------------------------------------------------- /pages/40x.md: -------------------------------------------------------------------------------- 1 | 9 | 10 | It seems I can't find what you’re looking for. You've requested a page that has 11 | moved, been removed or was never there in the first place. Try using the 12 | search above to see if you can find what you came here looking for. 13 | -------------------------------------------------------------------------------- /pages/50x.md: -------------------------------------------------------------------------------- 1 | 9 | 10 | The server has exploded! The webmaster has already been informed and is working 11 | with a furious energy to put the fire out. Everything should be fixed soon. 12 | -------------------------------------------------------------------------------- /pages/index.md: -------------------------------------------------------------------------------- 1 | 10 | 11 |
12 |
13 |
14 | Entroware 15 |
16 |
17 |
18 | 19 | [Entroware](https://entroware.com) is a UK based Linux computer 20 | manufacturer, founded in early 2014, providing a range of quality Linux 21 | computers focused on a complete *"out of the box"* Linux experience, 22 | with a heavy focus on hardware compatibility. Entroware are offering 23 | the option to purchase their entire range of computers with Ubuntu MATE 24 | pre-installed including full support. 25 | 26 | ## Entroware Laptops & AIOs 27 | 28 |
29 |
30 |
31 |
32 | 14" Orion 33 | 34 |

Starting at £549.99

35 |

36 | Configurable with 8th Generation Intel® Core™ Processors, up to 32GB DDR4 2400 MHz, up to 6TB storage, 15" Matte FHD LED (1920x1080), Intel® UHD Graphics. 37 |

38 |
39 |
40 |
41 |
42 |
43 |
44 | 15" Aether 45 | 46 |

Starting at £599.99

47 |

48 | Configurable with 8th Generation Intel® Core™ Processors, up to 32GB DDR4 2400 MHz, up to 6TB storage, 15" Matte FHD LED (1920x1080), Intel® UHD Graphics. 49 |

50 |
51 |
52 |
53 |
54 |
55 |
56 | 14" Apollo 57 | 58 |

Starting at £649.99

59 |

60 | Configurable with 8th Generation Intel® Core™ Processors, up to 32GB DDR4 2400 MHz, up to 6TB storage, 14" Matte FHD LED (1920x1080), Intel® UHD Graphics. 61 |

62 |
63 |
64 |
65 |
66 | 67 |
68 |
69 |
70 |
71 | 17" Hybris 72 | 73 |

Starting at £719.99

74 |

75 | Configurable with 8th Generation Intel® Core™ Processors, up to 32GB DDR4 2400 MHz, up to 6TB storage, 17" Matte FHD LED (1920x1080), Intel® UHD Graphics, optional NVIDIA® Graphics. 76 |

77 |
78 |
79 |
80 |
81 |
82 |
83 | 15" Kratos 84 | 85 |

Starting at £729.99

86 |

87 | Configurable with 8th Generation Intel® Core™ Processors, up to 32GB DDR4 2400 MHz, up to 6TB storage, 15" Matte FHD LED (1920x1080), NVIDIA® MX150 or GTX 1050 Graphics. 88 |

89 |
90 |
91 |
92 |
93 |
94 |
95 | 15" Proteus 96 | 97 |

Starting at £769.99

98 |

99 | Configurable with 8th Generation Intel® Core™ Processors, up to 32GB DDR4 2400 MHz, up to 6TB storage, 15.6" Matte FHD LED (1920x1080), Intel® UHD Graphics. 100 |

101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 | 15" Zeus 110 | 111 |

Starting at £1299.99

112 |

113 | Configurable with 8th Generation Intel® Core™ Processors, up to 32GB DDR4 2666 MHz, up to 6TB storage, 15" Matte FHD LED (1920x1080) or 15" Matte 4K LED (3840x2160), NVIDIA® 1060 or 1070 Max-Q Graphics. 114 |

115 |
116 |
117 |
118 |
119 |
120 |
121 | 17" Helios 122 | 123 |

Starting at £1699.99

124 |

125 | Configurable with 9th Generation Intel® Core™ Processors, up to 64GB DDR4 2666 MHz, up to 12TB storage, 17" Matte FHD LED (1920x1080), NVIDIA® 2060, 2070, or 2080 Graphics. 126 |

127 |
128 |
129 |
130 |
131 |
132 |
133 | 24" Ares 134 | 135 |

Starting at £699.99

136 |

137 | Configurable with 8th Generation Intel® Core™ Processors, up to 32GB DDR4 2400 MHz, up to 6TB storage, 24" Matte FHD LED (1920x1080), Intel® HD Graphics. 138 |

139 |
140 |
141 |
142 |
143 | 144 |
145 |
146 |

Entroware Desktops & Servers

147 |

Entroware also have a line servers and desktops from NUCs to Intel® Core™ i9-9900K and to AMD® Ryzen™ Threadripper™ power houses.

148 | Entroware Store 149 |

150 |
151 |
152 | 153 | ## Embroidered Shirts 154 | 155 | [HELLOTUX](https://www.hellotux.com/) is the family business of Gábor Kum, 156 | a Linux system administrator, software developer and Linux user since 1999. 157 | HELLOTUX started making their Linux shirts in 2002 and carefully embroider 158 | every shirt individually using a programmable embroidery machine, all powered 159 | by Linux. **HELLOTUX is an international store that delivers worldwide.** 160 | 161 |
162 |
163 |
164 | HELLOTUX 165 |
166 |
167 |
168 | 169 |
170 |
171 |
172 | Ubuntu MATE Polo - Front 173 |
174 | Ubuntu MATE Polo - Front 175 |
176 |
177 |
178 |
179 | Ubuntu MATE Polo - Back 180 |
181 | Ubuntu MATE Polo - Back 182 |
183 |
184 |
185 |
186 | Ubuntu MATE Jacket 187 |
188 | Ubuntu MATE Jacket - Black 189 |
190 |
191 |
192 |
193 | Ubuntu MATE Hoodie 194 |
195 | Ubuntu MATE Hoodie - Black/Grey 196 |
197 |
198 |
199 |
200 | Ubuntu MATE T-Shirt - Front 201 |
202 | Ubuntu MATE T-Shirt - Front 203 |
204 |
205 |
206 |
207 | Ubuntu MATE T-Shirt - Back 208 |
209 | Ubuntu MATE T-Shirt - Back 210 |
211 |
212 |
213 | 214 | ## Books 215 | 216 | ### Ubuntu MATE: Upgrading from Windows or OSX 217 | 218 |
219 |
220 |
221 | Ubuntu MATE: Upgrading from Windows or OSX 222 |
223 |
224 |
225 |
226 |

This book is a detailed discussion of Ubuntu MATE and its major 227 | applications. Written for users switching from other operating systems, 228 | it's not ONLY for users switching from other systems. It's also a 229 | reference for everyone using Ubuntu MATE. If you're upgrading from 230 | Windows or OSX, you’ll find that our suggestions for personalizing 231 | Ubuntu MATE will help you feel right at home.

232 | 233 |

Available for $9.99 USD in the following ebook formats from Smashwords:

234 |
    235 |
  • epub
  • 236 |
  • mobi
  • 237 |
  • pdf
  • 238 |
  • lrf
  • 239 |
  • pdb
  • 240 |
  • txt
  • 241 |
  • html
  • 242 |
243 | 244 |

Also available in Paperback on for Kindle from your regional Amazon store in your local currency:

245 | 260 |
261 |
262 |
263 | 264 |
265 | 266 | ### Using Ubuntu MATE and Its Applications 267 | 268 |
269 |
270 |
271 | Ubuntu MATE: Using Ubuntu MATE and Its Applications 272 |
273 |
274 |
275 |
276 |

This book is written for computer users who want a reference detailed 277 | enough to help them to learn about Ubuntu MATE and its applications and 278 | to build their confidence and competence in using them to get things done.

279 | 280 |

Available for $14.99 USD in the following ebook formats from Smashwords:

281 |
    282 |
  • epub
  • 283 |
  • mobi
  • 284 |
  • pdf
  • 285 |
  • lrf
  • 286 |
  • pdb
  • 287 |
  • txt
  • 288 |
  • html
  • 289 |
290 | 291 |

Also available in Paperback on for Kindle from your regional Amazon store in your local currency:

292 | 307 |
308 |
309 |
310 | 311 | ## Apparel 312 | 313 | Ubuntu MATE has two shops for apparel, one based in Europe and one based in the 314 | Americas. Both shops deliver worldwide and stock the same items. 315 | 316 | If you are located in Africa, Asia, Middle East or Ocenia you may want to check 317 | both stores to see which offer the most favourable shipping costs to your 318 | location. 319 | 320 |
321 |
322 |
323 | 102654358-130125103 324 | spreadshirt-guarantee 325 | 130128260-102655146 326 |
327 | Ubuntu MATE European apparel store 328 |
329 |
330 |
331 |
332 | 102309772-1006413448 333 | spreadshirt guarantee 334 | 1006415072-102310921 335 |
336 | Ubuntu MATE Americas apparel store 337 |
338 |
339 |
340 | 341 | ## DVD and USB 342 | 343 |
344 |
345 |
346 | HELLOTUX 347 | 348 | Ubuntu MATE Branded Flash Drive 349 |
350 |
351 |

HELLOTUX 352 | sell an Ubuntu MATE branded 8GB Metallic Unibody USB stick that is just 353 | 41 mm long and less than 5 mm thick. It's the perfect flash drive for 354 | your key ring, always with you. HELLOTUX will also help you to upgrade 355 | your flash drive to the next version of Ubuntu MATE, absolutely free.

356 |
357 | 358 | -------------------------------------------------------------------------------- /pages/shop-eu.md: -------------------------------------------------------------------------------- 1 | 11 | 12 | This is our European shop, we have also have a shop for the [Americas](/pages/shop-us/). 13 | **Both shops deliver worldwide.** 14 | 15 | 27 | 28 | 29 | 30 | 31 | 32 | 35 | -------------------------------------------------------------------------------- /pages/shop-us.md: -------------------------------------------------------------------------------- 1 | 11 | 12 | This is our Americas shop, we have also have a shop for [Europe](/pages/shop-eu/). 13 | **Both shops deliver worldwide.** 14 | 15 | 27 | 28 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /plugins/__init__.py: -------------------------------------------------------------------------------- 1 | # Plugin modules go here. -------------------------------------------------------------------------------- /scripts/minify.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | zcat www/assets/js/tipuesearch.js.gz > www/assets/js/tipuesearch.js 4 | rm -f www/assets/js/tipuesearch.js.gz 5 | yui-compressor www/assets/js/tipuesearch.js -o www/assets/js/tipuesearch.js 6 | gzip < www/assets/js/tipuesearch.js > www/assets/js/tipuesearch.js.gz 7 | -------------------------------------------------------------------------------- /state_data.json: -------------------------------------------------------------------------------- 1 | { 2 | "last_deploy": "2019-04-10T21:53:18.920228" 3 | } -------------------------------------------------------------------------------- /themes/United/parent: -------------------------------------------------------------------------------- 1 | bootstrap3 -------------------------------------------------------------------------------- /themes/United/templates/base.tmpl: -------------------------------------------------------------------------------- 1 | ## -*- coding: utf-8 -*- 2 | <%namespace name="base" file="base_helper.tmpl" import="*" /> 3 | <%namespace name="notes" file="annotation_helper.tmpl" import="*" /> 4 | ${set_locale(lang)} 5 | ${base.html_headstart()} 6 | <%block name="extra_head"> 7 | ### Leave this block alone. 8 | 9 | ${template_hooks['extra_head']()} 10 | 11 | 12 | 13 | 14 | 15 | 57 | 58 | 59 | 60 |
61 |
62 | 63 |
64 | ${template_hooks['page_header']()} 65 | <%block name="content"> 66 |
67 | 68 | 69 |
70 | ${content_footer} 71 | ${template_hooks['page_footer']()} 72 |
73 |
74 |
75 | 76 | ${base.late_load_js()} 77 | 78 | <%block name="extra_js"> 79 | % if annotations and post and not post.meta('noannotations'): 80 | ${notes.code()} 81 | % elif not annotations and post and post.meta('annotations'): 82 | ${notes.code()} 83 | % endif 84 | ${body_end} 85 | ${template_hooks['body_end']()} 86 | 87 | 88 | -------------------------------------------------------------------------------- /themes/United/templates/gallery.tmpl: -------------------------------------------------------------------------------- 1 | ## -*- coding: utf-8 -*- 2 | <%inherit file="base.tmpl"/> 3 | <%namespace name="comments" file="comments_helper.tmpl"/> 4 | <%namespace name="ui" file="crumbs.tmpl" import="bar"/> 5 | <%block name="sourcelink"> 6 | 7 | <%block name="content"> 8 | ${ui.bar(crumbs)} 9 | %if title: 10 |

${title}

11 | %endif 12 | %if post: 13 |

14 | ${post.text()} 15 |

16 | %endif 17 | %if folders: 18 |
    19 | % for folder, ftitle in folders: 20 |
  •  ${ftitle}
  • 22 | % endfor 23 |
24 | %endif 25 | 26 | 27 | %if photo_array: 28 | 36 | %endif 37 | %if site_has_comments and enable_comments: 38 | ${comments.comment_form(None, permalink, title)} 39 | %endif 40 | 41 | 42 | <%block name="extra_head"> 43 | ${parent.extra_head()} 44 | 52 | 53 | 54 | 55 | <%block name="extra_js"> 56 | 57 | 94 | 95 | --------------------------------------------------------------------------------