diff options
author | Gustav Eek <gustav.eek@fripost.org> | 2019-11-18 16:17:17 +0100 |
---|---|---|
committer | Gustav Eek <gustav.eek@fripost.org> | 2019-11-18 16:17:17 +0100 |
commit | 6c85ae069edb5874e8fab635b6592652bb2acb84 (patch) | |
tree | 4f0c7993b63687cb1f5af76e33c6cb37fe5ea958 | |
parent | d693b675b790fe5b785dfa0d0e48f45cce4ae2d4 (diff) | |
parent | a61796383592b9b3ca787b9020c96ea1a6c4417b (diff) |
Merge branch 'master' into cost-operation-inquiry
28 files changed, 1130 insertions, 168 deletions
diff --git a/.ikiwiki/IkiWiki/Plugin/pandoc.pm b/.ikiwiki/IkiWiki/Plugin/pandoc.pm index ddc5299..da13763 100755 --- a/.ikiwiki/IkiWiki/Plugin/pandoc.pm +++ b/.ikiwiki/IkiWiki/Plugin/pandoc.pm @@ -7,8 +7,20 @@ use strict; use IkiWiki; use FileHandle; use IPC::Open2; +use File::Path qw/make_path/; use JSON; +# activate with 'generate_$format' in meta; turn on all with 'generate_all_formats'. +my %extra_formats = ( + pdf => { ext=>'pdf', label=>'PDF', format=>'latex', extra=>[], order=>1 }, + docx => { ext=>'docx', label=>'DOCX', format=>'docx', extra=>[], order=>2 }, + odt => { ext=>'odt', label=>'ODT', format=>'odt', extra=>[], order=>3 }, + beamer => { ext=>'beamer.pdf', label=>'Beamer', format=>'beamer', extra=>[], order=>4 }, + revealjs => { ext=>'revealjs.html', label=>'RevealJS', format=>'revealjs', extra=>['--self-contained'], order=>5 }, + epub => { ext=>'epub', label=>'EPUB', format=>'epub3', extra=>[], order=>6 }, + latex => { ext=>'tex', label=>'LaTeX', format=>'latex', extra=>['--standalone'], order=>7 }, +); + sub import { my $markdown_ext = $config{pandoc_markdown_ext} || "mdwn"; @@ -18,6 +30,9 @@ sub import { } hook(type => "getsetup", id => "pandoc", call => \&getsetup); + hook(type => "pagetemplate", id => "pandoc", call => \&pagetemplate); + hook(type => "pageactions", id => "pandoc", call => \&pageactions); + if (ref $markdown_ext eq 'ARRAY') { foreach my $mde (@$markdown_ext) { hook(type => 'htmlize', id => $mde, @@ -43,6 +58,14 @@ sub import { hook(type => "htmlize", id => "mediawiki", call => sub { htmlize("mediawiki", @_) }); } + if ($config{pandoc_opml}) { + hook(type => "htmlize", id => "opml", + call => sub { htmlize("opml", @_) }); + } + if ($config{pandoc_org}) { + hook(type => "htmlize", id => "org", + call => sub { htmlize("org", @_) }); + } } @@ -56,42 +79,70 @@ sub getsetup () { type => "string", example => "/usr/local/bin/pandoc", description => "Path to pandoc executable", - safe => 0, + safe => 1, + rebuild => 0, + }, + pandoc_citeproc => { + type => "string", + example => "/usr/local/bin/pandoc-citeproc", + description => "Path to pandoc-citeproc executable", + safe => 1, rebuild => 0, }, pandoc_markdown_ext => { type => "string", - example => "mdwn", - description => "File extension for Markdown files", + example => "mdwn,md,markdown", + description => "File extension(s) for Markdown files handled by Pandoc", + safe => 1, + rebuild => 1, + }, + pandoc_markdown_fmt => { + type => "string", + example => "markdown", + description => "Format string to use when processing files handled by Pandoc.", safe => 1, rebuild => 1, }, pandoc_latex => { type => "boolean", example => 0, - description => "Enable Pandoc processing of LaTeX documents", - safe => 0, + description => "Enable Pandoc processing of LaTeX documents (extension=tex)", + safe => 1, rebuild => 1, }, pandoc_rst => { type => "boolean", example => 0, - description => "Enable Pandoc processing of reStructuredText documents", - safe => 0, + description => "Enable Pandoc processing of reStructuredText documents (extension=rst)", + safe => 1, rebuild => 1, }, pandoc_textile => { type => "boolean", example => 0, - description => "Enable Pandoc processing of Textile documents", - safe => 0, + description => "Enable Pandoc processing of Textile documents (extension=textile)", + safe => 1, rebuild => 1, }, pandoc_mediawiki => { type => "boolean", example => 0, - description => "Enable Pandoc processing of MediaWiki documents", - safe => 0, + description => "Enable Pandoc processing of MediaWiki documents (extension=mediawiki)", + safe => 1, + rebuild => 1, + }, + pandoc_org => { + type => "boolean", + example => 0, + description => "Enable Pandoc processing of Emacs org-mode documents (extension=org)", + safe => 1, + rebuild => 1, + }, + pandoc_opml => { + type => "boolean", + example => 0, + description => "Enable Pandoc processing of OPML documents (extension=opml)", + safe => 1, rebuild => 1, }, pandoc_smart => { @@ -122,6 +173,13 @@ sub getsetup () { safe => 1, rebuild => 1, }, + pandoc_html_extra_options => { + type => "internal", + default => [], + description => "List of extra pandoc options for html", + safe => 0, + rebuild => 0, + }, pandoc_numsect => { type => "boolean", example => 0, @@ -146,24 +204,143 @@ sub getsetup () { pandoc_math => { type => "string", example => "mathjax", - description => "Process TeX math using", - safe => 0, + description => "How to process TeX math (mathjax, katex, mathml, mathjs, latexmathml, asciimathml, mimetex, webtex)", + safe => 1, + rebuild => 1, + }, + pandoc_math_custom_js => { + type => "string", + example => "", + description => "Link to local/custom javascript for math (or to server-side script for mimetex and webtex)", + safe => 1, + rebuild => 1, + }, + pandoc_math_custom_css => { + type => "string", + example => "", + description => "Link to local/custom CSS for math (requires appropriate pandoc_math setting)", + safe => 1, rebuild => 1, }, pandoc_bibliography => { type => "string", example => "", - description => "Path to bibliography file", - safe => 0, + description => "Path to default bibliography file", + safe => 1, rebuild => 1, }, pandoc_csl => { type => "string", example => "", description => "Path to CSL file (for references and bibliography)", - safe => 0, + safe => 1, + rebuild => 1, + }, + pandoc_csl_default_lang => { + type => "string", + example => "", + description => "Default language code (RFC 1766) for citations processing", + safe => 1, + rebuild => 1, + }, + pandoc_filters => { + type => "string", + example => "", + description => "A comma-separated list of custom pandoc filters", + safe => 1, rebuild => 1, }, + pandoc_latex_template => { + type => "string", + example => "", + description => "Path to pandoc template for LaTeX and normal PDF output", + safe => 1, + rebuild => 0, + }, + pandoc_latex_extra_options => { + type => "internal", + default => [], + description => "List of extra pandoc options for LaTeX (and PDF) generation", + safe => 0, + rebuild => 0, + }, + pandoc_beamer_template => { + type => "string", + example => "", + description => "Path to pandoc template for Beamer PDF output", + safe => 1, + rebuild => 0, + }, + pandoc_beamer_extra_options => { + type => "internal", + default => [], + description => "List of extra pandoc options for Beamer PDF generation", + safe => 0, + rebuild => 0, + }, + pandoc_pdf_export_cleanup => { + type => "boolean", + example => "0", + description => "Whether to clean up LaTeX auxiliary files after PDF generation", + safe => 0, + rebuild => 0, + }, + pandoc_revealjs_template => { + type => "string", + example => "", + description => "Path to pandoc template for Reveal.js slides output", + safe => 1, + rebuild => 0, + }, + pandoc_revealjs_extra_options => { + type => "internal", + default => [], + description => "List of extra pandoc options for Reveal.js slides generation", + safe => 0, + rebuild => 0, + }, + pandoc_docx_template => { + type => "string", + example => "", + description => "Path to pandoc template for MS Word (docx) output", + safe => 1, + rebuild => 0, + }, + pandoc_docx_extra_options => { + type => "internal", + default => [], + description => "List of extra pandoc options for DOCX generation", + safe => 0, + rebuild => 0, + }, + pandoc_odt_template => { + type => "string", + example => "", + description => "Path to pandoc template for OpenDocument (odt) output", + safe => 1, + rebuild => 0, + }, + pandoc_odt_extra_options => { + type => "internal", + default => [], + description => "List of extra pandoc options for ODT generation", + safe => 0, + rebuild => 0, + }, + pandoc_epub_template => { + type => "string", + example => "", + description => "Path to pandoc template for EPUB3 output", + safe => 1, + rebuild => 0, + }, + pandoc_epub_extra_options => { + type => "internal", + default => [], + description => "List of extra pandoc options for EPUB3 generation", + safe => 0, + rebuild => 0, + }; } @@ -171,96 +348,89 @@ sub htmlize ($@) { my $format = shift; my %params = @_; my $page = $params{page}; + my $htmlformat = 'html'; local(*PANDOC_IN, *JSON_IN, *JSON_OUT, *PANDOC_OUT); - my @args; + my @args = (); - my $command = $config{pandoc_command} || "/usr/local/bin/pandoc"; + # The default assumes pandoc is in PATH + my $command = $config{pandoc_command} || "pandoc"; if ($config{pandoc_smart}) { push @args, '--smart'; - }; + } if ($config{pandoc_obfuscate}) { push @args, '--email-obfuscation=references'; } else { push @args, '--email-obfuscation=none'; - }; + } if ($config{pandoc_html5}) { - push @args, '--html5'; - }; + $htmlformat = 'html5'; + } if ($config{pandoc_ascii}) { push @args, '--ascii'; - }; + } if ($config{pandoc_numsect}) { push @args, '--number-sections'; - }; + } if ($config{pandoc_sectdiv}) { push @args, '--section-divs'; - }; + } if ($config{pandoc_codeclasses} && ($config{pandoc_codeclasses} ne "")) { push @args, '--indented-code-classes=' . $config{pandoc_codeclasses}; - }; - - if ($config{pandoc_bibliography}) { - push @args, '--bibliography='.$config{pandoc_bibliography}; } - if ($config{pandoc_csl}) { - push @args, '--csl='.$config{pandoc_csl}; - } - - for ($config{pandoc_math}) { - if (/^mathjax$/) { - push @args, '--mathjax=/dev/null'; - } - elsif (/^jsmath$/) { - push @args, '--jsmath'; - } - elsif (/^latexmathml$/) { - push @args, '--latexmathml'; - } - elsif (/^mimetex$/) { - push @args, '--mimetex'; - } - elsif (/^mathtex$/) { - push @args, '--mimetex=/cgi-bin/mathtex.cgi'; + # How to process math. Normally either mathjax or katex. + my %mathconf = map {($_=>"--$_")} qw( + jsmath mathjax latexmathml asciimathml mathml katex mimetex webtex + ); + my %with_urls = qw/mimetex 1 webtex 1/; + my $mathopt = $1 if $config{pandoc_math} && $config{pandoc_math} =~ /(\w+)/; + my $custom_js = $config{pandoc_math_custom_js} || ''; + # cleanup pandoc-prefixed keys from persistent meta + if (ref $pagestate{$page}{meta} eq 'HASH') { + my @delkeys = (); + foreach my $k (%{ $pagestate{$page}{meta} }) { + push @delkeys, $k if $k =~ /^pandoc_/; } - elsif (/^google$/) { - push @args, '--webtex'; - } - elsif (/^mathml$/) { - push @args, '--mathml'; + delete $pagestate{$page}{meta}{$_} for @delkeys; + } + if ($mathopt && $mathconf{$mathopt}) { + if ($with_urls{$mathopt} && $custom_js) { + # In these cases, the 'custom js' is a misnomer: actually a server-side script + push @args, $mathconf{$mathopt} ."=". $custom_js; + } else { + push @args, $mathconf{$mathopt}; } - else { } + $pagestate{$page}{meta}{"pandoc_math"} = $mathopt; + $pagestate{$page}{meta}{"pandoc_math_$mathopt"} = 1; + $pagestate{$page}{meta}{"pandoc_math_custom_js"} = $custom_js if $custom_js; } - # Convert to intermediate JSON format so that the title block # can be parsed out + # We must omit the 'bibliography' parameter here, otherwise the list of + # references will be doubled. + my $markdown_fmt = $config{pandoc_markdown_fmt} || 'markdown'; my $to_json_pid = open2(*JSON_OUT, *PANDOC_OUT, $command, - '-f', $format, + '-f', $markdown_fmt, '-t', 'json', @args); - error("Unable to open $command") unless $to_json_pid; - # $ENV{"LC_ALL"} = "en_US.UTF-8"; - my $to_html_pid = open2(*PANDOC_IN, *JSON_IN, $command, - '-f', 'json', - '-t', 'html', - @args); - - error("Unable to open $command") unless $to_html_pid; - # Workaround for perl bug (#376329) require Encode; my $content = Encode::encode_utf8($params{content}); + # Protect inline plugin placeholders from being mangled by pandoc: + $content =~ s{<div class="inline" id="(\d+)"></div>} + {::INLINE::PLACEHOLDER::$1::}g; + print PANDOC_OUT $content; close PANDOC_OUT; @@ -269,6 +439,148 @@ sub htmlize ($@) { waitpid $to_json_pid, 0; + # Parse the title block out of the JSON and set the meta values + my $meta = undef; + my $decoded_json = decode_json($json_content); + # The representation of the meta block changed in pandoc version 1.18 + if (ref $decoded_json eq 'HASH' && $decoded_json->{'meta'}) { + $meta = $decoded_json->{'meta'} || {}; # post-1.18 version + } elsif (ref $decoded_json eq 'ARRAY') { + $meta = $decoded_json->[0]->{'unMeta'} || {}; # pre-1.18 version + } + unless ($meta) { + warn "WARNING: Unexpected format for meta block. Incompatible version of Pandoc?\n"; + } + + # Get some selected meta attributes, more specifically: + # (title date bibliography csl subtitle abstract summary description + # version lang locale references author [+ num_authors primary_author]), + # as well as some configuration options (generate_*, *_extra_options, *_template). + + my @format_keys = grep { $_ ne 'pdf' } keys %extra_formats; + my %scalar_meta = map { ($_=>undef) } qw( + title date bibliography csl subtitle abstract summary + description version lang locale); + $scalar_meta{$_.'_template'} = undef for @format_keys; + my %bool_meta = map { ("generate_$_"=>0) } keys %extra_formats; + my %list_meta = map { ($_=>[]) } qw/author references/; + $list_meta{$_.'_extra_options'} = [] for @format_keys; + my $have_bibl = 0; + foreach my $k (keys %scalar_meta) { + next unless $meta->{$k}; + $scalar_meta{$k} = compile_string($meta->{$k}->{c}); + # NB! Note that this is potentially risky, since pagestate is sticky, and + # we only cleanup the pandoc_* values in {meta}. + $pagestate{$page}{meta}{$k} = $scalar_meta{$k}; + $pagestate{$page}{meta}{"pandoc_$k"} = $pagestate{$page}{meta}{$k}; + } + foreach my $k (keys %bool_meta) { + my $gen_all = $meta->{generate_all_formats} || {}; + next unless $meta->{$k} || $gen_all->{c}; + my $val = $meta->{$k} ? $meta->{$k}->{c} : $gen_all->{c}; + # simplifies matters with JSON::(PP::)Boolean objects + $val = 1 if $val == 1 || $val eq 'true'; + if (ref $val || $val =~ /^\s*(?:off|no|false|0)\s*$/i) { + $bool_meta{$k} = 0; + } else { + $bool_meta{$k} = 1; + $pagestate{$page}{meta}{"pandoc_$k"} = 1; + } + } + foreach my $k (keys %list_meta) { + next unless $meta->{$k}; + $list_meta{$k} = unwrap_c($meta->{$k}); + $list_meta{$k} = [$list_meta{$k}] unless ref $list_meta{$k} eq 'ARRAY'; + $have_bibl = 1 if $k eq 'references'; + $pagestate{$page}{meta}{"pandoc_$k"} = $list_meta{$k}; + } + # Try to add other keys as scalars, with pandoc_ prefix only. + foreach my $k (keys %$meta) { + next if exists $scalar_meta{$k} || exists $list_meta{$k}; + eval { + $pagestate{$page}{meta}{"pandoc_$k"} = compile_string($meta->{$k}->{c}); + }; + } + my $num_authors = scalar @{ $list_meta{author} }; + $scalar_meta{num_authors} = $num_authors; + $pagestate{$page}{meta}{num_authors} = $num_authors; + if ($num_authors) { + $scalar_meta{primary_author} = $list_meta{author}->[0]; + $pagestate{$page}{meta}{author} = join(', ', @{$list_meta{author}}); + $pagestate{$page}{meta}{pandoc_primary_author} = $scalar_meta{primary_author} + } + + # The bibliography may be set in a Meta block in the page or in the .setup file. + # If both are present, the Meta block has precedence. + for my $bibl ($scalar_meta{bibliography}, $config{pandoc_bibliography}) { + if ($bibl) { + $have_bibl = 1; + $pagestate{$page}{meta}{pandoc_bibliography} = $bibl; + push @args, '--bibliography='.$bibl; + last; + } + } + # Similarly for the CSL file... + for my $cslfile ($scalar_meta{csl}, $config{pandoc_csl}) { + if ($cslfile) { + $pagestate{$page}{meta}{pandoc_csl} = $cslfile; + push @args, '--csl='.$cslfile; + last; + } + } + # If a default CSL language is specified, add that to args, + # (unless it is overridden by meta) + unless ($scalar_meta{lang} || $scalar_meta{locale}) { + if ($config{pandoc_csl_default_lang}) { + push @args, "--metadata=lang:".$config{pandoc_csl_default_lang}; + } + } + # Turn on the pandoc-citeproc filter if either global bibliography, + # local bibliography or a 'references' key in Meta is present. + if ($have_bibl) { + my $citeproc = $config{pandoc_citeproc} || 'pandoc-citeproc'; + push @args, "--filter=$citeproc"; + } + + # Other pandoc filters. Note that currently there is no way to + # configure a filter to run before pandoc-citeproc has done its work. + if ($config{pandoc_filters}) { + my @filters = split /\s*,\s*/, $config{pandoc_filters}; + s/^["']//g for @filters; # get rid of enclosing quotes + foreach my $filter (@filters) { + push @args, "--filter=$filter"; + } + } + + # html_extra_options my be set in Meta block in the page or in the .setup + # file. If both are present, the Meta block has precedence, even if it is + # an empty list + my @html_args = @args; + if (ref $meta->{html_extra_options}{c} eq 'ARRAY') { + if (ref unwrap_c($meta->{html_extra_options}{c}) eq 'ARRAY') { + push @html_args, @{unwrap_c($meta->{html_extra_options}{c})}; + } else { + push @html_args, unwrap_c($meta->{html_extra_options}{c}); + } + } elsif (ref $config{'pandoc_html_extra_options'} eq 'ARRAY') { + push @html_args, @{$config{'pandoc_html_extra_options'}}; + } + + my $to_html_pid = open2(*PANDOC_IN, *JSON_IN, $command, + '-f', 'json', + '-t', $htmlformat, + @html_args); + error("Unable to open $command") unless $to_html_pid; + + $pagestate{$page}{pandoc_extra_formats} = {}; + foreach my $ext (keys %extra_formats) { + if ($bool_meta{"generate_$ext"}) { + export_file($page, $ext, $json_content, $command, @args); + } else { + remove_exported_file($page, $ext); + } + } + print JSON_IN $json_content; close JSON_IN; @@ -279,51 +591,199 @@ sub htmlize ($@) { $content = Encode::decode_utf8(join('', @html)); - # Parse the title block out of the JSON and set the meta values - my @perl_content = @{decode_json($json_content)}; - my %header_section = %{$perl_content[0]}; - my @doc_title = @{$header_section{'docTitle'}}; - my @doc_authors = @{$header_section{'docAuthors'}}; - my $num_authors = @doc_authors; - my @primary_author = (); - if ($num_authors gt 0) { - @primary_author = @{$doc_authors[0]}; - } - my @doc_date = @{$header_section{'docDate'}}; - - sub compile_string { - # The uncompiled string is an array of hashes containing words and - # string with the word "Space". - my (@uncompiled_string) = @_; - my $compiled_string = ''; - foreach my $word_or_space(@uncompiled_string) { - if (ref($word_or_space) eq "HASH") { - if ($word_or_space->{"Str"}) { - $compiled_string .= $word_or_space->{"Str"}; - } + # Reinstate placeholders for inline plugin: + $content =~ s{::INLINE::PLACEHOLDER::(\d+)::} + {<div class="inline" id="$1"></div>}g; + + return $content; +} + + +sub pagetemplate (@) { + my %params = @_; + my $page = $params{page}; + my $template = $params{template}; + foreach my $k (keys %{$pagestate{$page}{meta}}) { + next unless $k =~ /^pandoc_/; + $template->param($k => $pagestate{$page}{meta}{$k}); + } +} + +sub pageactions { + my %args = @_; + my $page = $args{page}; + my @links = (); + return unless $pagestate{$page}{pandoc_extra_formats}; + my @exts = sort { + $extra_formats{$a}->{order} <=> $extra_formats{$b}->{order} + } keys %{ $pagestate{$page}{pandoc_extra_formats} }; + foreach my $ext (@exts) { + my $url = $pagestate{$page}{pandoc_extra_formats}{$ext}; + next unless $url; + my $label = $extra_formats{$ext}->{label} || $ext; + push @links, qq[ + <a href="$url" + class="extra-format-link" + title="Download $label version of this page" + target="_blank">$label</a> + ]; + } + return @links; +} + +sub export_file { + my ($page, $ext, $json_content, $command, @args) = @_; + my ($export_path, $export_url) = _export_file_path_and_url($page, $ext); + my $subdir = $1 if $export_path =~ /(.*)\//; + my @extra_args = @{ $extra_formats{$ext}->{extra} }; + my $eopt = $ext eq 'pdf' ? 'latex' : $ext; + # Note that template in meta OVERRIDES template in config, + # while extra_options in meta are ADDED to extra_options in config. + my $template = $pagestate{$page}{meta}{"pandoc_".$eopt."_template"} + || $config{"pandoc_".$eopt."_template"} || ''; + if ($template) { + push @extra_args, ($ext =~ /^(docx|odt)$/ + ? "--reference-$ext=$template" + : "--template=$template"); + } + my $conf_extra = $config{"pandoc_".$eopt."_extra_options"}; + my $conf_extra_custom = $pagestate{$page}{meta}{"pandoc_".$eopt."_extra_options"}; + foreach my $cnf ($conf_extra, $conf_extra_custom) { + if (ref $cnf eq 'ARRAY' && @$cnf) { + push @extra_args, @$cnf; + } + } + my $pdf_cleanup = 0; + if (defined $pagestate{$page}{meta}{"pandoc_pdf_export_cleanup"}) { + $pdf_cleanup = $pagestate{$page}{meta}{"pandoc_pdf_export_cleanup"}; + } elsif ($config{"pandoc_pdf_export_cleanup"}) { + $pdf_cleanup = 1; + } + # If the user has asked for native LaTeX bibliography handling in the + # extra_args for this export format (using --biblatex or --natbib), + # some extra care is needed. Among other things, we need an external + # tool for PDF generation. In this case, $indirect_pdf will be true. + my %maybe_non_citeproc = qw/latex 1 pdf 1 beamer 1/; + my $indirect_pdf = 0; + if ($maybe_non_citeproc{$ext} && grep { /^(?:--biblatex|--natbib)$/ } @extra_args) { + $indirect_pdf = 1 unless $ext eq 'latex'; # both for pdf and beamer + @args = grep { ! /--filter=.*pandoc-citeproc/ } @args; + } + eval { + if ($subdir && !-d $subdir) { + make_path($subdir) or die "Could not make_path $subdir: $!"; + } + my $to_format = $extra_formats{$ext}->{format} || $ext; + my $tmp_export_path = $export_path; + $tmp_export_path =~ s/\.pdf$/.tex/ if $indirect_pdf; + open(EXPORT, "|-", + $command, + '-f' => 'json', + '-t' => $to_format, + '-o' => $tmp_export_path, + @args, @extra_args) or die "Could not open pipe for $ext: $!"; + print EXPORT $json_content; + close EXPORT or die "Could not close pipe for $ext: $!"; + if ($indirect_pdf && $tmp_export_path ne $export_path) { + my @latexmk_args = qw(-quiet -silent); + if (grep { /xelatex/ } @extra_args) { + push @latexmk_args, '-xelatex'; + } elsif (grep { /lualatex/ } @extra_args) { + push @latexmk_args, '-lualatex'; + } else { + push @latexmk_args, '-pdf'; } - else { - $compiled_string .= ' '; + chdir $subdir or die "Could not chdir to $subdir: $!"; + my $plain_fn = $1 if $tmp_export_path =~ /([^\/]+)$/; + $plain_fn =~ s/\.tex//; + system('latexmk', @latexmk_args, $plain_fn) == 0 + or die "Could not run latexmk for pdf generation ($export_path): $!"; + if ($pdf_cleanup) { + system('latexmk', '-c', '-quiet', '-silent', $plain_fn) == 0 + or die "Could not run latexmk for cleanup ($export_path): $!"; + # These files are apparently not cleaned up by latexmk -c. + foreach ('run.xml', 'bbl') { + my $fn = "$subdir/$plain_fn.$_"; + unlink($fn) if -f $fn; + } } } - return $compiled_string; + $pagestate{$page}{pandoc_extra_formats}{$ext} = $export_url; + }; + if ($@) { + warn "EXPORT ERROR FOR $page (format: $ext): $@\n"; + } +} + +sub remove_exported_file { + my ($page, $ext) = @_; + my ($export_path, $export_url) = _export_file_path_and_url($page, $ext); + if (-f $export_path) { + eval { unlink $export_path or die "Could not unlink $export_path: $!" }; + if ($@) { + warn "WARNING: remove_exported_file; page=$page, ext=$ext: $@\n"; + } } +} - my $title = compile_string @doc_title; - my $author = compile_string @primary_author; - my $date = compile_string @doc_date; +sub _export_file_path_and_url { + my ($page, $ext) = @_; + # the html file will end up in "$destdir/$page/index.html", + # while e.g. a pdf will be in "$destdir/$page/$page_minus_dirs.pdf". + my $extension = $extra_formats{$ext}->{ext} || $ext; + my $destdir = $config{destdir} || '.'; + my $page_minus_dirs = $1 if $page =~ /([^\/]*)$/; + $page_minus_dirs ||= 'index'; + my $export_path = "$destdir/$page/$page_minus_dirs.$extension"; + my $export_url = $config{url}; + $export_url .= "/" unless $export_url =~ /\/$/; + $export_url .= "$page/$page_minus_dirs.$extension"; + return ($export_path, $export_url); +} - if ($title) { - $pagestate{$page}{meta}{title} = $title; - } - if ($author) { - $pagestate{$page}{meta}{author} = $author; + +## compile_string and unwrap_c are used to make the meta data structures +## easier to work with for perl. + +sub compile_string { + # Partially represents an item from the data structure in meta as a string. + my @uncompiled = @_; + return $uncompiled[0] if @uncompiled==1 && !ref($uncompiled[0]); + @uncompiled = @{$uncompiled[0]} if @uncompiled==1 && ref $uncompiled[0] eq 'ARRAY'; + my $compiled_string = ''; + foreach my $word_or_space (@uncompiled) { + next unless ref $word_or_space eq 'HASH'; + my $type = $word_or_space->{'t'} || ''; + $compiled_string .= compile_string(@{ $word_or_space->{c} }) if $type eq 'MetaInlines'; + next unless $type eq 'Str' || $type eq 'Space' || $type eq 'MetaString'; + $compiled_string .= $type eq 'Space' ? ' ' : $word_or_space->{c}; } - if ($date) { - $pagestate{$page}{meta}{date} = $date; + return $compiled_string; +} +sub unwrap_c { + # Unwrap pandoc's MetaLists, MetaInlines, etc. + # Finds the deepest-level scalar value for 'c' in the data structure. + # Lists with one element are replaced with the scalar, lists with more + # than one element are returned as an arrayref containing scalars. + my $container = shift; + if (ref $container eq 'ARRAY' && @$container > 1) { + if (ref $container->[0] eq 'HASH' && $container->[0]->{t} =~ /^(?:Str|Space)$/) { + # handles scalar author fields + return join('', map { compile_string($_) } @$container); + } else { + return [map {unwrap_c($_)} @$container]; + } + } elsif (ref $container eq 'ARRAY' && @$container) { + return unwrap_c($container->[0]); + } elsif (ref $container eq 'ARRAY') { + return; + } elsif (ref $container eq 'HASH' && $container->{c}) { + return unwrap_c($container->{c}); + } elsif (ref $container) { + return; + } else { + return $container; } - - return $content; } -1 +1; diff --git a/e-post/doman.mdwn b/e-post/doman.mdwn index 2cce8d6..b7b8543 100644 --- a/e-post/doman.mdwn +++ b/e-post/doman.mdwn @@ -36,7 +36,7 @@ Hur gör man? Subdomän Typ TTL Data @ MX 7200 5 mx1.fripost.org. - @ MX 7200 10 mx2.fripost.org. + @ MX 7200 5 mx2.fripost.org. Ombudet där domänen köptes har troligen detaljerade instruktioner för hur just deras tjänst ska konfigureras på sin hemsida. Det kan dröja upp till 48 timmar efter att man har ändrat sina MX-poster innan de propagerats över hela Internet. @@ -168,8 +168,12 @@ receiver's mail client might emphasize that your messages are signed by Fripost's key and not your own (GMail [surely does](https://support.google.com/mail/answer/1311182), for instance). This doesn't really disclose anything as our domain can be -found in the mail header anyway, but if you prefer to have your own key -drop us a line, we will find something out. +found in the mail header anyway, but feel free to drop us a line if you +prefer to have a dedicated key pair for your domain. +(In that case we'll generate the key material ourselves, and +[*publish*](https://git.fripost.org/fripost-ansible/tree/certs/dkim) its +public part, as well as the signing domain identifier and selector used +in the `DKIM-Signature` header field.) Should I publish a SPF (Sender Policy Framework) record for my domain? ---------------------------------------------------------------------- diff --git a/e-post/migrate-google.mdwn b/e-post/migrate-google.mdwn index 8b023cd..1205a74 100644 --- a/e-post/migrate-google.mdwn +++ b/e-post/migrate-google.mdwn @@ -8,22 +8,37 @@ fly från Google-beroendet var ett populärt förslag bl.a. på årsmötet Detta är en översikt över vad det innebär att flytta från andra leverantörer. +**E-post** + 1. Konfigurera vidarebefordring av e-post till Fripost 2. Flytta över e-posten. "Ladda ner" all befintlig e-post (för överföring) och ev. vid behov ladda upp motsvarande till Fripost - 3. Ladda över kontakter till Roundcube webmail (*mail.fripost.org*) +**Förbered telefonen** + + 3. Konfigurera telefon för hanteringa av e-post, kontakter, kalender och + uppgifter + +**Kontakter** + + 4. Ladda över kontakter till webbmail (*mail.fripost.org*) - 4. Skapa kalender (Nextcloud) och stämma av med Google-kalender + 5. Stäm av kontakter mellan e-postprogram och telefon mot Fripost Lagring för delning - 5. Stäm av kontakter mellan e-postprogram och telefon mot Nextcloud +**Kalender** - 6. "Ladda ner" alla Google Drive-filer och upp på Nextcloud + 6. Skapa och stäm av kalendrar + + 7. Skapa och stäm av åtgärdslistor + +**Lagring, Drive och Dropbox** + + 8. Överför alla Google Drive-filer, filer från Dropbox, etc. till Fripost Lagring för delning. * Ladda ner * Överföra till öppna format - * Ladda upp på Nextcloud + * Ladda upp på Fripost Lagring för delning Läs mer om [Nextcloud och LibreOffice Online](/nextcloud-and-lool), status, och vad får man med Fripost. @@ -79,8 +94,12 @@ lösenord. Dra och flytta för att flytta alla inkorgar och brev mellan kontona. +# 3. Förbered och konfigurera telefon + +(*TODO Bryt ut materialet från nedan till hit.*) -# 3. Ladda över kontakter till Roundcube + +# 4. Ladda över kontakter till webbmail Roundcube och Gmail arbetar båda med s.k. VCF-filer (Virtual Contact File, också [vCard](https://en.wikipedia.org/wiki/VCard) vilket är @@ -108,7 +127,32 @@ vidare [Address Book](https://docs.roundcube.net/doc/help/1.1/en_US/addressbook/index.html), *docs.roundcube.net* -# 4. Skapa och stäm av kalender +# 5. Stäm av kontakter mellan enheter + +För automatisk avstämning av kontakter med telefoner behöver kontakter +laddas över till Nextcloud-kontot. Kontakterna finns ju redan +exporterade. + + 1. Exportera kontakt enligt ovan + 2. Importer i Nextcloud + 3. Stäm av med telefonen + +**Importera i Nextcloud.** I Nextcloud, välj pilen i menyn uppe till +vänster -> "Contacts" -> "Settings" (längst ner till vänster) -> +"Import". Välj den exporterade filen. Det tar ett tag att ladda in +kontakterna. + +**Stäm av med telefonen.** Kontot ska vara konfigurerat sedan +ovanstående rubrik. Välj uppdatera. + +**Notera.** + + 1. Nextcloud kan läsa bara VCF-filer v. 3 el. 4. Vissa enheter och + applikationer (t.ex. Gustav Eeks telefons + standardkontaktapplikation) exporterar kontakter i VCF-format + verion 2.1. Lösningen är att konvertera med Roundcube. + +# 6. Skapa och stäm av kalender Kalendrar arbetar med formatet CalDAV för avstämning mellan enheter och e-postprogram och standardformatet ICS för filer. Processen kommer @@ -154,38 +198,12 @@ DAVdroid. *TODO Beskriv prenumeration på kalendrar i nextcloud (iCal)* +# 7. Skapa och stäm av åtgärdslistor -# 5. Stäm av kontakter mellan e-postprogram och telefon mot Nextcloud - -För automatisk avstämning av kontakter med telefoner behöver kontakter -laddas över till Nextcloud-kontot. Kontakterna finns ju redan -exporterade. - - 1. Exportera kontakt enligt ovan - 2. Importer i Nextcloud - 3. Stäm av med telefonen - -**Importera i Nextcloud.** I Nextcloud, välj pilen i menyn uppe till -vänster -> "Contacts" -> "Settings" (längst ner till vänster) -> -"Import". Välj den exporterade filen. Det tar ett tag att ladda in -kontakterna. - -**Stäm av med telefonen.** Kontot ska vara konfigurerat sedan -ovanstående rubrik. Välj uppdatera. - -**Notera.** - - 1. Nextcloud kan läsa bara VCF-filer v. 3 el. 4. Vissa enheter och - applikationer (t.ex. Gustav Eeks telefons - standardkontaktapplikation) exporterar kontakter i VCF-format - verion 2.1. Lösningen är att konvertera med Roundcube. - -# 4.bonus) Uppgiftslistor - -*TODO Beskriv avstämning av uppgiftslistor p.s.s.s. kalendrar. +*TODO Beskriv avstämning av åtgärdslistor p.s.s.s. kalendrar. -# 6. Ladda över och konvertera Google Drive-filer +# 8. Ladda över och konvertera Google Drive-filer * Ladda ner * Överföra till oppna format @@ -330,6 +330,13 @@ Directory Access Protocol) ännu, men det ingår i planen för framtiden. Fram t Det är lätt att tycka att Fripost uppmuntrar till användning av ofria system som Googles och Yahoos i onödan. Dock ser föreningen det som att den sänker tröskeln för alla att bidra med information. Man skulle också kunna tycka att när inloggning till wikin med LDAP-uppgifterna väl fungerar så vore det lämpligt att ta bort de ofria inloggningsalternativen. Dock kan Friposts inloggningssystem aldrig bli en fullständig ersättare, eftersom wikin också vänder sig till ickemedlemmar. För den som inte vill använda ovan nämnda inloggningsmetoder går det utmärkt att välja "other" och registrera ett konto direkt på wikin. +### Hur byter eller återställer jag mitt lösenord? ### + +Byt lösenord i [webbmailgränssnittet](https://mail.fripost.org). För +att återställa lösenordet, skriv till <admin@fripost.org>, ring, eller +kontakta dem på annat sätt. Läs mer på sidan [[Inloggning och +lösenord|inloggning-och-losenord#reset]] + ### Hur ändrar man avsändare i webbmejlen? ### Det går att skapa och använda alternativa identiteter i Roundcube (Friposts webbmejl). Gör följande i @@ -60,17 +60,11 @@ aktivitetsdagar: e-post, kontakter, etc. från t.ex. Google till Fripost. * [[Exodus]] -- Flerstegsprogram för att gå ur Facebook -Utredningear +Utredningar ------------ Med jämna mellanrum ges utredningsuppdrag från styrelsen till -grupperingar i föreningen: - - * [Utredning om utökad lagring i Lagring för delning](inquiries/2019-03-28-flfd), - Gustav Eek och Stian Rødven Eide, mars--april 2019 - - * [Kostnader för systemets drift](inquiries/cost-operation), - Gustav Eek och Leif-Jöran Olsson, maj--juni 2019 +grupperingar i föreningen. Se [Utredningar för Fripost](inquiries). Tekniskt @@ -108,6 +102,7 @@ Tekniskt * [Språkkonventioner och ordlista](dictionary) * [[meta]] – en sida med diverse skrivarstöd till dem som författar på wikin och en lista över brutna länkar. + * [Krypterade tunnlar](tunnels) Föråldrat diff --git a/inloggning-och-losenord.mdwn b/inloggning-och-losenord.mdwn index d3069bb..0d1b166 100644 --- a/inloggning-och-losenord.mdwn +++ b/inloggning-och-losenord.mdwn @@ -22,8 +22,11 @@ Vad bör man tänka på när det gäller val av lösenord? - Släng gärna in en siffra här, ett specialtecken där och blanda versaler och gemener, men desto viktigare är att få till en bra längd på lösenordet. Se [den här seriestrippen](https://xkcd.com/936/) för att få en uppfattning om varför. - Använd en fri lösenordshanterare, t.ex. GNOME Seahorse, som på ett smidigt sätt matar in krångliga lösenord åt dig. Du behöver då bara memorera ett krångligt lösenord – det som löser upp nyckelringen. Men akta dig för [trojanska hästar](https://sv.wikipedia.org/wiki/Trojansk_h%C3%A4st) och klåfingriga gästanvändare. -Att återställa ett förlorat lösenord +Att återställa ett förlorat lösenord {#reset} ------------------------------------ -Det är okänt för upphovspersonen till denna text hur man ska gå till väga. Skicka ett e-brev till någon av e-postlistorna och fråga om hjälp. - +Friposts administratörer återställer lösenord. Skriv till +<admin@fripost.org>, ring, eller kontakta dem på annat sätt. För de +som angav en alternativ adress när de blev medlemmar, så skickas ett +lösenord dit. Vissa angav telefonnummer och då kan administratörerna +skicka ett SMS-meddelande. diff --git a/inquiries.mdwn b/inquiries.mdwn new file mode 100644 index 0000000..dd1c8af --- /dev/null +++ b/inquiries.mdwn @@ -0,0 +1,146 @@ +--- +title: Utredningar för Fripost +... + +En av Friposts arbetsformer är genom utredningar. Bl. a. är det de som +legat till grund för investeringarna i Fripost lagring för delning och +för beslut i chattfrågan. + +[[!toc levels=3]] + +# Pågende aktuella utredningar + +Detta är en samlingssida för pågående och avslutade +utredningar. Bl.a. beslutade styrelsemötet 27 maj 2019 fortsätta en +uppsjö utredningar mot bakgrund i 2019 års årsmöte. Sidan är dock inte +säkert heltäckande. + +## [Transparens & ickemonetära bidrag](transparency) + + Deltagare + : AS, GE, LJO, OV + + Initierad + : 27 maj 2019 + +Fortsatt arbetet med att synliggöra kostnader, beslut, och processer +och öka tillgängligheten i allmänhet. Utredningen är en +paraplyutredning och separeras i fölajde delar: + + 1. Volontära timmar + 2. Kostnader för driften + 3. Ekonomiska relationer & autonomi + 4. Tillgänglighet till dokumentation och information + +### [Volontära timmar](volontary-hours) + + Deltagare + : AS, GE + + Initierad + : 27 maj 2019 + +Det är en hållbarhetsfråga att synliggöra medlemmarnas insatser genom +deltagande i föreningens aktivitetter. + +Delutredning av *Transparens & ickemonetära bidrag*. + +### [Kostnader för driften](cost-operation) + + Deltagare + : GE, LJO + + Initierad + : 27 maj 2019 + +Adressera "Få vad man betalar för". + +Delutredning av *Transparens & ickemonetära bidrag*. + +### [Ekonomiska relationer & autonomi](relations-autonomy) + + Deltagare + : GE, LJO + + Initierad + : 27 maj 2019 + +Hur tydligare separera Friprogramvarusyndikatet och Fripost +ekonomiskt. + +Delutredning av *Transparens & ickemonetära bidrag*. + +### [Tillgänglighet till dokumentation och information](access-documentation) + + Deltagare + : GE, OV + + Initierad + : 27 maj 2019 + +Utåtriktade texter bör spegla föreningens verksamhet och vara +aktuella. Dokument år t.ex. protokoll och policydokument. + +Delutredning av *Transparens & ickemonetära bidrag*. + +## [Medlemskap](membership) + + Deltagare + : OV, SRE + + Initierad + : 27 maj 2019 + +Utgå från resonemanget i § 6 i styrelsemötet 27 maj 2019. Utred också +föreningsmedlemskap. Sammanfatta och kommunicera. + +## [Utökad Fripost Lagring för delning](2019-03-28-flfd) + + Deltagare + : SRE, GE, LJO, GM + + Initierad + : Mars 2019 + +Enligt stämmobeslut att ge styrelsen i uppdrag att utreda frågan om +utökad lagring. Utredningen ska ta utgångspunkt i utredningen på ämnet +så som +presenterad: <https://wiki.fripost.org/inquiries/2019-03-28-flfd> + +## [Chatt](chat) + + Deltagare + : ER, GM + + Initierad + : okt 2017 + +## [Roller och kommittéer i Fripost](roles-committees) + + Deltagare + : GE, AS, OV + + Initierad + : 27 maj 2019 + +Frågan kring styrelsens mötesprotokoll (revisorns fråga) kan rymmas i +transparensutredningen (OV). Ta med utgångspunten kring ickemonetära +bidrag som från t.ex. 2016 som GE och LJO inledde (LJO). Notera också +att revisorn föreslog att sätta upp delmål, framförallt gällande +transparensutredningsarbetet. + +# Avslutade utredningar + +Här följer en sammanfattning av utredningar som inte längre är igång +eller aktuella. + +## [Distribuerad lagring](distributed-storage) (2015--2018) + + Deltagare + : Olof Gross, Gustav Eek + + Initierad + : 2015 + + Avslutad + : 2018 diff --git a/inquiries/2019-03-28-flfd.mdwn b/inquiries/2019-03-28-flfd.mdwn index e837d16..07308c8 100644 --- a/inquiries/2019-03-28-flfd.mdwn +++ b/inquiries/2019-03-28-flfd.mdwn @@ -1,8 +1,13 @@ -[[!meta - title="Utredning om utökad lagring i Lagring för delning" - author="Gustav Eek och Stian Rødven Eide" - date="mars--april 2019" -]] +--- +title: Utökad Fripost Lagring för delning +subtitle: Utredning för Fripost +author: SRE, GE, LJO +date: mars--april 2019 +abstract: | + Enligt stämmobeslut att ge styrelsen i uppdrag att utreda frågan om + utökad lagring. Utredningen ska ta utgångspunkt i utredningen på ämnet + så som presenterad. +... [[!tag utredning]] [[!tag inquiry]] @@ -13,6 +18,13 @@ på [Fripost Lagring för delning](../../nextcloud-and-lool). Styrelseledamöterna Gustav och Stian tog sig an att utreda frågan och presentera en motion till föreningens årsmöte. Detta dokument utgör anteckningarna från sammaträden mellan Gustav och Stian 28 mars och 3 april 2019. + Table: Sammanträdeslogg + + ------------ ----------------------------------------------------- + *datum* *Deltagare*, *Plats*. *Ämne* + ------------ ----------------------------------------------------- + + **Innehåll** [[!toc]] diff --git a/inquiries/access-documentation.mdwn b/inquiries/access-documentation.mdwn new file mode 100644 index 0000000..3ee6bff --- /dev/null +++ b/inquiries/access-documentation.mdwn @@ -0,0 +1,115 @@ +--- +title: Tillgänglighet till dokumentation och information +subtitle: Utredning för Fripost +author: Gustav Eek och Oskar Vigren +date: Maj--September 2019 +abstract: | + Utåtriktade texter bör spegla föreningens verksamhet och vara + aktuella. Dokument år t.ex. protokoll och policydokument. + Delutredning av *Transparens & ickemonetära bidrag*. +... + + Table: Sammanträdeslogg + + ------------ ----------------------------------------------------- + 2019-06-05 GE, OV; Basen, Chalmers; inital träff + 2019-09-16 GE, OV; Chalmers bibliotek; översikt, mallar, plugin + ------------ ----------------------------------------------------- + +**Innehåll** + +[[!toc levels=3]] + +# Behov-/problemformulering +Friposts-wiki är i behov av transparens och förbättrad navigering och arbetssätt +för medlemar och icke-medlemars möjlighet att ta in information och lägga in ny information på wikin. + +Beskrivet av revisorn: + + * Protokoll ej tillgängliga i tid + * Försvåras av tekniken för publicering? + * Försvåras av granskningsprocessen? + +# Vision och syfte + +Utredarna hoppas och önskar att medlemmarna (a) ska vara intresserade, +(b) ska ha insikt i arbetet och händelseutvecklingen i föreningen, (c) +kunna delta och bidra, och (d) enkelt uttrycka sina åsikter. Friposts +teknik och system för intern kommunikation och dokumentation ska +understödja detta. + +Utredningen syftar till att kartlägga och brygga om det finns tekniska +gap mellan nuvarande tillstånd befintliga och vad som beskrivs samt +presentera förslag på åtgärder. + +# Åtgärder + +En serie åtgärder att utforska: + + * Studera processer för automatisk uppbyggnad (inline) av sidor i + Ikiwiki + * Anpassa mallar för fullständiga wikisidor + * Anpassa mallar för snuttar (inline) + * Utnyttja Pandoc Markdow till metadata (YAML) + +Genom detta kan bl.a. kalendarium och aktivitetsdagar administreras +som en "evenemangsblogg". Fler tillämpningar följer. + +## Tillämpningar +Förenkla följande vyer för tillägg och läsning. + +- Styrelsemötesprotokoll +- Andra mötesprotokoll +- Evenemang +- Utredningar +- FAQ + +## Outvärderade idéer +- Renovering av mötesprotokollens git-förråd och publiceringsmetod till wikin. + + Kategorisera efter mötestyp (årsmöte / styrelsemöte) istället för år. + + Gör om protokoll till markdown som kan kompilera till HTML och infogas i wikin. + * Detta är sänker förhoppningsvis också kunskapskraven för att skriva pro +tokoll. + + +## Noterade detaljer och frågor + +Sortera sidor enligt + + * Kalendarium, möten, etc. efter datum + * Utredningar, efter senast uppdaterat + +Besluta om vi ska bakdatera t.ex. befintliga evenemang till +ursprunglig commit. + +# Pågående arbete + +Arbetet med att utforska och implementera automatisk sidgenerering +(med Ikiwikis *inline*-direktiv och mallar) är i full gång: + + * Det sker på grenar t.ex. [*ge/aktiv-test_newer*][branch] (inte + perfekt namn) + + * Portalsidan är [*someevent.mdwn*][portal] + +[branch]: https://git.fripost.org/fripost-wiki/log/?h=ge/aktiv-test_newer +[portal]: https://git.fripost.org/fripost-wiki/tree/someevent.mdwn?h=ge/aktiv-test_newer + +# Verktyg och åtgärdsförslag utanför utredningens omfattningen + +Här samlas bara idéer som dock ligger utanför utredningens omfattning: + + * Implementera kompilering av wikin på varje gren + + * Uppdatera instruktioner för lokal wiki + + * Informaitonsstrukturen på wikins indexsida är inte optimal. Dock + lämnas åtgärder vidare + + * WYSIWYG + +## Redaktörskommitté + +Utredningen rekommenderar inrättande av en +redaktörskommitté. Kommittén kan t.ex. adressera indexsidan. Primär +ska den fortsätta löpande underhåll enligt utredningens utfall. diff --git a/inquiries/chat.mdwn b/inquiries/chat.mdwn new file mode 100644 index 0000000..fcaf559 --- /dev/null +++ b/inquiries/chat.mdwn @@ -0,0 +1,15 @@ +--- +title: Chatt +subtitle: Utredning för Fripost +author: ER, GM +date: Oct 2017--May 2019 +abstract: | + +... + + Table: Sammanträdeslogg + + ------------ ----------------------------------------------------- + *datum* *Deltagare*, *Plats*. *Ämne* + ------------ ----------------------------------------------------- + diff --git a/inquiries/cost-operation.mdwn b/inquiries/cost-operation.mdwn index 7cef3ca..de26f32 100644 --- a/inquiries/cost-operation.mdwn +++ b/inquiries/cost-operation.mdwn @@ -1,7 +1,11 @@ --- title: Kostnader för systemets drift -- utredning för Fripost +subtitle: Utredning för Fripost author: Fripost genom Gustav Eek och Leif-Jöran Olsson -date: Jun 2019 +date: Maj, jun, sep 2019 +abstract: | + Adressera "Få vad man betalar för". Delutredning av *Transparens + & ickemonetära bidrag*. ... Som delmoment i en serie utredningar, *Transparens & ickemonetär diff --git a/inquiries/distributed-storage.mdwn b/inquiries/distributed-storage.mdwn new file mode 100644 index 0000000..f51cc0b --- /dev/null +++ b/inquiries/distributed-storage.mdwn @@ -0,0 +1,10 @@ +--- +title: Distribuerad lagring +subtitle: Utredning för Fripost +author: Olof Gross, Gustav Eek +date: 2015--2018 +abstract: | + +tags: + - done +... diff --git a/inquiries/membership.mdwn b/inquiries/membership.mdwn new file mode 100644 index 0000000..f6e0e05 --- /dev/null +++ b/inquiries/membership.mdwn @@ -0,0 +1,39 @@ +--- +title: Medlemskap +subtitle: Utredning för Fripost +author: OV, SRE +date: Maj 2019 +abstract: | + Utgå från resonemanget i § 6 i styrelsemötet 27 maj 2019. Utred också + föreningsmedlemskap. Sammanfatta och kommunicera. +... + + Table: Sammanträdeslogg + + ------------ ----------------------------------------------------- + *datum* *Deltagare*, *Plats*. *Ämne* + ------------ ----------------------------------------------------- + +Utredningens uppdrag är att utgå från resonemanget i § 6 i +styrelsemötet 27 maj 2019. Utred också +föreningsmedlemskap. Sammanfatta och kommunicera. + +I styrelseprotokollet står att läsa: + +> Det är bättre om medlemskap bara kan tecknas i egen person, dvs. att +> man inte kan tec0kna medlemskap för andra (GE, SRE). (a) För Fripost +> är demokrati och folkbildning centralt. Vi riskerar missa en viktig +> folkbildande möjlighet om inte medlemskapet är +> medvetet. Bl.a. förväntas varje medlem tillgodogöra sig stadgar och +> principförklaring. (b) Vidare är det ibland besvärligt för +> administratörer att jaga nya medlemmar som gått med genom andra. (c) +> Det är demokratiskt riskabelt om enskilda personer eller företag kan +> teckna medlemskap för många andra. +> +> Föreslår en policy enligt ovan (GE, SRE). +> +> Utredning finns sedan tidigare angå4ende att medlemskap inte kan +> tecknas via proxy (LJO). Detta bör kollas upp. +> +> Skriftlig formulering innan beslut (LJO). GE och SRE ska återkomma +> med en sådan. diff --git a/inquiries/relations-autonomy.mdwn b/inquiries/relations-autonomy.mdwn new file mode 100644 index 0000000..2291759 --- /dev/null +++ b/inquiries/relations-autonomy.mdwn @@ -0,0 +1,17 @@ +--- +title: Ekonomiska relationer & autonomi +subtitle: Utredning för Fripost +author: Fripost genom Gustav Eek och Leif-Jöran Olsson +date: Maj 2019 +abstract: | + Hur tydligare separera Friprogramvarusyndikatet och Fripost + ekonomiskt. Delutredning av *Transparens & ickemonetära bidrag*. +... + + Table: Sammanträdeslogg + + ------------ ----------------------------------------------------- + *datum* *Deltagare*, *Plats*. *Ämne* + ------------ ----------------------------------------------------- + + diff --git a/inquiries/roles-committees.mdwn b/inquiries/roles-committees.mdwn new file mode 100644 index 0000000..99c2026 --- /dev/null +++ b/inquiries/roles-committees.mdwn @@ -0,0 +1,18 @@ +--- +title: Roller och kommittéer i Fripost +subtitle: Utredning för Fripost +author: GE, AS, OV +date: May 2019 +abstract: | + Frågan kring styrelsens mötesprotokoll (revisorns fråga) kan rymmas i + transparensutredningen (OV). Ta med utgångspunten kring ickemonetära + bidrag som från t.ex. 2016 som GE och LJO inledde (LJO). Notera också + att revisorn föreslog att sätta upp delmål, framförallt gällande + transparensutredningsarbetet. +... + + Table: Sammanträdeslogg + + ------------ ----------------------------------------------------- + *datum* *Deltagare*, *Plats*. *Ämne* + ------------ ----------------------------------------------------- diff --git a/inquiries/transparency.mdwn b/inquiries/transparency.mdwn new file mode 100644 index 0000000..a09fc9d --- /dev/null +++ b/inquiries/transparency.mdwn @@ -0,0 +1,21 @@ +--- +title: Transparens & ickemonetära bidrag +subtitle: Utredning för Fripost +author: AS, GE, LJO, OV +date: Maj 2019 +abstract: | + Fortsatt arbetet med att synliggöra kostnader, beslut, och processer + och öka tillgängligheten i allmänhet. Utredningen är en + paraplyutredning och separeras i fölajde delar: + 1. Volontära timmar + 2. Kostnader för driften + 3. Ekonomiska relationer & autonomi + 4. Tillgänglighet till dokumentation och information +... + +Detta är en paraplyutredning med följande delar: + + 1. Volontära timmar + 2. Kostnader för driften + 3. Ekonomiska relationer & autonomi + 4. Tillgänglighet till dokumentation och information diff --git a/inquiries/volontary-hours.mdwn b/inquiries/volontary-hours.mdwn new file mode 100644 index 0000000..1f78166 --- /dev/null +++ b/inquiries/volontary-hours.mdwn @@ -0,0 +1,18 @@ +--- +title: Volontära timmar +subtitle: Utredning för Fripost +author: Albin Söderqvist och Gustav Eek +date: Maj 2019 +abstract: | + Det är en hållbarhetsfråga att synliggöra medlemmarnas insatser genom + deltagande i föreningens aktivitetter. Delutredning av *Transparens & + ickemonetära bidrag*. +... + + Table: Sammanträdeslogg + + ------------ ----------------------------------------------------- + *datum* *Deltagare*, *Plats*. *Ämne* + ------------ ----------------------------------------------------- + + diff --git a/kalendarium.mdwn b/kalendarium.mdwn index 4c78675..e22f713 100644 --- a/kalendarium.mdwn +++ b/kalendarium.mdwn @@ -81,7 +81,13 @@ Möteslokaler Under åren har Fripost använt sig av flera lokaler för sin verksamhet. - * *Språkbanken*, som ligger på Lennart Torstenssonsgatan 8 i närheten av Göteborgs Universitets Humanisten, har Fripost förmånligt fått använda. Lokalen passar utmärkt för aktivitetsdagar och möten. + * *Språkbanken*, som ligger på Humanisten (Göteborgs universitet) vid + Näckrosdammen, har Fripost förmånligt fått använda. Vanligen sker + möten i *rum F314 i Humanistens huvudbyggnad*. Mötesrummet nås + enklast via sekundärentrén mot Carlandersplatsen. Det är entrén + under tunneln längst in mot nybyggnationen. Hiss nås enklast finns + i Språkskrapan. Den tillfälliga huvudentrén ligger på adressen + Lundgrensgatan. * *Slottsskogen* passar bra för picknick, utefester och friare samtal. * Syndikalisternas lokal i *Folkets hus*, Järntorget, kan vara ett alternativ. Gå in på Draken och upp för trappan. * Vi har också haft planeringsmöten på *Moon Thai* på Storgatan 1 i Haga/Vasastan i Göteborg. @@ -66,8 +66,26 @@ ett [stående förslag till dagordning](https://fripost.org/minutes/board-meetin ### Möten 2019 ### - * **mån 24 jun, Styrelsemöte**. Språkbanken (ny lokal). *Protokoll - kommer* + * **mån 28 okt, Styrelsemöte**. Språkbanken. + [Protokoll](https://fripost.org/minutes/2019-10-28-board.pdf) + Innehållsrikt möte. Teknisk rapportering om + nyckelhanteringsdiskussioner. och aktiviteter planerades för + Framtidsveckan. Alla pågående utredningar gicks igenom. + + * **mån 23 sep, Styrelsemöte**. Språkbanken. + [Se protokoll](https://fripost.org/minutes/2019-09-23-board.pdf) + Mestadels planering av kommande aktiviteter i samband med + Framtidsveckan i okto\-ber--november. + + * **mån 26 aug, Styrelsemöte**. Språkbanken. + [Se mötesprotokoll](https://fripost.org/minutes/2019-08-26-board.pdf) + Första mötet efter sommaren. Bl. a. och mestadels planering inför + kommande aktiviteter: (1) Friposts sensommarfest 31 augusti, (2) + Fri programvarudagen 21 september, och (3) Framtidsveckan 30 + okt--10 nov. + + * **mån 24 jun, Styrelsemöte**. Språkbanken (ny lokal). + [Se mötesprotokoll](https://fripost.org/minutes/2019-06-24-board.pdf) Regler för teckna medlemskap för andra diskuterades ytterligare. Också formen för styrelsens arbetsträffar behandlades (finns avsättning för att träffas oftare?). Sensommarfesten diff --git a/nextcloud-and-lool.mdwn b/nextcloud-and-lool.mdwn index fa7651e..44416ff 100644 --- a/nextcloud-and-lool.mdwn +++ b/nextcloud-and-lool.mdwn @@ -91,6 +91,8 @@ eller Matrix. *TODO Beskriv* +Kunskapsdelning från en vanlig användare: Om du vill dela ett dokument så att personer som inte har Nextcloud också kan läsa och redigera dokumentet, så kan du göra detta genom att högerklicka på filen i mappen och välja "Share via Nextcloud". Där kan du välja "Copy public link" och under "Share options" kan du välja att låta andra redigera dokumentet. Detta verkar svårare att åstadkomma i webläsaren på cloud.fripost.org, jag lyckas i alla fall inte lista ut hur man gör där. + # Kravställning * Integration med Friposts LDAP diff --git a/tags/assignee:gustav.mdwn b/tags/assignee:gustav.mdwn new file mode 100644 index 0000000..2664ba6 --- /dev/null +++ b/tags/assignee:gustav.mdwn @@ -0,0 +1,4 @@ +[[!meta title="pages tagged assignee:gustav"]] + +[[!inline pages="tagged(assignee:gustav)" actions="no" archive="yes" +feedshow=10]] diff --git a/tags/assignee:ljo.mdwn b/tags/assignee:ljo.mdwn new file mode 100644 index 0000000..011bc8b --- /dev/null +++ b/tags/assignee:ljo.mdwn @@ -0,0 +1,4 @@ +[[!meta title="pages tagged assignee:ljo"]] + +[[!inline pages="tagged(assignee:ljo)" actions="no" archive="yes" +feedshow=10]] diff --git a/tags/inquiry.mdwn b/tags/inquiry.mdwn new file mode 100644 index 0000000..fee6d25 --- /dev/null +++ b/tags/inquiry.mdwn @@ -0,0 +1,4 @@ +[[!meta title="pages tagged inquiry"]] + +[[!inline pages="tagged(inquiry)" actions="no" archive="yes" +feedshow=10]] diff --git a/tags/utredning.mdwn b/tags/utredning.mdwn new file mode 100644 index 0000000..e5e2bea --- /dev/null +++ b/tags/utredning.mdwn @@ -0,0 +1,4 @@ +[[!meta title="pages tagged utredning"]] + +[[!inline pages="tagged(utredning)" actions="no" archive="yes" +feedshow=10]] diff --git a/tags/website.mdwn b/tags/website.mdwn new file mode 100644 index 0000000..a00ecbe --- /dev/null +++ b/tags/website.mdwn @@ -0,0 +1,4 @@ +[[!meta title="pages tagged website"]] + +[[!inline pages="tagged(website)" actions="no" archive="yes" +feedshow=10]] diff --git a/tags/wiki.mdwn b/tags/wiki.mdwn new file mode 100644 index 0000000..8b8fa1f --- /dev/null +++ b/tags/wiki.mdwn @@ -0,0 +1,4 @@ +[[!meta title="pages tagged wiki"]] + +[[!inline pages="tagged(wiki)" actions="no" archive="yes" +feedshow=10]] diff --git a/templates/page.tmpl b/templates/page.tmpl index e8fb12b..0f2f705 100644 --- a/templates/page.tmpl +++ b/templates/page.tmpl @@ -17,7 +17,7 @@ <link rel="icon" href="<TMPL_VAR BASEURL><TMPL_VAR FAVICON>" type="image/x-icon" /> </TMPL_IF> <TMPL_UNLESS ISWEBSITE><TMPL_IF EDITURL> - <link rel="alternate" type="application/x-wiki" title="Edit this page" href="<TMPL_VAR EDITURL>" /> + <link rel="alternate" type="application/x-wiki" title="Redigera sidan" href="<TMPL_VAR EDITURL>" /> </TMPL_IF></TMPL_UNLESS> <TMPL_IF FEEDLINKS><TMPL_VAR FEEDLINKS></TMPL_IF> <TMPL_IF RELVCS><TMPL_VAR RELVCS></TMPL_IF> @@ -53,16 +53,18 @@ <ul class="nav navbar-nav navbar-right"> <li> <a href="#" class="dropdown-toggle" data-toggle="dropdown"> - <span class="glyphicon glyphicon-user"></span> Members <b class="caret"></b></a> + <span class="glyphicon glyphicon-user"></span> Medlemmar <b class="caret"></b></a> <ul class="dropdown-menu"> <li><a href="https://mail.fripost.org/"> - <span class="glyphicon glyphicon-envelope"></span> Webmail</a></li> + <span class="glyphicon glyphicon-envelope"></span> Webbmail</a></li> + <li><a href="https://cloud.fripost.org/"> + <span class="glyphicon glyphicon-cloud"></span> Lagring för delning</a></li> <li><a href="https://lists.fripost.org/sympa/lists"> - <span class="glyphicon glyphicon-list"></span> Mailing lists</a></li> + <span class="glyphicon glyphicon-list"></span> E-postlistor</a></li> <!-- later... <li class="divider"></li> - <li><a href="#"><span class="glyphicon glyphicon-wrench"></span> Admin panel</a></li> + <li><a href="#"><span class="glyphicon glyphicon-wrench"></span> Administrationspanel</a></li> --> <li> @@ -94,7 +96,7 @@ <TMPL_IF EDITURL> <div class="col-md-4 col-sm-4 col-xs-6 text-right"> <a href="<TMPL_VAR EDITURL>" rel="nofollow"> - <span class="glyphicon glyphicon-pencil"></span> Edit this page + <span class="glyphicon glyphicon-pencil"></span> Redigera sidan </a> </div> </TMPL_IF> diff --git a/tracker/Two-Factor_Authentication.mdwn b/tracker/Two-Factor_Authentication.mdwn new file mode 100644 index 0000000..dc5cdc7 --- /dev/null +++ b/tracker/Two-Factor_Authentication.mdwn @@ -0,0 +1,8 @@ +Is it possible two use some kind of Two-factor authentication? + +Such as TOTP? +https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm +To use from Keepassxc, Andotp, Freeotp or similar. + +At least in Nextcloud it should be simple to set up but I would prefer to use it on both e-mail and Nextcloud. Especially on mail because it will be used as mean to reset passwords to some services. + |