diff --git a/.gitignore b/.gitignore index 2c309b0..19148f1 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,5 @@ Gemfile.lock .Rhistory *.Rproj **.DS_Store + +/.quarto/ diff --git a/Gemfile b/Gemfile deleted file mode 100644 index 187096c..0000000 --- a/Gemfile +++ /dev/null @@ -1,4 +0,0 @@ -source 'https://rubygems.org' -gem 'github-pages', group: :jekyll_plugins - -gem "webrick", "~> 1.7" diff --git a/_extensions/mcanouil/iconify/LICENSE b/_extensions/mcanouil/iconify/LICENSE new file mode 100644 index 0000000..43fb0c2 --- /dev/null +++ b/_extensions/mcanouil/iconify/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2025 Mickaël Canouil + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/_extensions/mcanouil/iconify/_extension.yml b/_extensions/mcanouil/iconify/_extension.yml new file mode 100644 index 0000000..07da98a --- /dev/null +++ b/_extensions/mcanouil/iconify/_extension.yml @@ -0,0 +1,7 @@ +title: Iconify +author: Mickaël Canouil +version: 3.0.0 +quarto-required: ">=1.5.57" +contributes: + shortcodes: + - iconify.lua diff --git a/_extensions/mcanouil/iconify/iconify-icon.min.js b/_extensions/mcanouil/iconify/iconify-icon.min.js new file mode 100644 index 0000000..00cee26 --- /dev/null +++ b/_extensions/mcanouil/iconify/iconify-icon.min.js @@ -0,0 +1,13 @@ +/** +* (c) Iconify +* +* For the full copyright and license information, please view the license.txt +* files at https://github.com/iconify/iconify +* +* Licensed under MIT. +* Source: https://github.com/iconify/code/tree/gh-pages/iconify-icon +* +* @license MIT +* @version 3.0.0 +*/ +!function(){"use strict";const t=Object.freeze({left:0,top:0,width:16,height:16}),e=Object.freeze({rotate:0,vFlip:!1,hFlip:!1}),n=Object.freeze({...t,...e}),i=Object.freeze({...n,body:"",hidden:!1}),r=Object.freeze({width:null,height:null}),o=Object.freeze({...r,...e});const s=/[\s,]+/;const c={...o,preserveAspectRatio:""};function a(t){const e={...c},n=(e,n)=>t.getAttribute(e)||n;var i;return e.width=n("width",null),e.height=n("height",null),e.rotate=function(t,e=0){const n=t.replace(/^-?[0-9.]*/,"");function i(t){for(;t<0;)t+=4;return t%4}if(""===n){const e=parseInt(t);return isNaN(e)?0:i(e)}if(n!==t){let e=0;switch(n){case"%":e=25;break;case"deg":e=90}if(e){let r=parseFloat(t.slice(0,t.length-n.length));return isNaN(r)?0:(r/=e,r%1==0?i(r):0)}}return e}(n("rotate","")),i=e,n("flip","").split(s).forEach((t=>{switch(t.trim()){case"horizontal":i.hFlip=!0;break;case"vertical":i.vFlip=!0}})),e.preserveAspectRatio=n("preserveAspectRatio",n("preserveaspectratio","")),e}const u=/^[a-z0-9]+(-[a-z0-9]+)*$/,l=(t,e,n,i="")=>{const r=t.split(":");if("@"===t.slice(0,1)){if(r.length<2||r.length>3)return null;i=r.shift().slice(1)}if(r.length>3||!r.length)return null;if(r.length>1){const t=r.pop(),n=r.pop(),o={provider:r.length>0?r[0]:i,prefix:n,name:t};return e&&!f(o)?null:o}const o=r[0],s=o.split("-");if(s.length>1){const t={provider:i,prefix:s.shift(),name:s.join("-")};return e&&!f(t)?null:t}if(n&&""===i){const t={provider:i,prefix:"",name:o};return e&&!f(t,n)?null:t}return null},f=(t,e)=>!!t&&!(!(e&&""===t.prefix||t.prefix)||!t.name);function d(t,n){const r=function(t,e){const n={};!t.hFlip!=!e.hFlip&&(n.hFlip=!0),!t.vFlip!=!e.vFlip&&(n.vFlip=!0);const i=((t.rotate||0)+(e.rotate||0))%4;return i&&(n.rotate=i),n}(t,n);for(const o in i)o in e?o in t&&!(o in r)&&(r[o]=e[o]):o in n?r[o]=n[o]:o in t&&(r[o]=t[o]);return r}function h(t,e,n){const i=t.icons,r=t.aliases||Object.create(null);let o={};function s(t){o=d(i[t]||r[t],o)}return s(e),n.forEach(s),d(t,o)}function p(t,e){const n=[];if("object"!=typeof t||"object"!=typeof t.icons)return n;t.not_found instanceof Array&&t.not_found.forEach((t=>{e(t,null),n.push(t)}));const i=function(t,e){const n=t.icons,i=t.aliases||Object.create(null),r=Object.create(null);return Object.keys(n).concat(Object.keys(i)).forEach((function t(e){if(n[e])return r[e]=[];if(!(e in r)){r[e]=null;const n=i[e]&&i[e].parent,o=n&&t(n);o&&(r[e]=[n].concat(o))}return r[e]})),r}(t);for(const r in i){const o=i[r];o&&(e(r,h(t,r,o)),n.push(r))}return n}const g={provider:"",aliases:{},not_found:{},...t};function b(t,e){for(const n in e)if(n in t&&typeof t[n]!=typeof e[n])return!1;return!0}function v(t){if("object"!=typeof t||null===t)return null;const e=t;if("string"!=typeof e.prefix||!t.icons||"object"!=typeof t.icons)return null;if(!b(t,g))return null;const n=e.icons;for(const t in n){const e=n[t];if(!t||"string"!=typeof e.body||!b(e,i))return null}const r=e.aliases||Object.create(null);for(const t in r){const e=r[t],o=e.parent;if(!t||"string"!=typeof o||!n[o]&&!r[o]||!b(e,i))return null}return e}const m=Object.create(null);function y(t,e){const n=m[t]||(m[t]=Object.create(null));return n[e]||(n[e]=function(t,e){return{provider:t,prefix:e,icons:Object.create(null),missing:new Set}}(t,e))}function x(t,e){return v(e)?p(e,((e,n)=>{n?t.icons[e]=n:t.missing.add(e)})):[]}function _(t,e){let n=[];return("string"==typeof t?[t]:Object.keys(m)).forEach((t=>{("string"==typeof t&&"string"==typeof e?[e]:Object.keys(m[t]||{})).forEach((e=>{const i=y(t,e);n=n.concat(Object.keys(i.icons).map((n=>(""!==t?"@"+t+":":"")+e+":"+n)))}))})),n}let w=!1;function k(t){return"boolean"==typeof t&&(w=t),w}function A(t){const e="string"==typeof t?l(t,!0,w):t;if(e){const t=y(e.provider,e.prefix),n=e.name;return t.icons[n]||(t.missing.has(n)?null:void 0)}}function j(t,e){const n=l(t,!0,w);if(!n)return!1;const i=y(n.provider,n.prefix);return e?function(t,e,n){try{if("string"==typeof n.body)return t.icons[e]={...n},!0}catch(t){}return!1}(i,n.name,e):(i.missing.add(n.name),!0)}function O(t,e){if("object"!=typeof t)return!1;if("string"!=typeof e&&(e=t.provider||""),w&&!e&&!t.prefix){let e=!1;return v(t)&&(t.prefix="",p(t,((t,n)=>{j(t,n)&&(e=!0)}))),e}const n=t.prefix;if(!f({prefix:n,name:"a"}))return!1;return!!x(y(e,n),t)}function C(t){return!!A(t)}function I(t){const e=A(t);return e?{...n,...e}:e}function E(t,e){t.forEach((t=>{const n=t.loaderCallbacks;n&&(t.loaderCallbacks=n.filter((t=>t.id!==e)))}))}let T=0;const F=Object.create(null);function R(t,e){F[t]=e}function S(t){return F[t]||F[""]}var L={resources:[],index:0,timeout:2e3,rotate:750,random:!1,dataAfterTimeout:!1};function P(t,e,n,i){const r=t.resources.length,o=t.random?Math.floor(Math.random()*r):t.index;let s;if(t.random){let e=t.resources.slice(0);for(s=[];e.length>1;){const t=Math.floor(Math.random()*e.length);s.push(e[t]),e=e.slice(0,t).concat(e.slice(t+1))}s=s.concat(e)}else s=t.resources.slice(o).concat(t.resources.slice(0,o));const c=Date.now();let a,u="pending",l=0,f=null,d=[],h=[];function p(){f&&(clearTimeout(f),f=null)}function g(){"pending"===u&&(u="aborted"),p(),d.forEach((t=>{"pending"===t.status&&(t.status="aborted")})),d=[]}function b(t,e){e&&(h=[]),"function"==typeof t&&h.push(t)}function v(){u="failed",h.forEach((t=>{t(void 0,a)}))}function m(){d.forEach((t=>{"pending"===t.status&&(t.status="aborted")})),d=[]}function y(){if("pending"!==u)return;p();const i=s.shift();if(void 0===i)return d.length?void(f=setTimeout((()=>{p(),"pending"===u&&(m(),v())}),t.timeout)):void v();const r={status:"pending",resource:i,callback:(e,n)=>{!function(e,n,i){const r="success"!==n;switch(d=d.filter((t=>t!==e)),u){case"pending":break;case"failed":if(r||!t.dataAfterTimeout)return;break;default:return}if("abort"===n)return a=i,void v();if(r)return a=i,void(d.length||(s.length?y():v()));if(p(),m(),!t.random){const n=t.resources.indexOf(e.resource);-1!==n&&n!==t.index&&(t.index=n)}u="completed",h.forEach((t=>{t(i)}))}(r,e,n)}};d.push(r),l++,f=setTimeout(y,t.rotate),n(i,e,r.callback)}return"function"==typeof i&&h.push(i),setTimeout(y),function(){return{startTime:c,payload:e,status:u,queriesSent:l,queriesPending:d.length,subscribe:b,abort:g}}}function M(t){const e={...L,...t};let n=[];function i(){n=n.filter((t=>"pending"===t().status))}return{query:function(t,r,o){const s=P(e,t,r,((t,e)=>{i(),o&&o(t,e)}));return n.push(s),s},find:function(t){return n.find((e=>t(e)))||null},setIndex:t=>{e.index=t},getIndex:()=>e.index,cleanup:i}}function N(t){let e;if("string"==typeof t.resources)e=[t.resources];else if(e=t.resources,!(e instanceof Array&&e.length))return null;return{resources:e,path:t.path||"/",maxURL:t.maxURL||500,rotate:t.rotate||750,timeout:t.timeout||5e3,random:!0===t.random,index:t.index||0,dataAfterTimeout:!1!==t.dataAfterTimeout}}const z=Object.create(null),Q=["https://api.simplesvg.com","https://api.unisvg.com"],q=[];for(;Q.length>0;)1===Q.length||Math.random()>.5?q.push(Q.shift()):q.push(Q.pop());function U(t,e){const n=N(e);return null!==n&&(z[t]=n,!0)}function D(t){return z[t]}function H(){return Object.keys(z)}function J(){}z[""]=N({resources:["https://api.iconify.design"].concat(q)});const $=Object.create(null);function B(t,e,n){let i,r;if("string"==typeof t){const e=S(t);if(!e)return n(void 0,424),J;r=e.send;const o=function(t){if(!$[t]){const e=D(t);if(!e)return;const n={config:e,redundancy:M(e)};$[t]=n}return $[t]}(t);o&&(i=o.redundancy)}else{const e=N(t);if(e){i=M(e);const n=S(t.resources?t.resources[0]:"");n&&(r=n.send)}}return i&&r?i.query(e,r,n)().abort:(n(void 0,424),J)}function G(){}function V(t){t.iconsLoaderFlag||(t.iconsLoaderFlag=!0,setTimeout((()=>{t.iconsLoaderFlag=!1,function(t){t.pendingCallbacksFlag||(t.pendingCallbacksFlag=!0,setTimeout((()=>{t.pendingCallbacksFlag=!1;const e=t.loaderCallbacks?t.loaderCallbacks.slice(0):[];if(!e.length)return;let n=!1;const i=t.provider,r=t.prefix;e.forEach((e=>{const o=e.icons,s=o.pending.length;o.pending=o.pending.filter((e=>{if(e.prefix!==r)return!0;const s=e.name;if(t.icons[s])o.loaded.push({provider:i,prefix:r,name:s});else{if(!t.missing.has(s))return n=!0,!0;o.missing.push({provider:i,prefix:r,name:s})}return!1})),o.pending.length!==s&&(n||E([t],e.id),e.callback(o.loaded.slice(0),o.missing.slice(0),o.pending.slice(0),e.abort))}))})))}(t)})))}function K(t,e,n){function i(){const n=t.pendingIcons;e.forEach((e=>{n&&n.delete(e),t.icons[e]||t.missing.add(e)}))}if(n&&"object"==typeof n)try{if(!x(t,n).length)return void i()}catch(t){console.error(t)}i(),V(t)}function W(t,e){t instanceof Promise?t.then((t=>{e(t)})).catch((()=>{e(null)})):e(t)}function X(t,e){t.iconsToLoad?t.iconsToLoad=t.iconsToLoad.concat(e).sort():t.iconsToLoad=e,t.iconsQueueFlag||(t.iconsQueueFlag=!0,setTimeout((()=>{t.iconsQueueFlag=!1;const{provider:e,prefix:n}=t,i=t.iconsToLoad;if(delete t.iconsToLoad,!i||!i.length)return;const r=t.loadIcon;if(t.loadIcons&&(i.length>1||!r))return void W(t.loadIcons(i,n,e),(e=>{K(t,i,e)}));if(r)return void i.forEach((i=>{W(r(i,n,e),(e=>{K(t,[i],e?{prefix:n,icons:{[i]:e}}:null)}))}));const{valid:o,invalid:s}=function(t){const e=[],n=[];return t.forEach((t=>{(t.match(u)?e:n).push(t)})),{valid:e,invalid:n}}(i);if(s.length&&K(t,s,null),!o.length)return;const c=n.match(u)?S(e):null;if(!c)return void K(t,o,null);c.prepare(e,n,o).forEach((n=>{B(e,n,(e=>{K(t,n.icons,e)}))}))})))}const Y=(t,e)=>{const n=function(t,e=!0,n=!1){const i=[];return t.forEach((t=>{const r="string"==typeof t?l(t,e,n):t;r&&i.push(r)})),i}(t,!0,k()),i=function(t){const e={loaded:[],missing:[],pending:[]},n=Object.create(null);t.sort(((t,e)=>t.provider!==e.provider?t.provider.localeCompare(e.provider):t.prefix!==e.prefix?t.prefix.localeCompare(e.prefix):t.name.localeCompare(e.name)));let i={provider:"",prefix:"",name:""};return t.forEach((t=>{if(i.name===t.name&&i.prefix===t.prefix&&i.provider===t.provider)return;i=t;const r=t.provider,o=t.prefix,s=t.name,c=n[r]||(n[r]=Object.create(null)),a=c[o]||(c[o]=y(r,o));let u;u=s in a.icons?e.loaded:""===o||a.missing.has(s)?e.missing:e.pending;const l={provider:r,prefix:o,name:s};u.push(l)})),e}(n);if(!i.pending.length){let t=!0;return e&&setTimeout((()=>{t&&e(i.loaded,i.missing,i.pending,G)})),()=>{t=!1}}const r=Object.create(null),o=[];let s,c;return i.pending.forEach((t=>{const{provider:e,prefix:n}=t;if(n===c&&e===s)return;s=e,c=n,o.push(y(e,n));const i=r[e]||(r[e]=Object.create(null));i[n]||(i[n]=[])})),i.pending.forEach((t=>{const{provider:e,prefix:n,name:i}=t,o=y(e,n),s=o.pendingIcons||(o.pendingIcons=new Set);s.has(i)||(s.add(i),r[e][n].push(i))})),o.forEach((t=>{const e=r[t.provider][t.prefix];e.length&&X(t,e)})),e?function(t,e,n){const i=T++,r=E.bind(null,n,i);if(!e.pending.length)return r;const o={id:i,icons:e,callback:t,abort:r};return n.forEach((t=>{(t.loaderCallbacks||(t.loaderCallbacks=[])).push(o)})),r}(e,i,o):G},Z=t=>new Promise(((e,i)=>{const r="string"==typeof t?l(t,!0):t;r?Y([r||t],(o=>{if(o.length&&r){const t=A(r);if(t)return void e({...n,...t})}i(t)})):i(t)}));function tt(t){try{const e="string"==typeof t?JSON.parse(t):t;if("string"==typeof e.body)return{...e}}catch(t){}}let et=!1;try{et=0===navigator.vendor.indexOf("Apple")}catch(t){}const nt=/(-?[0-9.]*[0-9]+[0-9.]*)/g,it=/^-?[0-9.]*[0-9]+[0-9.]*$/g;function rt(t,e,n){if(1===e)return t;if(n=n||100,"number"==typeof t)return Math.ceil(t*e*n)/n;if("string"!=typeof t)return t;const i=t.split(nt);if(null===i||!i.length)return t;const r=[];let o=i.shift(),s=it.test(o);for(;;){if(s){const t=parseFloat(o);isNaN(t)?r.push(o):r.push(Math.ceil(t*e*n)/n)}else r.push(o);if(o=i.shift(),void 0===o)return r.join("");s=!s}}const ot=t=>"unset"===t||"undefined"===t||"none"===t;function st(t,e){const i={...n,...t},r={...o,...e},s={left:i.left,top:i.top,width:i.width,height:i.height};let c=i.body;[i,r].forEach((t=>{const e=[],n=t.hFlip,i=t.vFlip;let r,o=t.rotate;switch(n?i?o+=2:(e.push("translate("+(s.width+s.left).toString()+" "+(0-s.top).toString()+")"),e.push("scale(-1 1)"),s.top=s.left=0):i&&(e.push("translate("+(0-s.left).toString()+" "+(s.height+s.top).toString()+")"),e.push("scale(1 -1)"),s.top=s.left=0),o<0&&(o-=4*Math.floor(o/4)),o%=4,o){case 1:r=s.height/2+s.top,e.unshift("rotate(90 "+r.toString()+" "+r.toString()+")");break;case 2:e.unshift("rotate(180 "+(s.width/2+s.left).toString()+" "+(s.height/2+s.top).toString()+")");break;case 3:r=s.width/2+s.left,e.unshift("rotate(-90 "+r.toString()+" "+r.toString()+")")}o%2==1&&(s.left!==s.top&&(r=s.left,s.left=s.top,s.top=r),s.width!==s.height&&(r=s.width,s.width=s.height,s.height=r)),e.length&&(c=function(t,e,n){const i=function(t,e="defs"){let n="";const i=t.indexOf("<"+e);for(;i>=0;){const r=t.indexOf(">",i),o=t.indexOf("",o);if(-1===s)break;n+=t.slice(r+1,o).trim(),t=t.slice(0,i).trim()+t.slice(s+1)}return{defs:n,content:t}}(t);return r=i.defs,o=e+i.content+n,r?""+r+""+o:o;var r,o}(c,'',""))}));const a=r.width,u=r.height,l=s.width,f=s.height;let d,h;null===a?(h=null===u?"1em":"auto"===u?f:u,d=rt(h,l/f)):(d="auto"===a?l:a,h=null===u?rt(d,f/l):"auto"===u?f:u);const p={},g=(t,e)=>{ot(e)||(p[t]=e.toString())};g("width",d),g("height",h);const b=[s.left,s.top,l,f];return p.viewBox=b.join(" "),{attributes:p,viewBox:b,body:c}}function ct(t,e){let n=-1===t.indexOf("xlink:")?"":' xmlns:xlink="http://www.w3.org/1999/xlink"';for(const t in e)n+=" "+t+'="'+e[t]+'"';return'"+t+""}function at(t){return'url("'+function(t){return"data:image/svg+xml,"+function(t){return t.replace(/"/g,"'").replace(/%/g,"%25").replace(/#/g,"%23").replace(//g,"%3E").replace(/\s+/g," ")}(t)}(t)+'")'}let ut=(()=>{let t;try{if(t=fetch,"function"==typeof t)return t}catch(t){}})();function lt(t){ut=t}function ft(){return ut}const dt={prepare:(t,e,n)=>{const i=[],r=function(t,e){const n=D(t);if(!n)return 0;let i;if(n.maxURL){let t=0;n.resources.forEach((e=>{const n=e;t=Math.max(t,n.length)}));const r=e+".json?icons=";i=n.maxURL-t-n.path.length-r.length}else i=0;return i}(t,e),o="icons";let s={type:o,provider:t,prefix:e,icons:[]},c=0;return n.forEach(((n,a)=>{c+=n.length+1,c>=r&&a>0&&(i.push(s),s={type:o,provider:t,prefix:e,icons:[]},c=n.length),s.icons.push(n)})),i.push(s),i},send:(t,e,n)=>{if(!ut)return void n("abort",424);let i=function(t){if("string"==typeof t){const e=D(t);if(e)return e.path}return"/"}(e.provider);switch(e.type){case"icons":{const t=e.prefix,n=e.icons.join(",");i+=t+".json?"+new URLSearchParams({icons:n}).toString();break}case"custom":{const t=e.uri;i+="/"===t.slice(0,1)?t.slice(1):t;break}default:return void n("abort",400)}let r=503;ut(t+i).then((t=>{const e=t.status;if(200===e)return r=501,t.json();setTimeout((()=>{n(function(t){return 404===t}(e)?"abort":"next",e)}))})).then((t=>{"object"==typeof t&&null!==t?setTimeout((()=>{n("success",t)})):setTimeout((()=>{404===t?n("abort",t):n("next",r)}))})).catch((()=>{n("next",r)}))}};function ht(t,e,n){y(n||"",e).loadIcons=t}function pt(t,e,n){y(n||"",e).loadIcon=t}const gt="data-style";let bt="";function vt(t){bt=t}function mt(t,e){let n=Array.from(t.childNodes).find((t=>t.hasAttribute&&t.hasAttribute(gt)));n||(n=document.createElement("style"),n.setAttribute(gt,gt),t.appendChild(n)),n.textContent=":host{display:inline-block;vertical-align:"+(e?"-0.125em":"0")+"}span,svg{display:block;margin:auto}"+bt}const yt={"background-color":"currentColor"},xt={"background-color":"transparent"},_t={image:"var(--svg)",repeat:"no-repeat",size:"100% 100%"},wt={"-webkit-mask":yt,mask:yt,background:xt};for(const t in wt){const e=wt[t];for(const n in _t)e[t+"-"+n]=_t[n]}function kt(t){return t?t+(t.match(/^[-0-9.]+$/)?"px":""):"inherit"}let At;function jt(t){return void 0===At&&function(){try{At=window.trustedTypes.createPolicy("iconify",{createHTML:t=>t})}catch(t){At=null}}(),At?At.createHTML(t):t}function Ot(t){return Array.from(t.childNodes).find((t=>{const e=t.tagName&&t.tagName.toUpperCase();return"SPAN"===e||"SVG"===e}))}function Ct(t,e){const i=e.icon.data,r=e.customisations,o=st(i,r);r.preserveAspectRatio&&(o.attributes.preserveAspectRatio=r.preserveAspectRatio);const s=e.renderedMode;let c;if("svg"===s)c=function(t){const e=document.createElement("span"),n=t.attributes;let i="";n.width||(i="width: inherit;"),n.height||(i+="height: inherit;"),i&&(n.style=i);const r=ct(t.body,n);return e.innerHTML=jt(r),e.firstChild}(o);else c=function(t,e,n){const i=document.createElement("span");let r=t.body;-1!==r.indexOf("{this._check()})))}_check(){if(!this._checkQueued)return;this._checkQueued=!1;const t=this._state,e=this.getAttribute("icon");if(e!==t.icon.value)return void this._iconChanged(e);if(!t.rendered||!this._visible)return;const n=this.getAttribute("mode"),i=a(this);t.attrMode===n&&!function(t,e){for(const n in c)if(t[n]!==e[n])return!0;return!1}(t.customisations,i)&&Ot(this._shadowRoot)||this._renderIcon(t.icon,i,n)}_iconChanged(t){const e=function(t,e){if("object"==typeof t)return{data:tt(t),value:t};if("string"!=typeof t)return{value:t};if(t.includes("{")){const e=tt(t);if(e)return{data:e,value:t}}const n=l(t,!0,!0);if(!n)return{value:t};const i=A(n);if(void 0!==i||!n.prefix)return{value:t,name:n,data:i};const r=Y([n],(()=>e(t,n,A(n))));return{value:t,name:n,loading:r}}(t,((t,e,n)=>{const i=this._state;if(i.rendered||this.getAttribute("icon")!==t)return;const r={value:t,name:e,data:n};r.data?this._gotIconData(r):i.icon=r}));e.data?this._gotIconData(e):this._state=It(e,this._state.inline,this._state)}_forceRender(){if(this._visible)this._queueCheck();else{const t=Ot(this._shadowRoot);t&&this._shadowRoot.removeChild(t)}}_gotIconData(t){this._checkQueued=!1,this._renderIcon(t,a(this),this.getAttribute("mode"))}_renderIcon(t,e,n){const i=function(t,e){switch(e){case"svg":case"bg":case"mask":return e}return"style"===e||!et&&-1!==t.indexOf("{const e=t.some((t=>t.isIntersecting));e!==this._visible&&(this._visible=e,this._forceRender())})),this._observer.observe(this)}catch(t){if(this._observer){try{this._observer.disconnect()}catch(t){}this._observer=null}}}stopObserver(){this._observer&&(this._observer.disconnect(),this._observer=null,this._visible=!0,this._connected&&this._forceRender())}};r.forEach((t=>{t in o.prototype||Object.defineProperty(o.prototype,t,{get:function(){return this.getAttribute(t)},set:function(e){null!==e?this.setAttribute(t,e):this.removeAttribute(t)}})}));const s=function(){let t;R("",dt),k(!0);try{t=window}catch(t){}if(t){if(void 0!==t.IconifyPreload){const e=t.IconifyPreload,n="Invalid IconifyPreload syntax.";"object"==typeof e&&null!==e&&(e instanceof Array?e:[e]).forEach((t=>{try{("object"!=typeof t||null===t||t instanceof Array||"object"!=typeof t.icons||"string"!=typeof t.prefix||!O(t))&&console.error(n)}catch(t){console.error(n)}}))}if(void 0!==t.IconifyProviders){const e=t.IconifyProviders;if("object"==typeof e&&null!==e)for(const t in e){const n="IconifyProviders["+t+"] is invalid.";try{const i=e[t];if("object"!=typeof i||!i||void 0===i.resources)continue;U(t,i)||console.error(n)}catch(t){console.error(n)}}}}return{iconLoaded:C,getIcon:I,listIcons:_,addIcon:j,addCollection:O,calculateSize:rt,buildIcon:st,iconToHTML:ct,svgToURL:at,loadIcons:Y,loadIcon:Z,addAPIProvider:U,setCustomIconLoader:pt,setCustomIconsLoader:ht,appendCustomStyle:vt,_api:{getAPIConfig:D,setAPIModule:R,sendAPIQuery:B,setFetch:lt,getFetch:ft,listAPIProviders:H}}}();for(const t in s)o[t]=o.prototype[t]=s[t];e.define(t,o)}()}(); diff --git a/_extensions/mcanouil/iconify/iconify.lua b/_extensions/mcanouil/iconify/iconify.lua new file mode 100644 index 0000000..af58e4d --- /dev/null +++ b/_extensions/mcanouil/iconify/iconify.lua @@ -0,0 +1,203 @@ +--[[ +# MIT License +# +# Copyright (c) 2025 Mickaël Canouil +# +# Permission is hereby granted, free of charge, to any person obtaining a copy +# of this software and associated documentation files (the "Software"), to deal +# in the Software without restriction, including without limitation the rights +# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +# copies of the Software, and to permit persons to whom the Software is +# furnished to do so, subject to the following conditions: + +# The above copyright notice and this permission notice shall be included in all +# copies or substantial portions of the Software. + +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +# SOFTWARE. +]] + +local stringify = pandoc.utils.stringify + +--- Ensure Iconify HTML dependencies are included. +--- @return nil +local function ensure_html_deps() + quarto.doc.add_html_dependency({ + name = 'iconify', + version = '3.0.0', + scripts = { 'iconify-icon.min.js' } + }) +end + +--- Check if a string is empty or nil. +--- @param s string|nil +--- @return boolean +local function is_empty(s) + return s == nil or s == '' +end + +--- Validate and convert size keyword to CSS font-size. +--- @param size string|nil +--- @return string +local function is_valid_size(size) + if is_empty(size) then + return '' + end + local size_table = { + ["tiny"] = "0.5em", + ["scriptsize"] = "0.7em", + ["footnotesize"] = "0.8em", + ["small"] = "0.9em", + ["normalsize"] = "1em", + ["large"] = "1.2em", + ["Large"] = "1.5em", + ["LARGE"] = "1.75em", + ["huge"] = "2em", + ["Huge"] = "2.5em", + ["1x"] = "1em", + ["2x"] = "2em", + ["3x"] = "3em", + ["4x"] = "4em", + ["5x"] = "5em", + ["6x"] = "6em", + ["7x"] = "7em", + ["8x"] = "8em", + ["9x"] = "9em", + ["10x"] = "10em", + ["2xs"] = "0.625em", + ["xs"] = "0.75em", + ["sm"] = "0.875em", + ["lg"] = "1.25em", + ["xl"] = "1.5em", + ["2xl"] = "2em" + } + for key, value in pairs(size_table) do + if key == size then + return 'font-size: ' .. value .. ';' + end + end + return 'font-size: ' .. size .. ';' +end + +--- Get iconify option from arguments or metadata. +--- @param x string +--- @param arg table +--- @param meta table +--- @return string +local function get_iconify_options(x, arg, meta) + local arg_value = stringify(arg[x]) + if is_empty(meta['iconify']) or not is_empty(arg_value) then + return arg_value + end + if not is_empty(meta['iconify'][x]) then + return stringify(meta['iconify'][x]) + end + return arg_value +end + +--- Render an Iconify icon as a Pandoc RawInline for HTML output. +--- @param args table Icon arguments (icon set and name). +--- @param kwargs table Key-value options for the icon. +--- @param meta table Document metadata. +--- @return pandoc.Inline|pandoc.Null +function iconify(args, kwargs, meta) + -- detect html (excluding epub which won't handle fa) + if quarto.doc.is_format("html:js") then + ensure_html_deps() + local icon = stringify(args[1]) + local set = 'octicon' + if not is_empty(meta['iconify']) and not is_empty(meta['iconify']['set']) then + set = stringify(meta['iconify']['set']) + end + + if #args > 1 and string.find(stringify(args[2]), ':') then + quarto.log.warning( + 'Use "set:icon" or "set icon" syntax, not both! ' .. + 'Using "set:icon" syntax and discarding first argument!' + ) + icon = stringify(args[2]) + end + + if string.find(icon, ":") then + set = string.sub(icon, 1, string.find(icon, ":") - 1) + icon = string.sub(icon, string.find(icon, ":") + 1) + elseif #args > 1 then + set = icon + icon = stringify(args[2]) + end + + local attributes = ' icon="' .. set .. ':' .. icon .. '"' + local default_label = 'Icon ' .. icon .. ' from ' .. set .. ' Iconify.design set.' + + local size = is_valid_size(get_iconify_options("size", kwargs, meta)) + local style = get_iconify_options("style", kwargs, meta) + + if is_empty(style) and not is_empty(size) then + attributes = attributes .. ' style="' .. size .. '"' + elseif not is_empty(style) and not is_empty(size) then + attributes = attributes .. ' style="' .. style .. ';' .. size .. '"' + elseif not is_empty(style) then + attributes = attributes .. ' style="' .. style .. '"' + end + + local aria_label = stringify(kwargs["label"]) + if is_empty(aria_label) then + aria_label = ' aria-label="' .. default_label .. '"' + else + aria_label = ' aria-label="' .. aria_label .. '"' + end + + local title = stringify(kwargs["title"]) + if is_empty(title) then + title = ' title="' .. default_label .. '"' + else + title = ' title="' .. title .. '"' + end + + attributes = attributes .. aria_label .. title + + local width = get_iconify_options("width", kwargs, meta) + if not is_empty(width) and is_empty(size) then + attributes = attributes .. ' width="' .. width .. '"' + end + local height = get_iconify_options("height", kwargs, meta) + if not is_empty(height) and is_empty(size) then + attributes = attributes .. ' height="' .. height .. '"' + end + local flip = get_iconify_options("flip", kwargs, meta) + if not is_empty(flip) then + attributes = attributes .. ' flip="' .. flip.. '"' + end + local rotate = get_iconify_options("rotate", kwargs, meta) + if not is_empty(rotate) then + attributes = attributes .. ' rotate="' .. rotate .. '"' + end + + local inline = get_iconify_options("inline", kwargs, meta) + if is_empty(inline) or inline ~= "false" then + attributes = ' inline ' .. attributes + end + + local mode = get_iconify_options("mode", kwargs, meta) + local valid_modes = { svg = true, style = true, bg = true, mask = true } + if not is_empty(mode) and valid_modes[mode] then + attributes = attributes .. ' mode="' .. mode .. '"' + end + + return pandoc.RawInline( + 'html', + '' + ) + else + return pandoc.Null() + end +end + +return { + ["iconify"] = iconify +} diff --git a/_freeze/events/bug-bbq/welcome/execute-results/html.json b/_freeze/events/bug-bbq/welcome/execute-results/html.json new file mode 100644 index 0000000..c572dd7 --- /dev/null +++ b/_freeze/events/bug-bbq/welcome/execute-results/html.json @@ -0,0 +1,17 @@ +{ + "hash": "d0b99d0797a095c1f4726d6475332bfb", + "result": { + "engine": "knitr", + "markdown": "---\ntitle: \"Welcome to the Bug BBQ\"\ndate: '23/24 June 2022

\"Cartoon'\noutput:\n xaringan::moon_reader:\n css: xaringan-themer.css\n nature:\n countIncrementalSlides: false\n ratio: \"16:9\"\nalways_allow_html: yes \n---\n\n\n\n# Overview\n\nAim: 24 hours for the community to help with R bugs\n\n - Learn more about R's development process\n - Chat with experienced contributors including R Core members\n - Take a look at some bugs\n - See if you can contribute!\n\n???\n\nThe Bug BBQ is an opportunity for the community to get together and help out with bugs in R.\n\nFor new contributors, it will be a chance to learn more about R's development process.\n\nFor all participants, it will be a chance to chat with experienced contributors, including R Core developers, and to take a look at some R bugs and see if you can contribute\n\n---\n\n# bugs.r-project.org\n\n![Screenshot of R's Bugzilla showing an HTML table with the results of a search for open bugs, in order of the most recent change, with the newest at the top.](bug_list.png)\n\n???\n\nBugs in R are tracked in R's Bugzilla, which can be found at bugs.r-project.org. This screen shot shows the results of a search for open bugs, in order of the most recent change, with the newest at the top.\n\n---\n\n# Bug report\n\n![Screenshot of a bug report. We just see the start of the report here, with the metadata. In this case the bug was reported by Martin Maechler.](bug_report.png)\n???\n\nHere is an example bug report on Bugzilla. We just see the start of the report here, with the metadata. In this case the bug was reported by Martin Maechler.\n\n---\n\n# Bug report comments\n\n![Screenshot of a bug report comments. The first comment is the bug report itself, from Martin Maechler. This is followed by a further comment in reply, from Colin Fay.](bug_report_comments.png)\n???\n\nIf we scroll down, we can see the comments. The first comment is the bug report itself. There maybe be further comments in reply, discussing the bug and potentially how to fix it.\n\n---\n\n# Proposed patch\n\n![Screenshot of a bug report with the attachments section circled in red.](bug_report_patch.png)\n???\n\nSometimes there will be a proposed patch attached to the bug report. This can be found in the attachments section under the metadata.\n\nThe patch is a diff between the proposed changes and the current source code. Click on the `Diff` link next to the attached patch to view the diff in the browser. \n\n---\n\n# Patch contents\n\n![Screenshot of the diff for an attached patch displayed in the browser. On the left is the original source code from an R file. On the right is the proposed update to that code. The lines of code that have been modified are coloured to highlight where changes have been made. ](bug_report_diff.png)\n???\n\nIn this Diff viewer, the original source code is on the left and the proposed update is on the right. The lines of code that have been modified are highlighted.\n\n---\n\n# github.com/r-devel/bug-bbq\n\n![Screenshot of the r-devel/bug-bbq GitHub repository. The repository contains a few code files and a README.md](bug-bbq_GitHub.png)\n\n???\n\nFor the Bug BBQ, we will be treating R's Bugzilla as read only. We have set up a GitHub repo for this event, to allow informal discussion of bugs and to track any contributions. This screenshot shows the homepage for that repo, which you can find at github.com/r-devel/bug-bbq. Scroll down to see the README which contains instructions on how to participate. The rest of this presentation will give an overview of these instructions.\n\n---\n\n# Work on issues \n\n![Screenshot of the Issues page of the bug-bbq repo. ](issues.png)\n???\n\nOn the issues page of the bug-bbq repo, issues have been created that correspond to one or more bugs on Bugzilla. The issues have been labelled to help you find bugs to work on. The labels that start with capital letters, e.g. Models or Documentation, describe the general topic of the bug. The labels in lower case describe required actions. We'll go through these action labels in more detail.\n\n---\n\n# needs reprex\n\nThese bug reports require a minimal reproducible example that demonstrates the bug, using *only* core R packages.\n\n* You may need a specific version of R to reproduce the bug\n* Post your reprex on the GitHub issue, adding `@r-devel/triagers` \n\n???\n\nBugs labelled \"needs reprex\" require a minimal reproducible example to reproduce the bug, using *only* core R packages.\n\nYou may need a specific version of R to reproduce the bug. We'll come back to accessing different versions of R later.\n\nIf you create a reprex, post it as a comment on the GitHub issue corresponding to the bug and add `@r-devel/triagers` to notify the Triage team of the update.\n\n---\n\n# check in r-devel\n\nFor these bugs, we need to check if they are still an issue in the current R development version.\n\n* Run the reproducible example in R-devel\n* On the corresponding GitHub issue:\n * Report if the bug is still an issue in R-devel\n * Note the exact version of R-devel that you checked\n * Tag `@r-devel/triagers`\n\n???\n\nBugs labelled \"check in r-devel\", need checking if the bug is still an issue in R-devel, the development version of R.\n\nUsing R-Devel, run the reproducible example that you can find in the original bug report, or on the GitHub issue.\n\nReport back on the GitHub issue, stating if the bug is still present or not. Add the exact version of R-devel that you used and tag @r-devel/triagers.\n\n---\n\n# needs diagnosis\n\nOnce the bug is reproducible in the development version of R, the cause of the bug should be diagnosed. \n\n* Explore the reprex interactively\n* Categorise as `not a bug`, `wishlist`, or `confirmed bug`\n* Report back on the GitHub issue:\n - Where and why the bug happens\n - The bug category (`not a bug`, `wishlist`, or `confirmed`)\n - Tag `@r-devel/triagers`\n\n???\n\nFor bugs labelled \"needs diagnosis\" we need to diagnose where and why the buggy behaviour occurs.\n\nExplore the reprex interactively in a version of R where the bug can be reproduced.\n\nYou may discover the reported bug reflects a misunderstanding or a wish about how R should work and is not a real bug.\n\nReport back your findings on the GitHub issue tagging @r-devel/triagers.\n \n---\n\n# discuss fix\n\nOnce the cause of the bug is known, there should be a discussion about how to fix it.\n\n* Add a comment to the GitHub issue corresponding to the bug.\n* Follow the repo to be notified of any responses and respond if you have further comment, or react with emoji.\n\n???\n\nFor bugs labelled \"discuss fix\", we need help deciding how to fix the bug. \n\nYou can share your opinions about any proposed approach or propose your own approach in a comment on the GitHub issue.\n\nFollow the repo to be notified of any responses and respond if you have further comment, or react with emoji.\n\n---\n\n# needs patch\n\nOnce there is agreement from a member of R Core on how to fix a bug, you can implement the fix.\n\n - Check out the latest version of the source code for R\n - Make changes to the code to implement your fix\n - Prepare a patch\n - Test your patch\n - Add a comment to the GitHub issue with your patch\n - Tag @r-devel/triagers\n\n\n???\n\nFor bugs labelled \"needs patch\" an R Core member has agreed how the bug should be fixed and you can implement the fix.\n\nThere are some tips on the bug-bbq repo README of how to go about the process of making changes to a copy of the source code and preparing a patch.\n\nOnce you have a patch you may add it as a comment on the GitHub issue, tagging @r-devel/triagers.\n\n---\n\n# needs review\n\nOnce a patch is proposed, it can be helpful for others to review the patch.\n\n* Review the bug report and any comments\n* Review the proposed patch\n* Report back on the GitHub issue:\n * Does the patch resolve the bug?\n * Do you have any feedback that could improve the patch?\n\n???\n\nBugs labelled \"needs review\" have a code or documentation patch that is ready for review.\n\nStart by reviewing the bug report and any comments, before looking at the proposed patch.\n\nReport back on the GitHub issue, stating if the patch resolves the bug, and adding any feedback you have from your review.\n\n---\n\n# Add new issues\n\nYou are welcome to review the open bugs on Bugzilla and add corresponding issues on the bug-bbq GitHub repo.\n\n* Follow the standard format for the title\n* Ask a member of the [Triage team](https://github.com/orgs/r-devel/teams/triagers/members) to add labels\n\n???\n\nYou are welcome to review the open bugs on Bugzilla and add corresponding issues on the bug-bbq GitHub repo for bugs that you would like to work on.\n\nFollow the standard format for the title.\n\nOnly members of the triage team can add labels. If you want to help out by labelling bugs ask to be added to the team!\n\n---\n\n# Choose how to work\n\nYou can work on bugs anytime during the 24 hour event\n\nThe #bug-bbq channel on the R-Devel Slack is available to \n - Discuss bugs in threads\n - Get help in main channel\n \nThere are 3 Zoom sessions of 4 hours\n - Join a breakout room & work together\n - Get help in the main room\n \n???\n\nYou can work on bugs anytime during the 24 hour event \n\nThe #bug-bbq channel on the R-Devel Slack is available all the time for you to discuss bugs in threads, or get help in main channel.\n \nIn the scheduled Zoom sessions you can join a breakout room to work with others, or you can join the main room to get help from facilitators or chat with experienced contributors.\n \n---\n\n# Further help\n\nThe bug-bbq README contains help on:\n - Accessing different versions of R, including R-devel\n - Getting a copy of the R sources\n - Modifying an R function\n - Making and testing a patch\n - Applying a patch to your copy of the R sources\n \nFor further help, please ask on Zoom or in the Slack!\n\n???\n\nThe bug-bbq README contains help on:\n - Accessing different versions of R, including R-devel\n - Getting a copy of the R sources\n - Modifying an R function\n - Making and testing a patch\n - Applying a patch to your copy of the R sources\n \nFor further help, please ask on Zoom or in the Slack!\n\n---\n\n.center[# Let's go!\n\n::: {.cell}\n::: {.cell-output-display}\n![](reshot-icon-rocket-ZQTKM9NG32.svg){fig-alt='Cartoon of a rocket launching' width=40%}\n:::\n:::\n\n]\n\n???\n\nSo, let's go! We look forward to meeting you during the organized sessions and hope that together we are able to make progress on open bugs in R.\n", + "supporting": [ + "welcome_files" + ], + "filters": [ + "rmarkdown/pagebreak.lua" + ], + "includes": {}, + "engineDependencies": {}, + "preserve": {}, + "postProcess": true + } +} \ No newline at end of file diff --git a/events/bug-bbq/welcome_files/header-attrs-2.14/header-attrs.js b/_freeze/events/bug-bbq/welcome/header-attrs-2.14/header-attrs.js similarity index 100% rename from events/bug-bbq/welcome_files/header-attrs-2.14/header-attrs.js rename to _freeze/events/bug-bbq/welcome/header-attrs-2.14/header-attrs.js diff --git a/_freeze/site_libs/clipboard/clipboard.min.js b/_freeze/site_libs/clipboard/clipboard.min.js new file mode 100644 index 0000000..1103f81 --- /dev/null +++ b/_freeze/site_libs/clipboard/clipboard.min.js @@ -0,0 +1,7 @@ +/*! + * clipboard.js v2.0.11 + * https://clipboardjs.com/ + * + * Licensed MIT © Zeno Rocha + */ +!function(t,e){"object"==typeof exports&&"object"==typeof module?module.exports=e():"function"==typeof define&&define.amd?define([],e):"object"==typeof exports?exports.ClipboardJS=e():t.ClipboardJS=e()}(this,function(){return n={686:function(t,e,n){"use strict";n.d(e,{default:function(){return b}});var e=n(279),i=n.n(e),e=n(370),u=n.n(e),e=n(817),r=n.n(e);function c(t){try{return document.execCommand(t)}catch(t){return}}var a=function(t){t=r()(t);return c("cut"),t};function o(t,e){var n,o,t=(n=t,o="rtl"===document.documentElement.getAttribute("dir"),(t=document.createElement("textarea")).style.fontSize="12pt",t.style.border="0",t.style.padding="0",t.style.margin="0",t.style.position="absolute",t.style[o?"right":"left"]="-9999px",o=window.pageYOffset||document.documentElement.scrollTop,t.style.top="".concat(o,"px"),t.setAttribute("readonly",""),t.value=n,t);return e.container.appendChild(t),e=r()(t),c("copy"),t.remove(),e}var f=function(t){var e=1 + + navbar: + logo: /assets/img/Rlogo.png + logo-href: index.html + left: + # - menu: + - text: "Slack Group" + file: slack.md + - text: "Events" + file: events.md + - text: "Tutorials & demos" + file: tutorials.md + - text: Working Group + file: working-group.md + - text: Resources + menu: + - text: R Development Guide + href: https://contributor.r-project.org/rdevguide/ + target: _blank + - text: Translations Community Page + href: https://contributor.r-project.org/translations/ + target: _blank + - text: R Core Developer Page + href: https://developer.r-project.org/ + target: _blank + - text: R Project Blog + href: https://blog.r-project.org/ + target: _blank + - text: R SVN CI Dashboard + href: https://contributor.r-project.org/svn-dashboard + target: _blank + - text: R Universe + href: https://r-universe.dev + target: _blank + + right: + - icon: mastodon + aria-label: mastodon + href: https://hachyderm.io/@R_Contributors + rel: me + - text: "{{< iconify simple-icons:bluesky >}}" + aria-label: bluesky + href: https://bsky.app/profile/R-Forwards.hachyderm.io.ap.brid.gy + - text: "{{< iconify cib:meetup >}}" + aria-label: meetup + href: https://www.meetup.com/r-contributors/ + - icon: rss + href: blog/index.xml + tools: + - icon: github + menu: + - text: Source Code + url: https://github.com/r-devel/r-devel.github.io + - text: Report a Bug + url: https://github.com/r-devel/r-devel.github.io/issues + search: true + +brand: + light: brand-light.yml + dark: brand-dark.yml + +format: + html: + # theme: cosmo + #light: forwards-light.scss + #dark: forwards-dark.scss + #highlight-style: forwards.theme + #css: styles.css + link-external-newwindow: true + toc: true + email-obfuscation: references + #include-in-header: analytics.html + description: "A site for people interested in contributing to R core - the code and documentation that gets distributed as base R." diff --git a/assets/img/Rlogo.svg b/assets/img/Rlogo.svg new file mode 100644 index 0000000..78281f7 --- /dev/null +++ b/assets/img/Rlogo.svg @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/brand-dark.yml b/brand-dark.yml new file mode 100644 index 0000000..0d46a00 --- /dev/null +++ b/brand-dark.yml @@ -0,0 +1,40 @@ +meta: + name: R Contributor + links: + home: https://contributor.r-project.org + github: https://github.com/r-devel + +logo: + medium: assets/img/Rlogo-white-square.png + +color: + palette: + blue: "#246BC0" + pink: "#C024B9" + green: "#24C02B" + orange: "#C07924" + dark: "#030911" + light-blue: "#96B8E1" + primary: blue + background: dark + foreground: white + + +typography: + fonts: + - family: Inter + source: google + - family: Fira Mono + source: google + - family: Outfit + source: google + base: + family: Inter + headings: + family: Outfit + weight: normal + link: + color: light-blue + monospace: + family: Fira Mono + size: 1em \ No newline at end of file diff --git a/brand-light.yml b/brand-light.yml new file mode 100644 index 0000000..41d9b82 --- /dev/null +++ b/brand-light.yml @@ -0,0 +1,36 @@ +meta: + name: R Contributor + links: + home: https://contributor.r-project.org + github: https://github.com/r-devel + +logo: + medium: assets/img/Rlogo-white-square.png + +color: + palette: + blue: "#246BC0" + pink: "#C024B9" + green: "#24C02B" + orange: "#C07924" + primary: blue + + +typography: + fonts: + - family: Inter + source: google + - family: Fira Mono + source: google + - family: Outfit + source: google + base: + family: Inter + headings: + family: Outfit + weight: normal + link: + color: blue + monospace: + family: Fira Mono + size: 1em \ No newline at end of file diff --git a/events/index.md b/events.md similarity index 91% rename from events/index.md rename to events.md index 7670e42..82e93b8 100644 --- a/events/index.md +++ b/events.md @@ -35,5 +35,5 @@ Note: you can set the calendar below to show your time zone by clicking the time * [Bug BBQ](bug-bbq): a global, online event over 24 hours for both new and experienced contributors to address open bugs on R's bug tracker. -* [R Project Sprint 2023](https://contributor.r-project.org/r-project-sprint-2023){:target="_blank"} and translatathons. +* [R Project Sprint 2023](https://contributor.r-project.org/r-project-sprint-2023){target="_blank"} and translatathons. diff --git a/events/bug-bbq/welcome.html b/events/bug-bbq/welcome.html deleted file mode 100644 index 5d08e90..0000000 --- a/events/bug-bbq/welcome.html +++ /dev/null @@ -1,417 +0,0 @@ - - - - Welcome to the Bug BBQ - - - - - - - - - - - - - - - diff --git a/events/bug-bbq/xaringan-themer.css b/events/bug-bbq/xaringan-themer.css index 71c9c78..c768790 100644 --- a/events/bug-bbq/xaringan-themer.css +++ b/events/bug-bbq/xaringan-themer.css @@ -15,7 +15,7 @@ * - xaringan wiki: https://github.com/yihui/xaringan/wiki * - remarkjs wiki: https://github.com/gnab/remark/wiki * - * Version: 0.4.1 + * Version: 0.4.3 * * ------------------------------------------------------- */ @import url(https://fonts.googleapis.com/css?family=Noto+Sans:400,400i,700,700i&display=swap); @@ -190,7 +190,9 @@ blockquote { th, td { padding: 5px; } -.remark-slide thead, .remark-slide tfoot, .remark-slide tr:nth-child(even) { +.remark-slide table:not(.table-unshaded) thead, +.remark-slide table:not(.table-unshaded) tfoot, +.remark-slide table:not(.table-unshaded) tr:nth-child(even) { background: #D3D7DE; } table.dataTable tbody { diff --git a/index.md b/index.md index 2211ba9..cbaec76 100644 --- a/index.md +++ b/index.md @@ -4,11 +4,11 @@ layout: custom # R Contributor Site -This is a site for people interested in contributing to R core - the code and documentation that gets distributed as base R. +This is a community-maintained site for people interested in contributing to core R codebase - the code and documentation that gets [distributed as base R](https://cloud.r-project.org). -Join our [Slack Group](slack) to chat with current and aspiring R contributors. Everyone interested is welcome! +Join our [Slack Group](slack.md) to chat with current and aspiring R contributors. Everyone interested is welcome! -Read the [R Development Guide](https://contributor.r-project.org/rdevguide){:target="_blank"}, follow a [Tutorial](tutorials), or attend an [Event](events) to learn more about contributing to R. +Read the [R Development Guide](https://contributor.r-project.org/rdevguide){target="_blank"}, follow a [Tutorial](tutorials.md), or attend an [Event](events.md) to learn more about contributing to R. ## Quick Start @@ -23,4 +23,4 @@ The demo introduces a basic workflow for simple fixes. For more complex work on ## About -This site is maintained by the [R Contribution Working Group](working-group), which is working on initiatives to encourage wider contribution to R core. The working group is open to new members ([more information](working-group)). You can report issues about this website on the [r-devel.github.io](https://github.com/r-devel/r-devel.github.io) repository. +This site is maintained by the [R Contribution Working Group](working-group.md), which is working on initiatives to encourage wider contribution to R core. The working group is open to new members ([more information](working-group.md)). You can report issues about this website on the [r-devel.github.io](https://github.com/r-devel/r-devel.github.io) repository. diff --git a/tutorials/index.md b/tutorials.md similarity index 94% rename from tutorials/index.md rename to tutorials.md index 6cc6cd7..3aea090 100644 --- a/tutorials/index.md +++ b/tutorials.md @@ -12,7 +12,7 @@ Video tutorials with integrated/additional exercises.