Commit ac767295 authored by les's avatar les
Browse files

add forum link to docs

parent bcc6587d
......@@ -34,7 +34,11 @@ search_enabled: true
aux_links:
"Source":
- https://framagit.org/les/gancio
- https://framagit.org/les/gancio
"Forum":
- https://framavox.org/g/hMXTDgtJ/gancio
#Exclude from processing.
......
......@@ -78,6 +78,10 @@
......@@ -121,6 +125,8 @@
<li class="navigation-list-item ">
<a href="https://gancio.org/install/nginx" class="navigation-list-link">Nginx</a>
......@@ -172,6 +178,14 @@
<li class="navigation-list-item ">
<a href="https://gancio.org/dev/locales" class="navigation-list-link">Support a new language</a>
</li>
<li class="navigation-list-item ">
<a href="https://gancio.org/dev/migration" class="navigation-list-link">Migration</a>
......@@ -238,7 +252,9 @@
<ul class="list-style-none text-small mt-md-1 mb-md-1 pb-4 pb-md-0 js-aux-nav aux-nav">
<li class="d-inline-block my-0"><a href="https://framagit.org/les/gancio">Source</a></li>
<li class="d-inline-block my-0 mr-2"><a href="https://framagit.org/les/gancio">Source</a></li>
<li class="d-inline-block my-0"><a href="https://framavox.org/g/hMXTDgtJ/gancio">Forum</a></li>
</ul>
......
// Event handling
function addEvent (el, type, handler) {
if (el.attachEvent) { el.attachEvent('on' + type, handler) } else { el.addEventListener(type, handler) }
function addEvent(el, type, handler) {
if (el.attachEvent) el.attachEvent('on'+type, handler); else el.addEventListener(type, handler);
}
function removeEvent (el, type, handler) {
if (el.detachEvent) { el.detachEvent('on' + type, handler) } else { el.removeEventListener(type, handler) }
function removeEvent(el, type, handler) {
if (el.detachEvent) el.detachEvent('on'+type, handler); else el.removeEventListener(type, handler);
}
// Show/hide mobile menu
function toggleNav () {
const nav = document.querySelector('.js-main-nav')
const auxNav = document.querySelector('.js-aux-nav')
const navTrigger = document.querySelector('.js-main-nav-trigger')
const search = document.querySelector('.js-search')
addEvent(navTrigger, 'click', function () {
const text = navTrigger.textContent
let textToggle = navTrigger.getAttribute('data-text-toggle')
nav.classList.toggle('nav-open')
auxNav.classList.toggle('nav-open')
navTrigger.classList.toggle('nav-open')
search.classList.toggle('nav-open')
navTrigger.textContent = textToggle
navTrigger.setAttribute('data-text-toggle', text)
textToggle = text
function toggleNav(){
const nav = document.querySelector('.js-main-nav');
const auxNav = document.querySelector('.js-aux-nav');
const navTrigger = document.querySelector('.js-main-nav-trigger');
const search = document.querySelector('.js-search');
addEvent(navTrigger, 'click', function(){
var text = navTrigger.innerText;
var textToggle = navTrigger.getAttribute('data-text-toggle');
nav.classList.toggle('nav-open');
auxNav.classList.toggle('nav-open');
navTrigger.classList.toggle('nav-open');
search.classList.toggle('nav-open');
navTrigger.innerText = textToggle;
navTrigger.setAttribute('data-text-toggle', text);
textToggle = text;
})
}
// Site search
function initSearch () {
const index = lunr(function () {
this.ref('id')
this.field('title', { boost: 20 })
this.field('content', { boost: 10 })
this.field('url')
})
function initSearch() {
var index = lunr(function () {
this.ref('id');
this.field('title', { boost: 20 });
this.field('content', { boost: 10 });
this.field('url');
});
// Get the generated search_data.json file so lunr.js can search it locally.
sc = document.getElementsByTagName('script')
source = ''
sc = document.getElementsByTagName("script");
source = '';
for (idx = 0; idx < sc.length; idx++) {
s = sc.item(idx)
for(idx = 0; idx < sc.length; idx++)
{
s = sc.item(idx);
if (s.src && s.src.match(/just-the-docs\.js$/)) { source = s.src }
if(s.src && s.src.match(/just-the-docs\.js$/))
{ source = s.src; }
}
jsPath = source.replace('just-the-docs.js', '')
jsPath = source.replace('just-the-docs.js', '');
jsonPath = jsPath + 'search-data.json'
jsonPath = jsPath + 'search-data.json';
const request = new XMLHttpRequest()
request.open('GET', jsonPath, true)
var request = new XMLHttpRequest();
request.open('GET', jsonPath, true);
request.onload = function () {
request.onload = function() {
if (request.status >= 200 && request.status < 400) {
// Success!
const data = JSON.parse(request.responseText)
const keys = Object.keys(data)
var data = JSON.parse(request.responseText);
var keys = Object.keys(data);
for (const i in data) {
for(var i in data) {
index.add({
id: data[i].id,
title: data[i].title,
content: data[i].content,
url: data[i].url
})
});
}
searchResults(data)
searchResults(data);
} else {
// We reached our target server, but it returned an error
console.log('Error loading ajax request. Request status:' + request.status)
console.log('Error loading ajax request. Request status:' + request.status);
}
}
};
request.onerror = function () {
request.onerror = function() {
// There was a connection error of some sort
console.log('There was a connection error')
}
console.log('There was a connection error');
};
request.send()
request.send();
function searchResults (dataStore) {
const searchInput = document.querySelector('.js-search-input')
const searchResults = document.querySelector('.js-search-results')
const store = dataStore
function searchResults(dataStore) {
var searchInput = document.querySelector('.js-search-input');
var searchResults = document.querySelector('.js-search-results');
var store = dataStore;
function hideResults () {
searchResults.innerHTML = ''
searchResults.classList.remove('active')
function hideResults() {
searchResults.innerHTML = '';
searchResults.classList.remove('active');
}
addEvent(searchInput, 'keyup', function (e) {
const query = this.value
addEvent(searchInput, 'keyup', function(e){
var query = this.value;
searchResults.innerHTML = ''
searchResults.classList.remove('active')
searchResults.innerHTML = '';
searchResults.classList.remove('active');
if (query === '') {
hideResults()
hideResults();
} else {
const results = index.search(query)
var results = index.search(query);
if (results.length > 0) {
searchResults.classList.add('active')
const resultsList = document.createElement('ul')
searchResults.appendChild(resultsList)
for (const i in results) {
const resultsListItem = document.createElement('li')
const resultsLink = document.createElement('a')
const resultsUrlDesc = document.createElement('span')
const resultsUrl = store[results[i].ref].url
const resultsRelUrl = store[results[i].ref].relUrl
const resultsTitle = store[results[i].ref].title
resultsLink.setAttribute('href', resultsUrl)
resultsLink.textContent = resultsTitle
resultsUrlDesc.textContent = resultsRelUrl
resultsList.classList.add('search-results-list')
resultsListItem.classList.add('search-results-list-item')
resultsLink.classList.add('search-results-link')
resultsUrlDesc.classList.add('fs-2', 'text-grey-dk-000', 'd-block')
resultsList.appendChild(resultsListItem)
resultsListItem.appendChild(resultsLink)
resultsLink.appendChild(resultsUrlDesc)
searchResults.classList.add('active');
var resultsList = document.createElement('ul');
searchResults.appendChild(resultsList);
for (var i in results) {
var resultsListItem = document.createElement('li');
var resultsLink = document.createElement('a');
var resultsUrlDesc = document.createElement('span');
var resultsUrl = store[results[i].ref].url;
var resultsRelUrl = store[results[i].ref].relUrl;
var resultsTitle = store[results[i].ref].title;
resultsLink.setAttribute('href', resultsUrl);
resultsLink.innerText = resultsTitle;
resultsUrlDesc.innerText = resultsRelUrl;
resultsList.classList.add('search-results-list');
resultsListItem.classList.add('search-results-list-item');
resultsLink.classList.add('search-results-link');
resultsUrlDesc.classList.add('fs-2','text-grey-dk-000','d-block');
resultsList.appendChild(resultsListItem);
resultsListItem.appendChild(resultsLink);
resultsLink.appendChild(resultsUrlDesc);
}
}
// When esc key is pressed, hide the results and clear the field
if (e.keyCode == 27) {
hideResults()
searchInput.value = ''
hideResults();
searchInput.value = '';
}
}
})
});
addEvent(searchInput, 'blur', function () {
setTimeout(function () { hideResults() }, 300)
})
addEvent(searchInput, 'blur', function(){
setTimeout(function(){ hideResults() }, 300);
});
}
}
function pageFocus () {
const mainContent = document.querySelector('.js-main-content')
mainContent.focus()
function pageFocus() {
var mainContent = document.querySelector('.js-main-content');
mainContent.focus();
}
// Document ready
function ready () {
toggleNav()
pageFocus()
function ready(){
toggleNav();
pageFocus();
if (typeof lunr !== 'undefined') {
initSearch()
initSearch();
}
}
// in case the document is already rendered
if (document.readyState != 'loading') { ready() }
if (document.readyState!='loading') ready();
// modern browsers
else if (document.addEventListener) { document.addEventListener('DOMContentLoaded', ready) }
else if (document.addEventListener) document.addEventListener('DOMContentLoaded', ready);
// IE <= 8
else {
document.attachEvent('onreadystatechange', function () {
if (document.readyState == 'complete') { ready() }
})
}
else document.attachEvent('onreadystatechange', function(){
if (document.readyState=='complete') ready();
});
......@@ -57,20 +57,27 @@
},
"8": {
"id": "8",
"title": "Support a new language",
"content": "Add a new locale watch this commit https://framagit.org/les/gancio/commit/cd95c7eb3b9e4bc4832a7b33d8d79b4fd3cbda2d",
"url": "https://gancio.org/dev/locales",
"relUrl": "/dev/locales"
},
"9": {
"id": "9",
"title": "Migration",
"content": "Migration If you need to modify the db’s structure while hacking, it’s super easy, just change server/api/models/. If you then decide that your changes are good for production, a sequelize migration is needed: Create a migration: ./node_modules/.bin/sequelize migration:generate --name your_migration",
"url": "https://gancio.org/dev/migration",
"relUrl": "/dev/migration"
},
"9": {
"id": "9",
"10": {
"id": "10",
"title": "Nginx",
"content": "Nginx proxy configuration This is the default nginx configuration for gancio, please modify at least the server_name and ssl_certificate’s path. Note that this does not include a cache configuration and that gancio does not use a cache control at all, if you can help with this task you’re welcome. server { listen 80; listen [::]:80; server_name gancio.cisti.org; root /var/www/letsencrypt; location /.well-known/acme-challenge/ { allow all; } location / { return 301 https://$host$request_uri; } } server { listen 443 ssl http2; listen [::]:443 ssl http2; server_name gancio.cisti.org; ssl_protocols TLSv1.2; ssl_ciphers HIGH:!MEDIUM:!LOW:!aNULL:!NULL:!SHA; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; # Uncomment these lines once you acquire a certificate: # ssl_certificate /etc/letsencrypt/live/gancio.cisti.org/fullchain.pem; # ssl_certificate_key /etc/letsencrypt/live/gancio.cisti.org/privkey.pem; keepalive_timeout 70; sendfile on; client_max_body_size 80m; gzip on; gzip_disable &quot;msie6&quot;; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript; add_header Strict-Transport-Security &quot;max-age=31536000&quot;; location / { try_files $uri @proxy; } location @proxy { proxy_set_header Host $host; proxy_set_header X-Forwarded-Proto https; proxy_set_header Proxy &quot;&quot;; proxy_pass_header Server; proxy_pass http://127.0.0.1:13120; proxy_buffering on; proxy_redirect off; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; tcp_nodelay on; } }",
"url": "https://gancio.org/install/nginx",
"relUrl": "/install/nginx"
},
"10": {
"id": "10",
"11": {
"id": "11",
"title": "Project Structure",
"content": "Project structure API / backend Client / frontend Federation / ActivityPub API / backend Source code inside server/api/. index.js is basically a routing table pointing each PATH with specified HTTP VERB to a method of a controller. jwt is used to authenticate api request. Express.js is based on middleware, passing each request to a chain of methods. If you come from a PHP background, note that the main difference with Node.js is that the server process is always running and able to manage multiple requests and tasks together (asyncronically) while each php process is tied to a single request. Sequelize is used as ORM. Take a look in /server/api/models. Client / frontend Nuxt.js is used here! Nuxt is basically Vue plus SSR (Server Side Rendering). Client routing in nuxt is automatic (if you don’t need something special), just put your page inside pages and that’s it! Federation / ActivityPub Code inside server/federation.",
"url": "https://gancio.org/dev/structure",
......
......@@ -78,6 +78,10 @@
......@@ -121,6 +125,8 @@
<li class="navigation-list-item ">
<a href="https://gancio.org/install/nginx" class="navigation-list-link">Nginx</a>
......@@ -172,6 +178,14 @@
<li class="navigation-list-item ">
<a href="https://gancio.org/dev/locales" class="navigation-list-link">Support a new language</a>
</li>
<li class="navigation-list-item ">
<a href="https://gancio.org/dev/migration" class="navigation-list-link">Migration</a>
......@@ -239,7 +253,9 @@
<ul class="list-style-none text-small mt-md-1 mb-md-1 pb-4 pb-md-0 js-aux-nav aux-nav">
<li class="d-inline-block my-0"><a href="https://framagit.org/les/gancio">Source</a></li>
<li class="d-inline-block my-0 mr-2"><a href="https://framagit.org/les/gancio">Source</a></li>
<li class="d-inline-block my-0"><a href="https://framavox.org/g/hMXTDgtJ/gancio">Forum</a></li>
</ul>
......
......@@ -78,6 +78,10 @@
......@@ -121,6 +125,8 @@
<li class="navigation-list-item ">
<a href="https://gancio.org/install/nginx" class="navigation-list-link">Nginx</a>
......@@ -172,6 +178,14 @@
<li class="navigation-list-item ">
<a href="https://gancio.org/dev/locales" class="navigation-list-link">Support a new language</a>
</li>
<li class="navigation-list-item ">
<a href="https://gancio.org/dev/migration" class="navigation-list-link">Migration</a>
......@@ -238,7 +252,9 @@
<ul class="list-style-none text-small mt-md-1 mb-md-1 pb-4 pb-md-0 js-aux-nav aux-nav">
<li class="d-inline-block my-0"><a href="https://framagit.org/les/gancio">Source</a></li>
<li class="d-inline-block my-0 mr-2"><a href="https://framagit.org/les/gancio">Source</a></li>
<li class="d-inline-block my-0"><a href="https://framavox.org/g/hMXTDgtJ/gancio">Forum</a></li>
</ul>
......@@ -293,6 +309,12 @@
<li>
<a href="https://gancio.org/dev/locales">Support a new language</a>
</li>
<li>
<a href="https://gancio.org/dev/migration">Migration</a>
</li>
......
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=Edge">
<title>Support a new language - Gancio</title>
<link rel="shortcut icon" href="https://gancio.org/favicon.ico" type="image/x-icon">
<link rel="stylesheet" href="https://gancio.org/assets/css/just-the-docs.css">
<script type="text/javascript" src="https://gancio.org/assets/js/vendor/lunr.min.js"></script>
<script type="text/javascript" src="https://gancio.org/assets/js/just-the-docs.js"></script>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://gancio.org/assets/js/jquery-3.3.1.min.js"></script>
<link rel="stylesheet" href="https://gancio.org/assets/css/jquery.fancybox.min.css"/>
<script src="https://gancio.org/assets/js/jquery.fancybox.min.js"></script>
<!-- Begin Jekyll SEO tag v2.6.1 -->
<title>Support a new language | Gancio</title>
<meta name="generator" content="Jekyll v3.8.6" />
<meta property="og:title" content="Support a new language" />
<meta property="og:locale" content="en_US" />
<meta name="description" content="A shared agenda for local communities" />
<meta property="og:description" content="A shared agenda for local communities" />
<link rel="canonical" href="https://gancio.org/dev/locales" />
<meta property="og:url" content="https://gancio.org/dev/locales" />
<meta property="og:site_name" content="Gancio" />
<script type="application/ld+json">
{"@type":"WebPage","url":"https://gancio.org/dev/locales","headline":"Support a new language","description":"A shared agenda for local communities","@context":"https://schema.org"}</script>
<!-- End Jekyll SEO tag -->
</head>
<body>
<div class="page-wrap">
<div class="side-bar">
<a href="https://gancio.org/" class="site-title fs-6 lh-tight">Gancio</a>
<span class="fs-3"><button class="js-main-nav-trigger navigation-list-toggle btn btn-outline" type="button" data-text-toggle="Hide">Menu</button></span>
<div class="navigation main-nav js-main-nav">
<nav role="navigation" aria-label="Main navigation">
<ul class="navigation-list">
<li class="navigation-list-item active">
<a href="https://gancio.org/404.html" class="navigation-list-link"></a>
</li>
<li class="navigation-list-item">
<a href="https://gancio.org/" class="navigation-list-link">Home</a>
</li>
<li class="navigation-list-item">
<a href="https://gancio.org/install" class="navigation-list-link">Install</a>
<ul class="navigation-list-child-list ">
<li class="navigation-list-item ">
<a href="https://gancio.org/install/debian" class="navigation-list-link">Debian</a>
</li>
<li class="navigation-list-item ">
<a href="https://gancio.org/install/docker" class="navigation-list-link">Docker</a>
</li>