diff --git a/src/app.css b/src/app.css index 1c058cd..c2cc7de 100644 --- a/src/app.css +++ b/src/app.css @@ -20,4 +20,8 @@ h1 { } a { text-decoration: none; + color: #4054ad; + font-weight: bold; } +a:hover { color: #1b2c44; } +a:visited { color: #437fad; } diff --git a/src/lib/components/Filterable.svelte b/src/lib/components/Filterable.svelte index 059986f..45eeea4 100644 --- a/src/lib/components/Filterable.svelte +++ b/src/lib/components/Filterable.svelte @@ -7,6 +7,7 @@ export let context = 'none'; export let filterValues; export let histogram; // an array with key = filter value, val = number of technologies + export let colours = []; // an array of colour values with //console.log('Filterable contextFilter: ', filterValues); let activeFiltersString = 'None'; @@ -78,8 +79,8 @@ console.log('histogram: ', histogram); -

Test Array

- +

Test Array

+

Test Description

allNoneActive()} on:keypress={() => allNoneActive()}>select all/none diff --git a/src/lib/components/Tile.svelte b/src/lib/components/TechnologyTile.svelte similarity index 61% rename from src/lib/components/Tile.svelte rename to src/lib/components/TechnologyTile.svelte index 92e95ea..9014a66 100644 --- a/src/lib/components/Tile.svelte +++ b/src/lib/components/TechnologyTile.svelte @@ -35,48 +35,30 @@

{technology.name}

-

- {technology.description}{#if technology.extended_description}i{/if} +

{technology.description}{#if technology.extended_description}i{/if}

- {#if technology.categories}

- {pluraliser('Category', 'Categories', technology.categories.length)}: - {toOxfordCommaString(technology.categories)} -

{/if} - {#if technology.analogues}

- Alternative to {toOxfordCommaString(technology.analogues)} -

{/if} - {#if technology.license}

- License: {technology.license} -

{/if} + {#if technology.categories}

{pluraliser('Category', + 'Categories', technology.categories.length)}: {toOxfordCommaString(technology.categories)}

{/if} + {#if technology.analogues}

Alternative to {toOxfordCommaString(technology.analogues)}

{/if} + {#if technology.license}

License: {technology.license}

{/if} {#if hasInstances(technology)}
-

- {#each technology.instances as instance} - {/each} +

{#each technology.instances as instance}{/each}

{:else} diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index f436bcf..322b67e 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -11,9 +11,9 @@ import Filterable from '$lib/components/Filterable.svelte'; // collapsible sections import CollapsibleSection from '$lib/components/CollapsibleSection.svelte'; - import Tile from '$lib/components/Tile.svelte'; + import TechnologyTile from '$lib/components/TechnologyTile.svelte'; - //console.log('colours: ', colours); + let tabindex = 0; // a counter which facilitates keyboard navigation. // // digest and return useful info from the Webservices JSON feed @@ -333,28 +333,35 @@
-
-
-

Web Services

-

This sites exists to provide an 'always-up-to-date', in-depth description of the libre software web services I have set - up and maintain. -

+
+
+
+

Statistics

+
    +
  • Number of individual services: {results.stats.instances}
  • +
  • Number of individual technologies: {results.stats.current}
  • +
  • Number of new technologies to be added: {results.stats.future}
  • +
  • Number of libre licenses used by these technologies: {results.stats.licenses} +
      +
    • 'weak' corporate-exploitation-friendly open source licenses : {results.stats.weak}
    • +
    • 'strong' user-protecting copyleft licenses: {results.stats.copyleft}
    • +
    +
  • +
  • Total number of services: {results.stats.instances}
  • +
+
-
-

Statistics

-
    -
  • Number of individual services: {results.stats.instances}
  • -
  • Number of individual technologies: {results.stats.current}
  • -
  • Number of new technologies to be added: {results.stats.future}
  • -
  • Number of libre licenses used by these technologies: {results.stats.licenses}
  • -
  •   'weak' corporate-exploitation-friendly open source licenses : {results.stats.weak}
  • -
  •   'strong' user-protecting copyleft licenses: {results.stats.copyleft}
  • -
  • Total number of services: {results.stats.instances}
  • -
-
+

Web Services

+

This sites exists to provide an 'always-up-to-date', in-depth description of the + libre software web services I (Dave Lane) have set up and maintain. +

+

These services are run primarily on commodity Linux Virtual Private Servers, aka 'hosts', which I also maintain. Some systems are also run on real physical hosts either in my home hosting facility or in commercial hosting facilities. These hosts are based in Aotearoa NZ, Singapore, the US, and in Germany. Almost all run an LTS (Long Term Support) version of Ubuntu Linux although a few hosts run Debian Linux.

+

Almost all the hosts are configured in a particular way which allows multiple services to run harmoniously on the same host. I use a set of somewhere between one and twenty-one Docker containers (which I run via Docker Compose) for each service, to keep different services, each of which has different software dependencies, from interfering with one another. Each service is made available to the Internet via a 'reverse proxy' (for which I use Nginx) and user interactions with them are secured (encrypted) with Let's Encrypt SSL certificates (which renew automatically). +

+

To manage the servers and keep them up-to-date, I use SSH to establish secure encrypted connections to them (via key-based authentication). I run updates of the hosts manually, and update individual services when required (urgently if updates are security-related). Some of the Docker containers I run I have built myself, in other cases I use those supplied by the communities developing the service.

+

One huge advantage of the Docker Compose pattern is that I can rapidly move services between different hosts, or even replicate services very rapidly for development or staging purposes. Using them has revolutionised my hosting processes.

@@ -362,47 +369,52 @@
-

Categories

+

Categories

-

Analogues

+

Analogues

-

Open Source & Copyleft Licenses

+

Open Source & Copyleft Licenses

-

Statuses

+

Statuses

-

Affiliates

+ tabindex={tabindex} + histogram={results.instance_lists.affiliate_list} + context={'affiliates'}>

Affiliates

-

Hosts

+

Hosts

@@ -410,7 +422,7 @@
{#each filteredTechnologies as technology} - + {/each}
@@ -423,28 +435,36 @@ position: relative; } .introduction { - width: 50%; + width: 100%; + } + .summary-wrapper { + content: ''; + display: block; + float: right; + padding: 0; + margin: 0; } .summary { border-radius: 15px; - /*position: absolute; - right: 20px;*/ + float: right; + clear: both; + /*display: block;*/ background-color: #ccc; /*display: block;*/ - width: 50%; + max-width: 30%; + min-width: 30em; border: 2px #aaa solid; - margin: 0; + margin: 0 15px 20px 6px; padding: 0 20px; + box-shadow: 6px 6px 20px #999; } -/* .filters { margin-bottom: 1em;} - .filters .tags { - margin: 1em 0; - display: block; - }*/ - .tiles { - /*display: grid; - grid-gap: 15px; - grid-template-columns: repeat(auto-fit, minmax(270px, 1fr));*/ - /*grid-template-columns: repeat(auto-fit);*/ + .summary .label { color: #666; } + .summary .number { color: #000; } + @media screen and (max-width: 600px) { + .summary { + float: none; + width: 90%; + margin: auto; + } }