Skip to content

Commit 3098204

Browse files
authored
Initial commit
0 parents  commit 3098204

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

63 files changed

+14718
-0
lines changed

.Rprofile

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
source("renv/activate.R")

.gitignore

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
.Rproj.user
2+
.Rhistory
3+
.RData
4+
.Ruserdata
5+
/.quarto/
6+
/_book/

.nojekyll

Whitespace-only changes.

01-intro.qmd

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# Introduction
2+
3+
This is a book created from markdown and executable code.
4+
5+
See @knuth84 for additional discussion of literate programming.
6+
7+
```{r}
8+
1 + 1
9+
```

02-smart-choices.qmd

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Smart Choices
2+
3+
In summary, this book has no content whatsoever.
4+
5+
```{r}
6+
1 + 1
7+
```

03-model.qmd

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
---
2+
title: "Conceptual Model"
3+
---

04-tutorial.qmd

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
---
2+
title: "Dynamic Tutorial"
3+
---

05-considerations.qmd

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
---
2+
title: "Final Considerations"
3+
---

README.html

+298
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,298 @@
1+
<!DOCTYPE html>
2+
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head>
3+
4+
<meta charset="utf-8">
5+
<meta name="generator" content="quarto-1.3.450">
6+
7+
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes">
8+
9+
10+
<title>readme</title>
11+
<style>
12+
code{white-space: pre-wrap;}
13+
span.smallcaps{font-variant: small-caps;}
14+
div.columns{display: flex; gap: min(4vw, 1.5em);}
15+
div.column{flex: auto; overflow-x: auto;}
16+
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
17+
ul.task-list{list-style: none;}
18+
ul.task-list li input[type="checkbox"] {
19+
width: 0.8em;
20+
margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */
21+
vertical-align: middle;
22+
}
23+
</style>
24+
25+
26+
<script src="README_files/libs/clipboard/clipboard.min.js"></script>
27+
<script src="README_files/libs/quarto-html/quarto.js"></script>
28+
<script src="README_files/libs/quarto-html/popper.min.js"></script>
29+
<script src="README_files/libs/quarto-html/tippy.umd.min.js"></script>
30+
<script src="README_files/libs/quarto-html/anchor.min.js"></script>
31+
<link href="README_files/libs/quarto-html/tippy.css" rel="stylesheet">
32+
<link href="README_files/libs/quarto-html/quarto-syntax-highlighting.css" rel="stylesheet" id="quarto-text-highlighting-styles">
33+
<script src="README_files/libs/bootstrap/bootstrap.min.js"></script>
34+
<link href="README_files/libs/bootstrap/bootstrap-icons.css" rel="stylesheet">
35+
<link href="README_files/libs/bootstrap/bootstrap.min.css" rel="stylesheet" id="quarto-bootstrap" data-mode="light">
36+
37+
38+
</head>
39+
40+
<body class="fullcontent">
41+
42+
<div id="quarto-content" class="page-columns page-rows-contents page-layout-article">
43+
44+
<main class="content" id="quarto-document-content">
45+
46+
47+
48+
<section id="working-in-progress" class="level1">
49+
<h1>Working in progress</h1>
50+
<p>Article repository “PLS-SEM Interactive Tutorial: Step-by-Step with cSEM package”.</p>
51+
</section>
52+
<section id="license" class="level1">
53+
<h1>License</h1>
54+
<p xmlns:cc="http://creativecommons.org/ns#">
55+
This work is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">Attribution-NonCommercial 4.0 International<img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1"><img style="height:22px!important;margin-left:3px;vertical-align:text-bottom;" src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1"></a>
56+
</p>
57+
</section>
58+
59+
</main>
60+
<!-- /main column -->
61+
<script id="quarto-html-after-body" type="application/javascript">
62+
window.document.addEventListener("DOMContentLoaded", function (event) {
63+
const toggleBodyColorMode = (bsSheetEl) => {
64+
const mode = bsSheetEl.getAttribute("data-mode");
65+
const bodyEl = window.document.querySelector("body");
66+
if (mode === "dark") {
67+
bodyEl.classList.add("quarto-dark");
68+
bodyEl.classList.remove("quarto-light");
69+
} else {
70+
bodyEl.classList.add("quarto-light");
71+
bodyEl.classList.remove("quarto-dark");
72+
}
73+
}
74+
const toggleBodyColorPrimary = () => {
75+
const bsSheetEl = window.document.querySelector("link#quarto-bootstrap");
76+
if (bsSheetEl) {
77+
toggleBodyColorMode(bsSheetEl);
78+
}
79+
}
80+
toggleBodyColorPrimary();
81+
const icon = "";
82+
const anchorJS = new window.AnchorJS();
83+
anchorJS.options = {
84+
placement: 'right',
85+
icon: icon
86+
};
87+
anchorJS.add('.anchored');
88+
const isCodeAnnotation = (el) => {
89+
for (const clz of el.classList) {
90+
if (clz.startsWith('code-annotation-')) {
91+
return true;
92+
}
93+
}
94+
return false;
95+
}
96+
const clipboard = new window.ClipboardJS('.code-copy-button', {
97+
text: function(trigger) {
98+
const codeEl = trigger.previousElementSibling.cloneNode(true);
99+
for (const childEl of codeEl.children) {
100+
if (isCodeAnnotation(childEl)) {
101+
childEl.remove();
102+
}
103+
}
104+
return codeEl.innerText;
105+
}
106+
});
107+
clipboard.on('success', function(e) {
108+
// button target
109+
const button = e.trigger;
110+
// don't keep focus
111+
button.blur();
112+
// flash "checked"
113+
button.classList.add('code-copy-button-checked');
114+
var currentTitle = button.getAttribute("title");
115+
button.setAttribute("title", "Copied!");
116+
let tooltip;
117+
if (window.bootstrap) {
118+
button.setAttribute("data-bs-toggle", "tooltip");
119+
button.setAttribute("data-bs-placement", "left");
120+
button.setAttribute("data-bs-title", "Copied!");
121+
tooltip = new bootstrap.Tooltip(button,
122+
{ trigger: "manual",
123+
customClass: "code-copy-button-tooltip",
124+
offset: [0, -8]});
125+
tooltip.show();
126+
}
127+
setTimeout(function() {
128+
if (tooltip) {
129+
tooltip.hide();
130+
button.removeAttribute("data-bs-title");
131+
button.removeAttribute("data-bs-toggle");
132+
button.removeAttribute("data-bs-placement");
133+
}
134+
button.setAttribute("title", currentTitle);
135+
button.classList.remove('code-copy-button-checked');
136+
}, 1000);
137+
// clear code selection
138+
e.clearSelection();
139+
});
140+
function tippyHover(el, contentFn) {
141+
const config = {
142+
allowHTML: true,
143+
content: contentFn,
144+
maxWidth: 500,
145+
delay: 100,
146+
arrow: false,
147+
appendTo: function(el) {
148+
return el.parentElement;
149+
},
150+
interactive: true,
151+
interactiveBorder: 10,
152+
theme: 'quarto',
153+
placement: 'bottom-start'
154+
};
155+
window.tippy(el, config);
156+
}
157+
const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]');
158+
for (var i=0; i<noterefs.length; i++) {
159+
const ref = noterefs[i];
160+
tippyHover(ref, function() {
161+
// use id or data attribute instead here
162+
let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href');
163+
try { href = new URL(href).hash; } catch {}
164+
const id = href.replace(/^#\/?/, "");
165+
const note = window.document.getElementById(id);
166+
return note.innerHTML;
167+
});
168+
}
169+
let selectedAnnoteEl;
170+
const selectorForAnnotation = ( cell, annotation) => {
171+
let cellAttr = 'data-code-cell="' + cell + '"';
172+
let lineAttr = 'data-code-annotation="' + annotation + '"';
173+
const selector = 'span[' + cellAttr + '][' + lineAttr + ']';
174+
return selector;
175+
}
176+
const selectCodeLines = (annoteEl) => {
177+
const doc = window.document;
178+
const targetCell = annoteEl.getAttribute("data-target-cell");
179+
const targetAnnotation = annoteEl.getAttribute("data-target-annotation");
180+
const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation));
181+
const lines = annoteSpan.getAttribute("data-code-lines").split(",");
182+
const lineIds = lines.map((line) => {
183+
return targetCell + "-" + line;
184+
})
185+
let top = null;
186+
let height = null;
187+
let parent = null;
188+
if (lineIds.length > 0) {
189+
//compute the position of the single el (top and bottom and make a div)
190+
const el = window.document.getElementById(lineIds[0]);
191+
top = el.offsetTop;
192+
height = el.offsetHeight;
193+
parent = el.parentElement.parentElement;
194+
if (lineIds.length > 1) {
195+
const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]);
196+
const bottom = lastEl.offsetTop + lastEl.offsetHeight;
197+
height = bottom - top;
198+
}
199+
if (top !== null && height !== null && parent !== null) {
200+
// cook up a div (if necessary) and position it
201+
let div = window.document.getElementById("code-annotation-line-highlight");
202+
if (div === null) {
203+
div = window.document.createElement("div");
204+
div.setAttribute("id", "code-annotation-line-highlight");
205+
div.style.position = 'absolute';
206+
parent.appendChild(div);
207+
}
208+
div.style.top = top - 2 + "px";
209+
div.style.height = height + 4 + "px";
210+
let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter");
211+
if (gutterDiv === null) {
212+
gutterDiv = window.document.createElement("div");
213+
gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter");
214+
gutterDiv.style.position = 'absolute';
215+
const codeCell = window.document.getElementById(targetCell);
216+
const gutter = codeCell.querySelector('.code-annotation-gutter');
217+
gutter.appendChild(gutterDiv);
218+
}
219+
gutterDiv.style.top = top - 2 + "px";
220+
gutterDiv.style.height = height + 4 + "px";
221+
}
222+
selectedAnnoteEl = annoteEl;
223+
}
224+
};
225+
const unselectCodeLines = () => {
226+
const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"];
227+
elementsIds.forEach((elId) => {
228+
const div = window.document.getElementById(elId);
229+
if (div) {
230+
div.remove();
231+
}
232+
});
233+
selectedAnnoteEl = undefined;
234+
};
235+
// Attach click handler to the DT
236+
const annoteDls = window.document.querySelectorAll('dt[data-target-cell]');
237+
for (const annoteDlNode of annoteDls) {
238+
annoteDlNode.addEventListener('click', (event) => {
239+
const clickedEl = event.target;
240+
if (clickedEl !== selectedAnnoteEl) {
241+
unselectCodeLines();
242+
const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active');
243+
if (activeEl) {
244+
activeEl.classList.remove('code-annotation-active');
245+
}
246+
selectCodeLines(clickedEl);
247+
clickedEl.classList.add('code-annotation-active');
248+
} else {
249+
// Unselect the line
250+
unselectCodeLines();
251+
clickedEl.classList.remove('code-annotation-active');
252+
}
253+
});
254+
}
255+
const findCites = (el) => {
256+
const parentEl = el.parentElement;
257+
if (parentEl) {
258+
const cites = parentEl.dataset.cites;
259+
if (cites) {
260+
return {
261+
el,
262+
cites: cites.split(' ')
263+
};
264+
} else {
265+
return findCites(el.parentElement)
266+
}
267+
} else {
268+
return undefined;
269+
}
270+
};
271+
var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]');
272+
for (var i=0; i<bibliorefs.length; i++) {
273+
const ref = bibliorefs[i];
274+
const citeInfo = findCites(ref);
275+
if (citeInfo) {
276+
tippyHover(citeInfo.el, function() {
277+
var popup = window.document.createElement('div');
278+
citeInfo.cites.forEach(function(cite) {
279+
var citeDiv = window.document.createElement('div');
280+
citeDiv.classList.add('hanging-indent');
281+
citeDiv.classList.add('csl-entry');
282+
var biblioDiv = window.document.getElementById('ref-' + cite);
283+
if (biblioDiv) {
284+
citeDiv.innerHTML = biblioDiv.innerHTML;
285+
}
286+
popup.appendChild(citeDiv);
287+
});
288+
return popup.innerHTML;
289+
});
290+
}
291+
}
292+
});
293+
</script>
294+
</div> <!-- /content -->
295+
296+
297+
298+
</body></html>

README.md

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# Working in progress
2+
3+
Article repository "Smart Choices for Measurement Models: Dynamic Tutorial for your Confirmatory Factor Analysis in R Environment".
4+
5+
# License
6+
7+
<p xmlns:cc="http://creativecommons.org/ns#">
8+
9+
This work is licensed under <a href="http://creativecommons.org/licenses/by-nc/4.0/?ref=chooser-v1" target="_blank" rel="license noopener noreferrer" style="display:inline-block;">Attribution-NonCommercial 4.0 International<img src="https://mirrors.creativecommons.org/presskit/icons/cc.svg?ref=chooser-v1" style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"/><img src="https://mirrors.creativecommons.org/presskit/icons/by.svg?ref=chooser-v1" style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"/><img src="https://mirrors.creativecommons.org/presskit/icons/nc.svg?ref=chooser-v1" style="height:22px!important;margin-left:3px;vertical-align:text-bottom;"/></a>
10+
11+
</p>

0 commit comments

Comments
 (0)