├── .gitignore
├── .github
├── repos.txt
├── ISSUE_TEMPLATE
│ └── project-or-idea-that-needs-love.md
├── workflows
│ ├── update-labels.yml
│ └── update-projects.yml
└── update-labels.py
├── img
├── needs-love.jpg
├── needs-love-2.jpg
├── needs-love-interface.png
└── needs-love-template.png
├── docs
├── _includes
│ ├── search.html
│ ├── page-header.html
│ ├── page-footer.html
│ └── head.html
├── _layouts
│ ├── issue.html
│ ├── default.html
│ └── matched.html
├── _config.yml
├── feed.xml
├── pages
│ ├── search.html
│ └── index.md
├── _issues
│ ├── 2020-03-07-rseng-needs-love-3.md
│ ├── 2020-03-10-rseng-needs-love-8.md
│ └── 2020-04-02-rseng-needs-love-9.md
└── assets
│ ├── js
│ ├── script.js
│ ├── search.js
│ └── lunr.min.js
│ └── css
│ ├── normalize.css
│ └── awesomerseng.css
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | _site
2 | .jekyll-cache
3 |
--------------------------------------------------------------------------------
/.github/repos.txt:
--------------------------------------------------------------------------------
1 | https://github.com/rseng/needs-love
2 |
--------------------------------------------------------------------------------
/img/needs-love.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rseng/needs-love/HEAD/img/needs-love.jpg
--------------------------------------------------------------------------------
/img/needs-love-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rseng/needs-love/HEAD/img/needs-love-2.jpg
--------------------------------------------------------------------------------
/img/needs-love-interface.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rseng/needs-love/HEAD/img/needs-love-interface.png
--------------------------------------------------------------------------------
/img/needs-love-template.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/rseng/needs-love/HEAD/img/needs-love-template.png
--------------------------------------------------------------------------------
/docs/_includes/search.html:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/docs/_includes/page-header.html:
--------------------------------------------------------------------------------
1 |
5 |
--------------------------------------------------------------------------------
/docs/_layouts/issue.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% include head.html %}
5 |
6 |
7 | {% include page-header.html %}
8 |
9 |
10 | {{ content }}
11 |
12 |
13 | {% include page-footer.html %}
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/docs/_layouts/default.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% include head.html %}
5 |
6 |
7 | {% include page-header.html %}
8 |
9 |
10 | {{ content }}
11 |
12 |
13 | {% include page-footer.html %}
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/docs/_layouts/matched.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | {% include head.html %}
5 |
6 |
7 | {% include page-header.html %}
8 |
9 |
10 | {{ content }}
11 |
12 |
13 | {% include page-footer.html %}
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/docs/_includes/page-footer.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
--------------------------------------------------------------------------------
/docs/_config.yml:
--------------------------------------------------------------------------------
1 | # Setup
2 | title: Needs Love
3 | tagline: ""
4 | baseurl: "/needs-love"
5 | github: "https://github.com/rseng/needs-love"
6 |
7 | # Collections
8 | collections:
9 | issues:
10 | output: true
11 | matched:
12 | output: true
13 |
14 | # Defaults
15 | defaults:
16 | -
17 | scope:
18 | path: ""
19 | type: "pages"
20 | values:
21 | layout: "default"
22 |
23 | #Others
24 | markdown: kramdown
25 |
--------------------------------------------------------------------------------
/.github/ISSUE_TEMPLATE/project-or-idea-that-needs-love.md:
--------------------------------------------------------------------------------
1 | ---
2 | name: Project or Idea that Needs Love
3 | about: This template is intended for opening issues that should be parsed as items
4 | (projects or ideas) that need love.
5 | title: "[needs-love] "
6 | labels: needs-love
7 | assignees: ''
8 |
9 | ---
10 |
11 | ## Description
12 |
13 |
15 |
16 | ## How can we help?
17 |
18 |
21 |
--------------------------------------------------------------------------------
/.github/workflows/update-labels.yml:
--------------------------------------------------------------------------------
1 | name: update-labels
2 |
3 | on:
4 | issues:
5 | types: [labeled, unlabeled]
6 |
7 | jobs:
8 | UpdateLabels:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: Setup python environment
12 | run: conda create --quiet --name needslove requests
13 | - name: Update Labels for needs-love or matched
14 | env:
15 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
16 | run: |
17 | # Absolutely must download specific sha of script
18 | wget https://raw.githubusercontent.com/rseng/needs-love/3acdf12d37a88c7df20d3fbd8b01ecad81d867dc/.github/update-labels.py
19 | export PATH="/usr/share/miniconda/bin:$PATH"
20 | source activate needslove
21 | chmod +x update-labels.py
22 | python update-labels.py
23 |
--------------------------------------------------------------------------------
/docs/_includes/head.html:
--------------------------------------------------------------------------------
1 |
2 |
3 | {{ site.title }}
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/docs/feed.xml:
--------------------------------------------------------------------------------
1 | ---
2 | layout: null
3 | ---
4 |
5 |
6 |
7 | {{ site.title | xml_escape }}
8 | {{ site.description | xml_escape }}
9 | {{ site.url }}
10 |
11 | {% for post in site.issues limit:20 %}
12 | -
13 |
{{ post.title | xml_escape }}
14 |
15 | {% if post.subtitle %}{{ post.subtitle | xml_escape }} - {% endif %}
16 | {{ post.content | strip_html | xml_escape | truncatewords: 50 }}
17 |
18 | {{ post.date | date: "%a, %d %b %Y %H:%M:%S %z" }}
19 | {{ site.url }}{{ post.url }}
20 | {{ site.url }}{{ post.url }}
21 |
22 | {% endfor %}
23 |
24 |
25 |
--------------------------------------------------------------------------------
/docs/pages/search.html:
--------------------------------------------------------------------------------
1 | ---
2 | title: Search
3 | sitemap: false
4 | permalink: /search
5 | not_editable: true
6 | ---
7 |
8 | {% include search.html %}
9 |
10 | Loading results for " "
11 |
12 |
13 |
33 |
34 |
35 |
36 |
37 |
--------------------------------------------------------------------------------
/docs/_issues/2020-03-07-rseng-needs-love-3.md:
--------------------------------------------------------------------------------
1 | ---
2 | tags:
3 | title: "[needs-love] \"Is it research software\" interface"
4 | html_url: "https://github.com/rseng/needs-love/issues/3"
5 | user: vsoch
6 | repo: rseng/needs-love
7 | ---
8 |
9 | ## Description
10 |
11 | I've been thinking about the question "What is research software" and think it would be fun to create an "Is it research software" interface. It would be akin to Hot or Not, but instead of people, show research software projects. It should work:
12 |
13 | - to render content on GitHub pages from static files in some repository
14 | - allow for voting to keep track of the totals (this is the hard part, we'd need some database that we can interact with safely on GitHub pages, and this might not be possible, in which case an actual app to run on a cloud would work too!)
15 |
16 | This is something I am adding here also to test the "needs-love" interface and automation that I'm currently developing. This will eventually work so people can post projects / ideas like this, and it will update to the web interface over night, and then when someone is assigned / or the matched label is added (meaning someone found it on the interface and wants to help) it will parse on a different spot on the site.
17 |
18 | I'll likely be using this issue to test a bunch of stuffs!
--------------------------------------------------------------------------------
/docs/_issues/2020-03-10-rseng-needs-love-8.md:
--------------------------------------------------------------------------------
1 | ---
2 | tags:
3 | title: "[needs-love] Singularity Registry Server add contributors to collection"
4 | html_url: "https://github.com/rseng/needs-love/issues/8"
5 | user: vsoch
6 | repo: rseng/needs-love
7 | ---
8 |
9 | ## Description
10 |
11 | A user has requested that an admin (a super user to be specific) is allowed to add custom users to a collection contributors or owners. This is something that seems reasonable in that it can be done with the manage.py (direct interaction with the container) but this is different from the user interface. For this needs love issue, if someone has some experience with jinja2 and python, we would want to update the view to allow this functionality, and make sure it doesn't break teams. See https://github.com/singularityhub/sregistry/issues/280.
12 |
13 | ## How can we help?
14 |
15 | - Update the shub/apps/main/templates/collections/_collection_settings_users.html and matching views in shub/apps/main/views/collections.py to allow for a super user to add users to be contributors or owners. I also think this should be set to be allowed (or not) as a global environment variable, with the default not allowing it (I don't see it being a pattern for any other registry, although I'm definitely not the super user there!)
16 |
17 | Please open up discussion here if you have any questions and would like to work on this issue to learn about Django, containers, or jinja2.
--------------------------------------------------------------------------------
/docs/_issues/2020-04-02-rseng-needs-love-9.md:
--------------------------------------------------------------------------------
1 | ---
2 | tags:
3 | title: "[needs-love] Exosphere interface to manage cloud compute workloads"
4 | html_url: "https://github.com/rseng/needs-love/issues/9"
5 | user: vsoch
6 | repo: rseng/needs-love
7 | ---
8 |
9 | ## Description
10 |
11 | Exosphere: is an experimental, researcher-friendly interface for managing cloud compute workloads.
12 |
13 | It is a pure client application that uses the same technologies as the popular communication tool Slack (Electron). Instead of JavaScript the software is written in a statically typed, pure functional programming language called Elm (https://elm-lang.org/) which ensures no runtime exceptions, and which makes refactoring a breeze.Exosphere communicates with OpenStack services via open, standard REST (HTTP) APIs. The same codebase is usable in a web browser (https://try.exosphere.app) or as a desktop application (https://try.exosphere.app/packages/).
14 |
15 | Exosphere is designed to be used with any OpenStack cloud with zero custom integration. The cloud administrator usually does not need to do anything except provide access to the standard OpenStack APIs.
16 |
17 | ## How can we help?
18 |
19 | In collaboration with Jetstream Cloud we launched a prototype of Exosphere that allows users to access their Jetstream resources.We are looking for people who are interested in learning Elm, and who want to help researchers leverage cloud computing resources.Repository: https://gitlab.com/exosphere/exosphere
20 |
--------------------------------------------------------------------------------
/docs/assets/js/script.js:
--------------------------------------------------------------------------------
1 | $(function() {
2 |
3 | //FILTER BY TAG
4 | $('.filter').on( 'click', 'a', function(e) {
5 | e.preventDefault();
6 |
7 | //Get filter data from active link
8 | var filterValue = $(this).attr('data-filter');
9 |
10 | //Show filtered list by matching data-filter with class of item
11 | if(filterValue == "all") {
12 | $(".list .item").fadeIn('slow');
13 | } else {
14 | $(".list .item").not("." + filterValue).hide();
15 | $("." + filterValue).fadeIn('slow');
16 | }
17 |
18 | //Change active filter tag
19 | $('.filter li').removeClass('active');
20 | $(this).closest('li').addClass('active');
21 |
22 | //Remove search field content when choosing a filter
23 | $('.no-result').hide();$('#search').val('');
24 | });
25 |
26 | //FILTER BY SEARCH
27 | var rows = $('.list li');
28 | $('.no-result').hide();
29 |
30 | $('#search').keyup(function() {
31 | $('.filter li').removeClass('active');
32 |
33 | var val = $(this).val().toLowerCase();
34 |
35 | // Hide those without term
36 | rows.show().filter(function() {
37 | text = $(this).text().replace(/\s+/g, ' ');
38 | console.log(text);
39 | return !text.toLowerCase().includes(val);
40 | }).hide();
41 |
42 | var visible = $('.item:visible').length;
43 |
44 | if(visible == 0) {
45 | $('.no-result').show();
46 | } else {
47 | $('.no-result').hide();
48 | }
49 |
50 | });
51 |
52 | });
53 |
--------------------------------------------------------------------------------
/.github/workflows/update-projects.yml:
--------------------------------------------------------------------------------
1 | name: update-projects
2 |
3 | on:
4 | schedule:
5 | # Nightly at 2:30am
6 | - cron: 30 2 * * *
7 |
8 | jobs:
9 | UpdateProjects:
10 | runs-on: ubuntu-latest
11 | steps:
12 | - name: Checkout Repository
13 | uses: actions/checkout@v2
14 | - name: Generate needs-love tagged posts in _issues
15 | uses: rseng/good-first-issues@v1.0.3
16 | with:
17 | label: 'needs-love'
18 | repos-file: .github/repos.txt
19 | token: ${{ secrets.GITHUB_TOKEN }}
20 |
21 | - name: Generate matched tagged posts in _matched
22 | uses: rseng/good-first-issues@v1.0.3
23 | with:
24 | label: 'matched'
25 | collection: '_matched'
26 | repos-file: .github/repos.txt
27 | token: ${{ secrets.GITHUB_TOKEN }}
28 |
29 | - name: Checkout New Branch
30 | env:
31 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32 | UPDATE_BRANCH: master
33 | run: |
34 | printf "GitHub Actor: ${GITHUB_ACTOR}\n"
35 | git remote set-url origin "https://x-access-token:${GITHUB_TOKEN}@github.com/${GITHUB_REPOSITORY}.git"
36 | git branch
37 | printf "Branch to push to is ${UPDATE_BRANCH}\n"
38 | git checkout ${UPDATE_BRANCH} || git checkout -b ${UPDATE_BRANCH}
39 | git branch
40 |
41 | git config --global user.name "github-actions"
42 | git config --global user.email "github-actions@users.noreply.github.com"
43 |
44 | git pull origin ${UPDATE_BRANCH}
45 | git add docs/*
46 |
47 | if git diff-index --quiet HEAD --; then
48 | printf "No changes\n"
49 | else
50 | printf "Changes\n"
51 | git commit -m "Automated deployment to update projects $(date '+%Y-%m-%d')"
52 | git push origin ${UPDATE_BRANCH}
53 | fi
54 |
--------------------------------------------------------------------------------
/docs/pages/index.md:
--------------------------------------------------------------------------------
1 | ---
2 | layout: default
3 | title: {{ site.name }}
4 | permalink: /
5 | excluded_in_search: true
6 | ---
7 |
8 | {% assign tags_issues = site.issues | map: 'tags' | join: ',' | join: ',' | split: ',' | uniq | sort %}
9 |
10 |
11 |
12 |
19 |
20 |
21 | See all
22 | {% for tag in tags_issues %}{% if tag != "" %}
23 |
24 | {{ tag }}
25 | {% endif %}{% endfor %}
26 |
27 |
28 | {% assign n = site.issues | size %}
29 | {% assign posts = site.issues | sample: n %}
30 | {% for issue in posts %}{% assign tags = issue.tags | join: ',' | split: ',' | uniq | sort %}{% if issue.title %}
31 |
32 |
37 | {% endif %}{% endfor %}
38 |
39 |
Sorry, no match!
40 |
41 |
42 |
--------------------------------------------------------------------------------
/.github/update-labels.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 |
3 | # Update projects will retrieve new projects via a csv, and then update the markdown posts
4 | # https://docs.google.com/spreadsheets/d/1FTnl8ucFKYtiS2xhNiK8VwXeE5BuBDCzL_k9SbqyG6A/edit#gid=1109363929
5 | # requests is required
6 | # Copyright @vsoch, 2019
7 |
8 | import os
9 | import csv
10 | import json
11 | import requests
12 | import sys
13 |
14 |
15 | def main():
16 | '''Determine the labels added or removed. If needs-love is added,
17 | make sure to removed matched and vice versa.
18 | '''
19 | payload = os.environ.get("GITHUB_EVENT_PATH", "")
20 | if not os.path.exists(payload):
21 | sys.exit("Cannot find %s" % payload)
22 |
23 | with open(payload, 'r') as fd:
24 | payload = json.loads(fd.read())
25 |
26 | # We will need the issue URL to update
27 | issue_url = "%s/labels" % payload.get('issue')['url']
28 |
29 | # get token from environment
30 | token = os.environ.get("GITHUB_TOKEN")
31 | if not token:
32 | sys.exit("Token is required to update labels.")
33 |
34 | # Headers must include token
35 | headers = {"Authorization": "Bearer %s" % token}
36 |
37 | # Create variables for label added or removed, and action
38 | action = payload.get('action')
39 | labels = set(["matched", "needs-love"])
40 | label = payload.get('label')['name']
41 | labels.remove(label)
42 | other_label = list(labels)[0]
43 |
44 | print("Found label %s" % label)
45 | response = None
46 | if action == 'labeled':
47 | print("%s was added, removing %s" %(label, other_label))
48 | response = requests.delete(issue_url + "/" + other_label, headers=headers)
49 |
50 | elif action == "unlabeled":
51 | print("%s was removed, adding %s" %(label, other_label))
52 | response = requests.post(issue_url + "/" + other_label, headers=headers)
53 |
54 | print(response)
55 |
56 | # 404 is allowed if someone already removed
57 | if response:
58 | if response.status_code not in [200, 201, 204, 404]:
59 | sys.exit("Issue with creating or removing issue labels.")
60 |
61 | if __name__ == '__main__':
62 | main()
63 |
--------------------------------------------------------------------------------
/docs/assets/js/search.js:
--------------------------------------------------------------------------------
1 | ---
2 | layout: null
3 | ---
4 | (function () {
5 | function getQueryVariable(variable) {
6 | var query = window.location.search.substring(1),
7 | vars = query.split("&");
8 |
9 | for (var i = 0; i < vars.length; i++) {
10 | var pair = vars[i].split("=");
11 |
12 | if (pair[0] === variable) {
13 | return decodeURIComponent(pair[1].replace(/\+/g, '%20')).trim();
14 | }
15 | }
16 | }
17 |
18 | function getPreview(query, content, previewLength) {
19 | previewLength = previewLength || (content.length * 2);
20 |
21 | var parts = query.split(" "),
22 | match = content.toLowerCase().indexOf(query.toLowerCase()),
23 | matchLength = query.length,
24 | preview;
25 |
26 | // Find a relevant location in content
27 | for (var i = 0; i < parts.length; i++) {
28 | if (match >= 0) {
29 | break;
30 | }
31 |
32 | match = content.toLowerCase().indexOf(parts[i].toLowerCase());
33 | matchLength = parts[i].length;
34 | }
35 |
36 | // Create preview
37 | if (match >= 0) {
38 | var start = match - (previewLength / 2),
39 | end = start > 0 ? match + matchLength + (previewLength / 2) : previewLength;
40 |
41 | preview = content.substring(start, end).trim();
42 |
43 | if (start > 0) {
44 | preview = "..." + preview;
45 | }
46 |
47 | if (end < content.length) {
48 | preview = preview + "...";
49 | }
50 |
51 | // Highlight query parts
52 | preview = preview.replace(new RegExp("(" + parts.join("|") + ")", "gi"), "$1 ");
53 | } else {
54 | // Use start of content if no match found
55 | preview = content.substring(0, previewLength).trim() + (content.length > previewLength ? "..." : "");
56 | }
57 |
58 | return preview;
59 | }
60 |
61 | function displaySearchResults(results, query) {
62 | var searchResultsEl = document.getElementById("search-results"),
63 | searchProcessEl = document.getElementById("search-process");
64 |
65 | if (results.length) {
66 | var resultsHTML = "";
67 | results.forEach(function (result) {
68 | var item = window.data[result.ref],
69 | contentPreview = getPreview(query, item.content, 170),
70 | titlePreview = getPreview(query, item.title);
71 |
72 | resultsHTML += "" + contentPreview + "
";
73 | });
74 |
75 | console.log(resultsHTML)
76 | searchResultsEl.innerHTML = resultsHTML;
77 | searchProcessEl.innerText = "Showing";
78 | } else {
79 | searchResultsEl.style.display = "none";
80 | searchProcessEl.innerText = "No";
81 | }
82 | }
83 |
84 | window.index = lunr(function () {
85 | this.field("id");
86 | this.field("title", {boost: 10});
87 | this.field("categories");
88 | this.field("url");
89 | this.field("content");
90 | });
91 |
92 | var query = decodeURIComponent((getQueryVariable("q") || "").replace(/\+/g, "%20")),
93 | searchQueryContainerEl = document.getElementById("search-query-container"),
94 | searchQueryEl = document.getElementById("search-query");
95 |
96 | searchQueryEl.innerText = query;
97 | searchQueryContainerEl.style.display = "inline";
98 |
99 | for (var key in window.data) {
100 | window.index.add(window.data[key]);
101 | }
102 |
103 | displaySearchResults(window.index.search(query), query); // Hand the results off to be displayed
104 | })();
105 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Needs Love
2 |
3 | 
4 |
5 | [](https://github.com/rseng/needs-love)
6 | [](https://rseng.github.io/) [](https://good-labs.github.io/greater-good-affirmation) [](https://gitter.im/rseng/community?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge)
7 |
8 | ## Background
9 |
10 | This is an incubating project idea that will match research software engineers
11 | with projects. It's a peer-to-peer network for learning by way of doing.
12 | There are plenty of avenues for online learning, including tutorials, courses,
13 | and documentation. However, sometimes the best way to learn is to have project
14 | with one or more explicit goals to accomplish. This is the vision behind needs-love.
15 |
16 | ## What Needs Love?
17 |
18 | You might feel overwhelmed or frustrated by a lack of time to finish
19 | some of your projects, but have you ever thought about the opportunity
20 | that such unfinished work offers?
21 |
22 | For research software engineers that don't work in a group, or largely
23 | exist in silos, finding consistent sources of challenge is a challenge
24 | in and of itself. And guess what - an unfinished project and an RSE
25 | hungry to learn is a match made in heaven. If you are submitting a project,
26 | you get your project rolling again, and the RSE grows.
27 | It's a **peer to peer** network of matched mentorship that works really well
28 | for already very independent and curious engineers.
29 |
30 | In a nutshell, both the projects and the RSEs need a little love.
31 |
32 | ## Who is Involved?
33 |
34 | ### Starters
35 |
36 | We aren't talking about bread, folks, but the pun is quite lovely. A starter
37 | has put some time and thought into a recipe, and very likely started the baking
38 | process, but doesn't have the bandwidth to finish the dough and put it in the oven.
39 |
40 | #### What makes a good starter?
41 |
42 | A good starter has expertise in some area, or a project started, but doesn't have time to finish up.
43 | It's also okay to just have an idea that you want to throw out there for someone to work on.
44 | You might not even know what the best implementation might be! Thus, a good starter
45 | can also just have a good idea.
46 |
47 | ### Finishers
48 |
49 | Finishers are hungry for opportunity, and fun projects. A finisher can be
50 | very independent and curious, or ask for a bit more help. The finisher wants
51 | to take some project that has been started, and turn it into delicious bread,
52 | or an idea that isn't baked yet, and write the recipe.
53 |
54 | #### What makes a good finisher?
55 |
56 | The finisher, regardless of skill, should be motivated to take ownership of a project
57 | or an idea.
58 |
59 | ### Submitting a Project or Idea
60 |
61 | You can submit a project or idea that needs love simply by opening an issue, and selecting
62 | the "Project or Idea that needs love" template.
63 |
64 | 
65 |
66 | Once your idea is submit, it will (each night) render to the interface of
67 | projects that need love, which you can [see here](https://rseng.github.io/needs-love/).
68 |
69 | 
70 |
71 | ### Matching Yourself
72 |
73 | When you navigate the web interface to find an issue that looks interesting,
74 | if you click the issue to navigate to the GitHub interface, you can have discussion
75 | with the author about how you might like to be involved.
76 |
77 | #### What should you discuss?
78 |
79 | The match between the starter, both project and individual, and the finisher,
80 | is very important! While the criteria might vary by project, it's generally a good
81 | idea to open up a discussion on one of the [needs-love](https://github.com/rseng/needs-love/issues?q=is%3Aissue+is%3Aopen+label%3Aneeds-love)
82 | issues and discuss the following:
83 |
84 | - if expertise is known to be needed, where will it come from?
85 | - how can both parties best communicate, and ask questions?
86 | - what kind of time frame do you have in mind?
87 | - do you have all the resources that you need?
88 |
89 | If there is match, great! You can match yourself simply by applying the `matched` label. A GitHub action
90 | will handle removing the `needs-love` label so that others know that you've taken
91 | charge. The interface will update over night.
92 |
93 | ### Updating a Match
94 |
95 | If you can no longer work on a project or idea, you should notify the starter
96 | (the person that originally submit the issue) about this change, and he or she
97 | can remove the `matched` label. Once this is done, a GitHub action will
98 | add back the `needs-love` label so that others know that the issue is open to be
99 | worked on.
100 |
101 | ## What if someone doesn't ask for help?
102 |
103 | Asking for help can be hard! In some cases, asking for help can look like labeling
104 | an issue with "Good First Issue." For this reason, for the interested folks that want to
105 | persue a list of open source, research software engineering efforts, we provide the
106 | [awesome-rseng](https://github.com/rseng/awesome-rseng) awesome list.
107 |
108 | ## How can I contribute?
109 |
110 | If you want to find a project to help with, you can browse the [issue board](https://github.com/rseng/needs-love/issues?q=is%3Aissue+is%3Aopen+label%3Aneeds-love) or the [interface here](https://rseng.github.io/needs-love/).
111 | It's also very helpful to peruse around some of your projects, or open source projects
112 | you contribute to, and look for good "needs love" issues. Many times, you can also have discussion
113 | with colleagues to find what they are working on (and wish they had more time to work on).
114 |
--------------------------------------------------------------------------------
/docs/assets/css/normalize.css:
--------------------------------------------------------------------------------
1 | /*! normalize.css v3.0.2 | MIT License | git.io/normalize */
2 |
3 | /**
4 | * 1. Set default font family to sans-serif.
5 | * 2. Prevent iOS text size adjust after orientation change, without disabling
6 | * user zoom.
7 | */
8 |
9 | html {
10 | font-family: sans-serif; /* 1 */
11 | -ms-text-size-adjust: 100%; /* 2 */
12 | -webkit-text-size-adjust: 100%; /* 2 */
13 | }
14 |
15 | /**
16 | * Remove default margin.
17 | */
18 |
19 | body {
20 | margin: 0;
21 | }
22 |
23 | /* HTML5 display definitions
24 | ========================================================================== */
25 |
26 | /**
27 | * Correct `block` display not defined for any HTML5 element in IE 8/9.
28 | * Correct `block` display not defined for `details` or `summary` in IE 10/11
29 | * and Firefox.
30 | * Correct `block` display not defined for `main` in IE 11.
31 | */
32 |
33 | article,
34 | aside,
35 | details,
36 | figcaption,
37 | figure,
38 | footer,
39 | header,
40 | hgroup,
41 | main,
42 | menu,
43 | nav,
44 | section,
45 | summary {
46 | display: block;
47 | }
48 |
49 | /**
50 | * 1. Correct `inline-block` display not defined in IE 8/9.
51 | * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
52 | */
53 |
54 | audio,
55 | canvas,
56 | progress,
57 | video {
58 | display: inline-block; /* 1 */
59 | vertical-align: baseline; /* 2 */
60 | }
61 |
62 | /**
63 | * Prevent modern browsers from displaying `audio` without controls.
64 | * Remove excess height in iOS 5 devices.
65 | */
66 |
67 | audio:not([controls]) {
68 | display: none;
69 | height: 0;
70 | }
71 |
72 | /**
73 | * Address `[hidden]` styling not present in IE 8/9/10.
74 | * Hide the `template` element in IE 8/9/11, Safari, and Firefox < 22.
75 | */
76 |
77 | [hidden],
78 | template {
79 | display: none;
80 | }
81 |
82 | /* Links
83 | ========================================================================== */
84 |
85 | /**
86 | * Remove the gray background color from active links in IE 10.
87 | */
88 |
89 | a {
90 | background-color: transparent;
91 | }
92 |
93 | /**
94 | * Improve readability when focused and also mouse hovered in all browsers.
95 | */
96 |
97 | a:active,
98 | a:hover {
99 | outline: 0;
100 | }
101 |
102 | /* Text-level semantics
103 | ========================================================================== */
104 |
105 | /**
106 | * Address styling not present in IE 8/9/10/11, Safari, and Chrome.
107 | */
108 |
109 | abbr[title] {
110 | border-bottom: 1px dotted;
111 | }
112 |
113 | /**
114 | * Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
115 | */
116 |
117 | b,
118 | strong {
119 | font-weight: bold;
120 | }
121 |
122 | /**
123 | * Address styling not present in Safari and Chrome.
124 | */
125 |
126 | dfn {
127 | font-style: italic;
128 | }
129 |
130 | /**
131 | * Address variable `h1` font-size and margin within `section` and `article`
132 | * contexts in Firefox 4+, Safari, and Chrome.
133 | */
134 |
135 | h1 {
136 | font-size: 2em;
137 | margin: 0.67em 0;
138 | }
139 |
140 | /**
141 | * Address styling not present in IE 8/9.
142 | */
143 |
144 | mark {
145 | background: #ff0;
146 | color: #000;
147 | }
148 |
149 | /**
150 | * Address inconsistent and variable font size in all browsers.
151 | */
152 |
153 | small {
154 | font-size: 80%;
155 | }
156 |
157 | /**
158 | * Prevent `sub` and `sup` affecting `line-height` in all browsers.
159 | */
160 |
161 | sub,
162 | sup {
163 | font-size: 75%;
164 | line-height: 0;
165 | position: relative;
166 | vertical-align: baseline;
167 | }
168 |
169 | sup {
170 | top: -0.5em;
171 | }
172 |
173 | sub {
174 | bottom: -0.25em;
175 | }
176 |
177 | /* Embedded content
178 | ========================================================================== */
179 |
180 | /**
181 | * Remove border when inside `a` element in IE 8/9/10.
182 | */
183 |
184 | img {
185 | border: 0;
186 | }
187 |
188 | /**
189 | * Correct overflow not hidden in IE 9/10/11.
190 | */
191 |
192 | svg:not(:root) {
193 | overflow: hidden;
194 | }
195 |
196 | /* Grouping content
197 | ========================================================================== */
198 |
199 | /**
200 | * Address margin not present in IE 8/9 and Safari.
201 | */
202 |
203 | figure {
204 | margin: 1em 40px;
205 | }
206 |
207 | /**
208 | * Address differences between Firefox and other browsers.
209 | */
210 |
211 | hr {
212 | box-sizing: content-box;
213 | height: 0;
214 | }
215 |
216 | /**
217 | * Contain overflow in all browsers.
218 | */
219 |
220 | pre {
221 | overflow: auto;
222 | }
223 |
224 | /**
225 | * Address odd `em`-unit font size rendering in all browsers.
226 | */
227 |
228 | code,
229 | kbd,
230 | pre,
231 | samp {
232 | font-family: monospace, monospace;
233 | font-size: 1em;
234 | }
235 |
236 | /* Forms
237 | ========================================================================== */
238 |
239 | /**
240 | * Known limitation: by default, Chrome and Safari on OS X allow very limited
241 | * styling of `select`, unless a `border` property is set.
242 | */
243 |
244 | /**
245 | * 1. Correct color not being inherited.
246 | * Known issue: affects color of disabled elements.
247 | * 2. Correct font properties not being inherited.
248 | * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
249 | */
250 |
251 | button,
252 | input,
253 | optgroup,
254 | select,
255 | textarea {
256 | color: inherit; /* 1 */
257 | font: inherit; /* 2 */
258 | margin: 0; /* 3 */
259 | }
260 |
261 | /**
262 | * Address `overflow` set to `hidden` in IE 8/9/10/11.
263 | */
264 |
265 | button {
266 | overflow: visible;
267 | }
268 |
269 | /**
270 | * Address inconsistent `text-transform` inheritance for `button` and `select`.
271 | * All other form control elements do not inherit `text-transform` values.
272 | * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
273 | * Correct `select` style inheritance in Firefox.
274 | */
275 |
276 | button,
277 | select {
278 | text-transform: none;
279 | }
280 |
281 | /**
282 | * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
283 | * and `video` controls.
284 | * 2. Correct inability to style clickable `input` types in iOS.
285 | * 3. Improve usability and consistency of cursor style between image-type
286 | * `input` and others.
287 | */
288 |
289 | button,
290 | html input[type="button"], /* 1 */
291 | input[type="reset"],
292 | input[type="submit"] {
293 | -webkit-appearance: button; /* 2 */
294 | cursor: pointer; /* 3 */
295 | }
296 |
297 | /**
298 | * Re-set default cursor for disabled elements.
299 | */
300 |
301 | button[disabled],
302 | html input[disabled] {
303 | cursor: default;
304 | }
305 |
306 | /**
307 | * Remove inner padding and border in Firefox 4+.
308 | */
309 |
310 | button::-moz-focus-inner,
311 | input::-moz-focus-inner {
312 | border: 0;
313 | padding: 0;
314 | }
315 |
316 | /**
317 | * Address Firefox 4+ setting `line-height` on `input` using `!important` in
318 | * the UA stylesheet.
319 | */
320 |
321 | input {
322 | line-height: normal;
323 | }
324 |
325 | /**
326 | * It's recommended that you don't attempt to style these elements.
327 | * Firefox's implementation doesn't respect box-sizing, padding, or width.
328 | *
329 | * 1. Address box sizing set to `content-box` in IE 8/9/10.
330 | * 2. Remove excess padding in IE 8/9/10.
331 | */
332 |
333 | input[type="checkbox"],
334 | input[type="radio"] {
335 | box-sizing: border-box; /* 1 */
336 | padding: 0; /* 2 */
337 | }
338 |
339 | /**
340 | * Fix the cursor style for Chrome's increment/decrement buttons. For certain
341 | * `font-size` values of the `input`, it causes the cursor style of the
342 | * decrement button to change from `default` to `text`.
343 | */
344 |
345 | input[type="number"]::-webkit-inner-spin-button,
346 | input[type="number"]::-webkit-outer-spin-button {
347 | height: auto;
348 | }
349 |
350 | /**
351 | * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
352 | * 2. Address `box-sizing` set to `border-box` in Safari and Chrome
353 | * (include `-moz` to future-proof).
354 | */
355 |
356 | input[type="search"] {
357 | -webkit-appearance: textfield; /* 1 */ /* 2 */
358 | box-sizing: content-box;
359 | }
360 |
361 | /**
362 | * Remove inner padding and search cancel button in Safari and Chrome on OS X.
363 | * Safari (but not Chrome) clips the cancel button when the search input has
364 | * padding (and `textfield` appearance).
365 | */
366 |
367 | input[type="search"]::-webkit-search-cancel-button,
368 | input[type="search"]::-webkit-search-decoration {
369 | -webkit-appearance: none;
370 | }
371 |
372 | /**
373 | * Define consistent border, margin, and padding.
374 | */
375 |
376 | fieldset {
377 | border: 1px solid #c0c0c0;
378 | margin: 0 2px;
379 | padding: 0.35em 0.625em 0.75em;
380 | }
381 |
382 | /**
383 | * 1. Correct `color` not being inherited in IE 8/9/10/11.
384 | * 2. Remove padding so people aren't caught out if they zero out fieldsets.
385 | */
386 |
387 | legend {
388 | border: 0; /* 1 */
389 | padding: 0; /* 2 */
390 | }
391 |
392 | /**
393 | * Remove default vertical scrollbar in IE 8/9/10/11.
394 | */
395 |
396 | textarea {
397 | overflow: auto;
398 | }
399 |
400 | /**
401 | * Don't inherit the `font-weight` (applied by a rule above).
402 | * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
403 | */
404 |
405 | optgroup {
406 | font-weight: bold;
407 | }
408 |
409 | /* Tables
410 | ========================================================================== */
411 |
412 | /**
413 | * Remove most spacing between table cells.
414 | */
415 |
416 | table {
417 | border-collapse: collapse;
418 | border-spacing: 0;
419 | }
420 |
421 | td,
422 | th {
423 | padding: 0;
424 | }
425 |
--------------------------------------------------------------------------------
/docs/assets/js/lunr.min.js:
--------------------------------------------------------------------------------
1 | /**
2 | * lunr - http://lunrjs.com - A bit like Solr, but much smaller and not as bright - 0.7.0
3 | * Copyright (C) 2016 Oliver Nightingale
4 | * MIT Licensed
5 | * @license
6 | */
7 | !function(){var t=function(e){var n=new t.Index;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),e&&e.call(n,n),n};t.version="0.7.0",t.utils={},t.utils.warn=function(t){return function(e){t.console&&console.warn&&console.warn(e)}}(this),t.utils.asString=function(t){return void 0===t||null===t?"":t.toString()},t.EventEmitter=function(){this.events={}},t.EventEmitter.prototype.addListener=function(){var t=Array.prototype.slice.call(arguments),e=t.pop(),n=t;if("function"!=typeof e)throw new TypeError("last argument must be a function");n.forEach(function(t){this.hasHandler(t)||(this.events[t]=[]),this.events[t].push(e)},this)},t.EventEmitter.prototype.removeListener=function(t,e){if(this.hasHandler(t)){var n=this.events[t].indexOf(e);this.events[t].splice(n,1),this.events[t].length||delete this.events[t]}},t.EventEmitter.prototype.emit=function(t){if(this.hasHandler(t)){var e=Array.prototype.slice.call(arguments,1);this.events[t].forEach(function(t){t.apply(void 0,e)})}},t.EventEmitter.prototype.hasHandler=function(t){return t in this.events},t.tokenizer=function(e){return arguments.length&&null!=e&&void 0!=e?Array.isArray(e)?e.map(function(e){return t.utils.asString(e).toLowerCase()}):e.toString().trim().toLowerCase().split(t.tokenizer.seperator):[]},t.tokenizer.seperator=/[\s\-]+/,t.tokenizer.load=function(t){var e=this.registeredFunctions[t];if(!e)throw new Error("Cannot load un-registered function: "+t);return e},t.tokenizer.label="default",t.tokenizer.registeredFunctions={"default":t.tokenizer},t.tokenizer.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing tokenizer: "+n),e.label=n,this.registeredFunctions[n]=e},t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions={},t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn("Function is not registered with pipeline. This may cause problems when serialising the index.\n",e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(e){var i=t.Pipeline.registeredFunctions[e];if(!i)throw new Error("Cannot load un-registered function: "+e);n.add(i)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(e){t.Pipeline.warnIfFunctionNotRegistered(e),this._stack.push(e)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");i+=1,this._stack.splice(i,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var i=this._stack.indexOf(e);if(-1==i)throw new Error("Cannot find existingFn");this._stack.splice(i,0,n)},t.Pipeline.prototype.remove=function(t){var e=this._stack.indexOf(t);-1!=e&&this._stack.splice(e,1)},t.Pipeline.prototype.run=function(t){for(var e=[],n=t.length,i=this._stack.length,r=0;n>r;r++){for(var o=t[r],s=0;i>s&&(o=this._stack[s](o,r,t),void 0!==o&&""!==o);s++);void 0!==o&&""!==o&&e.push(o)}return e},t.Pipeline.prototype.reset=function(){this._stack=[]},t.Pipeline.prototype.toJSON=function(){return this._stack.map(function(e){return t.Pipeline.warnIfFunctionNotRegistered(e),e.label})},t.Vector=function(){this._magnitude=null,this.list=void 0,this.length=0},t.Vector.Node=function(t,e,n){this.idx=t,this.val=e,this.next=n},t.Vector.prototype.insert=function(e,n){this._magnitude=void 0;var i=this.list;if(!i)return this.list=new t.Vector.Node(e,n,i),this.length++;if(en.idx?n=n.next:(i+=e.val*n.val,e=e.next,n=n.next);return i},t.Vector.prototype.similarity=function(t){return this.dot(t)/(this.magnitude()*t.magnitude())},t.SortedSet=function(){this.length=0,this.elements=[]},t.SortedSet.load=function(t){var e=new this;return e.elements=t,e.length=t.length,e},t.SortedSet.prototype.add=function(){var t,e;for(t=0;t1;){if(o===t)return r;t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r]}return o===t?r:-1},t.SortedSet.prototype.locationFor=function(t){for(var e=0,n=this.elements.length,i=n-e,r=e+Math.floor(i/2),o=this.elements[r];i>1;)t>o&&(e=r),o>t&&(n=r),i=n-e,r=e+Math.floor(i/2),o=this.elements[r];return o>t?r:t>o?r+1:void 0},t.SortedSet.prototype.intersect=function(e){for(var n=new t.SortedSet,i=0,r=0,o=this.length,s=e.length,a=this.elements,h=e.elements;;){if(i>o-1||r>s-1)break;a[i]!==h[r]?a[i]h[r]&&r++:(n.add(a[i]),i++,r++)}return n},t.SortedSet.prototype.clone=function(){var e=new t.SortedSet;return e.elements=this.toArray(),e.length=e.elements.length,e},t.SortedSet.prototype.union=function(t){var e,n,i;this.length>=t.length?(e=this,n=t):(e=t,n=this),i=e.clone();for(var r=0,o=n.toArray();rp;p++)c[p]===a&&d++;h+=d/f*l.boost}}this.tokenStore.add(a,{ref:o,tf:h})}n&&this.eventEmitter.emit("add",e,this)},t.Index.prototype.remove=function(t,e){var n=t[this._ref],e=void 0===e?!0:e;if(this.documentStore.has(n)){var i=this.documentStore.get(n);this.documentStore.remove(n),i.forEach(function(t){this.tokenStore.remove(t,n)},this),e&&this.eventEmitter.emit("remove",t,this)}},t.Index.prototype.update=function(t,e){var e=void 0===e?!0:e;this.remove(t,!1),this.add(t,!1),e&&this.eventEmitter.emit("update",t,this)},t.Index.prototype.idf=function(t){var e="@"+t;if(Object.prototype.hasOwnProperty.call(this._idfCache,e))return this._idfCache[e];var n=this.tokenStore.count(t),i=1;return n>0&&(i=1+Math.log(this.documentStore.length/n)),this._idfCache[e]=i},t.Index.prototype.search=function(e){var n=this.pipeline.run(this.tokenizerFn(e)),i=new t.Vector,r=[],o=this._fields.reduce(function(t,e){return t+e.boost},0),s=n.some(function(t){return this.tokenStore.has(t)},this);if(!s)return[];n.forEach(function(e,n,s){var a=1/s.length*this._fields.length*o,h=this,u=this.tokenStore.expand(e).reduce(function(n,r){var o=h.corpusTokens.indexOf(r),s=h.idf(r),u=1,l=new t.SortedSet;if(r!==e){var c=Math.max(3,r.length-e.length);u=1/Math.log(c)}o>-1&&i.insert(o,a*s*u);for(var f=h.tokenStore.get(r),d=Object.keys(f),p=d.length,v=0;p>v;v++)l.add(f[d[v]].ref);return n.union(l)},new t.SortedSet);r.push(u)},this);var a=r.reduce(function(t,e){return t.intersect(e)});return a.map(function(t){return{ref:t,score:i.similarity(this.documentVector(t))}},this).sort(function(t,e){return e.score-t.score})},t.Index.prototype.documentVector=function(e){for(var n=this.documentStore.get(e),i=n.length,r=new t.Vector,o=0;i>o;o++){var s=n.elements[o],a=this.tokenStore.get(s)[e].tf,h=this.idf(s);r.insert(this.corpusTokens.indexOf(s),a*h)}return r},t.Index.prototype.toJSON=function(){return{version:t.version,fields:this._fields,ref:this._ref,tokenizer:this.tokenizerFn.label,documentStore:this.documentStore.toJSON(),tokenStore:this.tokenStore.toJSON(),corpusTokens:this.corpusTokens.toJSON(),pipeline:this.pipeline.toJSON()}},t.Index.prototype.use=function(t){var e=Array.prototype.slice.call(arguments,1);e.unshift(this),t.apply(this,e)},t.Store=function(){this.store={},this.length=0},t.Store.load=function(e){var n=new this;return n.length=e.length,n.store=Object.keys(e.store).reduce(function(n,i){return n[i]=t.SortedSet.load(e.store[i]),n},{}),n},t.Store.prototype.set=function(t,e){this.has(t)||this.length++,this.store[t]=e},t.Store.prototype.get=function(t){return this.store[t]},t.Store.prototype.has=function(t){return t in this.store},t.Store.prototype.remove=function(t){this.has(t)&&(delete this.store[t],this.length--)},t.Store.prototype.toJSON=function(){return{store:this.store,length:this.length}},t.stemmer=function(){var t={ational:"ate",tional:"tion",enci:"ence",anci:"ance",izer:"ize",bli:"ble",alli:"al",entli:"ent",eli:"e",ousli:"ous",ization:"ize",ation:"ate",ator:"ate",alism:"al",iveness:"ive",fulness:"ful",ousness:"ous",aliti:"al",iviti:"ive",biliti:"ble",logi:"log"},e={icate:"ic",ative:"",alize:"al",iciti:"ic",ical:"ic",ful:"",ness:""},n="[^aeiou]",i="[aeiouy]",r=n+"[^aeiouy]*",o=i+"[aeiou]*",s="^("+r+")?"+o+r,a="^("+r+")?"+o+r+"("+o+")?$",h="^("+r+")?"+o+r+o+r,u="^("+r+")?"+i,l=new RegExp(s),c=new RegExp(h),f=new RegExp(a),d=new RegExp(u),p=/^(.+?)(ss|i)es$/,v=/^(.+?)([^s])s$/,g=/^(.+?)eed$/,m=/^(.+?)(ed|ing)$/,y=/.$/,S=/(at|bl|iz)$/,w=new RegExp("([^aeiouylsz])\\1$"),k=new RegExp("^"+r+i+"[^aeiouwxy]$"),x=/^(.+?[^aeiou])y$/,b=/^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/,E=/^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/,F=/^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/,_=/^(.+?)(s|t)(ion)$/,z=/^(.+?)e$/,O=/ll$/,P=new RegExp("^"+r+i+"[^aeiouwxy]$"),T=function(n){var i,r,o,s,a,h,u;if(n.length<3)return n;if(o=n.substr(0,1),"y"==o&&(n=o.toUpperCase()+n.substr(1)),s=p,a=v,s.test(n)?n=n.replace(s,"$1$2"):a.test(n)&&(n=n.replace(a,"$1$2")),s=g,a=m,s.test(n)){var T=s.exec(n);s=l,s.test(T[1])&&(s=y,n=n.replace(s,""))}else if(a.test(n)){var T=a.exec(n);i=T[1],a=d,a.test(i)&&(n=i,a=S,h=w,u=k,a.test(n)?n+="e":h.test(n)?(s=y,n=n.replace(s,"")):u.test(n)&&(n+="e"))}if(s=x,s.test(n)){var T=s.exec(n);i=T[1],n=i+"i"}if(s=b,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+t[r])}if(s=E,s.test(n)){var T=s.exec(n);i=T[1],r=T[2],s=l,s.test(i)&&(n=i+e[r])}if(s=F,a=_,s.test(n)){var T=s.exec(n);i=T[1],s=c,s.test(i)&&(n=i)}else if(a.test(n)){var T=a.exec(n);i=T[1]+T[2],a=c,a.test(i)&&(n=i)}if(s=z,s.test(n)){var T=s.exec(n);i=T[1],s=c,a=f,h=P,(s.test(i)||a.test(i)&&!h.test(i))&&(n=i)}return s=O,a=c,s.test(n)&&a.test(n)&&(s=y,n=n.replace(s,"")),"y"==o&&(n=o.toLowerCase()+n.substr(1)),n};return T}(),t.Pipeline.registerFunction(t.stemmer,"stemmer"),t.generateStopWordFilter=function(t){var e=t.reduce(function(t,e){return t[e]=e,t},{});return function(t){return t&&e[t]!==t?t:void 0}},t.stopWordFilter=t.generateStopWordFilter(["a","able","about","across","after","all","almost","also","am","among","an","and","any","are","as","at","be","because","been","but","by","can","cannot","could","dear","did","do","does","either","else","ever","every","for","from","get","got","had","has","have","he","her","hers","him","his","how","however","i","if","in","into","is","it","its","just","least","let","like","likely","may","me","might","most","must","my","neither","no","nor","not","of","off","often","on","only","or","other","our","own","rather","said","say","says","she","should","since","so","some","than","that","the","their","them","then","there","these","they","this","tis","to","too","twas","us","wants","was","we","were","what","when","where","which","while","who","whom","why","will","with","would","yet","you","your"]),t.Pipeline.registerFunction(t.stopWordFilter,"stopWordFilter"),t.trimmer=function(t){return t.replace(/^\W+/,"").replace(/\W+$/,"")},t.Pipeline.registerFunction(t.trimmer,"trimmer"),t.TokenStore=function(){this.root={docs:{}},this.length=0},t.TokenStore.load=function(t){var e=new this;return e.root=t.root,e.length=t.length,e},t.TokenStore.prototype.add=function(t,e,n){var n=n||this.root,i=t.charAt(0),r=t.slice(1);return i in n||(n[i]={docs:{}}),0===r.length?(n[i].docs[e.ref]=e,void(this.length+=1)):this.add(r,e,n[i])},t.TokenStore.prototype.has=function(t){if(!t)return!1;for(var e=this.root,n=0;n code { padding: 0; margin: 0; font-size: 0.9rem; color: #567482; word-break: normal; white-space: pre; background: transparent; border: 0; }
128 | .main-content .highlight { margin-bottom: 1rem; }
129 | .main-content .highlight pre { margin-bottom: 0; word-break: normal; }
130 | .main-content .highlight pre, .main-content pre { padding: 0.8rem; overflow: auto; font-size: 0.9rem; line-height: 1.45; border-radius: 0.3rem; -webkit-overflow-scrolling: touch; }
131 | .main-content pre code, .main-content pre tt { display: inline; max-width: initial; padding: 0; margin: 0; overflow: initial; line-height: inherit; word-wrap: normal; background-color: transparent; border: 0; }
132 | .main-content pre code:before, .main-content pre code:after, .main-content pre tt:before, .main-content pre tt:after { content: normal; }
133 | .main-content ul, .main-content ol { margin-top: 0; }
134 | .main-content blockquote { padding: 0 1rem; margin-left: 0; color: #819198; border-left: 0.3rem solid #dce6f0; }
135 | .main-content blockquote > :first-child { margin-top: 0; }
136 | .main-content blockquote > :last-child { margin-bottom: 0; }
137 | .main-content table { display: block; width: 100%; overflow: auto; word-break: normal; word-break: keep-all; -webkit-overflow-scrolling: touch; }
138 | .main-content table th { font-weight: bold; }
139 | .main-content table th, .main-content table td { padding: 0.5rem 1rem; border: 1px solid #e9ebec; }
140 | .main-content dl { padding: 0; }
141 | .main-content dl dt { padding: 0; margin-top: 1rem; font-size: 1rem; font-weight: bold; }
142 | .main-content dl dd { padding: 0; margin-bottom: 1rem; }
143 | .main-content hr { height: 2px; padding: 0; margin: 1rem 0; background-color: #eff0f1; border: 0; }
144 |
145 | .site-footer { padding-top: 2rem; margin-top: 2rem; border-top: solid 1px #eff0f1; }
146 | @media screen and (min-width: 64em) { .site-footer { font-size: 1rem; } }
147 | @media screen and (min-width: 42em) and (max-width: 64em) { .site-footer { font-size: 1rem; } }
148 | @media screen and (max-width: 42em) { .site-footer { font-size: 0.9rem; } }
149 |
150 | .site-footer-owner { display: block; font-weight: bold; }
151 |
152 | .site-footer-credits { color: #819198; }
153 |
154 | /* Menu */
155 |
156 | /* Common styles of menus */
157 |
158 | .dl-menuwrapper {
159 | width: 100%;
160 | max-width: 300px;
161 | float: left;
162 | position: relative;
163 | -webkit-perspective: 1000px;
164 | perspective: 1000px;
165 | -webkit-perspective-origin: 50% 200%;
166 | perspective-origin: 50% 200%;
167 | }
168 |
169 | .dl-menuwrapper:first-child {
170 | margin-right: 100px;
171 | }
172 |
173 | .dl-menuwrapper button {
174 | background: #ccc;
175 | border: none;
176 | width: 48px;
177 | height: 45px;
178 | text-indent: -900em;
179 | overflow: hidden;
180 | position: relative;
181 | cursor: pointer;
182 | outline: none;
183 | margin-top:50px;
184 | margin-left:8px;
185 | }
186 |
187 | .dl-menuwrapper button:hover,
188 | .dl-menuwrapper button.dl-active,
189 | .dl-menuwrapper ul {
190 | background: #aaa;
191 | }
192 |
193 | .dl-menuwrapper button:after {
194 | content: '';
195 | position: absolute;
196 | width: 68%;
197 | height: 5px;
198 | background: #fff;
199 | top: 10px;
200 | left: 16%;
201 | box-shadow:
202 | 0 10px 0 #fff,
203 | 0 20px 0 #fff;
204 | }
205 |
206 | .dl-menuwrapper ul {
207 | padding: 0;
208 | list-style: none;
209 | -webkit-transform-style: preserve-3d;
210 | transform-style: preserve-3d;
211 | }
212 |
213 | .dl-menuwrapper li {
214 | position: relative;
215 | }
216 |
217 | .dl-menuwrapper li a {
218 | display: block;
219 | position: relative;
220 | padding: 15px 20px;
221 | margin-left: 8px;
222 | font-size: 16px;
223 | line-height: 20px;
224 | font-weight: 300;
225 | color: #fff;
226 | outline: none;
227 | }
228 |
229 | .no-touch .dl-menuwrapper li a:hover {
230 | background: rgba(255,248,213,0.1);
231 | }
232 |
233 | .dl-menuwrapper li.dl-back > a {
234 | padding-left: 30px;
235 | background: rgba(0,0,0,0.1);
236 | }
237 |
238 | .dl-menuwrapper li.dl-back:after,
239 | .dl-menuwrapper li > a:not(:only-child):after {
240 | position: absolute;
241 | top: 0;
242 | line-height: 50px;
243 | font-family: 'icomoon';
244 | speak: none;
245 | -webkit-font-smoothing: antialiased;
246 | content: "\e000";
247 | }
248 |
249 | .dl-menuwrapper li.dl-back:after {
250 | left: 10px;
251 | color: rgba(212,204,198,0.3);
252 | -webkit-transform: rotate(180deg);
253 | transform: rotate(180deg);
254 | }
255 |
256 | .dl-menuwrapper li > a:after {
257 | right: 10px;
258 | color: rgba(0,0,0,0.15);
259 | }
260 |
261 | .dl-menuwrapper .dl-menu {
262 | margin: 5px 0 0 0;
263 | position: absolute;
264 | width: 100%;
265 | opacity: 0;
266 | pointer-events: none;
267 | -webkit-transform: translateY(10px);
268 | transform: translateY(10px);
269 | -webkit-backface-visibility: hidden;
270 | backface-visibility: hidden;
271 | }
272 |
273 | .dl-menuwrapper .dl-menu.dl-menu-toggle {
274 | transition: all 0.3s ease;
275 | }
276 |
277 | .dl-menuwrapper .dl-menu.dl-menuopen {
278 | opacity: 1;
279 | pointer-events: auto;
280 | -webkit-transform: translateY(0px);
281 | transform: translateY(0px);
282 | background-color: #999;
283 | color: #777;
284 | margin-left:8px;
285 | }
286 |
287 | /* Hide the inner submenus */
288 | .dl-menuwrapper li .dl-submenu {
289 | display: none;
290 | }
291 |
292 | /*
293 | When a submenu is openend, we will hide all li siblings.
294 | For that we give a class to the parent menu called "dl-subview".
295 | We also hide the submenu link.
296 | The opened submenu will get the class "dl-subviewopen".
297 | All this is done for any sub-level being entered.
298 | */
299 | .dl-menu.dl-subview li,
300 | .dl-menu.dl-subview li.dl-subviewopen > a,
301 | .dl-menu.dl-subview li.dl-subview > a {
302 | display: none;
303 | }
304 |
305 | .dl-menu.dl-subview li.dl-subview,
306 | .dl-menu.dl-subview li.dl-subview .dl-submenu,
307 | .dl-menu.dl-subview li.dl-subviewopen,
308 | .dl-menu.dl-subview li.dl-subviewopen > .dl-submenu,
309 | .dl-menu.dl-subview li.dl-subviewopen > .dl-submenu > li {
310 | display: block;
311 | }
312 |
313 | /* Dynamically added submenu outside of the menu context */
314 | .dl-menuwrapper > .dl-submenu {
315 | position: absolute;
316 | width: 100%;
317 | top: 50px;
318 | left: 0;
319 | margin: 0;
320 | }
321 |
322 | /* Animation classes for moving out and in */
323 |
324 | .dl-menu.dl-animate-out-1 {
325 | -webkit-animation: MenuAnimOut1 0.4s;
326 | animation: MenuAnimOut1 0.4s;
327 | }
328 |
329 | .dl-menu.dl-animate-out-2 {
330 | -webkit-animation: MenuAnimOut2 0.3s ease-in-out;
331 | animation: MenuAnimOut2 0.3s ease-in-out;
332 | }
333 |
334 | .dl-menu.dl-animate-out-3 {
335 | -webkit-animation: MenuAnimOut3 0.4s ease;
336 | animation: MenuAnimOut3 0.4s ease;
337 | }
338 |
339 | .dl-menu.dl-animate-out-4 {
340 | -webkit-animation: MenuAnimOut4 0.4s ease;
341 | animation: MenuAnimOut4 0.4s ease;
342 | }
343 |
344 | .dl-menu.dl-animate-out-5 {
345 | -webkit-animation: MenuAnimOut5 0.4s ease;
346 | animation: MenuAnimOut5 0.4s ease;
347 | }
348 |
349 | @-webkit-keyframes MenuAnimOut1 {
350 | 0% { }
351 | 50% {
352 | -webkit-transform: translateZ(-250px) rotateY(30deg);
353 | }
354 | 75% {
355 | -webkit-transform: translateZ(-372.5px) rotateY(15deg);
356 | opacity: .5;
357 | }
358 | 100% {
359 | -webkit-transform: translateZ(-500px) rotateY(0deg);
360 | opacity: 0;
361 | }
362 | }
363 |
364 | @-webkit-keyframes MenuAnimOut2 {
365 | 0% { }
366 | 100% {
367 | -webkit-transform: translateX(-100%);
368 | opacity: 0;
369 | }
370 | }
371 |
372 | @-webkit-keyframes MenuAnimOut3 {
373 | 0% { }
374 | 100% {
375 | -webkit-transform: translateZ(300px);
376 | opacity: 0;
377 | }
378 | }
379 |
380 | @-webkit-keyframes MenuAnimOut4 {
381 | 0% { }
382 | 100% {
383 | -webkit-transform: translateZ(-300px);
384 | opacity: 0;
385 | }
386 | }
387 |
388 | @-webkit-keyframes MenuAnimOut5 {
389 | 0% { }
390 | 100% {
391 | -webkit-transform: translateY(40%);
392 | opacity: 0;
393 | }
394 | }
395 |
396 | @keyframes MenuAnimOut1 {
397 | 0% { }
398 | 50% {
399 | -webkit-transform: translateZ(-250px) rotateY(30deg);
400 | transform: translateZ(-250px) rotateY(30deg);
401 | }
402 | 75% {
403 | -webkit-transform: translateZ(-372.5px) rotateY(15deg);
404 | transform: translateZ(-372.5px) rotateY(15deg);
405 | opacity: .5;
406 | }
407 | 100% {
408 | -webkit-transform: translateZ(-500px) rotateY(0deg);
409 | transform: translateZ(-500px) rotateY(0deg);
410 | opacity: 0;
411 | }
412 | }
413 |
414 | @keyframes MenuAnimOut2 {
415 | 0% { }
416 | 100% {
417 | -webkit-transform: translateX(-100%);
418 | transform: translateX(-100%);
419 | opacity: 0;
420 | }
421 | }
422 |
423 | @keyframes MenuAnimOut3 {
424 | 0% { }
425 | 100% {
426 | -webkit-transform: translateZ(300px);
427 | transform: translateZ(300px);
428 | opacity: 0;
429 | }
430 | }
431 |
432 | @keyframes MenuAnimOut4 {
433 | 0% { }
434 | 100% {
435 | -webkit-transform: translateZ(-300px);
436 | transform: translateZ(-300px);
437 | opacity: 0;
438 | }
439 | }
440 |
441 | @keyframes MenuAnimOut5 {
442 | 0% { }
443 | 100% {
444 | -webkit-transform: translateY(40%);
445 | transform: translateY(40%);
446 | opacity: 0;
447 | }
448 | }
449 |
450 | .dl-menu.dl-animate-in-1 {
451 | -webkit-animation: MenuAnimIn1 0.3s;
452 | animation: MenuAnimIn1 0.3s;
453 | }
454 |
455 | .dl-menu.dl-animate-in-2 {
456 | -webkit-animation: MenuAnimIn2 0.3s ease-in-out;
457 | animation: MenuAnimIn2 0.3s ease-in-out;
458 | }
459 |
460 | .dl-menu.dl-animate-in-3 {
461 | -webkit-animation: MenuAnimIn3 0.4s ease;
462 | animation: MenuAnimIn3 0.4s ease;
463 | }
464 |
465 | .dl-menu.dl-animate-in-4 {
466 | -webkit-animation: MenuAnimIn4 0.4s ease;
467 | animation: MenuAnimIn4 0.4s ease;
468 | }
469 |
470 | .dl-menu.dl-animate-in-5 {
471 | -webkit-animation: MenuAnimIn5 0.4s ease;
472 | animation: MenuAnimIn5 0.4s ease;
473 | }
474 |
475 | @-webkit-keyframes MenuAnimIn1 {
476 | 0% {
477 | -webkit-transform: translateZ(-500px) rotateY(0deg);
478 | opacity: 0;
479 | }
480 | 20% {
481 | -webkit-transform: translateZ(-250px) rotateY(30deg);
482 | opacity: 0.5;
483 | }
484 | 100% {
485 | -webkit-transform: translateZ(0px) rotateY(0deg);
486 | opacity: 1;
487 | }
488 | }
489 |
490 | @-webkit-keyframes MenuAnimIn2 {
491 | 0% {
492 | -webkit-transform: translateX(-100%);
493 | opacity: 0;
494 | }
495 | 100% {
496 | -webkit-transform: translateX(0px);
497 | opacity: 1;
498 | }
499 | }
500 |
501 | @-webkit-keyframes MenuAnimIn3 {
502 | 0% {
503 | -webkit-transform: translateZ(300px);
504 | opacity: 0;
505 | }
506 | 100% {
507 | -webkit-transform: translateZ(0px);
508 | opacity: 1;
509 | }
510 | }
511 |
512 | @-webkit-keyframes MenuAnimIn4 {
513 | 0% {
514 | -webkit-transform: translateZ(-300px);
515 | opacity: 0;
516 | }
517 | 100% {
518 | -webkit-transform: translateZ(0px);
519 | opacity: 1;
520 | }
521 | }
522 |
523 | @-webkit-keyframes MenuAnimIn5 {
524 | 0% {
525 | -webkit-transform: translateY(40%);
526 | opacity: 0;
527 | }
528 | 100% {
529 | -webkit-transform: translateY(0);
530 | opacity: 1;
531 | }
532 | }
533 |
534 | @keyframes MenuAnimIn1 {
535 | 0% {
536 | -webkit-transform: translateZ(-500px) rotateY(0deg);
537 | transform: translateZ(-500px) rotateY(0deg);
538 | opacity: 0;
539 | }
540 | 20% {
541 | -webkit-transform: translateZ(-250px) rotateY(30deg);
542 | transform: translateZ(-250px) rotateY(30deg);
543 | opacity: 0.5;
544 | }
545 | 100% {
546 | -webkit-transform: translateZ(0px) rotateY(0deg);
547 | transform: translateZ(0px) rotateY(0deg);
548 | opacity: 1;
549 | }
550 | }
551 |
552 | @keyframes MenuAnimIn2 {
553 | 0% {
554 | -webkit-transform: translateX(-100%);
555 | transform: translateX(-100%);
556 | opacity: 0;
557 | }
558 | 100% {
559 | -webkit-transform: translateX(0px);
560 | transform: translateX(0px);
561 | opacity: 1;
562 | }
563 | }
564 |
565 | @keyframes MenuAnimIn3 {
566 | 0% {
567 | -webkit-transform: translateZ(300px);
568 | transform: translateZ(300px);
569 | opacity: 0;
570 | }
571 | 100% {
572 | -webkit-transform: translateZ(0px);
573 | transform: translateZ(0px);
574 | opacity: 1;
575 | }
576 | }
577 |
578 | @keyframes MenuAnimIn4 {
579 | 0% {
580 | -webkit-transform: translateZ(-300px);
581 | transform: translateZ(-300px);
582 | opacity: 0;
583 | }
584 | 100% {
585 | -webkit-transform: translateZ(0px);
586 | transform: translateZ(0px);
587 | opacity: 1;
588 | }
589 | }
590 |
591 | @keyframes MenuAnimIn5 {
592 | 0% {
593 | -webkit-transform: translateY(40%);
594 | transform: translateY(40%);
595 | opacity: 0;
596 | }
597 | 100% {
598 | -webkit-transform: translateY(0);
599 | transform: translateY(0);
600 | opacity: 1;
601 | }
602 | }
603 |
604 | .dl-menuwrapper > .dl-submenu.dl-animate-in-1 {
605 | -webkit-animation: SubMenuAnimIn1 0.4s ease;
606 | animation: SubMenuAnimIn1 0.4s ease;
607 | }
608 |
609 | .dl-menuwrapper > .dl-submenu.dl-animate-in-2 {
610 | -webkit-animation: SubMenuAnimIn2 0.3s ease-in-out;
611 | animation: SubMenuAnimIn2 0.3s ease-in-out;
612 | }
613 |
614 | .dl-menuwrapper > .dl-submenu.dl-animate-in-3 {
615 | -webkit-animation: SubMenuAnimIn3 0.4s ease;
616 | animation: SubMenuAnimIn3 0.4s ease;
617 | }
618 |
619 | .dl-menuwrapper > .dl-submenu.dl-animate-in-4 {
620 | -webkit-animation: SubMenuAnimIn4 0.4s ease;
621 | animation: SubMenuAnimIn4 0.4s ease;
622 | }
623 |
624 | .dl-menuwrapper > .dl-submenu.dl-animate-in-5 {
625 | -webkit-animation: SubMenuAnimIn5 0.4s ease;
626 | animation: SubMenuAnimIn5 0.4s ease;
627 | }
628 |
629 | @-webkit-keyframes SubMenuAnimIn1 {
630 | 0% {
631 | -webkit-transform: translateX(50%);
632 | opacity: 0;
633 | }
634 | 100% {
635 | -webkit-transform: translateX(0px);
636 | opacity: 1;
637 | }
638 | }
639 |
640 | @-webkit-keyframes SubMenuAnimIn2 {
641 | 0% {
642 | -webkit-transform: translateX(100%);
643 | opacity: 0;
644 | }
645 | 100% {
646 | -webkit-transform: translateX(0px);
647 | opacity: 1;
648 | }
649 | }
650 |
651 | @-webkit-keyframes SubMenuAnimIn3 {
652 | 0% {
653 | -webkit-transform: translateZ(-300px);
654 | opacity: 0;
655 | }
656 | 100% {
657 | -webkit-transform: translateZ(0px);
658 | opacity: 1;
659 | }
660 | }
661 |
662 | @-webkit-keyframes SubMenuAnimIn4 {
663 | 0% {
664 | -webkit-transform: translateZ(300px);
665 | opacity: 0;
666 | }
667 | 100% {
668 | -webkit-transform: translateZ(0px);
669 | opacity: 1;
670 | }
671 | }
672 |
673 | @-webkit-keyframes SubMenuAnimIn5 {
674 | 0% {
675 | -webkit-transform: translateZ(-200px);
676 | opacity: 0;
677 | }
678 | 100% {
679 | -webkit-transform: translateZ(0);
680 | opacity: 1;
681 | }
682 | }
683 |
684 | @keyframes SubMenuAnimIn1 {
685 | 0% {
686 | -webkit-transform: translateX(50%);
687 | transform: translateX(50%);
688 | opacity: 0;
689 | }
690 | 100% {
691 | -webkit-transform: translateX(0px);
692 | transform: translateX(0px);
693 | opacity: 1;
694 | }
695 | }
696 |
697 | @keyframes SubMenuAnimIn2 {
698 | 0% {
699 | -webkit-transform: translateX(100%);
700 | transform: translateX(100%);
701 | opacity: 0;
702 | }
703 | 100% {
704 | -webkit-transform: translateX(0px);
705 | transform: translateX(0px);
706 | opacity: 1;
707 | }
708 | }
709 |
710 | @keyframes SubMenuAnimIn3 {
711 | 0% {
712 | -webkit-transform: translateZ(-300px);
713 | transform: translateZ(-300px);
714 | opacity: 0;
715 | }
716 | 100% {
717 | -webkit-transform: translateZ(0px);
718 | transform: translateZ(0px);
719 | opacity: 1;
720 | }
721 | }
722 |
723 | @keyframes SubMenuAnimIn4 {
724 | 0% {
725 | -webkit-transform: translateZ(300px);
726 | transform: translateZ(300px);
727 | opacity: 0;
728 | }
729 | 100% {
730 | -webkit-transform: translateZ(0px);
731 | transform: translateZ(0px);
732 | opacity: 1;
733 | }
734 | }
735 |
736 | @keyframes SubMenuAnimIn5 {
737 | 0% {
738 | -webkit-transform: translateZ(-200px);
739 | transform: translateZ(-200px);
740 | opacity: 0;
741 | }
742 | 100% {
743 | -webkit-transform: translateZ(0);
744 | transform: translateZ(0);
745 | opacity: 1;
746 | }
747 | }
748 |
749 | .dl-menuwrapper > .dl-submenu.dl-animate-out-1 {
750 | -webkit-animation: SubMenuAnimOut1 0.4s ease;
751 | animation: SubMenuAnimOut1 0.4s ease;
752 | }
753 |
754 | .dl-menuwrapper > .dl-submenu.dl-animate-out-2 {
755 | -webkit-animation: SubMenuAnimOut2 0.3s ease-in-out;
756 | animation: SubMenuAnimOut2 0.3s ease-in-out;
757 | }
758 |
759 | .dl-menuwrapper > .dl-submenu.dl-animate-out-3 {
760 | -webkit-animation: SubMenuAnimOut3 0.4s ease;
761 | animation: SubMenuAnimOut3 0.4s ease;
762 | }
763 |
764 | .dl-menuwrapper > .dl-submenu.dl-animate-out-4 {
765 | -webkit-animation: SubMenuAnimOut4 0.4s ease;
766 | animation: SubMenuAnimOut4 0.4s ease;
767 | }
768 |
769 | .dl-menuwrapper > .dl-submenu.dl-animate-out-5 {
770 | -webkit-animation: SubMenuAnimOut5 0.4s ease;
771 | animation: SubMenuAnimOut5 0.4s ease;
772 | }
773 |
774 | @-webkit-keyframes SubMenuAnimOut1 {
775 | 0% {
776 | -webkit-transform: translateX(0%);
777 | opacity: 1;
778 | }
779 | 100% {
780 | -webkit-transform: translateX(50%);
781 | opacity: 0;
782 | }
783 | }
784 |
785 | @-webkit-keyframes SubMenuAnimOut2 {
786 | 0% {
787 | -webkit-transform: translateX(0%);
788 | opacity: 1;
789 | }
790 | 100% {
791 | -webkit-transform: translateX(100%);
792 | opacity: 0;
793 | }
794 | }
795 |
796 | @-webkit-keyframes SubMenuAnimOut3 {
797 | 0% {
798 | -webkit-transform: translateZ(0px);
799 | opacity: 1;
800 | }
801 | 100% {
802 | -webkit-transform: translateZ(-300px);
803 | opacity: 0;
804 | }
805 | }
806 |
807 | @-webkit-keyframes SubMenuAnimOut4 {
808 | 0% {
809 | -webkit-transform: translateZ(0px);
810 | opacity: 1;
811 | }
812 | 100% {
813 | -webkit-transform: translateZ(300px);
814 | opacity: 0;
815 | }
816 | }
817 |
818 | @-webkit-keyframes SubMenuAnimOut5 {
819 | 0% {
820 | -webkit-transform: translateZ(0);
821 | opacity: 1;
822 | }
823 | 100% {
824 | -webkit-transform: translateZ(-200px);
825 | opacity: 0;
826 | }
827 | }
828 |
829 | @keyframes SubMenuAnimOut1 {
830 | 0% {
831 | -webkit-transform: translateX(0%);
832 | transform: translateX(0%);
833 | opacity: 1;
834 | }
835 | 100% {
836 | -webkit-transform: translateX(50%);
837 | transform: translateX(50%);
838 | opacity: 0;
839 | }
840 | }
841 |
842 | @keyframes SubMenuAnimOut2 {
843 | 0% {
844 | -webkit-transform: translateX(0%);
845 | transform: translateX(0%);
846 | opacity: 1;
847 | }
848 | 100% {
849 | -webkit-transform: translateX(100%);
850 | transform: translateX(100%);
851 | opacity: 0;
852 | }
853 | }
854 |
855 | @keyframes SubMenuAnimOut3 {
856 | 0% {
857 | -webkit-transform: translateZ(0px);
858 | transform: translateZ(0px);
859 | opacity: 1;
860 | }
861 | 100% {
862 | -webkit-transform: translateZ(-300px);
863 | transform: translateZ(-300px);
864 | opacity: 0;
865 | }
866 | }
867 |
868 | @keyframes SubMenuAnimOut4 {
869 | 0% {
870 | -webkit-transform: translateZ(0px);
871 | transform: translateZ(0px);
872 | opacity: 1;
873 | }
874 | 100% {
875 | -webkit-transform: translateZ(300px);
876 | transform: translateZ(300px);
877 | opacity: 0;
878 | }
879 | }
880 |
881 | @keyframes SubMenuAnimOut5 {
882 | 0% {
883 | -webkit-transform: translateZ(0);
884 | transform: translateZ(0);
885 | opacity: 1;
886 | }
887 | 100% {
888 | -webkit-transform: translateZ(-200px);
889 | transform: translateZ(-200px);
890 | opacity: 0;
891 | }
892 | }
893 |
894 | /* No JS Fallback */
895 | .no-js .dl-menuwrapper .dl-menu {
896 | position: relative;
897 | opacity: 1;
898 | -webkit-transform: none;
899 | transform: none;
900 | }
901 |
902 | .no-js .dl-menuwrapper li .dl-submenu {
903 | display: block;
904 | }
905 |
906 | .no-js .dl-menuwrapper li.dl-back {
907 | display: none;
908 | }
909 |
910 | .no-js .dl-menuwrapper li > a:not(:only-child) {
911 | background: rgba(0,0,0,0.1);
912 | }
913 |
914 | .no-js .dl-menuwrapper li > a:not(:only-child):after {
915 | content: '';
916 | }
917 |
918 | /* Colors for demos */
919 |
920 | /* Demo 1 */
921 | .demo-1 .dl-menuwrapper button {
922 | background: #c62860;
923 | }
924 |
925 | .demo-1 .dl-menuwrapper button:hover,
926 | .demo-1 .dl-menuwrapper button.dl-active,
927 | .demo-1 .dl-menuwrapper ul {
928 | background: #9e1847;
929 | }
930 |
931 | /* Demo 2 */
932 | .demo-2 .dl-menuwrapper button {
933 | background: #e86814;
934 | }
935 |
936 | .demo-2 .dl-menuwrapper button:hover,
937 | .demo-2 .dl-menuwrapper button.dl-active,
938 | .demo-2 .dl-menuwrapper ul {
939 | background: #D35400;
940 | }
941 |
942 | /* Demo 3 */
943 | .demo-3 .dl-menuwrapper button {
944 | background: #08cbc4;
945 | }
946 |
947 | .demo-3 .dl-menuwrapper button:hover,
948 | .demo-3 .dl-menuwrapper button.dl-active,
949 | .demo-3 .dl-menuwrapper ul {
950 | background: #00b4ae;
951 | }
952 |
953 | /* Demo 4 */
954 | .demo-4 .dl-menuwrapper button {
955 | background: #90b912;
956 | }
957 |
958 | .demo-4 .dl-menuwrapper button:hover,
959 | .demo-4 .dl-menuwrapper button.dl-active,
960 | .demo-4 .dl-menuwrapper ul {
961 | background: #79a002;
962 | }
963 |
964 | /* Demo 5 */
965 | .demo-5 .dl-menuwrapper button {
966 | background: #744783;
967 | }
968 |
969 | .demo-5 .dl-menuwrapper button:hover,
970 | .demo-5 .dl-menuwrapper button.dl-active,
971 | .demo-5 .dl-menuwrapper ul {
972 | background: #643771;
973 | }
974 |
975 |
976 | /* Table of contents */
977 |
978 | div#table-of-contents ul li {
979 | margin: 8px 0px 8px 22px;
980 | font-size: 90%;
981 | list-style: square;
982 | }
983 | div#table-of-contents ul {
984 | background-color: #F7F7F7;
985 | padding: 5px;
986 | border-radius: 5px;
987 | max-width: 100%;
988 | color: gray;
989 | }
990 |
991 | div#table-of-contents ul li ul {
992 | padding-left:8px;
993 |
994 | }
995 |
996 | div#table-of-contents ul li ul li::before {
997 | content: "– ";
998 | }
999 |
1000 | div#table-of-contents >ul::before {
1001 | content: "Table of Contents";
1002 | font-weight: 500;
1003 | color: #555;
1004 | text-align:center;
1005 | margin-left:auto;
1006 | margin-right:auto;
1007 | width:70px;
1008 | margin-top:30px;
1009 | margin-bottom:30px;
1010 | padding-left:10px;
1011 | }
1012 |
1013 | li.dropdownActive a {
1014 | font-weight: bold;
1015 | }
1016 |
1017 |
1018 | .post-content a.fa-rss {
1019 | color: orange;
1020 | }
1021 |
1022 |
1023 | .navbar-inverse .navbar-nav > li > a {
1024 | background-color: transparent;
1025 | margin-top:10px;
1026 | }
1027 |
1028 | .post-content .rssfeedLink {
1029 | color: #248EC2;
1030 | }
1031 |
1032 | footer {
1033 | font-size: smaller;
1034 | }
1035 |
1036 | /* FAQ page */
1037 | #accordion .panel-heading {
1038 | font-size: 18px;
1039 | }
1040 |
1041 | a.accordion-toggle, a.accordion-collapsed {
1042 | font-size: 24px;
1043 | text-decoration: none;
1044 | }
1045 |
1046 | /* navgoco sidebar styles (customized) */
1047 | .nav, .nav ul, .nav li {
1048 | list-style: none;
1049 | }
1050 |
1051 | .sidebar-logo {
1052 | max-width:180px;
1053 | margin-top:8px;
1054 | padding-left:0px;
1055 | margin-bottom:20px;
1056 | }
1057 |
1058 | .nav ul {
1059 | padding: 0;
1060 | /*margin: 0 0 0 18px;*/
1061 | margin:0px;
1062 | }
1063 |
1064 | .nav {
1065 | /* padding: 4px;*/
1066 | padding:0px;
1067 | margin: 0px;
1068 | }
1069 |
1070 | .nav > li {
1071 | margin: 1px 0;
1072 | }
1073 |
1074 | .nav > li li {
1075 | margin: 2px 0;
1076 | }
1077 |
1078 | .nav a {
1079 | color: #333;
1080 | display: block;
1081 | outline: none;
1082 | /*-webkit-border-radius: 4px;
1083 | -moz-border-radius: 4px;
1084 | border-radius: 4px;*/
1085 | text-decoration: none;
1086 | }
1087 |
1088 | .nav li > a > span {
1089 | float: right;
1090 | font-size: 28px;
1091 | font-weight: bolder;
1092 | }
1093 |
1094 |
1095 | /* SOCIAL MEDIA */
1096 |
1097 | /* Don't have link button after */
1098 | .no-after:after{content:none !important;}
1099 |
1100 | .fa:hover{
1101 | color:#79173A;
1102 | }
1103 |
1104 | .social-icon {
1105 | float:left;
1106 | margin-left:5px;
1107 | margin-right:5px;
1108 | }
1109 |
1110 | /* Shine, baby, shine! */
1111 | .shiny figure {
1112 | position: relative;
1113 | }
1114 | .shiny figure::before {
1115 | position: absolute;
1116 | top: 0;
1117 | left: -75%;
1118 | z-index: 2;
1119 | display: block;
1120 | content: '';
1121 | width: 100px;
1122 | height: 200px;
1123 | background: -webkit-linear-gradient(left, rgba(255,255,255,0) 0%, rgba(255,255,255,.3) 100%);
1124 | background: linear-gradient(to right, rgba(255,255,255,0) 0%, rgba(255,255,255,.3) 100%);
1125 | -webkit-transform: skewX(-25deg);
1126 | transform: skewX(-25deg);
1127 | }
1128 | .shiny figure:hover::before {
1129 | -webkit-animation: shine 1s;
1130 | animation: shine 1s;
1131 | }
1132 | @-webkit-keyframes shine {
1133 | 100% {
1134 | left: 100%;
1135 | }
1136 | }
1137 | @keyframes shine {
1138 | 100% {
1139 | left: 100%;
1140 | }
1141 | }
1142 |
1143 | .shine a:hover {
1144 | background-color:none;
1145 | }
1146 |
1147 |
1148 | .nav a:hover, .nav li.active > a {
1149 | background-color: #8D8D8D;
1150 | color: #f5f5f5;
1151 | }
1152 |
1153 | .nav > li.active > a {
1154 | background-color: #006D0E;
1155 | }
1156 |
1157 | .nav li a {
1158 | font-size: 18px;
1159 | line-height: 18px;
1160 | padding: 2px 10px;
1161 | background-color: #f1f1f1;
1162 | }
1163 |
1164 | .nav > li > a {
1165 | font-size: 20px;
1166 | line-height: 20px;
1167 | padding: 4px 10px;
1168 | }
1169 |
1170 | ul#mysidebar {
1171 | border-radius:0px;
1172 | }
1173 |
1174 | .nav ul li ul li a {
1175 | padding-left:40px;
1176 | }
1177 |
1178 | .nav li.thirdlevel > a {
1179 | color: #248EC2;
1180 | font-weight:bold;
1181 | padding-left:20px;
1182 | background-color: whitesmoke !important;
1183 | }
1184 |
1185 |
1186 | .nav ul li a {
1187 | background-color: #FAFAFA;
1188 | }
1189 |
1190 | .nav li a {
1191 | padding-right:10px;
1192 | }
1193 |
1194 | .nav li a:hover {
1195 | background-color: #8D8D8D;
1196 | }
1197 |
1198 | .nav ul li a {
1199 | border-top:1px solid whitesmoke;
1200 | padding-left:10px;
1201 | }
1202 | /* end sidebar */
1203 |
1204 | .navbar-inverse .navbar-nav > .active > a, .navbar-inverse .navbar-nav > .active > a:hover, .navbar-inverse .navbar-nav > .active > a:focus {
1205 | border-radius:5px;
1206 | }
1207 |
1208 | .navbar-inverse .navbar-nav>.open>a, .navbar-inverse .navbar-nav>.open>a:focus, .navbar-inverse .navbar-nav>.open>a:hover {
1209 | border-radius: 5px;
1210 | }
1211 |
1212 | span.projectTitle {
1213 | font-family: Helvetica;
1214 | font-weight: bold;
1215 | }
1216 |
1217 | .footer {
1218 | text-align: right;
1219 | }
1220 |
1221 | .footerMeta {
1222 | background-color: whitesmoke;
1223 | padding: 10px;
1224 | max-width: 250px;
1225 | border-radius: 5px;
1226 | margin-top: 50px;
1227 | font-style:italic;
1228 | font-size:12px;
1229 | }
1230 |
1231 | img.screenshotSmall {
1232 | max-width: 300px;
1233 | }
1234 |
1235 |
1236 | dl dt p {
1237 | margin-left:20px;
1238 | }
1239 |
1240 |
1241 | dl dd {
1242 | margin-top:10px;
1243 | margin-bottom:10px;
1244 | }
1245 |
1246 | dl.dl-horizontal dd {
1247 | padding-top: 20px;
1248 | }
1249 |
1250 | figcaption {
1251 |
1252 | padding-bottom:12px;
1253 | padding-top:6px;
1254 | max-width: 90%;
1255 | margin-bottom:20px;
1256 | font-style: italic;
1257 | color: gray;
1258 |
1259 | }
1260 |
1261 | .testing {
1262 | color: orange;
1263 | }
1264 |
1265 | .preference {
1266 | color: red;
1267 | }
1268 |
1269 |
1270 | table.dataTable thead {
1271 | background-color: #444;
1272 | }
1273 | table td {
1274 | hyphens: auto;
1275 | }
1276 |
1277 | section table tr.success {
1278 | background-color: #dff0d8 !important;
1279 | }
1280 |
1281 | table tr.info {
1282 | background-color: #d9edf7 !important;
1283 | }
1284 |
1285 | section table tr.warning, table tr.testing, table tr.testing > td.sorting_1 {
1286 | background-color: #fcf8e3 !important;
1287 | }
1288 | section table tr.danger, table tr.preference, table tr.preference > td.sorting_1 {
1289 | background-color: #f2dede !important;
1290 | }
1291 |
1292 | .orange {
1293 | color: orange;
1294 | }
1295 |
1296 | table.profile thead tr th {
1297 | background-color: #248ec2;
1298 | }
1299 |
1300 | table.request thead tr th {
1301 | background-color: #ED1951;
1302 | }
1303 |
1304 | .audienceLabel {
1305 | margin: 10px;
1306 | float: right;
1307 | border:1px solid #dedede;
1308 | padding:7px;
1309 | }
1310 |
1311 | .prefaceAudienceLabel {
1312 | color: gray;
1313 | text-align: center;
1314 | margin:5px;
1315 | }
1316 | span.myLabel {
1317 | padding-left:10px;
1318 | padding-right:10px;
1319 | }
1320 |
1321 | button.cursorNorm {
1322 | cursor: default;
1323 | }
1324 |
1325 | a.dropdown-toggle, .navbar-inverse .navbar-nav > li > a {
1326 | margin-left: 10px;
1327 | }
1328 |
1329 | hr.faded {
1330 | border: 0;
1331 | height: 1px;
1332 | background-image: -webkit-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
1333 | background-image: -moz-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
1334 | background-image: -ms-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
1335 | background-image: -o-linear-gradient(left, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));
1336 | }
1337 |
1338 | hr.shaded {
1339 | height: 12px;
1340 | border: 0;
1341 | box-shadow: inset 0 6px 6px -6px rgba(0,0,0,0.5);
1342 | margin-top: 70px;
1343 | background: white;
1344 | width: 100%;
1345 | margin-bottom: 10px;
1346 | }
1347 |
1348 | .fa-6x{font-size:900%;}
1349 | .fa-7x{font-size:1100%;}
1350 | .fa-8x{font-size:1300%;}
1351 | .fa-9x{font-size:1500%;}
1352 | .fa-10x{font-size:1700%;}
1353 |
1354 | i.border {
1355 | padding: 10px 20px;
1356 | background-color: whitesmoke;
1357 | }
1358 |
1359 | a[data-toggle] {
1360 | color: #248EC2;
1361 | }
1362 |
1363 | .summary {
1364 | font-size:120%;
1365 | color: #808080;
1366 | margin:20px 0px 20px 0px;
1367 | border-left: 5px solid #ED1951;
1368 | padding-left: 10px;
1369 |
1370 | }
1371 |
1372 | .summary:before {
1373 | content: "Summary: ";
1374 | font-weight: bold;
1375 | }
1376 |
1377 |
1378 | a.fa.fa-envelope-o.mailto {
1379 | font-weight: 600;
1380 | }
1381 |
1382 | h3 {color: #ED1951; font-weight:normal; font-size:130%;}
1383 | h4 {color: #808080; font-weight:normal; font-size:120%; font-style:italic;}
1384 |
1385 | .alert, .callout {
1386 | overflow: hidden;
1387 | }
1388 |
1389 | .nav-tabs > li.active > a, .nav-tabs > li.active > a:hover, .nav-tabs > li.active > a:focus {
1390 | background-color: #248ec2;
1391 | color: white;
1392 | }
1393 |
1394 | ol li ol li {list-style-type: lower-alpha;}
1395 | ol li ul li {list-style-type: disc;}
1396 |
1397 | li img {clear:both; }
1398 |
1399 | div#table-of-contents ul li ul li {
1400 | list-style-type: none;
1401 | margin: 5px 0px 0px 0px;
1402 | }
1403 |
1404 | .tab-content {
1405 | padding: 15px;
1406 | background-color: #FAFAFA;
1407 | }
1408 |
1409 | span.tagTitle {font-weight: 500;}
1410 |
1411 | li.activeSeries {
1412 | font-weight: bold;
1413 | }
1414 |
1415 | .seriesContext .dropdown-menu li.active {
1416 | font-weight: bold;
1417 | margin-left: 43px;
1418 | font-size:18px;
1419 | }
1420 |
1421 | .alert-warning {
1422 | color: #444;
1423 | }
1424 |
1425 | div.alert code, h2 code {
1426 | background-color: transparent !important;
1427 | }
1428 | /* without this, the links in these notes aren't visible.*/
1429 | .alert a {
1430 | text-decoration: underline;
1431 | }
1432 |
1433 | div.tags {padding: 10px 5px;}
1434 |
1435 | .tabLabel {
1436 | font-weight: normal;
1437 | }
1438 |
1439 | hr {
1440 | border: 0;
1441 | border-bottom: 1px dashed #ccc;
1442 | background: #999;
1443 | margin: 30px 0px;
1444 | width: 90%;
1445 | margin-left: auto;
1446 | margin-right: auto;
1447 | }
1448 |
1449 | button.cursorNorm {
1450 | cursor: pointer;
1451 | }
1452 |
1453 | h2 {
1454 | font-size:140%;
1455 | line-height:29px;
1456 | }
1457 | span.otherProgrammingLanguages {
1458 | font-style: normal;
1459 | }
1460 |
1461 | a[data-toggle="tooltip"] {
1462 | color: #649345;
1463 | font-style: italic;
1464 | cursor: default;
1465 | }
1466 |
1467 | .seriesNext, .seriesContext {
1468 | margin-top: 15px;
1469 | margin-bottom: 15px;
1470 | }
1471 |
1472 | .seriescontext ol li {
1473 | list-style-type: upper-roman;
1474 | }
1475 |
1476 | ol.series li {
1477 | list-style-type: decimal;
1478 | margin-left: 40px;
1479 | padding-left: 0px;
1480 | }
1481 |
1482 | .siteTagline {
1483 | font-size: 200%;
1484 | font-weight: bold;
1485 | color: silver;
1486 | font-family: monospace;
1487 | text-align: center;
1488 | line-height: 10px;
1489 | margin: 20px 0px;
1490 | display: block;
1491 | }
1492 |
1493 | .versionTagline {
1494 | text-align: center;
1495 | margin-bottom: 20px;
1496 | font-family: courier;
1497 | font-color: silver;
1498 | color: #444;
1499 | display:block;
1500 | }
1501 |
1502 | /* not sure if using this ...*/
1503 | .navbar-inverse .navbar-collapse, .navbar-inverse .navbar-form {
1504 | border-color: #248ec2 !important;
1505 | }
1506 |
1507 | #mysidebar .nav ul {
1508 | background-color: #FAFAFA;
1509 | }
1510 | .nav ul.series li {
1511 | list-style: decimal;
1512 | font-size:12px;
1513 | }
1514 |
1515 | .nav ul.series li a:hover {
1516 | background-color: gray;
1517 | }
1518 | .nav ul.series {
1519 | padding-left: 30px;
1520 | }
1521 |
1522 | .nav ul.series {
1523 | background-color: #FAFAFA;
1524 | }
1525 |
1526 | /*
1527 | a.dropdown-toggle.otherProgLangs {
1528 | color: #f7e68f !important;
1529 | }
1530 | */
1531 |
1532 | span.muted {color: #666;}
1533 |
1534 | table code {background-color: transparent;}
1535 |
1536 | .highlight .err {
1537 | color: #a61717;
1538 | background-color: transparent !important;
1539 | }
1540 |
1541 | table p {
1542 | margin-top: 12px;
1543 | margin-bottom: 12px;
1544 | }
1545 |
1546 | pre, table code {
1547 | white-space: pre-wrap; /* css-3 */
1548 | white-space: -moz-pre-wrap; /* Mozilla, since 1999 */
1549 | white-space: -pre-wrap; /* Opera 4-6 */
1550 | white-space: -o-pre-wrap; /* Opera 7 */
1551 | word-wrap: break-word; /* Internet Explorer 5.5+ */
1552 | }
1553 |
1554 | pre {
1555 | margin: 25px 0px;
1556 | }
1557 |
1558 | #json-box-container pre {
1559 | margin: 0px;
1560 | }
1561 |
1562 | .video-js {
1563 | margin: 30px 0px;
1564 | }
1565 |
1566 | video {
1567 | display: block;
1568 | margin: 30px 0px;
1569 | border: 1px solid #c0c0c0;
1570 | }
1571 |
1572 |
1573 | p.required, p.dataType {display: block; color: #c0c0c0; font-size: 80%; margin-left:4px;}
1574 |
1575 | dd {margin-left:20px;}
1576 |
1577 | .post-content img.inline {
1578 | margin:0px;
1579 | margin-bottom:6px;
1580 | }
1581 | .panel-heading {
1582 | font-weight: bold;
1583 | }
1584 |
1585 | .note code, .alert code, .warning code, div#table-of-contents code, h2 code, h3 code, h4 code {
1586 | color: inherit;
1587 | padding: 0px;
1588 | }
1589 |
1590 | .alert {
1591 | margin-bottom:10px;
1592 | margin-top:10px;
1593 | }
1594 |
1595 | a.accordion-toggle {
1596 | font-style: normal;
1597 | }
1598 |
1599 | span.red {
1600 | color: red;
1601 | font-family: Monaco, Menlo, Consolas, "Courier New", monospace;
1602 | }
1603 |
1604 | h3.codeExplanation {
1605 | font-size:18px;
1606 | font-style:normal;
1607 | color: black;
1608 | line-height: 24px;
1609 | }
1610 |
1611 | span.soft {
1612 | color: #c0c0c0;
1613 | }
1614 |
1615 | .githubEditButton {
1616 | margin-bottom:7px;
1617 | }
1618 |
1619 | .endpoint {
1620 | padding: 15px;
1621 | background-color: #f0f0f0;
1622 | font-family: courier;
1623 | font-size: 110%;
1624 | margin: 20px 0px;
1625 | color: #444;
1626 | }
1627 |
1628 | .parameter {
1629 | font-family: courier;
1630 | color: red !important;
1631 | }
1632 |
1633 | .formBoundary {
1634 | border: 1px solid gray;
1635 | padding: 15px;
1636 | margin: 15px 0px;
1637 | background-color: whitesmoke;
1638 | }
1639 |
1640 | @media (max-width: 767px) {
1641 | .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {
1642 | color: #444;
1643 | }
1644 | }
1645 |
1646 | @media (max-width: 990px) {
1647 | #mysidebar {
1648 | position: relative;
1649 | }
1650 | }
1651 |
1652 | @media (min-width: 1000px) {
1653 |
1654 | ul#mysidebar {
1655 | width: 225px;
1656 | }
1657 | }
1658 |
1659 | @media (max-width: 900px) {
1660 |
1661 | ul#mysidebar {
1662 | max-width: 100%;
1663 | }
1664 | }
1665 |
1666 | .col-md-9 img {
1667 | max-width: 100%;
1668 | max-height: 100%;
1669 | }
1670 |
1671 | .videoThumbs img {
1672 | float: left;
1673 | margin:15px 15px 15px 0px;
1674 | box-shadow: 2px 2px 1px #f0f0f0;
1675 | border: 1px solid #dedede;
1676 | }
1677 |
1678 |
1679 | @media only screen and (min-width: 900px), @media only screen and (min-device-width: 900px) {
1680 | .col-md-9 img {
1681 | max-width: 700px;
1682 | max-height: 700px;
1683 | }
1684 | }
1685 |
1686 | *:hover > .anchorjs-link {
1687 | transition: color .25s linear;
1688 | text-decoration: none;
1689 | }
1690 |
1691 | .kbCaption {
1692 | color: white;
1693 | background-color: #444;
1694 | padding:10px;
1695 | }
1696 |
1697 | .btn-default {
1698 | margin-bottom: 10px;
1699 | }
1700 |
1701 | /* algolia search */
1702 |
1703 | .search {
1704 | text-align: left;
1705 | }
1706 | .search input {
1707 | font-size: 20px;
1708 | width: 300px;
1709 | }
1710 | .results {
1711 | margin: auto;
1712 | text-align: left;
1713 | }
1714 | .results ul {
1715 | list-style-type: none;
1716 | padding: 0;
1717 | }
1718 |
1719 | time {
1720 | margin-right: 10px;
1721 | }
1722 |
1723 | .post-content table th {
1724 | vertical-align: top;
1725 | }
1726 |
1727 | table thead th code.highlighter-rouge {
1728 | background-color: transparent;
1729 | }
1730 |
1731 |
1732 | .box {
1733 | padding: 10px;
1734 | border: 1px solid #888;
1735 | box-shadow: 2px 2px 4px #dedede;
1736 | width: 100px;
1737 | height: 80px;
1738 | background-color: #f5f5f5;
1739 | font-family: Arial;
1740 | font-size: 12px;
1741 | hyphens: auto;
1742 | float: left;
1743 | font-size: 12px;
1744 | }
1745 |
1746 | .box:hover {
1747 | background-color: #f0f0f0;
1748 | }
1749 |
1750 | .clearfix {
1751 | clear: both;
1752 | }
1753 |
1754 | .btn-circle {
1755 | height:50px;
1756 | width:50px;
1757 | text-align: center;
1758 | padding: 6px 0;
1759 | font-size: 12px;
1760 | line-height: 1.428571429;
1761 | border-radius: 55px;
1762 | }
1763 |
1764 | * {
1765 | -webkit-box-sizing: border-box;
1766 | -moz-box-sizing: border-box;
1767 | box-sizing: border-box;
1768 | }
1769 |
1770 | h1 {
1771 | text-align: center;
1772 | }
1773 |
1774 | .twitter-feed {
1775 | width: 800px;
1776 | margin: 0 auto;
1777 | padding: 0;
1778 | border-radius: 2px;
1779 | }
1780 |
1781 | .tweet {
1782 | position: relative;
1783 | width: 100%;
1784 | min-height: 75px;
1785 | margin: 0;
1786 | padding: 10px;
1787 | list-style-type: none;
1788 | border: 1px solid rgba(0, 0, 0, 0.1);
1789 | }
1790 | .tweet:not(:last-child), .tweet:not(:first-child) {
1791 | border-top: none;
1792 | }
1793 | .tweet:first-child {
1794 | border-top-left-radius: 2px;
1795 | border-top-right-radius: 2px;
1796 | border: 1px solid rgba(0, 0, 0, 0.1);
1797 | }
1798 | .tweet:last-child {
1799 | border-bottom-left-radius: 2px;
1800 | border-bottom-right-radius: 2px;
1801 | }
1802 |
1803 | .profile-photo {
1804 | position: absolute;
1805 | width: 55px;
1806 | height: 55px;
1807 | border-radius: 55px;
1808 | }
1809 |
1810 | .text-content {
1811 | padding: 0 0 0 65px;
1812 | margin: 0;
1813 | word-break: break-word;
1814 | }
1815 |
1816 | .hashtag,
1817 | .link {
1818 | text-decoration: none;
1819 | color: #0084b4;
1820 | }
1821 | .hashtag:hover,
1822 | .link:hover {
1823 | text-decoration: underline;
1824 | }
1825 |
1826 | ul, .list {
1827 | list-style: none;
1828 | clear: both;
1829 | margin: 20px auto 0;
1830 | padding: 0;
1831 | }
1832 |
1833 | .list {
1834 | padding-top: 30px;
1835 | }
1836 |
1837 | li, .no-result {
1838 | margin: 5px 10px;
1839 | float: left;
1840 | }
1841 |
1842 | .filter li:not(.active) {
1843 | opacity: 0.7;
1844 | }
1845 | .filter li:not(.active) a {
1846 | transform: scale(0.9);
1847 | }
1848 |
1849 | /* -- Input styles ---------------------------------- */
1850 | .form-group {
1851 | position: relative;
1852 | margin-top: 35px;
1853 | margin-bottom: 20px;
1854 | }
1855 |
1856 | .form-control {
1857 | display: block;
1858 | height: 36px;
1859 | max-width: 350px;
1860 | width: 100%;
1861 | border: none;
1862 | border-radius: 0 !important;
1863 | font-size: 16px;
1864 | font-weight: 300;
1865 | padding: 0;
1866 | margin-left: 10px;
1867 | background-color: transparent;
1868 | box-shadow: none;
1869 | border-bottom: 1px solid #757575;
1870 | }
1871 | .form-control:focus {
1872 | border-color: #757575;
1873 | outline: none;
1874 | box-shadow: none;
1875 | }
1876 |
1877 | label {
1878 | position: absolute;
1879 | top: -18px;
1880 | margin-left: 10px;
1881 | color: #999;
1882 | font-size: 12px;
1883 | font-weight: 300;
1884 | }
1885 |
--------------------------------------------------------------------------------