mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2026-04-28 09:41:29 +00:00
Community Survey import specifier for xlsx plugin
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
title: $:/DefaultTiddlers
|
||||
|
||||
HelloThere
|
||||
[[TiddlyWiki Community Survey (2025)]]
|
||||
[[The Great TiddlyWiki Interview Project (2010)]]
|
||||
@@ -2,6 +2,17 @@ title: HelloThere
|
||||
|
||||
This page gathers the responses to surveys that we have run for the TiddlyWiki community.
|
||||
|
||||
<%if [tag[Community Survey 2025]] %>
|
||||
|
||||
Surveys available:
|
||||
|
||||
* [[TiddlyWiki Community Survey (2025)]]
|
||||
* [[The Great TiddlyWiki Interview Project (2010)]]
|
||||
|
||||
<%else%>
|
||||
|
||||
Currently, there is one survey: [[The Great TiddlyWiki Interview Project (2010)]]
|
||||
|
||||
<%endif%>
|
||||
|
||||
Thank you to https://yatagarasu.tiddlyhost.com for creating the palette used on this page.
|
||||
|
||||
@@ -3,23 +3,23 @@ tags: $:/tags/Stylesheet
|
||||
|
||||
\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline macrocallblock
|
||||
|
||||
.interview-2010 h1 button svg {
|
||||
.interview h1 button svg {
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.interview-2010 h2 img {
|
||||
.interview h2 img {
|
||||
width: 32px;
|
||||
height: 32px;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
.interview-2010 h3 {
|
||||
.interview h3 {
|
||||
font-size: 0.9em;
|
||||
line-height: 1;
|
||||
}
|
||||
|
||||
.interview-2010-answer {
|
||||
.interview-answer {
|
||||
margin-left: 32px;
|
||||
}
|
||||
@@ -41,7 +41,7 @@ Here are the questions we asked and the responses we received.
|
||||
<h3>
|
||||
//<$view tiddler=<<answer>> field="modified" format="date" template="DDth MMM YYYY" />//
|
||||
</h3>
|
||||
<$transclude $tiddler=<<answer>> mode="block" />
|
||||
<$transclude $tiddler=<<answer>> $mode="block" />
|
||||
</div>
|
||||
</$list>
|
||||
<%endif%>
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
title: TiddlyWiki Community Survey (2025)
|
||||
|
||||
|
||||
<$let stateBase=<<qualify "$:/state/survey-2025/">>>
|
||||
<div class="interview">
|
||||
<$list filter="[tag[Community Survey 2025]fields[]sort[]] -tags -title">
|
||||
<$let state={{{ [<stateBase>addsuffix<currentTiddler>] }}}>
|
||||
<h1>
|
||||
<$button class="tc-btn-invisible">
|
||||
<$action-setfield $tiddler=<<state>> $field="text" $value={{{ [<state>get[text]match[yes]then[no]else[yes]] }}}/>
|
||||
<%if [<state>get[text]match[yes]] %>
|
||||
{{$:/core/images/chevron-down}}
|
||||
<%else%>
|
||||
{{$:/core/images/chevron-right}}
|
||||
<%endif%>
|
||||
</$button>
|
||||
<$link to=<<currentTiddler>>>
|
||||
<$text text=<<currentTiddler>>/>
|
||||
</$link>
|
||||
</h1>
|
||||
<%if [<state>get[text]match[yes]] %>
|
||||
<$list filter="[tag[Community Survey 2025]]" variable="answer">
|
||||
<div class="interview-answer">
|
||||
<$transclude $tiddler=<<answer>> $field=<<currentTiddler>> $mode="block" />
|
||||
</div>
|
||||
</$list>
|
||||
<%endif%>
|
||||
</$let>
|
||||
</$list>
|
||||
</div>
|
||||
</$let>
|
||||
@@ -0,0 +1,9 @@
|
||||
created: 20250711121107617
|
||||
import-spec-role: row
|
||||
import-row-type: by-column
|
||||
list: [[$:/_importspec/Community Survey 2025/Content/Row/title]]
|
||||
modified: 20250711121107617
|
||||
tags:
|
||||
title: $:/_importspec/Community Survey 2025/Content/Row
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
created: 20250711121107617
|
||||
import-sheet-name: Content
|
||||
import-spec-role: sheet
|
||||
import-tags: [[Community Survey 2025]]
|
||||
skip-rows-top: 3
|
||||
list: [[$:/_importspec/Community Survey 2025/Content/Row]]
|
||||
modified: 20250711121107617
|
||||
tags:
|
||||
title: $:/_importspec/Community Survey 2025/Content
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -0,0 +1,8 @@
|
||||
caption: Import Community Survey 2025 Results Spreadsheet
|
||||
created: 20250711121107617
|
||||
import-spec-role: workbook
|
||||
list: [[$:/_importspec/Community Survey 2025/Content]]
|
||||
modified: 20250711121107617
|
||||
tags:
|
||||
title: $:/_importspec/Community Survey 2025/
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -0,0 +1,6 @@
|
||||
created: 20161021164330811
|
||||
modified: 20161021164331841
|
||||
title: $:/config/plugins/tiddlywiki/xlsx-utils/default-import-spec
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
$:/_importspec/Community Survey 2025/
|
||||
@@ -1,4 +1,8 @@
|
||||
{
|
||||
"plugins": [
|
||||
"tiddlywiki/jszip",
|
||||
"tiddlywiki/xlsx-utils"
|
||||
],
|
||||
"themes": [
|
||||
"tiddlywiki/snowwhite",
|
||||
"tiddlywiki/vanilla"
|
||||
|
||||
@@ -21,6 +21,7 @@ var XLSXImporter = function(options) {
|
||||
this.importSpec = options.importSpec || this.wiki.getTiddlerText(DEFAULT_IMPORT_SPEC_TITLE);
|
||||
this.logger = new $tw.utils.Logger("xlsx-utils");
|
||||
this.results = [];
|
||||
this.nextAutoTitle = 1;
|
||||
if(JSZip) {
|
||||
this.processWorkbook();
|
||||
}
|
||||
@@ -50,6 +51,8 @@ XLSXImporter.prototype.processSheet = function(sheetImportSpecTitle) {
|
||||
this.sheetImportSpec = this.wiki.getTiddler(sheetImportSpecTitle);
|
||||
if(this.sheetImportSpec) {
|
||||
this.sheetName = this.sheetImportSpec.fields["import-sheet-name"];
|
||||
this.skipRowsTop = $tw.utils.parseInt(this.sheetImportSpec.fields["skip-rows-top"] || "0");
|
||||
this.applyTags = this.sheetImportSpec.fields["import-tags"] || "";
|
||||
this.sheet = this.workbook.Sheets[this.sheetName];
|
||||
if(!this.sheet) {
|
||||
this.logger.alert("Missing sheet '" + this.sheetName + "'");
|
||||
@@ -57,11 +60,15 @@ XLSXImporter.prototype.processSheet = function(sheetImportSpecTitle) {
|
||||
// Get the size of the sheet
|
||||
this.sheetSize = this.measureSheet(this.sheet);
|
||||
// Read the column names from the first row
|
||||
this.columnsByName = this.findColumns(this.sheet,this.sheetSize);
|
||||
this.columnsByName = this.findColumns(this.sheet,this.sheetSize,this.skipRowsTop);
|
||||
// Iterate through the rows
|
||||
for(this.row=this.sheetSize.startRow+1; this.row<=this.sheetSize.endRow; this.row++) {
|
||||
// Iterate through the row import specifiers
|
||||
$tw.utils.each(this.sheetImportSpec.fields.list || [],this.processRow.bind(this));
|
||||
const startRow = this.sheetSize.startRow + this.skipRowsTop + 1;
|
||||
const endRow = this.sheetSize.endRow;
|
||||
if(startRow < endRow) {
|
||||
for(this.row=startRow; this.row<=endRow; this.row++) {
|
||||
// Iterate through the row import specifiers
|
||||
$tw.utils.each(this.sheetImportSpec.fields.list || [],this.processRow.bind(this));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -85,7 +92,10 @@ XLSXImporter.prototype.processRow = function(rowImportSpecTitle) {
|
||||
// Save the tiddler if not skipped
|
||||
if(!this.skipTiddler) {
|
||||
if(!this.tiddlerFields.title) {
|
||||
this.logger.alert("Missing title field for " + JSON.stringify(this.tiddlerFields));
|
||||
this.tiddlerFields.title = "Imported " + $tw.utils.pad(this.nextAutoTitle++,5);
|
||||
}
|
||||
if(this.applyTags) {
|
||||
this.tiddlerFields.tags = this.applyTags;
|
||||
}
|
||||
this.results.push(this.tiddlerFields);
|
||||
}
|
||||
@@ -102,10 +112,6 @@ XLSXImporter.prototype.processRowByColumn = function() {
|
||||
self.tiddlerFields[name] = cell.w;
|
||||
}
|
||||
});
|
||||
// Skip the tiddler entirely if it doesn't have a title
|
||||
if(!this.tiddlerFields.title) {
|
||||
this.skipTiddler = true;
|
||||
}
|
||||
};
|
||||
|
||||
XLSXImporter.prototype.processRowByField = function() {
|
||||
@@ -182,15 +188,16 @@ XLSXImporter.prototype.measureSheet = function(sheet) {
|
||||
}
|
||||
};
|
||||
|
||||
XLSXImporter.prototype.findColumns = function(sheet,sheetSize) {
|
||||
XLSXImporter.prototype.findColumns = function(sheet,sheetSize,skipRowsTop) {
|
||||
skipRowsTop = skipRowsTop || 0;
|
||||
var columnsByName = {};
|
||||
for(var col=sheetSize.startCol; col<=sheetSize.endCol; col++) {
|
||||
var cell = sheet[XLSX.utils.encode_cell({c: col, r: sheetSize.startRow})],
|
||||
var cell = sheet[XLSX.utils.encode_cell({c: col, r: sheetSize.startRow + skipRowsTop})],
|
||||
columnName;
|
||||
if(cell) {
|
||||
columnName = cell.w;
|
||||
if(columnName) {
|
||||
columnsByName[columnName] = col;
|
||||
columnsByName[columnName] = col;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user