mirror of
https://github.com/Jermolene/TiddlyWiki5
synced 2026-01-22 19:04:38 +00:00
Compare commits
2 Commits
dynannotat
...
fix-6400
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8f4e15666a | ||
|
|
42768ca166 |
@@ -1,8 +1,15 @@
|
||||
# Ignore "third party" code whose style we will not change.
|
||||
# Known minified files
|
||||
/boot/sjcl.js
|
||||
/core/modules/utils/base64-utf8/base64-utf8.module.js
|
||||
/core/modules/utils/base64-utf8/base64-utf8.module.min.js
|
||||
/core/modules/utils/diff-match-patch/diff_match_patch.js
|
||||
/core/modules/utils/diff-match-patch/diff_match_patch_uncompressed.js
|
||||
/core/modules/utils/dom/csscolorparser.js
|
||||
/plugins/tiddlywiki/*/files/
|
||||
/plugins/tiddlywiki/async/files/async.min.v1.5.0.js
|
||||
/plugins/tiddlywiki/codemirror-autocomplete/files/addon/hint/anyword-hint.js
|
||||
/plugins/tiddlywiki/codemirror-autocomplete/files/addon/hint/css-hint.js
|
||||
/plugins/tiddlywiki/codemirror-autocomplete/files/addon/hint/html-hint.js
|
||||
/plugins/tiddlywiki/codemirror-autocomplete/files/addon/hint/javascript-hint.js
|
||||
/plugins/tiddlywiki/codemirror-autocomplete/files/addon/hint/show-hint.js
|
||||
/plugins/tiddlywiki/codemirror-autocomplete/files/addon/hint/xml-hint.js
|
||||
/plugins/tiddlywiki/codemirror-closebrackets/files/addon/edit/closebrackets.js
|
||||
/plugins/tiddlywiki/codemirror-closebrackets/files/addon/edit/matchbrackets.js
|
||||
/plugins/tiddlywiki/codemirror-closetag/files/addon/edit/closetag.js
|
||||
/plugins/tiddlywiki/codemirror-closetag/files/addon/fold/xml-fold.js
|
||||
|
||||
@@ -64,23 +64,7 @@ rules:
|
||||
init-declarations: 'off'
|
||||
jsx-quotes: error
|
||||
key-spacing: 'off'
|
||||
keyword-spacing:
|
||||
- error
|
||||
- before: true
|
||||
after: false
|
||||
overrides:
|
||||
'case':
|
||||
after: true
|
||||
'do':
|
||||
'after': true
|
||||
'else':
|
||||
after: true
|
||||
'return':
|
||||
after: true
|
||||
'throw':
|
||||
after: true
|
||||
'try':
|
||||
after: true
|
||||
keyword-spacing: 'off'
|
||||
line-comment-position: 'off'
|
||||
linebreak-style: 'off'
|
||||
lines-around-comment: 'off'
|
||||
|
||||
3
.github/workflows/ci.yml
vendored
3
.github/workflows/ci.yml
vendored
@@ -72,6 +72,3 @@ jobs:
|
||||
- run: "./bin/ci-push.sh"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUBPUSHTOKEN }}
|
||||
- run: "./bin/build-tw-org.sh"
|
||||
env:
|
||||
GH_TOKEN: ${{ secrets.GITHUBPUSHTOKEN }}
|
||||
|
||||
@@ -1,97 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Build tiddlywiki.org assets.
|
||||
|
||||
# Default to the version of TiddlyWiki installed in this repo
|
||||
|
||||
if [ -z "$TWORG_BUILD_TIDDLYWIKI" ]; then
|
||||
TWORG_BUILD_TIDDLYWIKI=./tiddlywiki.js
|
||||
fi
|
||||
|
||||
echo "Using TWORG_BUILD_TIDDLYWIKI as [$TWORG_BUILD_TIDDLYWIKI]"
|
||||
|
||||
# Set up the build details
|
||||
|
||||
if [ -z "$TWORG_BUILD_DETAILS" ]; then
|
||||
TWORG_BUILD_DETAILS="$(git symbolic-ref --short HEAD)-$(git rev-parse HEAD) from $(git remote get-url origin)"
|
||||
fi
|
||||
|
||||
echo "Using TWORG_BUILD_DETAILS as [$TWORG_BUILD_DETAILS]"
|
||||
|
||||
if [ -z "$TWORG_BUILD_COMMIT" ]; then
|
||||
TWORG_BUILD_COMMIT="$(git rev-parse HEAD)"
|
||||
fi
|
||||
|
||||
echo "Using TWORG_BUILD_COMMIT as [$TWORG_BUILD_COMMIT]"
|
||||
|
||||
# Set up the build output directory
|
||||
|
||||
if [ -z "$TWORG_BUILD_OUTPUT" ]; then
|
||||
TWORG_BUILD_OUTPUT=$(mktemp -d)
|
||||
fi
|
||||
|
||||
mkdir -p $TWORG_BUILD_OUTPUT
|
||||
|
||||
if [ ! -d "$TWORG_BUILD_OUTPUT" ]; then
|
||||
echo 'A valid TWORG_BUILD_OUTPUT environment variable must be set'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Using TWORG_BUILD_OUTPUT as [$TWORG_BUILD_OUTPUT]"
|
||||
|
||||
# Pull existing GitHub pages content
|
||||
|
||||
git clone --depth=1 --branch=main "https://github.com/TiddlyWiki/tiddlywiki.org-gh-pages.git" $TWORG_BUILD_OUTPUT
|
||||
|
||||
# Make the CNAME file that GitHub Pages requires
|
||||
|
||||
echo "tiddlywiki.org" > $TWORG_BUILD_OUTPUT/CNAME
|
||||
|
||||
# Delete any existing static content
|
||||
|
||||
mkdir -p $TWORG_BUILD_OUTPUT/static
|
||||
rm $TWORG_BUILD_OUTPUT/static/*
|
||||
|
||||
# Put the build details into a .tid file so that it can be included in each build (deleted at the end of this script)
|
||||
|
||||
echo -e -n "title: $:/build\ncommit: $TWORG_BUILD_COMMIT\n\n$TWORG_BUILD_DETAILS\n" > $TWORG_BUILD_OUTPUT/build.tid
|
||||
|
||||
######################################################
|
||||
#
|
||||
# tiddlywiki.org distribution
|
||||
#
|
||||
######################################################
|
||||
|
||||
# /index.html Main site
|
||||
# /favicon.ico Favicon for main site
|
||||
# /static.html Static rendering of default tiddlers
|
||||
# /alltiddlers.html Static rendering of all tiddlers
|
||||
# /static/* Static single tiddlers
|
||||
# /static/static.css Static stylesheet
|
||||
# /static/favicon.ico Favicon for static pages
|
||||
node $TWORG_BUILD_TIDDLYWIKI \
|
||||
editions/tw.org \
|
||||
--verbose \
|
||||
--version \
|
||||
--load $TWORG_BUILD_OUTPUT/build.tid \
|
||||
--output $TWORG_BUILD_OUTPUT \
|
||||
--build favicon static index \
|
||||
|| exit 1
|
||||
|
||||
# Delete the temporary build tiddler
|
||||
|
||||
rm $TWORG_BUILD_OUTPUT/build.tid || exit 1
|
||||
|
||||
# Push output back to GitHub
|
||||
|
||||
# Exit script immediately if any command fails
|
||||
set -e
|
||||
|
||||
pushd $TWORG_BUILD_OUTPUT
|
||||
git config --global user.email "actions@github.com"
|
||||
git config --global user.name "GitHub Actions"
|
||||
git add -A .
|
||||
git commit --message "GitHub build: $GITHUB_RUN_NUMBER of $TW5_BUILD_BRANCH ($(date +'%F %T %Z'))"
|
||||
git remote add deploy "https://$GH_TOKEN@github.com/TiddlyWiki/tiddlywiki.org-gh-pages.git" &>/dev/null
|
||||
git push deploy main &>/dev/null
|
||||
popd
|
||||
28
boot/boot.js
28
boot/boot.js
@@ -68,26 +68,6 @@ $tw.utils.isArrayEqual = function(array1,array2) {
|
||||
});
|
||||
};
|
||||
|
||||
/*
|
||||
Add an entry to a sorted array if it doesn't already exist, while maintaining the sort order
|
||||
*/
|
||||
$tw.utils.insertSortedArray = function(array,value) {
|
||||
var low = 0, high = array.length - 1, mid, cmp;
|
||||
while(low <= high) {
|
||||
mid = (low + high) >> 1;
|
||||
cmp = value.localeCompare(array[mid]);
|
||||
if(cmp > 0) {
|
||||
low = mid + 1;
|
||||
} else if(cmp < 0) {
|
||||
high = mid - 1;
|
||||
} else {
|
||||
return array;
|
||||
}
|
||||
}
|
||||
array.splice(low,0,value);
|
||||
return array;
|
||||
};
|
||||
|
||||
/*
|
||||
Push entries onto an array, removing them first if they already exist in the array
|
||||
array: array to modify (assumed to be free of duplicates)
|
||||
@@ -1114,7 +1094,7 @@ $tw.Wiki = function(options) {
|
||||
tiddlerTitles = null, // Array of tiddler titles
|
||||
getTiddlerTitles = function() {
|
||||
if(!tiddlerTitles) {
|
||||
tiddlerTitles = Object.keys(tiddlers).sort(function(a,b) {return a.localeCompare(b);});
|
||||
tiddlerTitles = Object.keys(tiddlers);
|
||||
}
|
||||
return tiddlerTitles;
|
||||
},
|
||||
@@ -1167,8 +1147,10 @@ $tw.Wiki = function(options) {
|
||||
}
|
||||
// Save the new tiddler
|
||||
tiddlers[title] = tiddler;
|
||||
// Check we've got the title
|
||||
tiddlerTitles = $tw.utils.insertSortedArray(tiddlerTitles || [],title);
|
||||
// Check we've got it's title
|
||||
if(tiddlerTitles && tiddlerTitles.indexOf(title) === -1) {
|
||||
tiddlerTitles.push(title);
|
||||
}
|
||||
// Record the new tiddler state
|
||||
updateDescriptor["new"] = {
|
||||
tiddler: tiddler,
|
||||
|
||||
@@ -36,8 +36,6 @@ EditorTypes/Hint: These tiddlers determine which editor is used to edit specific
|
||||
EditorTypes/Type/Caption: Type
|
||||
EditTemplateBody/Caption: Edit Template Body
|
||||
EditTemplateBody/Hint: This rule cascade is used by the default edit template to dynamically choose the template for editing the body of a tiddler.
|
||||
FieldEditor/Caption: Field Editor
|
||||
FieldEditor/Hint: This rules cascade is used to dynamically choose the template for rendering a tiddler field based on its name. It is used within the Edit Template.
|
||||
Info/Caption: Info
|
||||
Info/Hint: Information about this TiddlyWiki
|
||||
KeyboardShortcuts/Add/Prompt: Type shortcut here
|
||||
@@ -228,4 +226,4 @@ Tools/Download/Full/Caption: Download full wiki
|
||||
ViewTemplateBody/Caption: View Template Body
|
||||
ViewTemplateBody/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the body of a tiddler.
|
||||
ViewTemplateTitle/Caption: View Template Title
|
||||
ViewTemplateTitle/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the title of a tiddler.
|
||||
ViewTemplateTitle/Hint: This rule cascade is used by the default view template to dynamically choose the template for displaying the title of a tiddler.
|
||||
@@ -14,7 +14,7 @@ ConfirmAction: Do you wish to proceed?
|
||||
Count: count
|
||||
DefaultNewTiddlerTitle: New Tiddler
|
||||
Diffs/CountMessage: <<diff-count>> differences
|
||||
DropMessage: Drop now (or use the 'Escape' key to cancel)
|
||||
DropMessage: Drop here (or use the 'Escape' key to cancel)
|
||||
Encryption/Cancel: Cancel
|
||||
Encryption/ConfirmClearPassword: Do you wish to clear the password? This will remove the encryption applied when saving this wiki
|
||||
Encryption/PromptSetPassword: Set a new password for this TiddlyWiki
|
||||
|
||||
@@ -13,8 +13,8 @@ Text editor operation to wrap the selected lines with a prefix and suffix
|
||||
"use strict";
|
||||
|
||||
exports["wrap-lines"] = function(event,operation) {
|
||||
var prefix = event.paramObject.prefix || "",
|
||||
suffix = event.paramObject.suffix || "";
|
||||
var prefix = operation.paramObject.prefix || "",
|
||||
suffix = operation.paramObject.suffix || "";
|
||||
// Cut just past the preceding line break, or the start of the text
|
||||
operation.cutStart = $tw.utils.findPrecedingLineBreak(operation.text,operation.selStart);
|
||||
// Cut to just past the following line break, or to the end of the text
|
||||
|
||||
@@ -95,12 +95,10 @@ function parseFilterOperation(operators,filterString,p) {
|
||||
if(nextBracketPos === -1) {
|
||||
throw "Missing closing bracket in filter expression";
|
||||
}
|
||||
if(operator.regexp) {
|
||||
operand.text = "";
|
||||
} else {
|
||||
if(!operator.regexp) {
|
||||
operand.text = filterString.substring(p,nextBracketPos);
|
||||
operator.operands.push(operand);
|
||||
}
|
||||
operator.operands.push(operand);
|
||||
p = nextBracketPos + 1;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,27 +0,0 @@
|
||||
/*\
|
||||
title: $:/core/modules/filters/crypto.js
|
||||
type: application/javascript
|
||||
module-type: filteroperator
|
||||
|
||||
Filter operators for cryptography, using the Stanford JavaScript library
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports.sha256 = function(source,operator,options) {
|
||||
var results = [],
|
||||
length = parseInt(operator.operand,10) || 20,
|
||||
sha256 = function(text) {
|
||||
return sjcl.codec.hex.fromBits(sjcl.hash.sha256.hash(text)).substr(0,length);
|
||||
};
|
||||
source(function(tiddler,title) {
|
||||
results.push(sha256(title));
|
||||
});
|
||||
return results;
|
||||
};
|
||||
|
||||
})();
|
||||
@@ -20,7 +20,7 @@ exports.insertbefore = function(source,operator,options) {
|
||||
source(function(tiddler,title) {
|
||||
results.push(title);
|
||||
});
|
||||
var target = operator.operands[1] || (options.widget && options.widget.getVariable(operator.suffix || "currentTiddler"));
|
||||
var target = options.widget && options.widget.getVariable(operator.suffix || "currentTiddler");
|
||||
if(target !== operator.operand) {
|
||||
// Remove the entry from the list if it is present
|
||||
var pos = results.indexOf(operator.operand);
|
||||
|
||||
@@ -19,13 +19,13 @@ exports.draft = function(source,prefix,options) {
|
||||
var results = [];
|
||||
if(prefix === "!") {
|
||||
source(function(tiddler,title) {
|
||||
if(!tiddler || !tiddler.isDraft()) {
|
||||
if(!tiddler || !$tw.utils.hop(tiddler.fields,"draft.of")) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
source(function(tiddler,title) {
|
||||
if(tiddler && tiddler.isDraft()) {
|
||||
if(tiddler && $tw.utils.hop(tiddler.fields,"draft.of") && (tiddler.fields["draft.of"].length !== 0)) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -1,167 +0,0 @@
|
||||
/*\
|
||||
title: $:/core/modules/filters/json-ops.js
|
||||
type: application/javascript
|
||||
module-type: filteroperator
|
||||
|
||||
Filter operators for JSON operations
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
|
||||
/*jslint node: true, browser: true */
|
||||
/*global $tw: false */
|
||||
"use strict";
|
||||
|
||||
exports["getjson"] = function(source,operator,options) {
|
||||
var results = [];
|
||||
source(function(tiddler,title) {
|
||||
var data = options.wiki.getTiddlerDataCached(title);
|
||||
if(data) {
|
||||
var item = getDataItemValueAsStrings(data,operator.operands);
|
||||
if(item !== undefined) {
|
||||
results.push.apply(results,item);
|
||||
}
|
||||
}
|
||||
});
|
||||
return results;
|
||||
};
|
||||
|
||||
exports["indexesjson"] = function(source,operator,options) {
|
||||
var results = [];
|
||||
source(function(tiddler,title) {
|
||||
var data = options.wiki.getTiddlerDataCached(title);
|
||||
if(data) {
|
||||
var item = getDataItemKeysAsStrings(data,operator.operands);
|
||||
if(item !== undefined) {
|
||||
results.push.apply(results,item);
|
||||
}
|
||||
}
|
||||
});
|
||||
return results;
|
||||
};
|
||||
|
||||
exports["typejson"] = function(source,operator,options) {
|
||||
var results = [];
|
||||
source(function(tiddler,title) {
|
||||
var data = options.wiki.getTiddlerDataCached(title);
|
||||
if(data) {
|
||||
var item = getDataItemType(data,operator.operands);
|
||||
if(item !== undefined) {
|
||||
results.push(item);
|
||||
}
|
||||
}
|
||||
});
|
||||
return results;
|
||||
};
|
||||
|
||||
/*
|
||||
Given a JSON data structure and an array of index strings, return an array of the string representation of the values at the end of the index chain, or "undefined" if any of the index strings are invalid
|
||||
*/
|
||||
function getDataItemValueAsStrings(data,indexes) {
|
||||
// Get the item
|
||||
var item = getDataItem(data,indexes);
|
||||
// Return the item as a string
|
||||
return convertDataItemValueToStrings(item);
|
||||
}
|
||||
|
||||
/*
|
||||
Given a JSON data structure and an array of index strings, return an array of the string representation of the keys of the item at the end of the index chain, or "undefined" if any of the index strings are invalid
|
||||
*/
|
||||
function getDataItemKeysAsStrings(data,indexes) {
|
||||
// Get the item
|
||||
var item = getDataItem(data,indexes);
|
||||
// Return the item keys as a string
|
||||
return convertDataItemKeysToStrings(item);
|
||||
}
|
||||
|
||||
/*
|
||||
Return an array of the string representation of the values of a data item, or "undefined" if the item is undefined
|
||||
*/
|
||||
function convertDataItemValueToStrings(item) {
|
||||
// Return the item as a string
|
||||
if(item === undefined) {
|
||||
return item;
|
||||
}
|
||||
if(typeof item === "object") {
|
||||
if(item === null) {
|
||||
return ["null"];
|
||||
}
|
||||
var results = [];
|
||||
if($tw.utils.isArray(item)) {
|
||||
$tw.utils.each(item,function(value) {
|
||||
results.push.apply(results,convertDataItemValueToStrings(value));
|
||||
});
|
||||
return results;
|
||||
} else {
|
||||
$tw.utils.each(Object.keys(item).sort(),function(key) {
|
||||
results.push.apply(results,convertDataItemValueToStrings(item[key]));
|
||||
});
|
||||
return results;
|
||||
}
|
||||
}
|
||||
return [item.toString()];
|
||||
}
|
||||
|
||||
/*
|
||||
Return an array of the string representation of the keys of a data item, or "undefined" if the item is undefined
|
||||
*/
|
||||
function convertDataItemKeysToStrings(item) {
|
||||
// Return the item as a string
|
||||
if(item === undefined) {
|
||||
return item;
|
||||
} else if(typeof item === "object") {
|
||||
if(item === null) {
|
||||
return [];
|
||||
}
|
||||
var results = [];
|
||||
if($tw.utils.isArray(item)) {
|
||||
for(var i=0; i<item.length; i++) {
|
||||
results.push(i.toString());
|
||||
}
|
||||
return results;
|
||||
} else {
|
||||
$tw.utils.each(Object.keys(item).sort(),function(key) {
|
||||
results.push(key);
|
||||
});
|
||||
return results;
|
||||
}
|
||||
}
|
||||
return [];
|
||||
}
|
||||
|
||||
function getDataItemType(data,indexes) {
|
||||
// Get the item
|
||||
var item = getDataItem(data,indexes);
|
||||
// Return the item type
|
||||
if(item === undefined) {
|
||||
return item;
|
||||
} else if(item === null) {
|
||||
return "null";
|
||||
} else if($tw.utils.isArray(item)) {
|
||||
return "array";
|
||||
} else if(typeof item === "object") {
|
||||
return "object";
|
||||
} else {
|
||||
return typeof item;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Given a JSON data structure and an array of index strings, return the value at the end of the index chain, or "undefined" if any of the index strings are invalid
|
||||
*/
|
||||
function getDataItem(data,indexes) {
|
||||
if(indexes.length === 0 || (indexes.length === 1 && indexes[0] === "")) {
|
||||
return data;
|
||||
}
|
||||
// Get the item
|
||||
var item = data;
|
||||
for(var i=0; i<indexes.length; i++) {
|
||||
if(item !== undefined) {
|
||||
item = item[indexes[i]];
|
||||
}
|
||||
}
|
||||
return item;
|
||||
}
|
||||
|
||||
})();
|
||||
|
||||
@@ -87,8 +87,7 @@ exports.butlast = function(source,operator,options) {
|
||||
source(function(tiddler,title) {
|
||||
results.push(title);
|
||||
});
|
||||
var index = count === 0 ? results.length : -count;
|
||||
return results.slice(0,index);
|
||||
return results.slice(0,-count);
|
||||
};
|
||||
exports.bl = exports.butlast;
|
||||
|
||||
|
||||
@@ -5,11 +5,9 @@ module-type: filteroperator
|
||||
|
||||
Filter operator that looks up values via a title prefix
|
||||
|
||||
[lookup:<defaultvalue>:<field OR index>[<prefix>],[<field-name OR index-name>]]
|
||||
[lookup:<field>[<prefix>]]
|
||||
|
||||
Prepends the prefix to the selected items and returns the specified
|
||||
field or index value. If the 2nd suffix does not exist, it defaults to field.
|
||||
If the second operand is missing it defaults to "text" for fields, and "0" for indexes
|
||||
Prepends the prefix to the selected items and returns the specified field value
|
||||
|
||||
\*/
|
||||
(function(){
|
||||
@@ -22,31 +20,10 @@ If the second operand is missing it defaults to "text" for fields, and "0" for i
|
||||
Export our filter function
|
||||
*/
|
||||
exports.lookup = function(source,operator,options) {
|
||||
var results = [],
|
||||
suffixes = operator.suffixes || [],
|
||||
defaultSuffix = suffixes[0] ? (suffixes[0][0] || "") : "",
|
||||
indexSuffix = (suffixes[1] && suffixes[1][0] === "index") ? true : false,
|
||||
target;
|
||||
if(operator.operands.length == 2) {
|
||||
target = operator.operands[1]
|
||||
} else {
|
||||
target = indexSuffix ? "0": "text";
|
||||
}
|
||||
if(indexSuffix) {
|
||||
source(function(tiddler,title) {
|
||||
var data = options.wiki.extractTiddlerDataItem(operator.operands[0]+title,target,defaultSuffix);
|
||||
results.push(data);
|
||||
});
|
||||
} else {
|
||||
source(function(tiddler,title) {
|
||||
var value = defaultSuffix;
|
||||
var targetTiddler = options.wiki.getTiddler(operator.operands[0]+title);
|
||||
if(targetTiddler && targetTiddler.getFieldString(target)) {
|
||||
value = targetTiddler.getFieldString(target);
|
||||
}
|
||||
results.push(value);
|
||||
});
|
||||
}
|
||||
var results = [];
|
||||
source(function(tiddler,title) {
|
||||
results.push(options.wiki.getTiddlerText(operator.operand + title) || operator.suffix || '');
|
||||
});
|
||||
return results;
|
||||
};
|
||||
|
||||
|
||||
@@ -16,37 +16,19 @@ Filter operator for checking if a title starts with a prefix
|
||||
Export our filter function
|
||||
*/
|
||||
exports.prefix = function(source,operator,options) {
|
||||
var results = [],
|
||||
suffixes = (operator.suffixes || [])[0] || [];
|
||||
if(suffixes.indexOf("caseinsensitive") !== -1) {
|
||||
var operand = operator.operand.toLowerCase();
|
||||
if(operator.prefix === "!") {
|
||||
source(function(tiddler,title) {
|
||||
if(title.toLowerCase().substr(0,operand.length) !== operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
source(function(tiddler,title) {
|
||||
if(title.toLowerCase().substr(0,operand.length) === operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
}
|
||||
var results = [];
|
||||
if(operator.prefix === "!") {
|
||||
source(function(tiddler,title) {
|
||||
if(title.substr(0,operator.operand.length) !== operator.operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
if(operator.prefix === "!") {
|
||||
source(function(tiddler,title) {
|
||||
if(title.substr(0,operator.operand.length) !== operator.operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
source(function(tiddler,title) {
|
||||
if(title.substr(0,operator.operand.length) === operator.operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
}
|
||||
source(function(tiddler,title) {
|
||||
if(title.substr(0,operator.operand.length) === operator.operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
}
|
||||
return results;
|
||||
};
|
||||
|
||||
@@ -16,22 +16,12 @@ Filter operator for removing a prefix from each title in the list. Titles that d
|
||||
Export our filter function
|
||||
*/
|
||||
exports.removeprefix = function(source,operator,options) {
|
||||
var results = [],
|
||||
suffixes = (operator.suffixes || [])[0] || [];
|
||||
if(suffixes.indexOf("caseinsensitive") !== -1) {
|
||||
var operand = operator.operand.toLowerCase();
|
||||
source(function(tiddler,title) {
|
||||
if(title.toLowerCase().substr(0,operand.length) === operand) {
|
||||
results.push(title.substr(operand.length));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
source(function(tiddler,title) {
|
||||
if(title.substr(0,operator.operand.length) === operator.operand) {
|
||||
results.push(title.substr(operator.operand.length));
|
||||
}
|
||||
});
|
||||
}
|
||||
var results = [];
|
||||
source(function(tiddler,title) {
|
||||
if(title.substr(0,operator.operand.length) === operator.operand) {
|
||||
results.push(title.substr(operator.operand.length));
|
||||
}
|
||||
});
|
||||
return results;
|
||||
};
|
||||
|
||||
|
||||
@@ -16,26 +16,12 @@ Filter operator for removing a suffix from each title in the list. Titles that d
|
||||
Export our filter function
|
||||
*/
|
||||
exports.removesuffix = function(source,operator,options) {
|
||||
var results = [],
|
||||
suffixes = (operator.suffixes || [])[0] || [];
|
||||
if (!operator.operand) {
|
||||
source(function(tiddler,title) {
|
||||
results.push(title);
|
||||
});
|
||||
} else if(suffixes.indexOf("caseinsensitive") !== -1) {
|
||||
var operand = operator.operand.toLowerCase();
|
||||
source(function(tiddler,title) {
|
||||
if(title && title.toLowerCase().substr(-operand.length) === operand) {
|
||||
results.push(title.substr(0,title.length - operand.length));
|
||||
}
|
||||
});
|
||||
} else {
|
||||
source(function(tiddler,title) {
|
||||
if(title && title.substr(-operator.operand.length) === operator.operand) {
|
||||
results.push(title.substr(0,title.length - operator.operand.length));
|
||||
}
|
||||
});
|
||||
}
|
||||
var results = [];
|
||||
source(function(tiddler,title) {
|
||||
if(title && title.substr(-operator.operand.length) === operator.operand) {
|
||||
results.push(title.substr(0,title.length - operator.operand.length));
|
||||
}
|
||||
});
|
||||
return results;
|
||||
};
|
||||
|
||||
|
||||
@@ -40,7 +40,6 @@ exports.search = function(source,operator,options) {
|
||||
invert: invert,
|
||||
field: fields,
|
||||
excludeField: excludeFields,
|
||||
some: hasFlag("some"),
|
||||
caseSensitive: hasFlag("casesensitive"),
|
||||
literal: hasFlag("literal"),
|
||||
whitespace: hasFlag("whitespace"),
|
||||
|
||||
@@ -16,41 +16,19 @@ Filter operator for checking if a title ends with a suffix
|
||||
Export our filter function
|
||||
*/
|
||||
exports.suffix = function(source,operator,options) {
|
||||
var results = [],
|
||||
suffixes = (operator.suffixes || [])[0] || [];
|
||||
if (!operator.operand) {
|
||||
var results = [];
|
||||
if(operator.prefix === "!") {
|
||||
source(function(tiddler,title) {
|
||||
results.push(title);
|
||||
if(title.substr(-operator.operand.length) !== operator.operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
} else if(suffixes.indexOf("caseinsensitive") !== -1) {
|
||||
var operand = operator.operand.toLowerCase();
|
||||
if(operator.prefix === "!") {
|
||||
source(function(tiddler,title) {
|
||||
if(title.toLowerCase().substr(-operand.length) !== operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
source(function(tiddler,title) {
|
||||
if(title.toLowerCase().substr(-operand.length) === operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
}
|
||||
} else {
|
||||
if(operator.prefix === "!") {
|
||||
source(function(tiddler,title) {
|
||||
if(title.substr(-operator.operand.length) !== operator.operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
source(function(tiddler,title) {
|
||||
if(title.substr(-operator.operand.length) === operator.operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
}
|
||||
source(function(tiddler,title) {
|
||||
if(title.substr(-operator.operand.length) === operator.operand) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
}
|
||||
return results;
|
||||
};
|
||||
|
||||
@@ -19,7 +19,7 @@ exports.untagged = function(source,operator,options) {
|
||||
var results = [],
|
||||
expected = (operator.prefix === "!");
|
||||
source(function(tiddler,title) {
|
||||
if(((tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) === expected) || (!tiddler && !expected)) {
|
||||
if((tiddler && $tw.utils.isArray(tiddler.fields.tags) && tiddler.fields.tags.length > 0) === expected) {
|
||||
results.push(title);
|
||||
}
|
||||
});
|
||||
|
||||
@@ -239,7 +239,7 @@ exports.parseFilterVariable = function(source) {
|
||||
};
|
||||
|
||||
/*
|
||||
Look for an HTML attribute definition. Returns null if not found, otherwise returns {type: "attribute", name:, type: "filtered|string|indirect|macro", value|filter|textReference:, start:, end:,}
|
||||
Look for an HTML attribute definition. Returns null if not found, otherwise returns {type: "attribute", name:, valueType: "string|indirect|macro", value:, start:, end:,}
|
||||
*/
|
||||
exports.parseAttribute = function(source,pos) {
|
||||
var node = {
|
||||
@@ -248,7 +248,7 @@ exports.parseAttribute = function(source,pos) {
|
||||
// Define our regexps
|
||||
var reAttributeName = /([^\/\s>"'=]+)/g,
|
||||
reUnquotedAttribute = /([^\/\s<>"'=]+)/g,
|
||||
reFilteredValue = /\{\{\{([\S\s]+?)\}\}\}/g,
|
||||
reFilteredValue = /\{\{\{(.+?)\}\}\}/g,
|
||||
reIndirectValue = /\{\{([^\}]+)\}\}/g;
|
||||
// Skip whitespace
|
||||
pos = $tw.utils.skipWhiteSpace(source,pos);
|
||||
|
||||
@@ -34,6 +34,7 @@ function Server(options) {
|
||||
this.authenticators = options.authenticators || [];
|
||||
this.wiki = options.wiki;
|
||||
this.boot = options.boot || $tw.boot;
|
||||
this.servername = $tw.utils.transliterateToSafeASCII(this.wiki.getTiddlerText("$:/SiteTitle") || "TiddlyWiki5");
|
||||
// Initialise the variables
|
||||
this.variables = $tw.utils.extend({},this.defaultVariables);
|
||||
if(options.variables) {
|
||||
@@ -43,8 +44,7 @@ function Server(options) {
|
||||
}
|
||||
}
|
||||
}
|
||||
// Setup the default required plugins
|
||||
this.requiredPlugins = this.get("required-plugins").split(',');
|
||||
$tw.utils.extend({},this.defaultVariables,options.variables);
|
||||
// Initialise CSRF
|
||||
this.csrfDisable = this.get("csrf-disable") === "yes";
|
||||
// Initialize Gzip compression
|
||||
@@ -52,24 +52,14 @@ function Server(options) {
|
||||
// Initialize browser-caching
|
||||
this.enableBrowserCache = this.get("use-browser-cache") === "yes";
|
||||
// Initialise authorization
|
||||
var authorizedUserName;
|
||||
if(this.get("username") && this.get("password")) {
|
||||
authorizedUserName = this.get("username");
|
||||
} else if(this.get("credentials")) {
|
||||
authorizedUserName = "(authenticated)";
|
||||
} else {
|
||||
authorizedUserName = "(anon)";
|
||||
}
|
||||
var authorizedUserName = (this.get("username") && this.get("password")) ? this.get("username") : "(anon)";
|
||||
this.authorizationPrincipals = {
|
||||
readers: (this.get("readers") || authorizedUserName).split(",").map($tw.utils.trim),
|
||||
writers: (this.get("writers") || authorizedUserName).split(",").map($tw.utils.trim)
|
||||
}
|
||||
if(this.get("admin") || authorizedUserName !== "(anon)") {
|
||||
this.authorizationPrincipals["admin"] = (this.get("admin") || authorizedUserName).split(',').map($tw.utils.trim)
|
||||
}
|
||||
// Load and initialise authenticators
|
||||
$tw.modules.forEachModuleOfType("authenticator", function(title,authenticatorDefinition) {
|
||||
// console.log("Loading authenticator " + title);
|
||||
// console.log("Loading server route " + title);
|
||||
self.addAuthenticator(authenticatorDefinition.AuthenticatorClass);
|
||||
});
|
||||
// Load route handlers
|
||||
@@ -81,21 +71,15 @@ function Server(options) {
|
||||
this.listenOptions = null;
|
||||
this.protocol = "http";
|
||||
var tlsKeyFilepath = this.get("tls-key"),
|
||||
tlsCertFilepath = this.get("tls-cert"),
|
||||
tlsPassphrase = this.get("tls-passphrase");
|
||||
tlsCertFilepath = this.get("tls-cert");
|
||||
if(tlsCertFilepath && tlsKeyFilepath) {
|
||||
this.listenOptions = {
|
||||
key: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsKeyFilepath),"utf8"),
|
||||
cert: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsCertFilepath),"utf8"),
|
||||
passphrase: tlsPassphrase || ''
|
||||
cert: fs.readFileSync(path.resolve(this.boot.wikiPath,tlsCertFilepath),"utf8")
|
||||
};
|
||||
this.protocol = "https";
|
||||
}
|
||||
this.transport = require(this.protocol);
|
||||
// Name the server and init the boot state
|
||||
this.servername = $tw.utils.transliterateToSafeASCII(this.get("server-name") || this.wiki.getTiddlerText("$:/SiteTitle") || "TiddlyWiki5");
|
||||
this.boot.origin = this.get("origin")? this.get("origin"): this.protocol+"://"+this.get("host")+":"+this.get("port");
|
||||
this.boot.pathPrefix = this.get("path-prefix") || "";
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -166,7 +150,6 @@ function sendResponse(request,response,statusCode,headers,data,encoding) {
|
||||
Server.prototype.defaultVariables = {
|
||||
port: "8080",
|
||||
host: "127.0.0.1",
|
||||
"required-plugins": "$:/plugins/tiddlywiki/filesystem,$:/plugins/tiddlywiki/tiddlyweb",
|
||||
"root-tiddler": "$:/core/save/all",
|
||||
"root-render-type": "text/plain",
|
||||
"root-serve-type": "text/html",
|
||||
@@ -256,15 +239,15 @@ Server.prototype.requestHandler = function(request,response,options) {
|
||||
state.pathPrefix = options.pathPrefix || this.get("path-prefix") || "";
|
||||
state.sendResponse = sendResponse.bind(self,request,response);
|
||||
// Get the principals authorized to access this resource
|
||||
state.authorizationType = options.authorizationType || this.methodMappings[request.method] || "readers";
|
||||
var authorizationType = this.methodMappings[request.method] || "readers";
|
||||
// Check for the CSRF header if this is a write
|
||||
if(!this.csrfDisable && state.authorizationType === "writers" && request.headers["x-requested-with"] !== "TiddlyWiki") {
|
||||
if(!this.csrfDisable && authorizationType === "writers" && request.headers["x-requested-with"] !== "TiddlyWiki") {
|
||||
response.writeHead(403,"'X-Requested-With' header required to login to '" + this.servername + "'");
|
||||
response.end();
|
||||
return;
|
||||
}
|
||||
// Check whether anonymous access is granted
|
||||
state.allowAnon = this.isAuthorized(state.authorizationType,null);
|
||||
state.allowAnon = this.isAuthorized(authorizationType,null);
|
||||
// Authenticate with the first active authenticator
|
||||
if(this.authenticators.length > 0) {
|
||||
if(!this.authenticators[0].authenticateRequest(request,response,state)) {
|
||||
@@ -273,7 +256,7 @@ Server.prototype.requestHandler = function(request,response,options) {
|
||||
}
|
||||
}
|
||||
// Authorize with the authenticated username
|
||||
if(!this.isAuthorized(state.authorizationType,state.authenticatedUsername)) {
|
||||
if(!this.isAuthorized(authorizationType,state.authenticatedUsername)) {
|
||||
response.writeHead(401,"'" + state.authenticatedUsername + "' is not authorized to access '" + this.servername + "'");
|
||||
response.end();
|
||||
return;
|
||||
@@ -339,16 +322,8 @@ Server.prototype.listen = function(port,host,prefix) {
|
||||
port = process.env[port] || 8080;
|
||||
}
|
||||
// Warn if required plugins are missing
|
||||
var missing = [];
|
||||
for (var index=0; index<this.requiredPlugins.length; index++) {
|
||||
if (!this.wiki.getTiddler(this.requiredPlugins[index])) {
|
||||
missing.push(this.requiredPlugins[index]);
|
||||
}
|
||||
}
|
||||
if(missing.length > 0) {
|
||||
var error = "Warning: Plugin(s) required for client-server operation are missing.\n"+
|
||||
"\""+ missing.join("\", \"")+"\"";
|
||||
$tw.utils.warning(error);
|
||||
if(!this.wiki.getTiddler("$:/plugins/tiddlywiki/tiddlyweb") || !this.wiki.getTiddler("$:/plugins/tiddlywiki/filesystem")) {
|
||||
$tw.utils.warning("Warning: Plugins required for client-server operation (\"tiddlywiki/filesystem\" and \"tiddlywiki/tiddlyweb\") are missing from tiddlywiki.info file");
|
||||
}
|
||||
// Create the server
|
||||
var server;
|
||||
|
||||
@@ -42,17 +42,12 @@ exports.startup = function() {
|
||||
$tw.styleWidgetNode = $tw.wiki.makeTranscludeWidget(PAGE_STYLESHEET_TITLE,{document: $tw.fakeDocument});
|
||||
$tw.styleContainer = $tw.fakeDocument.createElement("style");
|
||||
$tw.styleWidgetNode.render($tw.styleContainer,null);
|
||||
$tw.styleWidgetNode.assignedStyles = $tw.styleContainer.textContent;
|
||||
$tw.styleElement = document.createElement("style");
|
||||
$tw.styleElement.innerHTML = $tw.styleWidgetNode.assignedStyles;
|
||||
$tw.styleElement.innerHTML = $tw.styleContainer.textContent;
|
||||
document.head.insertBefore($tw.styleElement,document.head.firstChild);
|
||||
$tw.wiki.addEventListener("change",$tw.perf.report("styleRefresh",function(changes) {
|
||||
if($tw.styleWidgetNode.refresh(changes,$tw.styleContainer,null)) {
|
||||
var newStyles = $tw.styleContainer.textContent;
|
||||
if(newStyles !== $tw.styleWidgetNode.assignedStyles) {
|
||||
$tw.styleWidgetNode.assignedStyles = newStyles;
|
||||
$tw.styleElement.innerHTML = $tw.styleWidgetNode.assignedStyles;
|
||||
}
|
||||
$tw.styleElement.innerHTML = $tw.styleContainer.textContent;
|
||||
}
|
||||
}));
|
||||
// Display the $:/core/ui/PageTemplate tiddler to kick off the display
|
||||
|
||||
@@ -51,20 +51,6 @@ exports.startup = function() {
|
||||
element.focus(event.paramObject);
|
||||
}
|
||||
});
|
||||
// Install the tm-rename-tiddler and tm-relink-tiddler messages
|
||||
var makeRenameHandler = function(method) {
|
||||
return function(event) {
|
||||
var options = {},
|
||||
paramObject = event.paramObject || {},
|
||||
from = paramObject.from || event.tiddlerTitle,
|
||||
to = paramObject.to;
|
||||
options.dontRenameInTags = (paramObject.renameInTags === "false" || paramObject.renameInTags === "no") ? true : false;
|
||||
options.dontRenameInLists = (paramObject.renameInLists === "false" || paramObject.renameInLists === "no") ? true : false;
|
||||
$tw.wiki[method](from,to,options);
|
||||
};
|
||||
};
|
||||
$tw.rootWidget.addEventListener("tm-rename-tiddler",makeRenameHandler("renameTiddler"));
|
||||
$tw.rootWidget.addEventListener("tm-relink-tiddler",makeRenameHandler("relinkTiddler"));
|
||||
// Install the scroller
|
||||
$tw.pageScroller = new $tw.utils.PageScroller();
|
||||
$tw.rootWidget.addEventListener("tm-scroll",function(event) {
|
||||
|
||||
@@ -20,8 +20,6 @@ exports.synchronous = true;
|
||||
|
||||
// Global to keep track of open windows (hashmap by title)
|
||||
$tw.windows = {};
|
||||
// Default template to use for new windows
|
||||
var DEFAULT_WINDOW_TEMPLATE = "$:/core/templates/single.tiddler.window";
|
||||
|
||||
exports.startup = function() {
|
||||
// Handle open window message
|
||||
@@ -31,25 +29,22 @@ exports.startup = function() {
|
||||
title = event.param || event.tiddlerTitle,
|
||||
paramObject = event.paramObject || {},
|
||||
windowTitle = paramObject.windowTitle || title,
|
||||
windowID = paramObject.windowID || title,
|
||||
template = paramObject.template || DEFAULT_WINDOW_TEMPLATE,
|
||||
template = paramObject.template || "$:/core/templates/single.tiddler.window",
|
||||
width = paramObject.width || "700",
|
||||
height = paramObject.height || "600",
|
||||
top = paramObject.top,
|
||||
left = paramObject.left,
|
||||
variables = $tw.utils.extend({},paramObject,{currentTiddler: title, "tv-window-id": windowID});
|
||||
variables = $tw.utils.extend({},paramObject,{currentTiddler: title});
|
||||
// Open the window
|
||||
var srcWindow,
|
||||
srcDocument;
|
||||
// In case that popup blockers deny opening a new window
|
||||
try {
|
||||
srcWindow = window.open("","external-" + windowID,"scrollbars,width=" + width + ",height=" + height + (top ? ",top=" + top : "" ) + (left ? ",left=" + left : "" )),
|
||||
srcWindow = window.open("","external-" + title,"scrollbars,width=" + width + ",height=" + height),
|
||||
srcDocument = srcWindow.document;
|
||||
}
|
||||
catch(e) {
|
||||
return;
|
||||
}
|
||||
$tw.windows[windowID] = srcWindow;
|
||||
$tw.windows[title] = srcWindow;
|
||||
// Check for reopening the same window
|
||||
if(srcWindow.haveInitialisedWindow) {
|
||||
return;
|
||||
@@ -59,7 +54,7 @@ exports.startup = function() {
|
||||
srcDocument.close();
|
||||
srcDocument.title = windowTitle;
|
||||
srcWindow.addEventListener("beforeunload",function(event) {
|
||||
delete $tw.windows[windowID];
|
||||
delete $tw.windows[title];
|
||||
$tw.wiki.removeEventListener("change",refreshHandler);
|
||||
},false);
|
||||
// Set up the styles
|
||||
@@ -93,21 +88,13 @@ exports.startup = function() {
|
||||
srcWindow.document.documentElement.addEventListener("click",$tw.popup,true);
|
||||
srcWindow.haveInitialisedWindow = true;
|
||||
});
|
||||
$tw.rootWidget.addEventListener("tm-close-window",function(event) {
|
||||
var windowID = event.param,
|
||||
win = $tw.windows[windowID];
|
||||
if(win) {
|
||||
win.close();
|
||||
}
|
||||
});
|
||||
var closeAllWindows = function() {
|
||||
// Close open windows when unloading main window
|
||||
$tw.addUnloadTask(function() {
|
||||
$tw.utils.each($tw.windows,function(win) {
|
||||
win.close();
|
||||
});
|
||||
}
|
||||
$tw.rootWidget.addEventListener("tm-close-all-windows",closeAllWindows);
|
||||
// Close open windows when unloading main window
|
||||
$tw.addUnloadTask(closeAllWindows);
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
})();
|
||||
|
||||
@@ -16,23 +16,21 @@ Browser data transfer utilities, used with the clipboard and drag and drop
|
||||
Options:
|
||||
|
||||
domNode: dom node to make draggable
|
||||
selector: CSS selector to identify element within domNode to be used as drag handle (optional)
|
||||
dragImageType: "pill", "blank" or "dom" (the default)
|
||||
dragTiddlerFn: optional function to retrieve the title of tiddler to drag
|
||||
dragFilterFn: optional function to retreive the filter defining a list of tiddlers to drag
|
||||
widget: widget to use as the context for the filter
|
||||
widget: widget to use as the contect for the filter
|
||||
*/
|
||||
exports.makeDraggable = function(options) {
|
||||
var dragImageType = options.dragImageType || "dom",
|
||||
dragImage,
|
||||
domNode = options.domNode,
|
||||
dragHandle = options.selector && domNode.querySelector(options.selector) || domNode;
|
||||
domNode = options.domNode;
|
||||
// Make the dom node draggable (not necessary for anchor tags)
|
||||
if((domNode.tagName || "").toLowerCase() !== "a") {
|
||||
dragHandle.setAttribute("draggable","true");
|
||||
domNode.setAttribute("draggable","true");
|
||||
}
|
||||
// Add event handlers
|
||||
$tw.utils.addEventListeners(dragHandle,[
|
||||
$tw.utils.addEventListeners(domNode,[
|
||||
{name: "dragstart", handlerFunction: function(event) {
|
||||
if(event.dataTransfer === undefined) {
|
||||
return false;
|
||||
@@ -47,7 +45,7 @@ exports.makeDraggable = function(options) {
|
||||
}
|
||||
var titleString = $tw.utils.stringifyList(titles);
|
||||
// Check that we've something to drag
|
||||
if(titles.length > 0 && event.target === dragHandle) {
|
||||
if(titles.length > 0 && event.target === domNode) {
|
||||
// Mark the drag in progress
|
||||
$tw.dragInProgress = domNode;
|
||||
// Set the dragging class on the element being dragged
|
||||
|
||||
@@ -49,14 +49,10 @@ Handle an event
|
||||
*/
|
||||
PageScroller.prototype.handleEvent = function(event) {
|
||||
if(event.type === "tm-scroll") {
|
||||
var options = {};
|
||||
if($tw.utils.hop(event.paramObject,"animationDuration")) {
|
||||
options.animationDuration = event.paramObject.animationDuration;
|
||||
}
|
||||
if(event.paramObject && event.paramObject.selector) {
|
||||
this.scrollSelectorIntoView(null,event.paramObject.selector,null,options);
|
||||
this.scrollSelectorIntoView(null,event.paramObject.selector);
|
||||
} else {
|
||||
this.scrollIntoView(event.target,null,options);
|
||||
this.scrollIntoView(event.target);
|
||||
}
|
||||
return false; // Event was handled
|
||||
}
|
||||
@@ -66,10 +62,10 @@ PageScroller.prototype.handleEvent = function(event) {
|
||||
/*
|
||||
Handle a scroll event hitting the page document
|
||||
*/
|
||||
PageScroller.prototype.scrollIntoView = function(element,callback,options) {
|
||||
PageScroller.prototype.scrollIntoView = function(element,callback) {
|
||||
var self = this,
|
||||
duration = $tw.utils.hop(options,"animationDuration") ? parseInt(options.animationDuration) : $tw.utils.getAnimationDuration(),
|
||||
srcWindow = element ? element.ownerDocument.defaultView : window;
|
||||
duration = $tw.utils.getAnimationDuration(),
|
||||
srcWindow = element ? element.ownerDocument.defaultView : window;
|
||||
// Now get ready to scroll the body
|
||||
this.cancelScroll(srcWindow);
|
||||
this.startTime = Date.now();
|
||||
@@ -126,11 +122,11 @@ PageScroller.prototype.scrollIntoView = function(element,callback,options) {
|
||||
drawFrame();
|
||||
};
|
||||
|
||||
PageScroller.prototype.scrollSelectorIntoView = function(baseElement,selector,callback,options) {
|
||||
PageScroller.prototype.scrollSelectorIntoView = function(baseElement,selector,callback) {
|
||||
baseElement = baseElement || document.body;
|
||||
var element = baseElement.querySelector(selector);
|
||||
if(element) {
|
||||
this.scrollIntoView(element,callback,options);
|
||||
this.scrollIntoView(element,callback);
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
@@ -71,8 +71,8 @@ ActionListopsWidget.prototype.invokeAction = function(triggeringWidget,
|
||||
}
|
||||
if(this.subfilter) {
|
||||
var inputList = this.wiki.getTiddlerList(this.target,field,index),
|
||||
subfilter = "[all[]] " + this.subfilter;
|
||||
this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(subfilter,this,this.wiki.makeTiddlerIterator(inputList))));
|
||||
subfilter = $tw.utils.stringifyList(inputList) + " " + this.subfilter;
|
||||
this.wiki.setText(this.target, field, index, $tw.utils.stringifyList(this.wiki.filterTiddlers(subfilter,this)));
|
||||
}
|
||||
if(this.filtertags) {
|
||||
var tiddler = this.wiki.getTiddler(this.target),
|
||||
|
||||
@@ -247,7 +247,7 @@ Selectively refreshes the widget if needed. Returns true if the widget or any of
|
||||
*/
|
||||
ButtonWidget.prototype.refresh = function(changedTiddlers) {
|
||||
var changedAttributes = this.computeAttributes();
|
||||
if(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled || changedAttributes["default"]) {
|
||||
if(changedAttributes.actions || changedAttributes.to || changedAttributes.message || changedAttributes.param || changedAttributes.set || changedAttributes.setTo || changedAttributes.popup || changedAttributes.hover || changedAttributes.selectedClass || changedAttributes.style || changedAttributes.dragFilter || changedAttributes.dragTiddler || (this.set && changedTiddlers[this.set]) || (this.popup && changedTiddlers[this.popup]) || (this.popupTitle && changedTiddlers[this.popupTitle]) || changedAttributes.setTitle || changedAttributes.setField || changedAttributes.setIndex || changedAttributes.popupTitle || changedAttributes.disabled) {
|
||||
this.refreshSelf();
|
||||
return true;
|
||||
} else if(changedAttributes["class"]) {
|
||||
|
||||
@@ -27,10 +27,7 @@ DraggableWidget.prototype = new Widget();
|
||||
Render this widget into the DOM
|
||||
*/
|
||||
DraggableWidget.prototype.render = function(parent,nextSibling) {
|
||||
var self = this,
|
||||
tag,
|
||||
domNode,
|
||||
classes = [];
|
||||
var self = this;
|
||||
// Save the parent dom node
|
||||
this.parentDomNode = parent;
|
||||
// Compute our attributes
|
||||
@@ -38,23 +35,18 @@ DraggableWidget.prototype.render = function(parent,nextSibling) {
|
||||
// Execute our logic
|
||||
this.execute();
|
||||
// Sanitise the specified tag
|
||||
tag = this.draggableTag;
|
||||
var tag = this.draggableTag;
|
||||
if($tw.config.htmlUnsafeElements.indexOf(tag) !== -1) {
|
||||
tag = "div";
|
||||
}
|
||||
// Create our element
|
||||
domNode = this.document.createElement(tag);
|
||||
var domNode = this.document.createElement(tag);
|
||||
// Assign classes
|
||||
var classes = ["tc-draggable"];
|
||||
if(this.draggableClasses) {
|
||||
classes.push(this.draggableClasses);
|
||||
}
|
||||
if(!this.dragHandleSelector) {
|
||||
classes.push("tc-draggable");
|
||||
}
|
||||
domNode.setAttribute("class",classes.join(" "));
|
||||
// Insert the node into the DOM and render any children
|
||||
parent.insertBefore(domNode,nextSibling);
|
||||
this.renderChildren(domNode,null);
|
||||
// Add event handlers
|
||||
$tw.utils.makeDraggable({
|
||||
domNode: domNode,
|
||||
@@ -63,9 +55,11 @@ DraggableWidget.prototype.render = function(parent,nextSibling) {
|
||||
startActions: self.startActions,
|
||||
endActions: self.endActions,
|
||||
dragImageType: self.dragImageType,
|
||||
widget: this,
|
||||
selector: self.dragHandleSelector
|
||||
widget: this
|
||||
});
|
||||
// Insert the link into the DOM and render any children
|
||||
parent.insertBefore(domNode,nextSibling);
|
||||
this.renderChildren(domNode,null);
|
||||
this.domNodes.push(domNode);
|
||||
};
|
||||
|
||||
@@ -78,8 +72,7 @@ DraggableWidget.prototype.execute = function() {
|
||||
this.draggableClasses = this.getAttribute("class");
|
||||
this.startActions = this.getAttribute("startactions");
|
||||
this.endActions = this.getAttribute("endactions");
|
||||
this.dragImageType = this.getAttribute("dragimagetype");
|
||||
this.dragHandleSelector = this.getAttribute("selector");
|
||||
this.dragImageType = this.getAttribute("dragimagetype");
|
||||
// Make the child widgets
|
||||
this.makeChildWidgets();
|
||||
};
|
||||
|
||||
@@ -46,7 +46,6 @@ EventWidget.prototype.render = function(parent,nextSibling) {
|
||||
$tw.utils.each(this.types,function(type) {
|
||||
domNode.addEventListener(type,function(event) {
|
||||
var selector = self.getAttribute("selector"),
|
||||
matchSelector = self.getAttribute("matchSelector"),
|
||||
actions = self.getAttribute("$"+type) || self.getAttribute("actions-"+type),
|
||||
stopPropagation = self.getAttribute("stopPropagation","onaction"),
|
||||
selectedNode = event.target,
|
||||
@@ -57,48 +56,45 @@ EventWidget.prototype.render = function(parent,nextSibling) {
|
||||
if(selectedNode.nodeType === 3) {
|
||||
selectedNode = selectedNode.parentNode;
|
||||
}
|
||||
// Check that the selected node matches any matchSelector
|
||||
if(matchSelector && !$tw.utils.domMatchesSelector(selectedNode,matchSelector)) {
|
||||
return false;
|
||||
}
|
||||
if(selector) {
|
||||
// Search ancestors for a node that matches the selector
|
||||
while(!$tw.utils.domMatchesSelector(selectedNode,selector) && selectedNode !== domNode) {
|
||||
selectedNode = selectedNode.parentNode;
|
||||
}
|
||||
// Exit if we didn't find one
|
||||
if(selectedNode === domNode) {
|
||||
return false;
|
||||
}
|
||||
// Only set up variables if we have actions to invoke
|
||||
if(actions) {
|
||||
$tw.utils.each(selectedNode.attributes,function(attribute) {
|
||||
variables["dom-" + attribute.name] = attribute.value.toString();
|
||||
});
|
||||
//Add a variable with a popup coordinate string for the selected node
|
||||
variables["tv-popup-coords"] = "(" + selectedNode.offsetLeft + "," + selectedNode.offsetTop +"," + selectedNode.offsetWidth + "," + selectedNode.offsetHeight + ")";
|
||||
// If we found one, copy the attributes as variables, otherwise exit
|
||||
if($tw.utils.domMatchesSelector(selectedNode,selector)) {
|
||||
// Only set up variables if we have actions to invoke
|
||||
if(actions) {
|
||||
$tw.utils.each(selectedNode.attributes,function(attribute) {
|
||||
variables["dom-" + attribute.name] = attribute.value.toString();
|
||||
});
|
||||
//Add a variable with a popup coordinate string for the selected node
|
||||
variables["tv-popup-coords"] = "(" + selectedNode.offsetLeft + "," + selectedNode.offsetTop +"," + selectedNode.offsetWidth + "," + selectedNode.offsetHeight + ")";
|
||||
|
||||
//Add variables for offset of selected node
|
||||
variables["tv-selectednode-posx"] = selectedNode.offsetLeft.toString();
|
||||
variables["tv-selectednode-posy"] = selectedNode.offsetTop.toString();
|
||||
variables["tv-selectednode-width"] = selectedNode.offsetWidth.toString();
|
||||
variables["tv-selectednode-height"] = selectedNode.offsetHeight.toString();
|
||||
|
||||
if(event.clientX && event.clientY) {
|
||||
//Add variables for event X and Y position relative to selected node
|
||||
selectedNodeRect = selectedNode.getBoundingClientRect();
|
||||
variables["event-fromselected-posx"] = (event.clientX - selectedNodeRect.left).toString();
|
||||
variables["event-fromselected-posy"] = (event.clientY - selectedNodeRect.top).toString();
|
||||
//Add variables for offset of selected node
|
||||
variables["tv-selectednode-posx"] = selectedNode.offsetLeft.toString();
|
||||
variables["tv-selectednode-posy"] = selectedNode.offsetTop.toString();
|
||||
variables["tv-selectednode-width"] = selectedNode.offsetWidth.toString();
|
||||
variables["tv-selectednode-height"] = selectedNode.offsetHeight.toString();
|
||||
|
||||
if(event.clientX && event.clientY) {
|
||||
//Add variables for event X and Y position relative to selected node
|
||||
selectedNodeRect = selectedNode.getBoundingClientRect();
|
||||
variables["event-fromselected-posx"] = (event.clientX - selectedNodeRect.left).toString();
|
||||
variables["event-fromselected-posy"] = (event.clientY - selectedNodeRect.top).toString();
|
||||
|
||||
//Add variables for event X and Y position relative to event catcher node
|
||||
catcherNodeRect = self.domNode.getBoundingClientRect();
|
||||
variables["event-fromcatcher-posx"] = (event.clientX - catcherNodeRect.left).toString();
|
||||
variables["event-fromcatcher-posy"] = (event.clientY - catcherNodeRect.top).toString();
|
||||
//Add variables for event X and Y position relative to event catcher node
|
||||
catcherNodeRect = self.domNode.getBoundingClientRect();
|
||||
variables["event-fromcatcher-posx"] = (event.clientX - catcherNodeRect.left).toString();
|
||||
variables["event-fromcatcher-posy"] = (event.clientY - catcherNodeRect.top).toString();
|
||||
|
||||
//Add variables for event X and Y position relative to the viewport
|
||||
variables["event-fromviewport-posx"] = event.clientX.toString();
|
||||
variables["event-fromviewport-posy"] = event.clientY.toString();
|
||||
//Add variables for event X and Y position relative to the viewport
|
||||
variables["event-fromviewport-posx"] = event.clientX.toString();
|
||||
variables["event-fromviewport-posy"] = event.clientY.toString();
|
||||
}
|
||||
}
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
// Execute our actions with the variables
|
||||
|
||||
@@ -46,7 +46,7 @@ ImportVariablesWidget.prototype.execute = function(tiddlerList) {
|
||||
this.tiddlerList = tiddlerList || this.wiki.filterTiddlers(this.filter,this);
|
||||
// Accumulate the <$set> widgets from each tiddler
|
||||
$tw.utils.each(this.tiddlerList,function(title) {
|
||||
var parser = widgetPointer.wiki.parseTiddler(title,{parseAsInline:true});
|
||||
var parser = widgetPointer.wiki.parseTiddler(title);
|
||||
if(parser) {
|
||||
var parseTreeNode = parser.tree[0];
|
||||
while(parseTreeNode && parseTreeNode.type === "set") {
|
||||
|
||||
@@ -51,9 +51,6 @@ ListWidget.prototype.render = function(parent,nextSibling) {
|
||||
} else {
|
||||
this.storyview = null;
|
||||
}
|
||||
if(this.storyview && this.storyview.renderEnd) {
|
||||
this.storyview.renderEnd();
|
||||
}
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -44,7 +44,8 @@ NavigatorWidget.prototype.render = function(parent,nextSibling) {
|
||||
{type: "tm-fold-tiddler", handler: "handleFoldTiddlerEvent"},
|
||||
{type: "tm-fold-other-tiddlers", handler: "handleFoldOtherTiddlersEvent"},
|
||||
{type: "tm-fold-all-tiddlers", handler: "handleFoldAllTiddlersEvent"},
|
||||
{type: "tm-unfold-all-tiddlers", handler: "handleUnfoldAllTiddlersEvent"}
|
||||
{type: "tm-unfold-all-tiddlers", handler: "handleUnfoldAllTiddlersEvent"},
|
||||
{type: "tm-rename-tiddler", handler: "handleRenameTiddlerEvent"}
|
||||
]);
|
||||
this.parentDomNode = parent;
|
||||
this.computeAttributes();
|
||||
@@ -631,6 +632,16 @@ NavigatorWidget.prototype.handleUnfoldAllTiddlersEvent = function(event) {
|
||||
});
|
||||
};
|
||||
|
||||
NavigatorWidget.prototype.handleRenameTiddlerEvent = function(event) {
|
||||
var options = {},
|
||||
paramObject = event.paramObject || {},
|
||||
from = paramObject.from || event.tiddlerTitle,
|
||||
to = paramObject.to;
|
||||
options.dontRenameInTags = (paramObject.renameInTags === "false" || paramObject.renameInTags === "no") ? true : false;
|
||||
options.dontRenameInLists = (paramObject.renameInLists === "false" || paramObject.renameInLists === "no") ? true : false;
|
||||
this.wiki.renameTiddler(from,to,options);
|
||||
};
|
||||
|
||||
exports.navigator = NavigatorWidget;
|
||||
|
||||
})();
|
||||
|
||||
@@ -38,14 +38,10 @@ ScrollableWidget.prototype.handleScrollEvent = function(event) {
|
||||
if(this.outerDomNode.scrollWidth <= this.outerDomNode.offsetWidth && this.outerDomNode.scrollHeight <= this.outerDomNode.offsetHeight && this.fallthrough === "yes") {
|
||||
return true;
|
||||
}
|
||||
var options = {};
|
||||
if($tw.utils.hop(event.paramObject,"animationDuration")) {
|
||||
options.animationDuration = event.paramObject.animationDuration;
|
||||
}
|
||||
if(event.paramObject && event.paramObject.selector) {
|
||||
this.scrollSelectorIntoView(null,event.paramObject.selector,null,options);
|
||||
this.scrollSelectorIntoView(null,event.paramObject.selector);
|
||||
} else {
|
||||
this.scrollIntoView(event.target,null,options);
|
||||
this.scrollIntoView(event.target);
|
||||
}
|
||||
return false; // Handled event
|
||||
};
|
||||
@@ -53,9 +49,9 @@ ScrollableWidget.prototype.handleScrollEvent = function(event) {
|
||||
/*
|
||||
Scroll an element into view
|
||||
*/
|
||||
ScrollableWidget.prototype.scrollIntoView = function(element,callback,options) {
|
||||
var duration = $tw.utils.hop(options,"animationDuration") ? parseInt(options.animationDuration) : $tw.utils.getAnimationDuration(),
|
||||
srcWindow = element ? element.ownerDocument.defaultView : window;
|
||||
ScrollableWidget.prototype.scrollIntoView = function(element) {
|
||||
var duration = $tw.utils.getAnimationDuration(),
|
||||
srcWindow = element ? element.ownerDocument.defaultView : window;
|
||||
this.cancelScroll();
|
||||
this.startTime = Date.now();
|
||||
var scrollPosition = {
|
||||
@@ -118,11 +114,11 @@ ScrollableWidget.prototype.scrollIntoView = function(element,callback,options) {
|
||||
}
|
||||
};
|
||||
|
||||
ScrollableWidget.prototype.scrollSelectorIntoView = function(baseElement,selector,callback,options) {
|
||||
ScrollableWidget.prototype.scrollSelectorIntoView = function(baseElement,selector,callback) {
|
||||
baseElement = baseElement || document.body;
|
||||
var element = baseElement.querySelector(selector);
|
||||
if(element) {
|
||||
this.scrollIntoView(element,callback,options);
|
||||
this.scrollIntoView(element,callback);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -159,6 +155,8 @@ ScrollableWidget.prototype.render = function(parent,nextSibling) {
|
||||
// Create elements
|
||||
this.outerDomNode = this.document.createElement("div");
|
||||
$tw.utils.setStyle(this.outerDomNode,[
|
||||
{overflowY: "auto"},
|
||||
{overflowX: "auto"},
|
||||
{webkitOverflowScrolling: "touch"}
|
||||
]);
|
||||
this.innerDomNode = this.document.createElement("div");
|
||||
|
||||
@@ -314,40 +314,24 @@ excludeEventAttributes: ignores attributes whose name begins with "on"
|
||||
Widget.prototype.assignAttributes = function(domNode,options) {
|
||||
options = options || {};
|
||||
var self = this;
|
||||
var assignAttribute = function(name,value) {
|
||||
// Check for excluded attribute names
|
||||
if(options.excludeEventAttributes && name.substr(0,2) === "on") {
|
||||
value = undefined;
|
||||
$tw.utils.each(this.attributes,function(v,a) {
|
||||
// Check exclusions
|
||||
if(options.excludeEventAttributes && a.substr(0,2) === "on") {
|
||||
v = undefined;
|
||||
}
|
||||
if(value !== undefined) {
|
||||
// Handle the xlink: namespace
|
||||
var namespace = null;
|
||||
if(name.substr(0,6) === "xlink:" && name.length > 6) {
|
||||
namespace = "http://www.w3.org/1999/xlink";
|
||||
name = name.substr(6);
|
||||
}
|
||||
// Handle styles
|
||||
if(name.substr(0,6) === "style." && name.length > 6) {
|
||||
domNode.style[$tw.utils.unHyphenateCss(name.substr(6))] = value;
|
||||
} else {
|
||||
// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)
|
||||
try {
|
||||
domNode.setAttributeNS(namespace,name,value);
|
||||
} catch(e) {
|
||||
if(v !== undefined) {
|
||||
var b = a.split(":");
|
||||
// Setting certain attributes can cause a DOM error (eg xmlns on the svg element)
|
||||
try {
|
||||
if (b.length == 2 && b[0] == "xlink"){
|
||||
domNode.setAttributeNS("http://www.w3.org/1999/xlink",b[1],v);
|
||||
} else {
|
||||
domNode.setAttributeNS(null,a,v);
|
||||
}
|
||||
} catch(e) {
|
||||
}
|
||||
}
|
||||
}
|
||||
// Not all parse tree nodes have the orderedAttributes property
|
||||
if(this.parseTreeNode.orderedAttributes) {
|
||||
$tw.utils.each(this.parseTreeNode.orderedAttributes,function(attribute,index) {
|
||||
assignAttribute(attribute.name,self.attributes[attribute.name]);
|
||||
});
|
||||
} else {
|
||||
$tw.utils.each(Object.keys(self.attributes).sort(),function(name) {
|
||||
assignAttribute(name,self.attributes[name]);
|
||||
});
|
||||
}
|
||||
});
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -639,25 +639,14 @@ Lookup a given tiddler and return a list of all the tiddlers that include it in
|
||||
*/
|
||||
exports.findListingsOfTiddler = function(targetTitle,fieldName) {
|
||||
fieldName = fieldName || "list";
|
||||
var wiki = this;
|
||||
var listings = this.getGlobalCache("listings-" + fieldName,function() {
|
||||
var listings = Object.create(null);
|
||||
wiki.each(function(tiddler,title) {
|
||||
var list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);
|
||||
if(list) {
|
||||
for(var i = 0; i < list.length; i++) {
|
||||
var listItem = list[i],
|
||||
listing = listings[listItem] || [];
|
||||
if (listing.indexOf(title) === -1) {
|
||||
listing.push(title);
|
||||
}
|
||||
listings[listItem] = listing;
|
||||
}
|
||||
}
|
||||
});
|
||||
return listings;
|
||||
var titles = [];
|
||||
this.each(function(tiddler,title) {
|
||||
var list = $tw.utils.parseStringArray(tiddler.fields[fieldName]);
|
||||
if(list && list.indexOf(targetTitle) !== -1) {
|
||||
titles.push(title);
|
||||
}
|
||||
});
|
||||
return listings[targetTitle] || [];
|
||||
return titles;
|
||||
};
|
||||
|
||||
/*
|
||||
@@ -1207,28 +1196,23 @@ Return an array of tiddler titles that match a search string
|
||||
text: The text string to search for
|
||||
options: see below
|
||||
Options available:
|
||||
source: an iterator function for the source tiddlers, called source(iterator),
|
||||
where iterator is called as iterator(tiddler,title)
|
||||
source: an iterator function for the source tiddlers, called source(iterator), where iterator is called as iterator(tiddler,title)
|
||||
exclude: An array of tiddler titles to exclude from the search
|
||||
invert: If true returns tiddlers that do not contain the specified string
|
||||
caseSensitive: If true forces a case sensitive search
|
||||
field: If specified, restricts the search to the specified field, or an array of field names
|
||||
anchored: If true, forces all but regexp searches to be anchored to the start of text
|
||||
excludeField: If true, the field options are inverted to specify the fields that are not to be searched
|
||||
|
||||
The search mode is determined by the first of these boolean flags to be true
|
||||
literal: searches for literal string
|
||||
whitespace: same as literal except runs of whitespace are treated as a single space
|
||||
regexp: treats the search term as a regular expression
|
||||
words: (default) treats search string as a list of tokens, and matches if all tokens are found,
|
||||
regardless of adjacency or ordering
|
||||
some: treats search string as a list of tokens, and matches if at least ONE token is found
|
||||
words: (default) treats search string as a list of tokens, and matches if all tokens are found, regardless of adjacency or ordering
|
||||
*/
|
||||
exports.search = function(text,options) {
|
||||
options = options || {};
|
||||
var self = this,
|
||||
t,
|
||||
regExpStr="",
|
||||
invert = !!options.invert;
|
||||
// Convert the search string into a regexp for each term
|
||||
var terms, searchTermsRegExps,
|
||||
@@ -1255,18 +1239,7 @@ exports.search = function(text,options) {
|
||||
searchTermsRegExps = null;
|
||||
console.log("Regexp error parsing /(" + text + ")/" + flags + ": ",e);
|
||||
}
|
||||
} else if(options.some) {
|
||||
terms = text.trim().split(/ +/);
|
||||
if(terms.length === 1 && terms[0] === "") {
|
||||
searchTermsRegExps = null;
|
||||
} else {
|
||||
searchTermsRegExps = [];
|
||||
for(t=0; t<terms.length; t++) {
|
||||
regExpStr += (t===0) ? anchor + $tw.utils.escapeRegExp(terms[t]) : "|" + anchor + $tw.utils.escapeRegExp(terms[t]);
|
||||
}
|
||||
searchTermsRegExps.push(new RegExp("(" + regExpStr + ")",flags));
|
||||
}
|
||||
} else { // default: words
|
||||
} else {
|
||||
terms = text.split(/ +/);
|
||||
if(terms.length === 1 && terms[0] === "") {
|
||||
searchTermsRegExps = null;
|
||||
@@ -1277,7 +1250,7 @@ exports.search = function(text,options) {
|
||||
}
|
||||
}
|
||||
}
|
||||
// Accumulate the array of fields to be searched or excluded from the search
|
||||
// Accumulate the array of fields to be searched or excluded from the search
|
||||
var fields = [];
|
||||
if(options.field) {
|
||||
if($tw.utils.isArray(options.field)) {
|
||||
|
||||
@@ -1,9 +0,0 @@
|
||||
title: $:/core/ui/ControlPanel/FieldEditor
|
||||
tags: $:/tags/ControlPanel/Cascades
|
||||
caption: {{$:/language/ControlPanel/FieldEditor/Caption}}
|
||||
|
||||
\define lingo-base() $:/language/ControlPanel/FieldEditor/
|
||||
|
||||
<<lingo Hint>>
|
||||
|
||||
{{$:/tags/FieldEditorFilter||$:/snippets/ListTaggedCascade}}
|
||||
@@ -14,8 +14,8 @@ title: $:/core/ui/EditTemplate
|
||||
<div data-tiddler-title=<<currentTiddler>> data-tags={{!!tags}} class={{{ tc-tiddler-frame tc-tiddler-edit-frame [<currentTiddler>is[tiddler]then[tc-tiddler-exists]] [<currentTiddler>is[missing]!is[shadow]then[tc-tiddler-missing]] [<currentTiddler>is[shadow]then[tc-tiddler-exists tc-tiddler-shadow]] [<currentTiddler>is[system]then[tc-tiddler-system]] [{!!class}] [<currentTiddler>tags[]encodeuricomponent[]addprefix[tc-tagged-]] +[join[ ]] }}}>
|
||||
<$fieldmangler>
|
||||
<$vars storyTiddler=<<currentTiddler>> newTagNameTiddler=<<qualify "$:/temp/NewTagName">> newFieldNameTiddler=<<qualify "$:/temp/NewFieldName">> newFieldValueTiddler=<<qualify "$:/temp/NewFieldValue">> newFieldNameInputTiddler=<<qualify "$:/temp/NewFieldName/input">> newFieldNameSelectionTiddler=<<qualify "$:/temp/NewFieldName/selected-item">> newTagNameInputTiddler=<<qualify "$:/temp/NewTagName/input">> newTagNameSelectionTiddler=<<qualify "$:/temp/NewTagName/selected-item">> typeInputTiddler=<<qualify "$:/temp/Type/input">> typeSelectionTiddler=<<qualify "$:/temp/Type/selected-item">>>
|
||||
<$keyboard key="((cancel-edit-tiddler))" actions=<<cancel-delete-tiddler-actions "cancel">> tag="div">
|
||||
<$keyboard key="((save-tiddler))" actions=<<save-tiddler-actions>> tag="div">
|
||||
<$keyboard key="((cancel-edit-tiddler))" actions=<<cancel-delete-tiddler-actions "cancel">>>
|
||||
<$keyboard key="((save-tiddler))" actions=<<save-tiddler-actions>>>
|
||||
<$list filter="[all[shadows+tiddlers]tag[$:/tags/EditTemplate]!has[draft.of]]" variable="listItem">
|
||||
<$set name="tv-config-toolbar-class" filter="[<tv-config-toolbar-class>] [<listItem>encodeuricomponent[]addprefix[tc-btn-]]">
|
||||
<$transclude tiddler=<<listItem>>/>
|
||||
|
||||
@@ -10,7 +10,7 @@ $:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$
|
||||
|
||||
<$set name="edit-preview-state" value={{{ [{$:/config/ShowEditPreview/PerTiddler}!match[yes]then[$:/state/showeditpreview]] :else[<qualify "$:/state/showeditpreview">] }}}>
|
||||
<$vars importTitle=<<qualify $:/ImportImage>> importState=<<qualify $:/state/ImportImage>> >
|
||||
<$dropzone importTitle=<<importTitle>> autoOpenOnImport="no" contentTypesFilter={{$:/config/Editor/ImportContentTypesFilter}} class="tc-dropzone-editor" enable={{{ [{$:/config/DragAndDrop/Enable}match[no]] :else[subfilter{$:/config/Editor/EnableImportFilter}then[yes]else[no]] }}} filesOnly="yes" actions=<<importFileActions>> ><$reveal stateTitle=<<edit-preview-state>> type="match" text="yes" tag="div">
|
||||
<$dropzone importTitle=<<importTitle>> autoOpenOnImport="no" contentTypesFilter={{$:/config/Editor/ImportContentTypesFilter}} class="tc-dropzone-editor" enable={{{ [{$:/config/DragAndDrop/Enable}match[no]] :else[subfilter{$:/config/Editor/EnableImportFilter}then[yes]else[no]] }}} filesOnly="yes" actions=<<importFileActions>> ><$reveal stateTitle=<<edit-preview-state>> type="match" text="yes">
|
||||
<div class="tc-tiddler-preview">
|
||||
|
||||
<$transclude tiddler="$:/core/ui/EditTemplate/body/editor" mode="inline"/>
|
||||
@@ -28,7 +28,7 @@ $:/config/EditorToolbarButtons/Visibility/$(currentTiddler)$
|
||||
</div>
|
||||
</$reveal>
|
||||
|
||||
<$reveal stateTitle=<<edit-preview-state>> type="nomatch" text="yes" tag="div">
|
||||
<$reveal stateTitle=<<edit-preview-state>> type="nomatch" text="yes">
|
||||
|
||||
<$transclude tiddler="$:/core/ui/EditTemplate/body/editor" mode="inline"/>
|
||||
|
||||
|
||||
@@ -1,3 +0,0 @@
|
||||
title: $:/core/ui/EditTemplate/fieldEditor/default
|
||||
|
||||
<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> default="" class="tc-edit-texteditor" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}} cancelPopups="yes"/>
|
||||
@@ -15,7 +15,7 @@ $:/config/EditTemplateFields/Visibility/$(currentField)$
|
||||
\end
|
||||
|
||||
\define new-field-actions()
|
||||
<$action-sendmessage $message="tm-add-field" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldNameTiddler>get[text]] :map[<newFieldValueTiddler>get<currentTiddler>] }}}/>
|
||||
<$action-sendmessage $message="tm-add-field" $name={{{ [<newFieldNameTiddler>get[text]] }}} $value={{{ [<newFieldValueTiddler>get[text]] }}}/>
|
||||
<$action-deletetiddler $filter="[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<storeTitle>] [<searchListState>]"/>
|
||||
<$action-sendmessage $message="tm-focus-selector" $param=<<current-tiddler-new-field-selector>>/>
|
||||
\end
|
||||
@@ -42,7 +42,7 @@ $:/config/EditTemplateFields/Visibility/$(currentField)$
|
||||
<$button tooltip=<<lingo Fields/Add/Button/Hint>>>
|
||||
<$action-sendmessage $message="tm-add-field"
|
||||
$name=<<name>>
|
||||
$value={{{ [<newFieldValueTiddler>get<name>] }}}/>
|
||||
$value={{{ [<newFieldValueTiddler>get[text]] }}}/>
|
||||
<$action-deletetiddler $filter="[<newFieldNameTiddler>] [<newFieldValueTiddler>] [<storeTitle>] [<searchListState>]"/>
|
||||
<<lingo Fields/Add/Button>>
|
||||
</$button>
|
||||
@@ -66,7 +66,7 @@ $value={{{ [<newFieldValueTiddler>get<name>] }}}/>
|
||||
<$text text=<<currentField>>/>:</td>
|
||||
<td class="tc-edit-field-value">
|
||||
<$keyboard key="((delete-field))" actions="""<$action-deletefield $field=<<currentField>>/><$set name="currentTiddlerCSSescaped" value={{{ [<currentTiddler>escapecss[]] }}}><$action-sendmessage $message="tm-focus-selector" $param=<<current-tiddler-new-field-selector>>/></$set>""">
|
||||
<$transclude tiddler={{{ [<currentField>] :cascade[all[shadows+tiddlers]tag[$:/tags/FieldEditorFilter]!is[draft]get[text]] :and[!is[blank]else{$:/core/ui/EditTemplate/fieldEditor/default}] }}} />
|
||||
<$edit-text tiddler=<<currentTiddler>> field=<<currentField>> placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} tabindex={{$:/config/EditTabIndex}} cancelPopups="yes"/>
|
||||
</$keyboard>
|
||||
</td>
|
||||
<td class="tc-edit-field-remove">
|
||||
@@ -126,18 +126,16 @@ $value={{{ [<newFieldValueTiddler>get<name>] }}}/>
|
||||
</div>
|
||||
</$reveal>
|
||||
</div>
|
||||
<$let currentTiddler=<<newFieldValueTiddler>> currentField={{{ [<newFieldNameTiddler>get[text]] }}}>
|
||||
<span class="tc-edit-field-add-value tc-small-gap-right">
|
||||
<$set name="currentTiddlerCSSescaped" value={{{ [<currentTiddler>escapecss[]] }}}>
|
||||
<$keyboard key="((add-field))" actions=<<new-field-actions>>>
|
||||
<$transclude tiddler={{{ [<currentField>] :cascade[all[shadows+tiddlers]tag[$:/tags/FieldEditorFilter]!is[draft]get[text]] :and[!is[blank]else{$:/core/ui/EditTemplate/fieldEditor/default}] }}} />
|
||||
<$edit-text tiddler=<<newFieldValueTiddler>> tag="input" default="" placeholder={{$:/language/EditTemplate/Fields/Add/Value/Placeholder}} class="tc-edit-texteditor" tabindex={{$:/config/EditTabIndex}} cancelPopups="yes"/>
|
||||
</$keyboard>
|
||||
</$set>
|
||||
</span>
|
||||
<span class="tc-edit-field-add-button">
|
||||
<$macrocall $name="new-field"/>
|
||||
</span>
|
||||
</$let>
|
||||
</$vars>
|
||||
</div>
|
||||
</$fieldmangler>
|
||||
|
||||
@@ -2,4 +2,4 @@ title: $:/core/ui/MoreSideBar/Plugins/Languages
|
||||
tags: $:/tags/MoreSideBar/Plugins
|
||||
caption: {{$:/language/ControlPanel/Plugins/Languages/Caption}}
|
||||
|
||||
<$list filter="[!has[draft.of]plugin-type[language]sort[name]]" template="$:/core/ui/PluginListItemTemplate" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>
|
||||
<$list filter="[!has[draft.of]plugin-type[language]sort[description]]" template="$:/core/ui/PluginListItemTemplate" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>
|
||||
|
||||
@@ -2,4 +2,4 @@ title: $:/core/ui/MoreSideBar/Plugins/Plugins
|
||||
tags: $:/tags/MoreSideBar/Plugins
|
||||
caption: {{$:/language/ControlPanel/Plugins/Plugins/Caption}}
|
||||
|
||||
<$list filter="[!has[draft.of]plugin-type[plugin]sort[name]]" template="$:/core/ui/PluginListItemTemplate" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>
|
||||
<$list filter="[!has[draft.of]plugin-type[plugin]sort[description]]" template="$:/core/ui/PluginListItemTemplate" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}>>/>
|
||||
|
||||
@@ -2,4 +2,4 @@ title: $:/core/ui/MoreSideBar/Plugins/Theme
|
||||
tags: $:/tags/MoreSideBar/Plugins
|
||||
caption: {{$:/language/ControlPanel/Plugins/Themes/Caption}}
|
||||
|
||||
<$list filter="[!has[draft.of]plugin-type[theme]sort[name]]" template="$:/core/ui/PluginListItemTemplate" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>
|
||||
<$list filter="[!has[draft.of]plugin-type[theme]sort[description]]" template="$:/core/ui/PluginListItemTemplate" emptyMessage={{$:/language/ControlPanel/Plugins/Empty/Hint}}/>
|
||||
|
||||
@@ -6,7 +6,7 @@ caption: {{$:/language/SideBar/Open/Caption}}
|
||||
\define lingo-base() $:/language/CloseAll/
|
||||
|
||||
\define drop-actions()
|
||||
<$action-listops $tiddler=<<tv-story-list>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
<$action-listops $tiddler=<<tv-story-list>> $subfilter="+[insertbefore:currentTiddler<actionTiddler>]"/>
|
||||
\end
|
||||
|
||||
\define placeholder()
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
title: $:/config/FieldEditorFilters/
|
||||
tags: $:/tags/FieldEditorFilter
|
||||
|
||||
default: [[$:/core/ui/EditTemplate/fieldEditor/default]]
|
||||
@@ -17,7 +17,7 @@ tags: $:/tags/Macro
|
||||
\end
|
||||
|
||||
\define list-links-draggable-drop-actions()
|
||||
<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
<$action-listops $tiddler=<<targetTiddler>> $field=<<targetField>> $subfilter="+[insertbefore:currentTiddler<actionTiddler>]"/>
|
||||
\end
|
||||
|
||||
\define list-links-draggable(tiddler,field:"list",type:"ul",subtype:"li",class:"",itemTemplate)
|
||||
@@ -61,7 +61,7 @@ tags: $:/tags/Macro
|
||||
<$action-deletefield $field="list-after"/>
|
||||
</$list>
|
||||
<!-- Save the new order to the Tag Tiddler -->
|
||||
<$action-listops $tiddler=<<__tag__>> $field="list" $filter="+[enlist<order>] +[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
<$action-listops $tiddler=<<__tag__>> $field="list" $filter="+[enlist<order>] +[insertbefore:currentTiddler<actionTiddler>]"/>
|
||||
<!-- Make sure the newly added item has the right tag -->
|
||||
<!-- Removing this line makes dragging tags within the dropdown work as intended -->
|
||||
<!--<$action-listops $tiddler=<<actionTiddler>> $tags=<<__tag__>>/>-->
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
chapter.of: Extended Persistence
|
||||
created: 20140708084850294
|
||||
modified: 20210720193245000
|
||||
modified: 20140717181245449
|
||||
sub.num: 3
|
||||
tags: doc
|
||||
title: Syncadaptor
|
||||
|
||||
A module with ``module-type: syncadaptor`` provides functionality to get a list of tiddlers (this list is provided as ~SkinnyTiddlers, which are normal tiddlers without the text field) and to load, save and delete single tiddlers. A syncadaptor can also provide functions to login and logout so that syncadaptor modules can be used to synchronize tiddlers with a remote server.
|
||||
|
||||
The syncer module only uses one syncadaptor and honours a special [[system tiddler|System Tiddlers]] [[$:/config/SyncFilter]] containing a [[filter string|Tags and Filter Mechanism]]. Tiddlers matching this filter string are saved to the server with a syncadapter. It uses the [[WebServer API|https://tiddlywiki.com/#WebServer%20API%3A%20Get%20All%20Tiddlers]] to load modified tiddlers from the server, which returns only non-system tiddlers.
|
||||
The syncer module only uses one syncadaptor and honours a special [[system tiddler|System Tiddlers]] [[$:/config/SyncFilter]] containing a [[filter string|Tags and Filter Mechanism]]. Tiddlers matching this filter string are not saved to the server with a syncadapter. It uses the [[WebServer API|https://tiddlywiki.com/#WebServer%20API%3A%20Get%20All%20Tiddlers]] to load modified tiddlers from the server, which returns only non-system tiddlers.
|
||||
@@ -5,7 +5,7 @@ caption: {{$:/language/SideBar/Open/Caption}}
|
||||
\define lingo-base() $:/language/CloseAll/
|
||||
|
||||
\define drop-actions()
|
||||
<$action-listops $tiddler="$:/StoryList" $subfilter="+[insertbefore<actionTiddler>,<currentTiddler>]"/>
|
||||
<$action-listops $tiddler="$:/StoryList" $subfilter="+[insertbefore:currentTiddler<actionTiddler>]"/>
|
||||
\end
|
||||
|
||||
<$list filter="[list[$:/StoryList]]" history="$:/HistoryList" storyview="pop">
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
created: 20220219141117559
|
||||
list-before: $:/config/ViewTemplateTitleFilters/default
|
||||
modified: 20220220192507247
|
||||
tags: $:/tags/ViewTemplateTitleFilter
|
||||
title: $:/config/ViewTemplateTitleFilters/fr-default
|
||||
|
||||
[has[fr-title]then[$:/core/ui/ViewTemplate/title/fr-default]]
|
||||
@@ -1,8 +0,0 @@
|
||||
created: 20220219134855444
|
||||
modified: 20220220192530872
|
||||
title: $:/core/ui/ViewTemplate/title/fr-default
|
||||
|
||||
\whitespace trim
|
||||
<h2 class="tc-title">
|
||||
<$view field="fr-title"/>
|
||||
</h2>
|
||||
46
editions/fr-FR/tiddlers/$__core_ui_ViewTemplate_title.tid
Normal file
46
editions/fr-FR/tiddlers/$__core_ui_ViewTemplate_title.tid
Normal file
@@ -0,0 +1,46 @@
|
||||
created: 20141119191707140
|
||||
modified: 20141128165607841
|
||||
tags: $:/tags/ViewTemplate
|
||||
title: $:/core/ui/ViewTemplate/title
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
\define title-styles()
|
||||
fill:$(foregroundColor)$;
|
||||
\end
|
||||
\define config-title()
|
||||
$:/config/ViewToolbarButtons/Visibility/$(listItem)$
|
||||
\end
|
||||
<div class="tc-tiddler-title">
|
||||
<div class="tc-titlebar">
|
||||
<span class="tc-tiddler-controls">
|
||||
<$list filter="[all[shadows+tiddlers]tag[$:/tags/ViewToolbar]!has[draft.of]]" variable="listItem"><$reveal type="nomatch" state=<<config-title>> text="hide"><$transclude tiddler=<<listItem>>/></$reveal></$list>
|
||||
</span>
|
||||
<$set name="tv-wikilinks" value={{$:/config/Tiddlers/TitleLinks}}>
|
||||
<$link>
|
||||
<$set name="foregroundColor" value={{!!color}}>
|
||||
<span class="tc-tiddler-title-icon" style=<<title-styles>>>
|
||||
<$transclude tiddler={{!!icon}}/>
|
||||
</span>
|
||||
</$set>
|
||||
<$list filter="[all[current]removeprefix[$:/]]">
|
||||
<h2 class="tc-title" title={{$:/language/SystemTiddler/Tooltip}}>
|
||||
<span class="tc-system-title-prefix">$:/</span><$text text=<<currentTiddler>>/>
|
||||
</h2>
|
||||
</$list>
|
||||
<$list filter="[all[current]!prefix[$:/]]">
|
||||
<h2 class="tc-title">
|
||||
<$view field="fr-title">
|
||||
<$view field="title"/>
|
||||
</$view>
|
||||
</h2>
|
||||
</$list>
|
||||
</$link>
|
||||
</$set>
|
||||
</div>
|
||||
|
||||
<$reveal type="nomatch" text="" default="" state=<<tiddlerInfoState>> class="tc-tiddler-info tc-popup-handle" animate="yes" retain="yes">
|
||||
|
||||
<$transclude tiddler="$:/core/ui/TiddlerInfo"/>
|
||||
|
||||
</$reveal>
|
||||
</div>
|
||||
@@ -1,9 +0,0 @@
|
||||
created: 20170126143833588
|
||||
fr-title: obsolète
|
||||
modified: 20220303000909524
|
||||
title: $:/deprecated
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<<<
|
||||
L'obsolescence est, dans le domaine du développement logiciel, la situation où une ancienne fonctionnalité est considérée comme dépassée au regard d'un nouveau standard, et où, bien qu'elle soit conservée dans les versions plus récentes (par souci de rétro-compatibilité, et pour donner aux développeurs le temps de mettre leur code source en conformité), elle pourrait disparaître à l'avenir, si bien qu'il est recommandé d'en abandonner l'usage.
|
||||
<<< [[wikipedia|https://fr.wikipedia.org/wiki/Obsolescence_(informatique)]]
|
||||
@@ -36,4 +36,3 @@ type: text/vnd.tiddlywiki
|
||||
<!-- NO-BREAK SPACE Unicode: U+00A0, UTF-8: C2 A0, ISO-8859-1: A0 -->
|
||||
« $text$ »
|
||||
\end
|
||||
\define fr(cible) <$link to="$cible$"><$view tiddler="$cible$" field="fr-title">{{$cible$!!title}}</$view></$link>
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
created: 20150117152607000
|
||||
modified: 20220304140636794
|
||||
modified: 20150620212025034
|
||||
tags: $:/tags/Macro
|
||||
title: $:/editions/tw5.com/doc-macros
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -30,14 +30,14 @@ type: text/vnd.tiddlywiki
|
||||
\define .attr(_) <code class="doc-attr">$_$</code>
|
||||
\define .param(_) <code class="doc-param">$_$</code>
|
||||
|
||||
\define .mtitle(_) Macro $_$
|
||||
\define .otitle(_) Opérateur $_$
|
||||
\define .vtitle(_) Variable $_$
|
||||
\define .mtitle(_) $_$ Macro
|
||||
\define .otitle(_) $_$ Operator
|
||||
\define .vtitle(_) $_$ Variable
|
||||
|
||||
\define .link(_,to) <$link to="$to$">$_$</$link>
|
||||
\define .clink(_,to) <span class="doc-clink"><<.link """$_$""" "$to$">></span>
|
||||
\define .dlink(_,to) <$macrocall $name=".link" _=<<.def "$_$">> to="$to$">/>
|
||||
\define .dlink-ex(_,to) <a href="$to$" class="tc-tiddlylink-external" target="_blank" rel="noopener noreferrer"><<.def "$_$">></a>
|
||||
\define .dlink-ex(_,to) <a href="$to$" class="tc-tiddlylink-external" target="_blank"><<.def "$_$">></a>
|
||||
\define .flink(to) <$macrocall $name=".link" _=<<.field {{$to$!!caption}}>> to="$to$"/>
|
||||
\define .mlink(_,to) <$macrocall $name=".link" _=<<.var "$_$">> to=<<.mtitle "$_$">>/>
|
||||
\define .mlink2(_,to) <$macrocall $name=".link" _=<<.var "$_$">> to="$to$"/>
|
||||
@@ -63,8 +63,6 @@ type: text/vnd.tiddlywiki
|
||||
|
||||
\define .button(_) <span class="doc-button">{{$:/core/ui/Buttons/$_$!!caption}}</span>
|
||||
|
||||
\define .icon(_) <span class="doc-icon">{{$_$}}</span>
|
||||
|
||||
\define .tip(_) <div class="doc-icon-block"><div class="doc-block-icon">{{$:/core/images/tip}}</div> $_$</div>
|
||||
\define .warning(_) <div class="doc-icon-block"><div class="doc-block-icon">{{$:/core/images/warning}}</div> $_$</div>
|
||||
|
||||
@@ -83,12 +81,10 @@ C'est un exemple de tiddler. Voir [[Macros Table des matières (Exemples)|Table-
|
||||
\define .example(n,eg,egvar:NO-SUCH-VAR)
|
||||
<div class="doc-example">
|
||||
<$reveal default="$egvar$" type="match" text="NO-SUCH-VAR">
|
||||
<$macrocall $name="copy-to-clipboard-above-right" src="""$eg$"""/>
|
||||
<$codeblock code="""$eg$"""/>
|
||||
</$reveal>
|
||||
<$reveal default="$egvar$" type="nomatch" text="NO-SUCH-VAR">
|
||||
<!-- allow an example to contain """ -->
|
||||
<$macrocall $name="copy-to-clipboard-above-right" src=<<$egvar$>>/>
|
||||
<$codeblock code=<<$egvar$>>/>
|
||||
</$reveal>
|
||||
<$list filter="[title<.state-prefix>addsuffix{!!title}addsuffix[/]addsuffix[$n$]]" variable=".state">
|
||||
@@ -112,63 +108,3 @@ C'est un exemple de tiddler. Voir [[Macros Table des matières (Exemples)|Table-
|
||||
</$reveal>
|
||||
</$list>
|
||||
\end
|
||||
|
||||
\define .bad-example(eg)
|
||||
<table class="doc-bad-example">
|
||||
<tbody>
|
||||
<tr class="evenRow">
|
||||
<td><span class="tc-inline-style" style="font-size:1.5em;">⚠</span> Attention :<br> Ne faites pas comme ça !</td>
|
||||
<td>
|
||||
|
||||
$eg$
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
\end
|
||||
|
||||
\define .link-badge(text,link,colour)
|
||||
<a href=<<__link__>> class="doc-link-badge" style="background-color:$colour$;" target="_blank" rel="noopener noreferrer"><$text text=<<__text__>>/></a>
|
||||
\end
|
||||
|
||||
|
||||
\define .link-badge-added(link,colour:#ffe246) <<.link-badge "ajouté" """$link$""" """$colour$""">>
|
||||
\define .link-badge-addendum(link,colour:#fcc84a) <<.link-badge "addendum" """$link$""" """$colour$""">>
|
||||
\define .link-badge-extended(link,colour:#f9a344) <<.link-badge "étendu" """$link$""" """$colour$""">>
|
||||
\define .link-badge-fixed(link,colour:#ffa86d) <<.link-badge "corrigé" """$link$""" """$colour$""">>
|
||||
\define .link-badge-here(link,colour:#d88e63) <<.link-badge "ici" """$link$""" """$colour$""">>
|
||||
\define .link-badge-hide(link,colour:#9d959f) <<.link-badge "cacher" """$link$""" """$colour$""">>
|
||||
\define .link-badge-improved(link,colour:#7593c7) <<.link-badge "amélioré" """$link$""" """$colour$""">>
|
||||
\define .link-badge-modified(link,colour:#7f99c9) <<.link-badge "modifié" """$link$""" """$colour$""">>
|
||||
\define .link-badge-removed(link,colour:#a9aabc) <<.link-badge "retiré" """$link$""" """$colour$""">>
|
||||
\define .link-badge-renamed(link,colour:#b4b995) <<.link-badge "renommé" """$link$""" """$colour$""">>
|
||||
\define .link-badge-updated(link,colour:#91ba66) <<.link-badge "mis à jour" """$link$""" """$colour$""">>
|
||||
|
||||
\define .tiddler-fields(tiddler)
|
||||
<$tiddler tiddler=<<__tiddler__>>>
|
||||
<div class="doc-tiddler-fields">
|
||||
<h2>
|
||||
<$link>
|
||||
<span class="tc-tiddler-title-icon">{{||$:/core/ui/TiddlerIcon}}</span><$text text=<<currentTiddler>>/>
|
||||
</$link>
|
||||
</h2>
|
||||
<table class="tc-view-field-table">
|
||||
<tbody>
|
||||
<$list filter="[all[current]fields[]sort[title]] -title" template="$:/core/ui/TiddlerFieldTemplate" variable="listItem"/>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</$tiddler>
|
||||
\end
|
||||
|
||||
\define .banner-credits(credit,url)
|
||||
<img src=<<__url__>> width="140" style="float:left;margin-right:0.5em;"/>
|
||||
|
||||
$credit$
|
||||
|
||||
<div style="clear:both;">
|
||||
|
||||
</div>
|
||||
\end
|
||||
|
||||
<pre><$view field="text"/></pre>
|
||||
@@ -1,15 +0,0 @@
|
||||
created: 20161008085627406
|
||||
modified: 20220303000119560
|
||||
tags: $:/tags/Macro
|
||||
title: $:/editions/tw5.com/version-macros
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
\define .from-version(version)
|
||||
<span class="doc-from-version">{{$:/core/images/warning}} Depuis<<:>> $version$</span>
|
||||
\end
|
||||
|
||||
\define .deprecated-since(version, superseded:"TODO-Link")
|
||||
<$button to="Deprecated - What does it mean" class="doc-deprecated-version tc-btn-invisible">{{$:/core/images/warning}} Obsolète depuis<<:>> $version$ </$button>. Utilisez [[$superseded$]] à la place
|
||||
\end
|
||||
|
||||
<pre><$view field="text"/></pre>
|
||||
@@ -1,5 +1,5 @@
|
||||
created: 20150531155638729
|
||||
modified: 20220304175111424
|
||||
modified: 20150601094935758
|
||||
tags: $:/tags/Macro
|
||||
title: $:/editions/tw5.com/wikitext-macros
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -15,7 +15,7 @@ Affichera ceci :
|
||||
|
||||
$src$
|
||||
|
||||
Code HTML correspondant :
|
||||
... Génération du HTML :
|
||||
|
||||
$$$text/vnd.tiddlywiki>text/html
|
||||
$src$
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
created: 20131206154636572
|
||||
fr-title: Citations en bloc dans WikiText
|
||||
modified: 20220226225218713
|
||||
modified: 20150624090734021
|
||||
tags: WikiText
|
||||
title: Block Quotes in WikiText
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Il existe deux manières de produire des éléments HTML de type citation en bloc avec <<tw>>, l'une pour du contenu qui pourra s'afficher sur plusieurs lignes, et l'autre pour du contenu qui ne devra s'afficher que sur une seule ligne.
|
||||
Il existe deux manières de produire des éléments HTML de type citation en bloc avec <<tw>>, l'un pour du contenu qui pourra s'afficher sur plusieurs lignes, et l'autre pour du contenu qui ne devra s'afficher que sur une seule ligne.
|
||||
|
||||
! Citation en bloc multi-lignes
|
||||
|
||||
@@ -19,7 +19,7 @@ Ceci est un paragraphe de type citation en bloc
|
||||
|
||||
!! Attribution
|
||||
|
||||
Une attribution peut-être ajoutée au bloc comme ceci<<:>>
|
||||
Une attribution peut-être ajoutée au bloc comme ceci, comme ceci :
|
||||
|
||||
<<wikitext-example src:"<<<
|
||||
Les ordinateurs sont des vélos pour nos neurones
|
||||
@@ -28,29 +28,22 @@ Les ordinateurs sont des vélos pour nos neurones
|
||||
|
||||
!! Classes CSS
|
||||
|
||||
Les blocs peuvent hériter des propriétés de classes CSS<<:>>
|
||||
Les blocs peuvent hériter des propriétés de classes CSS:
|
||||
|
||||
<<wikitext-example src:"<<<.myClass.another-class
|
||||
Les systèmes d'exploitation sont des murs pour notre esprit
|
||||
<<< Personne
|
||||
">>
|
||||
|
||||
Le cœur de <<tw>> inclut la classe `tc-big-quote` qui représente les citations avec des guillemets géants<<:>>
|
||||
|
||||
<<wikitext-example src:"<<<.tc-big-quote
|
||||
Une citation dramatique
|
||||
<<< Quelqu'un d'important
|
||||
">>
|
||||
|
||||
! Bloc uniligne
|
||||
|
||||
La syntaxe des citations uniligne est une extension de la syntaxe des [[listes avec WikiText|Lists in WikiText]]. Par exemple<<:>>
|
||||
La syntaxe des citations uniligne est une extension de la syntaxe des [[Listes avec WikiText]]. Par exemple :
|
||||
|
||||
<<wikitext-example src:"> Bloc de citation uniligne
|
||||
> Un autre bloc uniligne
|
||||
">>
|
||||
|
||||
Vous pouvez imbriquer des blocs unilignes comme ceci<<:>>
|
||||
Vous pouvez agréger des blocs unilignes comme ceci :
|
||||
|
||||
```
|
||||
> Un bloc de niveau 1
|
||||
@@ -59,13 +52,13 @@ Vous pouvez imbriquer des blocs unilignes comme ceci<<:>>
|
||||
">>
|
||||
```
|
||||
|
||||
Ce qui affichera<<:>>
|
||||
Affichera :
|
||||
|
||||
> Un bloc de niveau 1
|
||||
>> Un bloc de niveau 2
|
||||
> Un autre bloc de niveau 1
|
||||
|
||||
Vous pouvez aussi mixer les citations en bloc avec d'autres types de listes. Par exemple<<:>>
|
||||
Vous pouvez mixer les citations en bloc avec d'autres types de listes. Par exemple :
|
||||
|
||||
<<wikitext-example src:"* Liste une
|
||||
** Liste deux
|
||||
|
||||
@@ -1,14 +1,11 @@
|
||||
caption: CamelCase
|
||||
created: 20130828185300000
|
||||
fr-title: Notation chameau
|
||||
modified: 20220304015529727
|
||||
modified: 20150623062412435
|
||||
tags: Definitions
|
||||
title: CamelCase
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
La <<gf "notation chameau">> (en anglais <<gf "//Camel Case//">>) est une convention de casse formée en passant en majuscule l'initiale de chaque mot d'une phrase et en supprimant les espaces entre les mots, ce qui forme un long mot composé. De nombreux wikis utilisent la <<fr CamelCase>> pour marquer les phrases qui produisent automatiquement un lien.
|
||||
La convention de casse Camel est formée à partir d'une phrase, dont on met en capital la première lettre de chaque mot et dont on supprime les espaces entre eux, formant ainsi un seul et unique mot. De nombreux wiki utilisent CamelCase pour marquer les phrases qui génèrent un lien de façon automatique.
|
||||
|
||||
Exemple :
|
||||
ExempleDeNotationChameauQuiProduitUnLienVersUnNouveauTiddlerPortantCeNom
|
||||
|
||||
NDT<<:>> Visuellement, l'alternance des lettres en majuscules et en minuscules dans les phrases en notation chameau produit une sorte d'ondulation, comme les bosses d'un chameau.
|
||||
ExempleDeCamelCaseQuiGénèreUnLienVersUnNouveauTiddlerPortantCeNom
|
||||
@@ -1,44 +1,33 @@
|
||||
caption: Blocs de code
|
||||
created: 20141016143834720
|
||||
fr-title: Blocs de code en WikiText
|
||||
modified: 20220226232420710
|
||||
modified: 20141116091520961
|
||||
tags: WikiText
|
||||
title: Code Blocks in WikiText
|
||||
fr-title: Blocs de code en WikiText
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Un bloc de code (<<.icon $:/core/images/mono-block>>) est délimité par trois caractères <<gf "accent grave">> <code>```</code> (connus en anglais sous le nom de <<gf "backticks">>)<<:>>
|
||||
Un bloc de code est délimité par trois caractères "accents graves" <code>```</code> (connus en anglais sous le nom de "backticks") :
|
||||
|
||||
<pre>
|
||||
Ceci est un paragraphe ordinaire.
|
||||
|
||||
```
|
||||
Ce texte aura une chasse fixe et ne sera pas `formaté`.
|
||||
```
|
||||
</pre>
|
||||
|
||||
Donnera le résultat suivant<<:>>
|
||||
<div class="tc-message-box">
|
||||
|
||||
Ceci est un paragraphe ordinaire.
|
||||
|
||||
```
|
||||
Ce texte aura une chasse fixe et ne sera pas `formaté`.
|
||||
```
|
||||
</div>
|
||||
|
||||
Pour être interprétés correctement, les trois accents graves doivent être placés au début d'une ligne et immédiatement suivis d'un retour à la ligne.
|
||||
|
||||
Souvenez-vous que le paragraphe précédent doit s'être terminé correctement, à l'aide de deux retours à la ligne. L'exemple suivant est donc ''faux''<<:>>
|
||||
|
||||
<pre>
|
||||
Ceci est un paragraphe ordinaire.
|
||||
```
|
||||
Ce texte aura une chasse fixe et ne sera pas `formaté`.
|
||||
```
|
||||
</pre>
|
||||
|
||||
La version correcte est<<:>>
|
||||
|
||||
<pre>
|
||||
Ceci est un paragraphe ordinaire.
|
||||
|
||||
```
|
||||
Ce texte aura une chasse fixe et ne sera pas `formaté`.
|
||||
```
|
||||
</pre>
|
||||
|
||||
Certains claviers traitent le backtick comme une [[touche morte|http://fr.wikipedia.org/wiki/Touche_morte]], le rendant difficile à taper. L'astuce est de taper 3 <code>`</code> suivis d'un espace. Une autre méthode consiste à taper 6 <code>`</code> d'affilée, puis de bouger le curseur en arrière trois fois pour taper ou coller le contenu du bloc.
|
||||
; Remarques
|
||||
* Pour être interprétés correctements, les trois backticks doivent être :
|
||||
** précédés de deux retours à la ligne (pour terminer correctement le paragraphe précédent) ;
|
||||
** au début de la ligne ;
|
||||
** immédiatement suivis d'un retour à la ligne.
|
||||
* Certains claviers traitent le backtick comme une [[touche morte|http://fr.wikipedia.org/wiki/Touche_morte]], le rendant difficile à taper. L'astuce est de taper 3 <code>`</code> suivis d'un espace. Une autre méthode consiste à taper 6 <code>`</code> d'affilée, puis de bouger le curseur en arrière trois fois pour taper ou coller le contenu du bloc.
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
created: 20210322151848025
|
||||
fr-title: Agrégateur de liens communautaire
|
||||
modified: 20220217174626896
|
||||
tags: Community
|
||||
title: Community Links Aggregator
|
||||
|
||||
L'Agrégateur de liens communautaire est une collection fréquemment mise à jour de liens vers des ressources utiles et intéressantes sur <<tw>>, dénichés par notre équipe d'éditeurs communautaires. Le site agrège les liens soigneusement sélectionnés par les membres de la communauté <<tw>>. Il permet de visualiser les liens les plus récents, et de les explorer par catégorie et chronologiquement.
|
||||
|
||||
https://links.tiddlywiki.com/
|
||||
|
||||
Plus les contributeurs sont nombreux, et mieux le site fonctionne<<!>> Comme chacun n'est pas tenu de recenser chaque lien qui passe, la pression individuelle sur les contributeurs est réduite. L'agrégation des liens réduit aussi l'impact d'une erreur, par exemple d'une erreur de catégorisation<<:>> si un contributeur catégorise un lien dans la mauvaise rubrique, le site permet de voir qu'une seule personne a utilisé cette rubrique, alors que la majorité utilise la catégorie appropriée. Ainsi, nous espérons qu'une sorte de //intelligence collective// émergera, avec un consensus sur la manière la plus utile de décrire et de catégoriser les liens.
|
||||
@@ -1,12 +1,10 @@
|
||||
created: 20130909151600000
|
||||
fr-title: Communauté
|
||||
modified: 20220217155910582
|
||||
created: 20130909151600000
|
||||
modified: 20141019103047540
|
||||
tags: TableOfContents
|
||||
title: Community
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<<.tip "Les liens les plus utiles et les plus récents sont maintenant regroupés dans [[l’Agrégateur de liens communautaire|Community Links Aggregator]].">>
|
||||
C'est ici que nous rassemblons les dernières productions les plus utiles en provenance de la communauté <<tw>>.
|
||||
|
||||
Lorsque tous les liens pertinents auront été transférés, ces entrées seront retirées du site tiddlywiki.com.
|
||||
|
||||
<<tabs "Forums Latest Tutorials [[Community Editions]] [[Community Plugins]] [[Community Themes]] [[Community Palettes]] [[Other Resources]] Examples Articles Meetups" "Latest">>
|
||||
<<tabs "Forums Latest Tutorials Resources Examples Articles Meetups" "Latest">>
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
created: 20140904140300000
|
||||
fr-title: Créer et modifier des tiddlers
|
||||
modified: 20220221002250215
|
||||
modified: 20150620081426868
|
||||
tags: [[Working with TiddlyWiki]]
|
||||
title: Creating and editing tiddlers
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
! Créer des tiddlers
|
||||
|
||||
Vous créez un tiddler soit en cliquant sur le bouton <<.icon $:/core/images/new-button>> du menu latéral, soit en cliquant sur un lien vers un tiddler absent. Les liens vers les tiddlers absents sont affichés en [[italique bleu]].
|
||||
Vous créez un tiddler soit en cliquant sur le bouton {{$:/core/images/new-button}} du menu latéral, soit en cliquant sur un lien vers un tiddler absent. Les liens vers les tiddlers absents sont affichés en [[italique bleu]].
|
||||
|
||||
Voir aussi<<:>>
|
||||
|
||||
@@ -15,23 +15,23 @@ Voir aussi<<:>>
|
||||
|
||||
! Modifier des tiddlers
|
||||
|
||||
Pour modifier un tiddler existant, cliquez sur le bouton <<.icon $:/core/images/edit-button>> en haut et à droite du tiddler.
|
||||
Pour modifier un tiddler existant, cliquez sur le bouton {{$:/core/images/edit-button}} en haut et à droit du tiddler.
|
||||
|
||||
!! Mode ébauche
|
||||
|
||||
Quand vous créez un nouveau tiddler ou modifiez un existant, le tiddler passe en mode ébauche. Ce mode propose un panneau de contrôle pour apporter différents types de modifications. Il a plusieurs parties, de bas en haut<<:>>
|
||||
Quand vous créez un nouveau tiddler ou modifiez un existant, le tiddler passe en mode ébauche. Ce qui propose un panneau de contrôle pour apporter différents types de modifications. Il a plusieurs parties, de bas en haut<<:>>
|
||||
|
||||
*''Le champ titre'' - pour modifier le titre du tiddler
|
||||
*''Le sélecteur de tags'' - pour ajouter ou supprimer des tags. Lors de la saisie d'un tag, une liste déroulante affiche les tags correspondant sous forme de complétions. Vous pouvez choisir dans cette liste ou créer un tag entièrement nouveau. Puis cliquez sur le bouton ''ajouter'' ou utilisez la touche <kbd>Entrée</kbd> pour ajouter le tag au tiddler. Chaque tag est affiché sous forme d'une pilule colorée. Cliquez le "×" d'une pilule pour supprimer le tag
|
||||
*''La zone de texte'' - pour modifier le contenu principal du tiddler. Cliquez sur le bouton ''afficher la prévisualiation'' (<<.icon $:/core/images/preview-closed>> / <<.icon $:/core/images/preview-open>>) pour visualiser l'apparence des modifications
|
||||
*''Le sélecteur de type'' - pour afficher vos tiddlers dans un format spécial, comme une image. Voir ContentType pour la liste des options. Le choix par défaut est `text/vnd.tiddlywiki`, qui indique que le tiddler contient du <<fr WikiText>>
|
||||
*''Le sélecteur de champ'' - pour ajouter ou supprimer des champs du tiddler. Par exemple, si vous modifiez un tiddler utilisé comme tag par d'autres tiddlers, vous pouvez ajouter un [[champ ''list''|ListField]] pour modifier l'ordre dans lequel ces tiddlers seront listés
|
||||
*''Le sélecteur de tags'' - pour ajouter ou supprimer des tags. Lors de la saisie d'un tag, une liste déroulante affiche les tags correspondant sous forme de complétions. Vous pouvez choisir dans cette liste ou créer un tag entièrement nouveau. Puis cliquez sur le bouton ''ajouter'' pour ajouter le tag au tiddler. Chaque tag est affiché sous forme d'une pilule colorée. Cliquez le "×" d'un pilule pour supprimer le tag
|
||||
*''La zone de texte'' - pour modifier le contenu principal du tiddler. Cliquez sur le bouton ''afficher la prévisualiation'' pour visualiser l'apparence des modifications
|
||||
*''Le sélecteur de type'' - pour afficher vos tiddlers dans un format spécial, comme une image. Voir ContentType pour la liste des options. Le choix par défaut est `text/vnd.tiddlywiki`, qui indique que le tiddler contient du [[WikiTexte|WikiText]]
|
||||
*''Le sélecteur de champ'' - pour ajouter ou supprimer des champs du tiddler. Par exemple, si vous modifiez un tiddler utilisé comme tag par d'autres tiddlers, vous pouvez ajouter un [[champ ''list''|ListField]] pour modifier l'ordre dans lequel ces tiddlers seront listé
|
||||
|
||||
|
||||
! Confirmer, annuler ou supprimer
|
||||
|
||||
Quand vous avez terminé les modifications, cliquez sur le bouton en haut et à droite du tiddler<<:>>
|
||||
|
||||
*Le bouton ''confirmer'' (<<.icon $:/core/images/done-button>>) mémorise vos modifications dans le tiddler et quitte le mode ébauche. Si votre wiki est configuré en <<fr AutoSave>>, vos modifications seront enregistrées de façon permanente. Autrement elles sont mémorisées temporairement dans votre navigateur web, et vous les perdrez si vous fermez votre page ~TiddlyWiki sans avoir cliqué sur le bouton principal pour ''Enregistrer'' (<<.icon $:/core/images/save-button>>) dans le menu latéral.
|
||||
*Le bouton ''annuler'' (<<.icon $:/core/images/cancel-button>>) ignore vos modifications (après demande de confirmation) et quitte le mode ébauche.
|
||||
*Le bouton ''supprimer'' (<<.icon $:/core/images/delete-button>>) supprime tout le tiddler (après demande de confirmation).
|
||||
*Le bouton ''confirmer'' ({{$:/core/images/done-button}}) mémorise vos modifications dans le tiddler et quitte le mode ébauche. Si votre wiki est configuré en [[AutoSave]], vos modifications seront enregistrées de façon permanente. Autrement elles sont mémorisées temporairement dans votre navigateur web, et vous les perdrez si vous fermez votre page ~TiddlyWiki sans avoir cliqué sur le bouton principal pour ''Enregistrer'' {{$:/core/images/save-button}} dans le menu latéral.
|
||||
*Le bouton ''annuler'' ({{$:/core/images/cancel-button}}) ignore vos modifications (après demande de confirmation) et quitte le mode ébauche.
|
||||
*Le bouton ''supprimer'' ({{$:/core/images/delete-button}}) supprime tout le tiddler (après demande de confirmation).
|
||||
@@ -1,17 +0,0 @@
|
||||
created: 20170126142116898
|
||||
fr-title: Obsolète - définition
|
||||
modified: 20220303002330037
|
||||
title: Deprecated - What does it mean
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Avant tout<<:>> ''Restez calme<<!>>''
|
||||
|
||||
{{$:/deprecated}}
|
||||
|
||||
Pour <<tw>>, cela signifie que vous ne devriez plus utiliser ce mécanisme pour du nouveau contenu, ''et que vous devriez mettre à jour votre contenu existant''<<!>>
|
||||
|
||||
Les fonctionnalités obsolètes sont identifiées avec un style particulier. Voir<<:>> <<fr "How to apply custom styles by tag">>
|
||||
|
||||
''Tiddlers étiquetés `$:/deprecated`'' :
|
||||
|
||||
><<list-links "[tag[$:/deprecated]else[(aucun)]]">>
|
||||
@@ -1,17 +1,12 @@
|
||||
created: 20150412191004348
|
||||
fr-title: Développeurs
|
||||
modified: 20220217174800697
|
||||
modified: 20150621192259510
|
||||
tags: Community
|
||||
title: Developers
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Plusieurs ressources permettent aux développeurs d'en apprendre plus sur <<tw>>, de collaborer et de discuter de son développement.
|
||||
Les développeurs disposent de plusieurs ressources pour discuter et contribuer au développement de TiddlyWiki.
|
||||
|
||||
* [[tiddlywiki.com/dev|https://tiddlywiki.com/dev]] est la documentation officielle des développeurs
|
||||
* Vous pouvez vous impliquer dans le développement de <<tw>> sur [[GitHub|https://github.com/Jermolene/TiddlyWiki5]]
|
||||
** Les [[discussions|https://github.com/Jermolene/TiddlyWiki5/discussions]] sont disponibles pour les questions ouvertes et les questions/réponses.
|
||||
** Les [[problèmes|https://github.com/Jermolene/TiddlyWiki5/issues]] permettent de signaler les bogues et de proposer de nouvelles idées spécifiques, réalistes et raisonnables
|
||||
* L'ancien groupe ~TiddlyWikiDev sur Google Group est maintenant fermé, et remplacé par les [[discussions GitHub|https://github.com/Jermolene/TiddlyWiki5/discussions]], mais une archive reste disponible<<:>> https://groups.google.com/group/TiddlyWikiDev
|
||||
** Une fonctionnalité de recherche étendue du groupe est disponible sur [[mail-archive.com|https://www.mail-archive.com/tiddlywikidev@googlegroups.com/]]
|
||||
* Pour les dernières nouvelles, suivez [[@TiddlyWiki sur Twitter|http://twitter.com/#!/TiddlyWiki]]
|
||||
* Tchatchez sur https://gitter.im/TiddlyWiki/public (une salle dédiée au développement arrive bientôt)
|
||||
* [[tiddlywiki.com/dev|https://tiddlywiki.com/dev]] la documentation officielle de développement
|
||||
* [[TiddlyWikiDev group|http://groups.google.com/group/TiddlyWikiDev]] pour les discussions au sujet du développement de TiddlyWiki
|
||||
* https://github.com/Jermolene/TiddlyWiki5 pour le code source et l'activité de développement
|
||||
|
||||
@@ -1,11 +0,0 @@
|
||||
created: 20130825154900000
|
||||
modified: 20220219164816011
|
||||
tags: Definitions
|
||||
title: Federatial
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Federatial Limited est une entreprise de consultants en logiciel fondée par JeremyRuston, le créateur de <<tw>>.
|
||||
|
||||
Federatial aide les organisations à explorer de nouveaux concepts d'interaction utilisateur grâce au prototypage rapide d'outils sophistiqués basés sur le web.
|
||||
|
||||
Pour plus d'informations, visitez [[https://federatial.com/]] et [[https://twitter.com/federatial]].
|
||||
@@ -1,23 +1,23 @@
|
||||
caption: Formatage
|
||||
created: 20141016142259705
|
||||
fr-title: Mise en forme avec WikiText
|
||||
modified: 20220226233811803
|
||||
modified: 20150601093436425
|
||||
tags: WikiText
|
||||
title: Formatting in WikiText
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Voici les formatages de caractères disponibles en [[WikiTexte|WikiText]]<<:>>
|
||||
Voici les formatages de texte disponibles en [[WikiTexte|WikiText]] :
|
||||
|
||||
|Format |Résultat |Icône |h
|
||||
|<code>`code`</code><br><code>``code contenant du `code` ``</code> |`code`<br>``code contenant du `code` `` |<<.icon $:/core/images/mono-line>> |
|
||||
|`''gras''` |texte en ''gras'' |<<.icon $:/core/images/bold>> |
|
||||
|`//italique//` |texte en //italique// |<<.icon $:/core/images/italic>> |
|
||||
|`__souligné__` |texte __souligné__ |<<.icon $:/core/images/underline>> |
|
||||
|`~~barré~~` |texte ~~barré~~ |<<.icon $:/core/images/strikethrough>> |
|
||||
|`^^exposant^^` |texte en ^^exposant^^ |<<.icon $:/core/images/superscript>> |
|
||||
|`,,indice,,` |texte en ,,indice,, |<<.icon $:/core/images/subscript>> |
|
||||
|Format |Résultat |h
|
||||
|`''gras''` |texte en ''gras'' |
|
||||
|`//italique//` |texte en //italique// |
|
||||
|`__souligné__` |texte __souligné__ |
|
||||
|`~~barré~~` |texte ~~barré~~ |
|
||||
|<code>`code`</code><br><code>``code contenant du `code` ``</code> |`code`<br>``code contenant du `code` `` |
|
||||
|`^^exposant^^` |texte en ^^exposant^^ |
|
||||
|`,,indice,,` |texte en ,,indice,, |
|
||||
|
||||
Voir aussi<<:>> [[WikiTexte : blocs de code|Code Blocks in WikiText]]
|
||||
Voir aussi : [[WikiTexte : blocs de code|Code Blocks in WikiText]]
|
||||
|
||||
; Remarque
|
||||
: Si le code inclus est à la fin du code contenant, l'espace entre le <code>`</code> et les <code>``</code> est nécessaire.
|
||||
* Si le code inclus est à la fin du code contenant, l'espace entre le <code>`</code> et les <code>``</code> est nécessaire.
|
||||
|
||||
@@ -1,39 +1,25 @@
|
||||
caption: Forum
|
||||
created: 20140721121924384
|
||||
fr-title: Forum
|
||||
modified: 20220217174719926
|
||||
modified: 20150614155153966
|
||||
tags: Community
|
||||
title: Forums
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
! Forum en français
|
||||
! Utilisateurs
|
||||
|
||||
La communauté francophone sur <<tw>> a son forum, venez contribuer<<!>>
|
||||
Les groupes de discussion ~TiddlyWiki sont des listes de publipostage pour discuter de ~TiddlyWiki<<:>> demandes d'aide, annonces de nouvelles version et plugins, échanges sur les nouvelles fonctionnalités, ou simples partages d'expériences. Vous pouvez participer via le site web associé, ou souscrire par email.
|
||||
|
||||
https://forum.tiddlywiki.fr/
|
||||
* Le groupe principal de ~TiddlyWiki<<:>> http://groups.google.com/group/TiddlyWiki
|
||||
*> Notez qu'il n'est nul besoin d'avoir un compte Google pour vous joindre aux groupes de discussion. Souscrire par l'envoi d'un email à mailto:tiddlywiki+subscribe@googlegroups.com ou mailto:tiddlywikidev+subscribe@googlegroups.com.
|
||||
* Visualiser les enregistrements de nos réguliers [[TiddlyWiki Hangouts]]
|
||||
* Suivre [[@TiddlyWiki sur Twitter|http://twitter.com/TiddlyWiki]] pour les dernières nouvelles.
|
||||
|
||||
! Forums officiels
|
||||
! Développeurs
|
||||
|
||||
Le nouveau forum officiel pour discuter de <<tw>><<:>> demandes d'aide, annonces de nouvelles version et plugins, échanges sur les nouvelles fonctionnalités, ou simples partages d'expériences. Vous pouvez participer via le site web associé, ou souscrire par email.
|
||||
* Le groupe TiddlyWikiDev pour les dévelopeurs<<:>> http://groups.google.com/group/TiddlyWikiDev
|
||||
*> Notez qu'il n'est nul besoin d'avoir un compte Google pour vous joindre aux groupes de discussion. Souscrire par l'envoi d'un email à mailto:tiddlywiki+subscribe@googlegroups.com ou mailto:tiddlywikidev+subscribe@googlegroups.com.
|
||||
* Suivre [[@TiddlyWiki sur Twitter|http://twitter.com/TiddlyWiki]] pour les dernières nouvelles.
|
||||
* Impliquez-vous dans le [[développement sur GitHub|https://github.com/Jermolene/TiddlyWiki5]]
|
||||
|
||||
https://talk.tiddlywiki.org/
|
||||
|
||||
Notez que talk.tiddlywiki.org est un service communautaire que nous hébergeons et maintenons nous-mêmes. Les modestes frais de mise à disposition du site sont couverts par les contributions de la communauté.
|
||||
|
||||
Pour le confort de la communauté, l'ancien groupe <<tw>>, hébergé sur Google Groups depuis 2005, reste fonctionnel.
|
||||
|
||||
https://groups.google.com/group/TiddlyWiki
|
||||
|
||||
! Forums des développeurs
|
||||
|
||||
{{Developers}}
|
||||
|
||||
! Autres forums
|
||||
|
||||
* [[TiddlyWiki Subreddit|https://www.reddit.com/r/TiddlyWiki5/]]
|
||||
* Tchatchez avec Gitter sur https://gitter.im/TiddlyWiki/public<<!>>
|
||||
* Tchatchez avec Discord sur https://discord.gg/HFFZVQ8
|
||||
|
||||
!! Documentation
|
||||
|
||||
Il existe un groupe de discussion spécialement dédié aux initiatives d'amélioration de la documentation<<:>> https://groups.google.com/group/tiddlywikidocs
|
||||
Les nouvelles versions de TiddlyWiki, TiddlyDesktop et TiddlyFox sont annoncés par les groupes de discussion et [[Twitter|https://twitter.com/TiddlyWiki]] (vous pouvez aussi souscrire au flux Atom/RSS des [[versions de TiddlyWiki sur GitHub|https://github.com/jermolene/tiddlywiki5/releases.atom]])
|
||||
|
||||
@@ -1,32 +1,30 @@
|
||||
created: 20131129090249275
|
||||
fr-title: La mise en route
|
||||
modified: 20220217175123712
|
||||
modified: 20160526131021571
|
||||
tags: [[Working with TiddlyWiki]]
|
||||
title: GettingStarted
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
\define default-platform()
|
||||
GettingStarted - $(browser-name)$
|
||||
\end
|
||||
Instructions pour bien commencer avec <<tw>>, selon les différentes plates-formes et configurations supportées.
|
||||
|
||||
Téléchargez un <<tw>> vide en cliquant sur ce bouton<<:>> {{$:/editions/fr-FR/snippets/download-empty-button}}
|
||||
<$set name="browser-name" value={{$:/info/browser/name}}>
|
||||
<$macrocall $name="tabs" state="$:/state/tabs/platform" tabsList="[prefix[GettingStarted - ]]" default=<<default-platform>> class="tc-vertical"/>
|
||||
</$set>
|
||||
|
||||
L'étape suivante consiste à choisir une solution d'enregistrement des modifications. De nombreuses méthodes sont disponibles, chacune avec ses atouts et ses limites. Cliquez sur la fiche d'une méthode pour voir plus d'informations la concernant. Vous pouvez aussi cocher une case de plateformes et de navigateur pour afficher les solutions qui fonctionnent pour cette combinaison.
|
||||
Autres informations :
|
||||
|
||||
<<.warning "N'utilisez pas le menu ''Fichier''/''Enregistrer'' du navigateur internet pour enregistrer vos modifications (ça ne marche pas)<<!>>">><br/><br/>
|
||||
|
||||
{{Saving}}
|
||||
|
||||
|
||||
|
||||
Autres informations<<:>>
|
||||
|
||||
* [[Protéger le contenu avec un mot de passe|Encryption]] grâce au système de chiffrement intégré à <<tw>><<;>>
|
||||
* [[Enregistrer avec Tiddlyspot|Saving on TiddlySpot]], un service gratuit qui vous permet d'utiliser <<tw>> en ligne<<;>>
|
||||
* Sauvegarde avec TiddlyDesktop, une application de bureautique dédiée au travail avec <<tw>><<;>>
|
||||
* Vous pouvez aussi télécharger ce <<tw>> complet, avec toute sa documentation<<:>><div>
|
||||
* [[Cryptage|Encryption]] explique comment utiliser le système de cryptage intégré à <<tw>> pour protéger votre contenu avec un mot de passe ;
|
||||
* [[Enregistrer avec Tiddlyspot|Saving on TiddlySpot]], un service gratuit qui vous permet d'utiliser <<tw>> en ligne ;
|
||||
* Sauvegarde avec TiddlyDesktop, une application de bureautique dédiée au travail avec <<tw>> ;
|
||||
* Vous pouvez aussi télécharger ce <<tw>> complet, avec toute sa documentation<<dp>><div>
|
||||
|
||||
<<<
|
||||
{{$:/snippets/download-wiki-button}}
|
||||
|
||||
Si le bouton ne fonctionne pas, sauvegardez ce lien<<:>>
|
||||
Si le bouton ne fonctionne pas, sauvegardez ce lien :
|
||||
|
||||
<a href="https://tiddlywiki.com/languages/fr-FR/index.html" download="index.html">~https://tiddlywiki.com/languages/fr-FR/index.html</a>
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
created: 20141217193625476
|
||||
modified: 20220304170551125
|
||||
modified: 20150624092403261
|
||||
title: Glossaire en-GB -> fr-FR
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
@@ -8,11 +8,9 @@ type: text/vnd.tiddlywiki
|
||||
|background|arrière plan||
|
||||
|bug|bogue||
|
||||
|core |noyau ||
|
||||
|dominant append|ajout prépondérant|//ajouté par prépondérance//|
|
||||
|draft|ébauche||
|
||||
|empty édition |édition basique ||
|
||||
|encryption|cryptage||
|
||||
|filter run|séquence de filtre||
|
||||
|fixed|corrigé||
|
||||
|flexible|souple|maléable |
|
||||
|improved|amélioré||
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
caption: HTML
|
||||
created: 20141017141153174
|
||||
fr-title: HTML dans le WikiTexte
|
||||
modified: 20220227020401008
|
||||
modified: 20141118192457947
|
||||
tags: WikiText
|
||||
title: HTML in WikiText
|
||||
fr-title: HTML dans le WikiTexte
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
! Balises HTML et commentaires
|
||||
|
||||
Les balises et les commentaires HTML peuvent être utilisées directement en [[WikiTexte|WikiText]]. Par exemple<<:>>
|
||||
Les balises HTML (dont les commentaires `<!-- -->`) peuvent être utilisées directement en [[WikiTexte|WikiText]] :
|
||||
|
||||
<<wikitexte-exemple "<article class='hello'>
|
||||
Ceci est un simple bloc de texte. HelloThere
|
||||
@@ -16,60 +14,47 @@ Ceci est un simple bloc de texte. HelloThere
|
||||
</article>">>
|
||||
|
||||
; Remarque
|
||||
: Par conséquent, un mot écrit entre "chevrons" `< >` sera interprété comme une balise HTML, ce qui peut entraîner des effets de bord (notamment à cause de l'inexistence de la balise fermante).<br>À la place, mieux vaut utiliser le [[code HTML|Codes HTML]] des caractères "chevrons" : `<` et `>`
|
||||
* Par conséquent, un mot écrit entre "chevrons" `< >` sera interprété comme une balise HTML, ce qui peut entraîner des effets de bord (notamment à cause de l'inexistence de la balise fermante).<br>À la place, mieux vaut utiliser le [[code HTML|Codes HTML]] des caractères "chevrons" : `<` et `>`
|
||||
|
||||
!! Commentaires //Pragma//
|
||||
! Interprétation du contenu
|
||||
|
||||
<<.from-version 5.2.0>> Les commentaires peuvent maintenant être librement entremêlés avec les pragmas ou bien à l'intérieur du corps d'un bloc de wikitexte.
|
||||
Par défaut, le contenu d'un élément HTML est interprété en mode texte ("inline mode" en anglais). Cela signifie que les [[formatages de texte|Formatting in WikiText]] (comme du gras ou un exposant) s'appliquent, mais que les formatages de type bloc (comme les tables, les listes ou les titres) ne sont pas reconnus.
|
||||
|
||||
```
|
||||
<!-- NOUVEAU ! : Commentaire qui décrit la macro -->
|
||||
\define test()
|
||||
Un peu de texte <!-- commentaire en ligne -->
|
||||
\end
|
||||
Pour que le contenu de l'élément HTML soit interprété en mode bloc ("block mode" en anglais), il faut faire suivre la balise ouvrante de deux retours à la ligne.
|
||||
|
||||
<<test>>
|
||||
```
|
||||
<<wikitexte-exemple "<article class='hello'>
|
||||
Ceci est du contenu en ''mode texte''.
|
||||
|
||||
! Important
|
||||
* Les listes ne sont pas reconnues
|
||||
|
||||
<<.tip """[[Les Widgets utilisent la même syntaxe que les balises HTML|Widgets in WikiText]], donc les informations suivantes s'appliquent aussi à eux.""">>
|
||||
-- pas plus que les paragraphes !
|
||||
</article>
|
||||
|
||||
! Mode //bloc// ou mode //texte// ?
|
||||
---
|
||||
<article class='hello'>
|
||||
|
||||
Pour que le contenu d'un élément HTML soit [[interprété|WikiText Parser Modes]] en [[mode bloc|Block Mode WikiText]], la balise ouvrante doit être suivie par deux retours à la ligne.
|
||||
Ceci est du contenu en ''mode bloc''.
|
||||
|
||||
Sans les deux retours à la ligne, le contenu des balises sera [[interprété|WikiText Parser Modes]] en [[mode texte|Inline Mode WikiText]], ce qui signifie que les formatages de mode bloc tels que les tableaux, les listes et les titres ne seront pas reconnus.
|
||||
|
||||
Voir aussi <<fr "WikiText parser mode: HTML examples">> et <<fr "WikiText parser mode transitions">>.
|
||||
|
||||
! Éléments auto-fermants
|
||||
|
||||
Les balises suivantes sont traitées comme si elles étaient vides, ce qui signifie que `<balise>` est traitée comme si c'était `<balise/>`, et qu'aucune balise de fermeture `</balise>` n'est nécessaire. Mais si la balise fermante existe elle est ignorée et traitée comme du texte.
|
||||
|
||||
* `<area>`, `<base>`, `<br>`, `<col>`, `<command>`, `<embed>`, `<hr>`, `<img>`, `<input>`, `<keygen>`, `<link>`, `<meta>`, `<param>`, `<source>`, `<track>`, `<wbr>`
|
||||
|
||||
Si vous ne fermez pas n'importe quelle autre balise HTML, <<tw>> se comportera comme si les balises manquantes étaient déportées à la fin du tiddler.
|
||||
* Les listes sont reconnues
|
||||
</article>">>
|
||||
|
||||
! Attributs
|
||||
|
||||
Par extension à la syntaxe conventionnelle HTML, les attributs des éléments ou widgets peuvent être écrits de différentes façons<<:>>
|
||||
Les attributs d'une balise HTML peuvent être spécifiés littéralement, à l'aide d'une [[transclusion|Transclusion in WikiText]] ou par l'invocation d'une [[macro|Macros in WikiText]] :
|
||||
|
||||
* en tant que chaîne littérale
|
||||
* en tant que transclusion de <<fr TextReference>>
|
||||
* en tant que transclusion de [[macro ou de variable|Macros in WikiText]]
|
||||
* en tant que résultat d'une [[expression de filtre|Filter Expression]]
|
||||
Par exemple, ici la valeur de l'attribut `href` sera égale à la valeur du tiddler ~MonLienDestination :
|
||||
|
||||
!! Valeurs littérales d'attributs
|
||||
```
|
||||
<a href={{MonLienDestination}}>label du lien</a>
|
||||
```
|
||||
|
||||
Les valeurs littérales d'attribut peuvent utiliser différents styles de ponctuation<<:>>
|
||||
Et là, l'attribut est spécifié en invoquant une macro (qui génère elle-même un lien qui peut être paramétré) :
|
||||
|
||||
* Guillemets simples (c-à-d `attribut='valeur'`)
|
||||
* Guillemets doubles (c-à-d `attribut="valeur"`)
|
||||
* Triples guillemets doubles (c-à-d `attribut="""valeur"""`)
|
||||
* Aucune ponctuation n'est nécessaire pour les valeurs qui ne contiennent pas d'espace (c-à-d `attribut=valeur`)
|
||||
```
|
||||
<a href=<<MaMacro "valeur du paramètre">>>label du lien</a>
|
||||
```
|
||||
|
||||
Les valeurs littérales d'attribut peuvent contenir des retours à la ligne. Par exemple<<:>>
|
||||
Les valeurs d'attribut littérales peuvent contenir des retours à la ligne (ignoré par le HTML) :
|
||||
|
||||
```
|
||||
<div data-address="Maison Souris,
|
||||
@@ -77,43 +62,9 @@ Les valeurs littérales d'attribut peuvent contenir des retours à la ligne. Par
|
||||
Ratville"/>
|
||||
```
|
||||
|
||||
L'utilisation des triples guillemets doubles `"""` permet de spécifier des valeurs d'attributs qui contiennent des caractères "guillemet double"<<:>>
|
||||
L'utilisation de trois caractères "guillemets doubles" `"""` permet de spécifier des valeurs d'attributs qui contiennent un seul caractère "guillemet double" :
|
||||
|
||||
```
|
||||
<div data-address="""Maison "Souris",
|
||||
3 rue des rongeurs,
|
||||
Ratville"""/>
|
||||
```
|
||||
|
||||
!! Valeurs d'attributs par transclusion
|
||||
|
||||
Les valeurs d'attributs par transclusion sont encadrées par des doubles accolades autour d'une <<fr TextReference>>, par exemple<<:>>
|
||||
|
||||
```
|
||||
attr={{tiddler}}
|
||||
attr={{!!field}}
|
||||
attr={{tiddler!!field}}
|
||||
```
|
||||
<<.warning "La valeur de l'attribut sera le résultat exact de la transclusion, sans aucune interprétation supplémentaire de <<fr WikiText>>. Toute syntaxe de wiki dans ce résultat sera laissée en l'état.">>
|
||||
|
||||
!! Valeur d'attribut par variable
|
||||
|
||||
Les valeurs d'attributs par variable sont encadrées par des doubles crochets autour d'un [[appel de macro|Macro Calls in WikiText]], par exemple<<:>>
|
||||
|
||||
```
|
||||
<div title=<<MaMacro "Jacques">>>
|
||||
...
|
||||
</div>
|
||||
```
|
||||
<<.warning "Le texte de la définition de la macro est retrouvé et la substitution des arguments a lieu (c-à-d la syntaxe <<.param $param$>> et <<.param $(...)$>>). Le texte résultant est affecté à la valeur de l'attribut. Toute syntaxe wiki dans ce texte, y-compris d'autres appels de macros ou des références de variables, sera laissée en l'état.">>
|
||||
|
||||
!! Valeurs d'attributs par filtre
|
||||
|
||||
Les valeurs d'attributs par filtre sont encadrées par des accolades triples autour d'une [[expression de filtre|Filter Expression]]. Le premier élément de la liste renvoyée par le filtre est affecté à l'attribut, ou une chaîne vide si la liste est vide.
|
||||
|
||||
Cet exemple montre comment ajouter un préfixe à une valeur<<:>>
|
||||
|
||||
```
|
||||
<$text text={{{ [<currentTiddler>addprefix[$:/myprefix/]] }}} />
|
||||
```
|
||||
<<.warning "La valeur de l'attribut sera le résultat exact du premier élément de la liste renvoyée par le filtre, sans aucune interprétation du <<fr WikiText>>. Toute syntaxe de wiki dans ce résultat sera laissée telle quelle.">>
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
caption: Titres de rubriques
|
||||
created: 20141017093039992
|
||||
fr-title: Titres de rubriques dans WikiText
|
||||
modified: 20220226234057628
|
||||
modified: 20150624093140963
|
||||
tags: WikiText
|
||||
title: Headings in WikiText
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Un titre de rubrique est codé par un à 6 caractères <<gf "point d'exclamation">> `!` au début d'une ligne<<:>>
|
||||
Un ou plusieurs caractères "point d'exclamation" `!` au début d'une ligne signalent un titre de rubrique :
|
||||
|
||||
<<wikitexte-exemple "! Titre de niveau 1
|
||||
!! Titre de niveau 2
|
||||
|
||||
@@ -2,12 +2,12 @@ caption: Bienvenue !
|
||||
created: 20130822170200000
|
||||
fr-title: Bienvenue !
|
||||
list: [[Discover TiddlyWiki]] [[Some of the things you can do with TiddlyWiki]] [[Ten reasons to switch to TiddlyWiki]] Examples [[History of TiddlyWiki]] [[What happened to the original TiddlyWiki?]]
|
||||
modified: 20220217174842374
|
||||
modified: 20160603043549286
|
||||
tags: TableOfContents
|
||||
title: HelloThere
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
''N'avez-vous jamais eu la sensation que votre tête était trop petite pour contenir tout ce que vous avez besoin de mémoriser<<?>>''
|
||||
''N'avez-vous jamais eu la sensation que votre tête était trop petite pour contenir tout ce dont vous avez besoin de mémoriser ?''
|
||||
|
||||
Bienvenue sur TiddlyWiki, un carnet de notes web [[non-linéaire|Philosophy of Tiddlers]] pour [[saisir|Creating and editing tiddlers]], [[organiser|Structuring TiddlyWiki]] et [[partager|Sharing your tiddlers with others]] des informations simples ou complexes.
|
||||
|
||||
@@ -17,22 +17,19 @@ Utilisez-le pour gérer votre [[liste de tâches|TaskManagementExample]], faire
|
||||
<<list-thumbnails filter:"[tag[HelloThumbnail]]" width:"168" height:"95">>
|
||||
</div>
|
||||
|
||||
Contrairement aux services en ligne classiques, TiddlyWiki vous permet de choisir où conserver vos informations, et garantit que, dans les décennies à venir, vous pourrez toujours utiliser les notes que vous prenez aujourd'hui.
|
||||
Contrairement aux services en ligne classiques, TiddlyWiki vous permet de choisir où conserver vos informations , et garantit que, dans les décennies à venir, vous pourrez toujours utiliser les notes que vous prenez aujourd'hui.
|
||||
|
||||
<div style="font-size:0.7em;text-align:center;margin:3em auto;">
|
||||
<a href="https://talk.tiddlywiki.org/" class="tc-btn-big-green" style="border-radius:4px;background-color:#FF8C19;" target="_blank" rel="noopener noreferrer">
|
||||
{{$:/core/images/help}} ~TalkTW
|
||||
<div style="font-size:0.7em;text-align:center;margin-top:3em;margin-bottom:3em;">
|
||||
<a href="http://groups.google.com/group/TiddlyWiki" class="tc-btn-big-green" style="background-color:#FF8C19;" target="_blank" rel="noopener noreferrer">
|
||||
{{$:/core/images/mail}} ~TiddlyWiki Mailing List
|
||||
</a>
|
||||
<a href="https://www.youtube.com/c/JeremyRuston" class="tc-btn-big-green" style="border-radius:4px;background-color:#e52d27;" target="_blank" rel="noopener noreferrer">
|
||||
{{$:/core/images/video}} ~YouTube
|
||||
<a href="https://www.youtube.com/c/JeremyRuston" class="tc-btn-big-green" style="background-color:#e52d27;" target="_blank" rel="noopener noreferrer">
|
||||
{{$:/core/images/video}} ~TiddlyWiki sur ~YouTube
|
||||
</a>
|
||||
<a href="https://twitter.com/TiddlyWiki" class="tc-btn-big-green" style="border-radius:4px;background-color:#5E9FCA;" target="_blank" rel="noopener noreferrer">
|
||||
{{$:/core/images/twitter}} Twitter
|
||||
<a href="https://twitter.com/TiddlyWiki" class="tc-btn-big-green" style="background-color:#5E9FCA;" target="_blank" rel="noopener noreferrer">
|
||||
{{$:/core/images/twitter}} @~TiddlyWiki sur Twitter
|
||||
</a>
|
||||
<a href="https://github.com/Jermolene/TiddlyWiki5" class="tc-btn-big-green" style="border-radius:4px;background-color:#444;" target="_blank" rel="noopener noreferrer">
|
||||
{{$:/core/images/github}} ~GitHub
|
||||
</a>
|
||||
<a href="https://gitter.im/TiddlyWiki/public" class="tc-btn-big-green" style="border-radius:4px;background-color:#753a88;background-image:linear-gradient(to left,#cc2b5e,#753a88);" target="_blank" rel="noopener noreferrer">
|
||||
{{$:/core/images/gitter}} Gitter
|
||||
<a href="https://github.com/Jermolene/TiddlyWiki5" class="tc-btn-big-green" style="background-color:#444;" target="_blank" rel="noopener noreferrer">
|
||||
{{$:/core/images/github}} ~TiddlyWiki sur ~GitHub
|
||||
</a>
|
||||
</div>
|
||||
|
||||
@@ -1,31 +0,0 @@
|
||||
created: 20151006145934884
|
||||
fr-title: Exporter des tiddlers
|
||||
modified: 20220222182612947
|
||||
tags: Learning
|
||||
title: How to export tiddlers
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
! Sélectionner tous les tiddlers pour l'exportation
|
||||
|
||||
Pour exporter ''tous'' les tiddlers, cliquez sur l'onglet ''Outils'' de la barre latérale. Trouvez le bouton <<.icon $:/core/images/export-button>> ''exporter tout'' et cliquez dessus. Un menu flottant vous permet alors de choisir l'un des nombreux formats d'exportation des tiddlers.
|
||||
|
||||
! Exporter un tiddler
|
||||
|
||||
Pour exporter un tiddler particulier, commencez par l'afficher, puis cliquez sur le bouton <<.icon $:/core/images/down-arrow>> ''plus'' situé vers le haut du tiddler. Dans la liste qui apparaît, sélectionnez <<.icon $:/core/images/export-button>> ''exporter ce tiddler''. Un menu flottant vous permet alors de choisir l'un des nombreux formats d'exportation des tiddlers.
|
||||
|
||||
! Exporter des tiddlers selon un critère (filtre)
|
||||
|
||||
Pour exporter une sélection de tiddlers, cliquez sur le symbole de loupe <<.icon $:/core/images/advanced-search-button>> à proximité de la zone de recherche de la barre latérale, ce qui va ouvrir le tiddler de [[recherche avancée|$:/AdvancedSearch]]. Choisissez l'onglet ''Filtrer'' car c'est le seul qui permet d'exporter une sélection de tiddlers. Les [[filtres|Filters]] utilisent une syntaxe particulière, cliquez sur [[ce lien|Filters]] pour découvrir comment concevoir des filtres.
|
||||
|
||||
Lorsque vous aurez rédigé un filtre, la liste des tiddlers correspondants apparaîtra. Vous pourrez alors cliquer sur le bouton <<.icon $:/core/images/export-button>> ''Exporte ces tiddlers'' situé à droite de la zone de saisie du filtre. Un menu flottant vous permettra alors de choisir l'un des nombreux formats d'exportation des tiddlers.
|
||||
|
||||
! Formats d'exportation
|
||||
|
||||
Actuellement, les formats d'exportation disponibles sont<<:>>
|
||||
|
||||
* Le fichier au format CSV
|
||||
* Le fichier au format JSON
|
||||
* Le fichier HTML statique
|
||||
* Le fichier au format <<gf ".tid">>
|
||||
|
||||
Le format <<gf ".tid">> est particulier en ce qu'il ne permet d'exporter qu'un seul tiddler à la fois, même si vous essayer d'en exporter plusieurs à l'aide d'un filtre ou avec le bouton ''exporter tout''.
|
||||
@@ -1,33 +0,0 @@
|
||||
caption: image
|
||||
created: 20140416160234142
|
||||
fr-title: Widget Image
|
||||
modified: 20220303235644269
|
||||
tags: Widgets
|
||||
title: ImageWidget
|
||||
|
||||
! Introduction
|
||||
|
||||
Le widget image affiche des images qui peuvent être désignées par une URL distante ou le titre d'un tiddler local qui contient l'image.
|
||||
|
||||
! Contenu et attributs
|
||||
|
||||
Le contenu du widget `<$image>` est ignoré.
|
||||
|
||||
|!Attribut |!Description |
|
||||
|source |L'URL de l'image, ou le titre d'un tiddler image |
|
||||
|width |La largeur de l'image |
|
||||
|height |La hauteur de l'image |
|
||||
|tooltip |L'info-bulle à afficher au survol de l'image |
|
||||
|alt |Le texte alternatif associé à l'image |
|
||||
|class |Les classes CSS à assigner à l'élément `<img>` |
|
||||
|
||||
La valeur de la largeur et de la hauteur peut être attribuée en pixels (c-à-d "23" ou "23px") ou en pourcentages (c-à-d "23%"). Ces deux attributs sont optionnels et s'ils sont absents le navigateur utilisera des règles CSS pour retailler l'image.
|
||||
|
||||
! Images externes et champ ''_canonical_uri''
|
||||
|
||||
Lorsqu'il est utilisé pour afficher des images contenues dans des tiddlers, le widget opère dans deux modes distincts<<:>>
|
||||
|
||||
* Si le champ ''_canonical_uri'' est présent, il est utilisé en tant qu'attribut ''src'' de la balise `<img>` générée et le champ ''text'' est ignoré.
|
||||
* En l'absence du champ ''_canonical_uri'', le widget image génère une balise `<img>` qui encode les données de l'image directement dans une URI de type `data:`.
|
||||
|
||||
Plus de détails ici<<:>> <<fr ExternalImages>>.
|
||||
@@ -1,69 +0,0 @@
|
||||
caption: Images
|
||||
created: 20131205160221762
|
||||
fr-title: Images en WikiTexte
|
||||
modified: 20220304132738271
|
||||
tags: WikiText [[Working with TiddlyWiki]]
|
||||
title: Images in WikiText
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
! Intégration d'image
|
||||
|
||||
Les images peuvent être affichées avec la syntaxe <<fr WikiText>> suivante, selon que l'image soit déjà incluse dans un tiddler ou pointe vers une source externe :
|
||||
|
||||
```
|
||||
[img[Motovun Jack.jpg]]
|
||||
ou [img[https://tiddlywiki.com/favicon.ico]]
|
||||
```
|
||||
|
||||
Il est également possible d'insérer des tiddlers d'images grâce à la barre d'outils d'édition. Cliquez sur ''Image'' (<<.icon $:/core/images/picture>>) et choisissez une image.
|
||||
|
||||
Si la source de l'image correspond au titre d'un tiddler, alors le tiddler est affiché directement. Autrement elle est interprétée comme une URL et la balise HTML `<img>` est générée avec l'URL dans l'attribut `src`.
|
||||
|
||||
Une info-bulle, visible au survol par la souris, peut être ajoutée<<:>>
|
||||
|
||||
```
|
||||
[img[Et voilà l'info-bulle|Motovun Jack.jpg]]
|
||||
```
|
||||
|
||||
Les attributs `width` (largeur) et `height` (hauteur) ainsi que `class` pour les classes CSS sont disponibles<<:>>
|
||||
|
||||
```
|
||||
[img width=32 [Motovun Jack.jpg]]
|
||||
[img width=32 class="tc-image" [Motovun Jack.jpg]]
|
||||
```
|
||||
|
||||
Notez que les attributs peuvent être spécifiés par des transclusions ou des références à des variables<<:>>
|
||||
|
||||
```
|
||||
[img width={{!!ma_largeur}} class=<<image-classes>> [Motovun Jack.jpg]]
|
||||
```
|
||||
|
||||
La syntaxe d'image est un raccourci d'appel au <<fr ImageWidget>>.
|
||||
|
||||
! Affichage des images par transclusion
|
||||
|
||||
Vous pouvez aussi afficher l'image incluse dans un tiddler en transcluant ce tiddler. L'inconvénient de cette méthode est qu'il n'y a alors pas de moyen direct pour contrôler la taille de l'image.
|
||||
|
||||
```
|
||||
{{Motovun Jack.jpg}}
|
||||
```
|
||||
|
||||
Affichera<<:>>
|
||||
|
||||
{{Motovun Jack.jpg}}
|
||||
|
||||
! Images en lien
|
||||
```
|
||||
<$link to="HelloThere" tooltip="Info-bulle personnalisée">{{$:/core/icon}}</$link>
|
||||
```
|
||||
|
||||
Affichera<<:>>
|
||||
|
||||
<$link to="HelloThere" tooltip="Info-bulle personnalisée">{{$:/core/icon}}</$link>
|
||||
|
||||
! Import d'images
|
||||
|
||||
Utilisez le bouton <<.button import>> (dans l'onglet <<.sidebar-tab Outils>> de la barre latérale), ou directement un glisser-déposer pour importer une image.
|
||||
Voir les détails ici<<:>> <<fr "Importing Tiddlers">>
|
||||
|
||||
<<.from-version "5.2.0">> Vous pouvez aussi importer des images par copier-coller ou glisser-déposer dans l'éditeur de tiddler.
|
||||
48
editions/fr-FR/tiddlers/Images_in_WikiText.tid
Normal file
48
editions/fr-FR/tiddlers/Images_in_WikiText.tid
Normal file
@@ -0,0 +1,48 @@
|
||||
caption: Images
|
||||
created: 20131205160221762
|
||||
fr-title: Les images dans WikiText
|
||||
modified: 20150601074111435
|
||||
tags: WikiText [[Working with TiddlyWiki]]
|
||||
title: Images in WikiText
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
! Intégration d'image
|
||||
|
||||
Les images peuvent être affichées avec WikiText avec la syntaxe suivante, selon que l'image soit déjà incluse dans un tiddler ou pointe vers une source externe :
|
||||
|
||||
```
|
||||
[img[Sainte Anastasie.png]]
|
||||
ou [img[https://tiddlywiki.com/favicon.ico]]
|
||||
```
|
||||
|
||||
[img[Sainte Anastasie.png]]
|
||||
ou [img[https://tiddlywiki.com/favicon.ico]]
|
||||
|
||||
Si la source de l'image correspond au titre d'un tiddler, alors le tiddler est affiché directement. Autrement elle est interprétée comme une URL et la balise HTML `<img>` est générée muni de l'attribut `src` contenant l'URL.
|
||||
|
||||
Une info-bulle, visible au survol par la souris, peut être spécifiée, ainsi que les attributs `width` (largeur), `height` (hauteur) et la `class` :
|
||||
|
||||
```
|
||||
[img width=80 class="tc-image" [Sculpture époque médiévale - France - Gard - Sainte Anastasie|Sainte Anastasie.png]]
|
||||
```
|
||||
[img width=80 class="tc-image" [Sculpture époque médiévale - France - Gard - Sainte Anastasie|Sainte Anastasie.png]]
|
||||
|
||||
Noter aussi que les attributs peuvent être spécifiés par des transclusions ou des références à des variables:
|
||||
|
||||
```
|
||||
[img width={{!!mywidth}} class=<<image-classes>> [Sainte Anastasie.png]]
|
||||
```
|
||||
|
||||
> La syntaxe d'image est un raccourci d'appel à la fonctionnalité ImageWidget.
|
||||
|
||||
! Affichage des images par transclusion
|
||||
|
||||
Vous pouvez aussi afficher l'image incluse dans un tiddler en transcluant ce tiddler. L'inconvénient de cette méthode est qu'il n'y a alors pas de moyen directe pour contrôler la taille de l'image.
|
||||
|
||||
```
|
||||
{{Sainte Anastasie.png}}
|
||||
```
|
||||
|
||||
Affichera :
|
||||
|
||||
{{Sainte Anastasie.png}}
|
||||
14
editions/fr-FR/tiddlers/ImportTiddlers.tid
Normal file
14
editions/fr-FR/tiddlers/ImportTiddlers.tid
Normal file
@@ -0,0 +1,14 @@
|
||||
created: 20130825162000000
|
||||
fr-title: Importer du contenu
|
||||
modified: 20150531190339977
|
||||
tags: Features
|
||||
title: ImportTiddlers
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
On peut importer du contenu dans un fichier <<tw>> de plusieurs façons<<dp>>
|
||||
|
||||
* En utilisant le bouton ''importer'' (sous l'onglet ''Outils'' dans la barre latérale, ou dans le [[Panneau de contrôle|$:/ControlPanel]]) pour choisir un ou plusieurs fichiers locaux<<pv>>
|
||||
* En glissant-déposant des fichiers à partir de l'explorateur Windows ou du Finder Mac OS X sur la fenêtre TiddlyWiki5 du navigateur
|
||||
* En collant directement le contenu du presse-papier à l'aide du raccourci clavier (contrôle-V ou commande-V)
|
||||
** Coller depuis le presse-papier n'est pour l'instant possible que dans GoogleChrome
|
||||
|
||||
@@ -1,26 +0,0 @@
|
||||
created: 20130825162000000
|
||||
fr-title: Importer des tiddlers
|
||||
modified: 20220222173231214
|
||||
tags: Features
|
||||
title: Importing Tiddlers
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Vous pouvez importer des tiddlers dans un <<tw>> à partir de fichiers externes ou directement depuis un autre <<tw>>.
|
||||
|
||||
!! Importer du contenu de fichiers externes
|
||||
|
||||
Il existe plusieurs méthodes pour importer du contenu (tel que du texte, des images, des documents pdf, etc.) à partir de fichiers externes<<:>>
|
||||
|
||||
* Utiliser le bouton <<.icon $:/core/images/import-button>> ''Importer'' (dans l'onglet ''Outils'' de la barre latérale) pour choisir un fichier<<;>>
|
||||
* Gisser-déposer des fichiers depuis l'Explorateur Windows, ou le Finder MacOS, etc. directement dans la fenêtre de navigateur de <<tw>><<;>>
|
||||
* Copier-coller du contenu directement depuis le presse-papiers en utilisant le menu ou le raccourci clavier (<kbd>ctrl-V</kbd> ou <kbd>cmd-V</kbd>)
|
||||
** Actuellement disponible avec Chrome, Firefox et Edge (mais pas Internet Explorer)
|
||||
|
||||
Pour la plupart, les fichiers sont importés en tant que tiddlers individuels. Les exceptions sont<<:>>
|
||||
|
||||
* les fichiers ''.html'' qui sont reconnus comme des fichiers <<tw>> sont interprétés pour en extraire les tiddlers qu'ils contiennent<<;>>
|
||||
* les fichiers ''.json'' sont interprétés pour en extraire les tiddlers qu'ils contiennent. Ils peuvent être créés en les [[exportant|How to export tiddlers]] d'un autre <<tw>>. <<tw>> reconnaît les fichiers JSON qui contiennent un unique tiddler, ou un tableau de tiddlers.
|
||||
|
||||
!! Importer du contenu depuis des <<tw>> dans d'autres fenêtres
|
||||
|
||||
Les tiddlers peuvent être importés depuis des <<tw>> affichés dans d'autres fenêtres de navigateurs grâce au [[glisser-déposer|Drag and Drop]]. Faites glisser un lien interne <<tw>> ou un tag d'un <<tw>> à un autre, entre fenêtres de navigateurs. Faire glisser un lien interne importera un tiddler unique, alors que faire glisser une pilule de tag importera tous les tiddlers qui portent ce [[tag|Tagging]].
|
||||
@@ -1,21 +1,21 @@
|
||||
caption: Jeremy Ruston
|
||||
created: 20130825162500000
|
||||
modified: 20220219163924300
|
||||
modified: 20150623064203685
|
||||
tags: Definitions
|
||||
title: JeremyRuston
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Je suis l'inventeur original de TiddlyWiki. Vous pouvez m'engager sur [[Federatial]], et me retrouver sur ces services<<:>>
|
||||
Je suis l'inventeur original de TiddlyWiki. Vous pouvez me retrouver sur ces services<<:>>
|
||||
|
||||
* jeremy (at) jermolene (dot) com
|
||||
* [[Jermolene sur GitHub|https://github.com/Jermolene]]
|
||||
* [[Jermolene sur GitTip|https://www.gittip.com/Jermolene/]], un service de micropaiements
|
||||
* [[@Jermolene sur Twitter|http://twitter.com/#!/jermolene]]
|
||||
* [[Jermy sur LinkedIn|http://www.linkedin.com/in/jermy]]
|
||||
* [[Jermy sur Flickr|http://www.flickr.com/photos/jermy/]]
|
||||
* [[Jermolene on GitHub|https://github.com/Jermolene]]
|
||||
* [[Jermolene on GitTip|https://www.gittip.com/Jermolene/]], micropaiements
|
||||
* [[@Jermolene on Twitter|http://twitter.com/#!/jermolene]]
|
||||
* [[Jermy on LinkedIn|http://www.linkedin.com/in/jermy]]
|
||||
* [[Jermy on Flickr|http://www.flickr.com/photos/jermy/]]
|
||||
|
||||
Informations supplémentaires<<:>>
|
||||
Encore plus d'infos<<:>>
|
||||
|
||||
* Une [[interview de moi sur The Inquirer|http://www.theinquirer.net/inquirer/feature/2105529/bt-software-engineer-tells-telco-source]] par Wendy Grossman
|
||||
* Une [[interview hilarante avec moi|https://www.youtube.com/watch?v=auyIhw8MTmQ]] de la télévision britanique en 1983
|
||||
* Ici, une vidéo de présentation que j'ai réalisée en 2007 intitulée [["How to Start an Open Source Project"|http://vimeo.com/856110]].
|
||||
* Ici, un vidéo de présentation que j'ai réalisée en 2007 appelée [["How to Start an Open Source Project"|http://vimeo.com/856110]].
|
||||
|
||||
@@ -1,128 +1,39 @@
|
||||
caption: Liens
|
||||
created: 20131205155230596
|
||||
fr-title: Liens en WikiTexte
|
||||
modified: 20220304013852623
|
||||
mon_texte: Ceci est le contenu du champ `mon_texte`
|
||||
fr-title: Liens avec WikiText
|
||||
modified: 20150601094319226
|
||||
tags: WikiText
|
||||
title: Linking in WikiText
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
L'une des aptitudes clés du <<fr WikiText>> est sa capacité à créer des liens vers d'autres mémos (appelés tiddlers) ou vers des sites externes. Il existe plusieurs moyens de les mettre en œuvre.
|
||||
L'une des aptitudes-clé de WikiText est sa capacité à créer des liens vers d'autres mémos (appelés tiddlers) ou vers des sites externes. Il existe plusieurs moyens de les mettre en oeuvre :
|
||||
|
||||
! Liens manuels
|
||||
* Lien vers un tiddler via le titre : `[[Titre du Tiddler]]`
|
||||
* Lien vers un tiddler avec libellé : `[[Texte à afficher|Titre du Tiddler]]`
|
||||
* Pour les tiddlers conformes aux règles CamelCase, saisir leur titre génère automatiquement la création du lien
|
||||
* Pour un lien vers un site externe, saisir l'URL complète du site : `https://tiddlywiki.com/` ou `[[TW5|https://tiddlywiki.com/]]`
|
||||
|
||||
Lien vers un tiddler par son titre<<:>>
|
||||
Vous pouvez annuler la prise en compte du lien en le préfixant du signe `~`.
|
||||
|
||||
Par exemple :
|
||||
|
||||
<<wikitext-example src:"* ~SalueATous suit la règle CamelCase, mais n'est pas considéré comme un lien
|
||||
* ~http://google.com/ n'est pas un lien automatique non plus">>
|
||||
|
||||
Pour que cette syntaxe fonctionne, l'adresse URL doit être reconnue comme une URL, donc débuter par un protocole comme `http://` ou `file://`. Mais, vous pouvez forcer le lien externe sans cela en utilisant cette syntaxe :
|
||||
|
||||
```
|
||||
[[Titre de Tiddler]]
|
||||
[ext[tiddlywiki.com]]
|
||||
|
||||
[ext[libellé à afficher|tiddlywiki.com]]
|
||||
|
||||
[ext[Faire un Don|bitcoin:1aabbdd....?amount=0.001]]
|
||||
```
|
||||
|
||||
Pour changer le texte affiché par le lien<<:>>
|
||||
! Personnaliser les Liens des Tiddlers
|
||||
|
||||
```
|
||||
[[Texte à afficher|Titre du Tiddler]]
|
||||
```
|
||||
Voir le LinkWidget pour plus de détail sur le widget sous-jacent utilisé pour implémenter les liens des tiddlers, et notamment les macros qui peuvent être utilisées pour personnaliser leur comportements.
|
||||
|
||||
Les liens peuvent aussi être créés à l'aide de la barre d'outils d'édition. Cliquez sur le bouton <<.icon $:/core/images/link>> ''lien'', puis recherchez et sélectionnez un tiddler.
|
||||
! Personnaliser les Liens des Tiddlers
|
||||
|
||||
! Lien en <<gf "notation chameau">>
|
||||
|
||||
Pour les tiddlers dont le titre respecte les règles de la [[notation chameau|CamelCase]], saisir leur titre sans l'encadrer entre doubles crochets suffit à créer automatiquement un lien.
|
||||
|
||||
Il est possible de neutraliser un lien en le préfixant avec le symbole `~`. Par exemple<<:>>
|
||||
|
||||
<<wikitext-example src:"* ~HelloThere n'est pas un lien
|
||||
* ~http://google.com/ n'est pas un lien">>
|
||||
|
||||
! Liens externes
|
||||
|
||||
Pour inclure un lien vers une [[ressource Web externe|https://fr.wikipedia.org/wiki/Ressource_du_World_Wide_Web]] comme un site ou un fichier, il est nécessaire de saisir son [[URL|https://fr.wikipedia.org/wiki/Uniform_Resource_Locator]] //complète//, en incluant son [[sigle URI|https://fr.wikipedia.org/wiki/Uniform_Resource_Identifier]], par exemple un protocole comme `http://`, `file://` ou `mailto:`<<:>>
|
||||
|
||||
```
|
||||
https://tiddlywiki.com/
|
||||
|
||||
[[TW5|https://tiddlywiki.com/languages/fr-FR/index.html]]
|
||||
|
||||
[[Envoyez-moi un courriel|mailto:moi@ici.net]]
|
||||
|
||||
[[Ouvrez le fichier|file:///c:/users/moi/index.html]]
|
||||
```
|
||||
|
||||
Pour que cette syntaxe fonctionne, l'URL doit être reconnaissable en tant qu'URL. Dans le cas contraire elle est interprétée comme un titre de tiddler. Par conséquent, pour créer un lien vers une ressource localisée avec un chemin relatif, il faut utiliser la syntaxe étendue<<:>>
|
||||
|
||||
```
|
||||
[ext[Ouvrir le fichier|index.html]]
|
||||
|
||||
[ext[Ouvrir le fichier|./index.html]]
|
||||
|
||||
[ext[Ouvrir le fichier|../README.md]]
|
||||
|
||||
[ext[Ouvrir le fichier|c:\users\moi\index.html]]
|
||||
```
|
||||
|
||||
La syntaxe étendue fonctionne aussi avec les URL complètes, même si dans ce cas elle n'est pas nécessaire<<:>>
|
||||
|
||||
```
|
||||
[ext[https://tiddlywiki.com/]]
|
||||
|
||||
[ext[TW5|https://tiddlywiki.com/languages/fr-FR/index.html]]
|
||||
|
||||
[ext[Envoyez-moi un courriel|mailto:moi@ici.net]]
|
||||
|
||||
[ext[Ouvrez le fichier|file:///c:/users/moi/index.html]]
|
||||
```
|
||||
|
||||
Vous pouvez aussi utiliser la syntaxe étendue pour forcer l'interprétation en tant que lien externe<<:>>
|
||||
|
||||
```
|
||||
[ext[Donnez|bitcoin:1aabbdd....?amount=0.001]]
|
||||
```
|
||||
|
||||
! Personnalisation des liens
|
||||
|
||||
Voir le <<fr LinkWidget>> pour plus de détails sur le widget sous-jacent utilisé pour implémenter les liens des tiddlers, et notamment les macros qui peuvent être utilisées pour personnaliser son comportement.
|
||||
|
||||
! Génération de liens dynamiques
|
||||
|
||||
Les <<fr "Linking in WikiText">> ne se prêtent pas bien à la création de liens dynamiques. C'est parce que ce lien <<fr WikiText>><<:>>
|
||||
|
||||
|
||||
```
|
||||
[[lien vers moi-même|Linking in WikiText]]
|
||||
```
|
||||
est un raccourci qui utilise le <<fr LinkWidget>> et le <<fr TextWidget>> ainsi<<:>>
|
||||
|
||||
```
|
||||
<$link to="Linking in WikiText">
|
||||
<$text text="lien vers moi-même"/>
|
||||
</$link>
|
||||
```
|
||||
Comme le titre du lien ("lien vers moi-même") et la cible du lien ("Linking in WikiText") sont utilisés en tant qu'attributs de widgets, aucune expansion de <<fr WikiText>> ne peut avoir lieu.
|
||||
|
||||
Par exemple, une tentative d'utilisation d'une [[référence|TextReference]] et d'une [[variable|Variables]] pour générer un lien dynamique comme ceci<<:>>
|
||||
|
||||
<<.bad-example "`[[{{!!mon_texte}}|<<currentTiddler>>]]`">>
|
||||
|
||||
revient à essayer d'utiliser les widgets Lien et Texte ainsi<<:>>
|
||||
|
||||
<<.bad-example """```
|
||||
<$link to="<<currentTiddler>>">
|
||||
<$text text="{{!!mon_texte}}"/>
|
||||
</$link>
|
||||
```""">>
|
||||
|
||||
ce qui ne fonctionnera pas comme espéré. Le contenu des attributs est placé entre guillemets et donc [[traité comme une valeur littérale|HTML in WikiText]] protégée contre l'expansion <<fr WikiText>>. Il sera donc affiché ainsi<<:>>
|
||||
|
||||
>[[{{!!mon_texte}}|<<currentTiddler>>]]
|
||||
|
||||
Afin d'obtenir l'effet désiré, le <<fr LinkWidget>> peut être utilisé explicitement ainsi<<:>>
|
||||
|
||||
<<wikitext-example-without-html src:"<$link to=<<currentTiddler>>>{{!!mon_texte}}</$link>">>
|
||||
|
||||
Autre exemple de [[construction dynamique de liens|Concatenating text and variables using macro substitution]].
|
||||
|
||||
! Liens internes aux tiddlers - <<gf "liens ancrés">>
|
||||
|
||||
Dans <<tw>> les liens ancrés peuvent cibler des points particuliers et des sections distinctes à l'intérieur même de tiddlers, qui aident le lecteur à naviguer dans le contenu des tiddlers les plus longs.
|
||||
|
||||
Voir <<fr "Anchor Links using HTML">> pour plus d'informations.
|
||||
Voir le LinkWidget pour plus de détail sur le widget sous-jacent utilisé pour implémenter les liens des tiddlers, et notamment les macros qui peuvent être utilisées pour personnaliser leur comportements.
|
||||
|
||||
@@ -1,14 +1,14 @@
|
||||
caption: list
|
||||
created: 20130830092500000
|
||||
fr-title: Champ liste
|
||||
modified: 20220219194303634
|
||||
modified: 20150614082620572
|
||||
tags: Fields
|
||||
title: ListField
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Le [[champ de tiddler|TiddlerFields]] `list` est une fonctionnalité optionnelle qui peut vous aider à structurer votre contenu. Sa valeur est une [[liste de titres|Title List]], qui peut être utilisée de différentes façons<<:>>
|
||||
[[Champ de tiddler|TiddlerFields]], `list` peut aider à structurer son contenu. Sa valeur est une [[liste de titres|Title List]], et peut être maniée de différentes façons<<:>>
|
||||
|
||||
* Le champ `list` d'un tiddler utilisé comme tag détermine l'ordre des tiddlers portant ce tag -- voir [[Étiqueter|Tagging]] pour plus de détails
|
||||
* Le [[filtre|Filters]] `list` sélectionne les entrées d'une liste -- voir <<fr "list Operator">>
|
||||
* Le [[filtre|Filters]] `listed` sélectionne les tiddlers listant le(s) tiddler(s) sélectionné(s) -- voir <<fr "listed Operator">>
|
||||
* Le widget <<.wlink NavigatorWidget>> manipule un tiddler $:/StoryList dont le champ `list` contient les tiddlers affichés dans la vue principale
|
||||
* Le champ `list` d'un tiddler utilisé comme étiquette détermine l'ordre des tiddlers portant ce tag - voir [[ Étiqueter |Tagging]] pour plus de détails
|
||||
* Le [[filtre|Filters]] `list` sélectionne les entrées d'une liste
|
||||
* Le [[filtre|Filters]] `listed` sélectionne les tiddlers listant le(s) tiddler(s) sélectionné(s)
|
||||
* Le NavigatorWidget manipule un tiddler $:/StoryList contenant un champ `list` des tiddlers affichés dans la colonne principale ''Récents''
|
||||
@@ -1,12 +1,12 @@
|
||||
caption: Macros
|
||||
created: 20131205160746466
|
||||
fr-title: Macros en WikiTexte
|
||||
modified: 20220219191257167
|
||||
fr-title: Macros dans WikiText
|
||||
modified: 20150621152601026
|
||||
tags: WikiText
|
||||
title: Macros in WikiText
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
L'utilisation des [[macros|Macros]] en [[WikiTexte|WikiText]] recouvre deux aspects distincts<<:>>
|
||||
L'utilisation des [[macros|Macros]] dans [[WikiTexte|WikiText]] a deux aspects distincts<<:>>
|
||||
|
||||
* [[La définition des macros|Macro Definitions in WikiText]]
|
||||
* [[L'appel des macros|Macro Calls in WikiText]]
|
||||
* [[Définition des macros|Macro Definitions in WikiText]]
|
||||
* [[Appel des macros|Macro Calls in WikiText]]
|
||||
@@ -1,28 +1,19 @@
|
||||
caption: Macros
|
||||
created: 20140211171341271
|
||||
modified: 20220219192959452
|
||||
modified: 20150622110720298
|
||||
tags: Concepts Reference
|
||||
title: Macros
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Une <<.def macro>> est un //bout de texte// auquel on donne un nom. Le <<fr WikiText>> utilise ce nom comme raccourci pour [[transclure|Transclusion]] le //bout de texte//. Ces [[transclusions|Transclusion]] particulières s'appellent des <<.def "appels de macro">>, et chaque appel peut transmettre un ensemble différent d'arguments, qui se substituent à leur emplacement dans le //bout de texte//.
|
||||
Les macros sont des bouts de texte qui peuvent être insérés à l'aide d'un raccourci concis<<dp>>
|
||||
|
||||
Pour une description de la syntaxe, voir <<fr "Macros in WikiText">>.
|
||||
```
|
||||
<<maMacro>>
|
||||
```
|
||||
|
||||
La plupart des macros sont en fait des [[variables|Variables]] paramétrées.
|
||||
Vous pouvez écrire vos propres [[macros en WikiText|Macros in WikiText]] ou pour plus de souplesse, vous pouvez écrire des [[macros en Javascript|JavaScript Macros]].
|
||||
|
||||
Elles sont définies en utilisant le [[pragma|Pragma]] `\define`. (En coulisses, cette syntaxe est transformé en <<fr SetWidget>>, donc les macros et les variables sont bien les deux faces de la même pièce.)
|
||||
Les macros suivantes sont fournies avec <<tw>><<dp>>
|
||||
|
||||
Le //bout de texte// et ses arguments sont traités comme de simple chaînes de caractères, sans interprétation du <<fr WikiText>>, au moins jusqu'à ce que le dernier emplacement ait été rempli et que l'appel de macro soit terminé. Cela signifie qu'une macro peut assembler et renvoyer la syntaxe complète d'un composant <<fr WikiText>>, comme un [[lien|Linking in WikiText]] par exemple. (Voir <<fr "Transclusion and Substitution">> pour une discussion plus approfondie sur ce sujet.)
|
||||
<<list-links "[tag[Macros]]">>
|
||||
|
||||
A l'intérieur d'un //bout de texte// lui-même, le seul balisage détecté est `$nom$` (un emplacement pour le paramètre `nom` qui sera substitué par l'argument correspondant reçu au moment d'un appel de macro) et `$(nom)$` (un emplacement pour une [[variable|Variables]]).
|
||||
|
||||
La macro <<.mlink dumpvariables>> liste toutes les variables (y-compris les macros) qui sont disponibles à cet endroit de l'arborescence des widgets.
|
||||
|
||||
Un widget <<.wlink ImportVariablesWidget>> peut être utilisé pour copier une définition de macro vers une autre branche de [[l'arbre des widgets|Widgets]]. <<tw>> utilise cette technique en interne pour implémenter des macros globales -- c'est-à-dire des macros définies dans des tiddlers étiquetés <<.tag $:/tags/Macro>>. (Le tag <<.tag $:/tags/Macro/View>> est quant à lui utilisé pour définir des macros qui ne doivent être disponibles que dans le modèle de vue principal et le panneau de prévisualisation.)
|
||||
|
||||
Pour un maximum de flexibilité, les macros peuvent aussi être <<.js-macro-link "écrites en tant que modules JavaScript">>.
|
||||
|
||||
Un effet similaire à l'utilisation de macros paramétrées peut être obtenu en encadrant une [[transclusion|Transclusion]] par une définition de [[variables|Variables]].
|
||||
|
||||
<<tw>> intègre [[plusieurs macros|Core Macros]] dans son cœur.
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
caption: Permaliens
|
||||
created: 20140502213500000
|
||||
fr-title: Permaliens
|
||||
modified: 20220223144222832
|
||||
modified: 20150622112455420
|
||||
tags: Features Concepts
|
||||
title: PermaLinks
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Les permaliens sont des liens directs vers des tiddlers individuels à l'intérieur d'un TiddlyWiki.
|
||||
Les permaliens offrent la possibilités de faire des liens directs vers des tiddlers individuels dans un TiddlyWiki.
|
||||
|
||||
! La forme simple des permaliens
|
||||
|
||||
La forme la plus simple d'un permalien (<<.icon $:/core/images/permalink-button>>) vers un tiddler cible unique est son nom précédé de "#" accolé au lien URL de base <<:>>
|
||||
La forme la plus simple d'un permalien vers un tiddler cible unique est son nom précédé de "#" accolé au lien URL de base <<:>>
|
||||
|
||||
https://tiddlywiki.com/#HelloThere
|
||||
|
||||
@@ -20,47 +20,47 @@ Le titre du tiddler peut contenir des espaces si nécessaire<<:>>
|
||||
|
||||
Remarquez que les doubles crochets ne sont pas requis autour du titre du tiddler cible<<;>> cependant, s'ils sont présents ils seront supprimés automatiquement.
|
||||
|
||||
(NDT<<:>> Attention en cas de traduction, le lien doit pointer vers le titre original `title` et pas vers le titre traduit affiché qui ne reflète que le contenu du champ `fr-title`)
|
||||
(NDT Attention en cas de traduction, c'est le lien doit pointer vers `title` le titre original et pas vers le titre traduit affiché qui ne reflète que le contenu du champ `fr-title`)
|
||||
|
||||
! Permaliens vers un déroulé
|
||||
|
||||
Le permalien peut aussi spécifier la liste de tiddlers qui seront ouverts dans le déroulé en plus du tiddler cible, à l'aide d'un [[filtre|Filters]]<<:>>
|
||||
Le permalien peut aussi spécifier le déroulé de la liste de tiddlers qui seront ouverts avec le [[Tiddler Filtre|Filters]] cible<<:>>
|
||||
|
||||
[[https://tiddlywiki.com/#TiddlerFields:Tiddlers TiddlerTags TiddlerFields ContentType]]
|
||||
|
||||
Si le tiddler cible est absent de la liste, il est alors automatiquement inséré au début du déroulé. Ce qui veut dire que les exemples suivants désignent tous les deux le tiddler `Tiddlers` dans le déroulé `Tiddlers`, `Tags`, `TiddlerFields`<<:>>
|
||||
Si le tiddler cible est absent du déroulé de la liste, il est alors automatiquement inséré au début. Ce qui veut dire que les exemples suivants ciblent tous les deux le tiddler `Tiddlers` avec le déroulé de la suite `Tiddlers`, `Tags`, `TiddlerFields`:
|
||||
|
||||
[[https://tiddlywiki.com/#Tiddlers:Tags TiddlerFields]]
|
||||
|
||||
[[https://tiddlywiki.com/#Tiddlers:Tiddlers Tags TiddlerFields]]
|
||||
|
||||
Il est aussi possible de spécifier un filtre sans spécifier de tiddler cible de navigation<<:>>
|
||||
Il est aussi possible de spécifier, pour les besoins de la navigation, un déroulé filtre sans spécifier de tiddler cible<<:>>
|
||||
|
||||
<a href="https://tiddlywiki.com/#:[tags[task]]" rel="noopener noreferrer">~https://tiddlywiki.com/#:[tags[task]]</a>
|
||||
<a href="https://tiddlywiki.com/#:[tags[task]]">~https://tiddlywiki.com/#:[tags[task]]</a>
|
||||
|
||||
! Concernant le codage URL
|
||||
|
||||
Il existe des restrictions techniques aux caractères autorisés dans un adressage URL. Afin de permettre à tous les titres de tiddler d'être adressés, les caractères illégaux font l'objet d'un processus appelé <<gf "codage URL">> où les caractères problématiques sont remplacés par leurs codes numériques. Par exemple, le caractère espace est remplacé par `%20`.
|
||||
Il existe des restrictions techniques aux caractères légaux d'un adressage URL. Afin de permettre à tous les titres de tiddler d'être adressés, les caractères illégaux font l'objet d'un processus appelé "codage URL" où les caractères problématique sont remplacés par leurs codes numériques. Par exemple, le caractère espace est remplacé par `%20`.
|
||||
|
||||
Aussi bien le tiddler cible que le déroulé filtre devraient être encodés (mais pas le séparateur <<gf ":">>). <<tw>> génère des URLs encodées correctement qui peuvent paraître un peu "moche". Cependant, dans la pratique les navigateurs parviennent heureusement à interpréter parfaitement des caractères arbitraires dans les extraits URL. De ce fait, quand vous créez des permaliens manuellement vous pouvez choisir d'ignorer le codage URL.
|
||||
Aussi bien le tiddler cible que le déroulé filtre seront encodé (mais pas le séparateur ":"). TiddlyWiki génère des URLs encodées correctement qui peuvent paraître un peu "moche". Cependant, dans la pratique les navigateurs parviennent heureusement et parfaitement à interpréter des caractères arbitraires dans les extraits URL. De ce fait, quand vous créez des permaliens manuellement vous pouvez choisir d'ignorer le codage URL.
|
||||
|
||||
! Comportement de <<tw>> avec les Permaliens
|
||||
! Comportement de TiddlyWiki avec les Permaliens
|
||||
|
||||
Deux aspects importants du comportement de <<tw>> avec les permaliens peuvent être réglés avec les options de l'onglet ''Réglages avancés'' du <<.icon $:/core/images/options-button>> $:/ControlPanel <<:>>
|
||||
Deux aspects importants du comportement de TiddliWiki avec les permaliens peuvent être réglés avec les options de l'onglet ''Réglages avancés'' du $:/ControlPanel <<:>>
|
||||
|
||||
* d'une part la mise à jour automatique de la zone d'adresse à chaque navigation, et dans ce cas s'il faut inclure la séquence du déroulé aussi bien que le tiddler cible
|
||||
* d'autre part si les mises à jour de la zone d'adresse doivent affecter l'historique du navigateur. Par défaut, c'est ''non''<<;>> mais lorsque ''oui'' est sélectionné, vous pouvez reprendre votre navigation entre les tiddlers en utilisant les boutons avancer et reculer du navigateur
|
||||
* d'autre part si les mises à jour de la zone d'adresse doivent affecter l'historique du navigateur. Par défaut, c'est ''non''<<;>> mais lorsque que ''oui'' est sélectionné, vous pouvez reprendre votre navigation entre les tiddlers en utilisant les boutons avancer et reculer du navigateur
|
||||
|
||||
Notez que saisir un permalien ou s'y rendre causera toujours le traitement du permalien, ainsi que l'ouverture et la fermeture des tiddlers appropriés en fonction de son contenu.
|
||||
Notez que saisir un permalien ou s'y rendre causera toujours le traitement du permalien, et les tiddlers ouverts ou fermés en fonction de lui.
|
||||
|
||||
!! Détails techniques
|
||||
|
||||
Quand <<tw>> se lance il traite les permaliens selon les étapes ci-dessous<<;>> ces même étapes sont répétées dynamiquement lors des modifications du permalien (ce qui survient en réaction à l'édition de la barre d'adresse par l'utilisateur, par exemple).
|
||||
Quand TiddlyWiki se lance il traite les permaliens selon les étapes suivantes<<;>> les même étapes sont répétées dynamiquement lors des modifications du permalien (cela survient en réaction à l'édition par l'adresse de la barre d'adresse, par exemple).
|
||||
|
||||
# Si le permalien contient un <<gf ":">>, traiter la chaine précédente comme la ''cible'' et la chaine qui suit comme le ''filtre du déroulé''
|
||||
# Si <<gf ":">> est absent, traiter toute la chaine comme la ''cible'' et marquer le ''filtre du déroulé'' comme //non-spécifié//
|
||||
# Si le ''filtre du déroulé'' est //non-spécifié// pendant le processus de lancement, alors mettre une chaine vide dans le ''filtre du déroulé'' si la ''cible'' est spécifiée, ou les tiddlers par défaut si la ''cible'' n'est pas spécifiée
|
||||
# Si le ''filtre du déroulé'' est //non-spécifié// hors du processus de lancement, alors affecter le ''filtre du déroulé'' au déroulé actuel
|
||||
# Si le permalien contient un ":", traiter la chaine précédente comme la cible et la chaine qui suit comme le ''filtre du déroulé''
|
||||
# Si ":" est absent, traiter toute la chaine comme la ''cible'' et marquer le ''filtre du déroulé'' comme //non-spécifié//
|
||||
# Si le ''filtre du déroulé'' est //non-spécifié// dans le processus de lancement, alors mettre une chaine vide dans le ''filtre du déroulé'' si la ''cible'' est spécifiée, ou aux tiddlers par défaut si la ''cible'' n'est pas spécifiée
|
||||
# Si le ''filtre du déroulé'' est //non-spécifié// hors du processus de lancement, alors affecter le déroulé actuel au ''filtre du déroulé''
|
||||
# Évaluer le ''filtre du déroulé'' comme ''liste du déroulé''
|
||||
# Si la ''cible'' est spécifiée et absente de la ''liste du déroulé'' alors l'ajouter au début
|
||||
# Si la ''cible'' est spécifiée alors s'y rendre, autrement naviguer au premier tiddler de la ''liste du déroulé''
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
created: 20131128075743966
|
||||
fr-title: Philosophie des tiddlers
|
||||
modified: 20220220004339779
|
||||
modified: 20141203144108401
|
||||
tags: Learning
|
||||
title: Philosophy of Tiddlers
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -9,4 +9,4 @@ Lorsqu'on enregistre et organise des informations, on se donne pour objectif de
|
||||
|
||||
La philosophie des [[tiddlers|Tiddlers]] consiste à maximiser les possibilités de réutilisation en découpant l'information en unités sémantiques aussi petites que possible, grâce à une [[modélisation riche des relations entre elles|Structuring TiddlyWiki]]. On utilise ensuite l'agrégation et la composition pour tisser les fragments entre eux afin de construire des déroulés cohérents.
|
||||
|
||||
<<tw>> a pour ambition de proposer une algèbre pour les tiddlers<<dp>> une manière concise d'exprimer et d'explorer les relations entre les diverses bribes d'information.
|
||||
TiddlyWiki a pour ambition de proposer une algèbre pour les tiddlers<<dp>> une manière concise d'exprimer et d'explorer les relations entre les diverses pièces d'information.
|
||||
|
||||
@@ -1,69 +1,10 @@
|
||||
created: 20140912140651119
|
||||
fr-title: Sauvegarder les modifications
|
||||
list:
|
||||
modified: 20220217174230426
|
||||
saving-browser: Firefox Chrome Edge [[Internet Explorer]] Safari Opera
|
||||
saving-os: Windows Mac Linux Android iOS
|
||||
created: 20140912140651119
|
||||
modified: 20141116123050408
|
||||
tags: [[Working with TiddlyWiki]]
|
||||
title: Saving
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
\define alltagsfilter()
|
||||
<$vars tag1="tag[" tag2="]" lb="[" rb="tag[Saving]sort[delivery]]">
|
||||
<$set filter="[list[]addprefix<tag1>addsuffix<tag2>]+[join[]addprefix<lb>addsuffix<rb>]" name="alltags" select=0>
|
||||
<$text text=<<alltags>>/>
|
||||
</$set>
|
||||
</$vars>
|
||||
\end
|
||||
Voici les méthodes disponibles pour sauvegarder vos modifications avec TiddlyWiki<<dp>>
|
||||
|
||||
\define saverssidebaritem(item:"Linux")
|
||||
<$checkbox tiddler=<<qualify $:/temp/$item$>> field="status" checked="selected" checkactions=<<checkactions "$item$">> uncheckactions=<<uncheckactions "$item$">> default="closed"> $item$</$checkbox><br/>
|
||||
\end
|
||||
|
||||
\define saverssidebaritemlist(fieldname:"os")
|
||||
<$list filter="[enlist{!!$fieldname$}]" variable="currentItem">
|
||||
<$macrocall $name="saverssidebaritem" item=<<currentItem>>/>
|
||||
</$list>
|
||||
\end
|
||||
|
||||
\define uncheckactions(item:"Linux")
|
||||
<$action-listops $subfilter="-[[$item$]]"/>
|
||||
\end
|
||||
|
||||
\define checkactions(item:"Linux")
|
||||
<$action-listops $subfilter="[[$item$]]"/>
|
||||
\end
|
||||
|
||||
\define uncheckactions(item:"Linux")
|
||||
<$action-listops $subfilter="-[[$item$]]"/>
|
||||
\end
|
||||
|
||||
Méthodes disponibles pour enregistrer les modifications avec <<tw>><<:>>
|
||||
|
||||
<div class="tc-wrapper-flex">
|
||||
<div class="tc-saving-sidebar">
|
||||
<div class="tc-saving-sidebar-category">
|
||||
<div class="tc-saving-sidebar-category-title">Plateforme</div>
|
||||
<div class="tc-saving-sidebar-category-item">
|
||||
<<saverssidebaritemlist "saving-os">>
|
||||
</div>
|
||||
</div>
|
||||
<div class="tc-saving-sidebar-category">
|
||||
<div class="tc-saving-sidebar-category-title">Navigateur internet</div>
|
||||
<div class="tc-saving-sidebar-category-item">
|
||||
<<saverssidebaritemlist "saving-browser">>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<!-- Page content -->
|
||||
<div class="content">
|
||||
<$wikify text=<<alltagsfilter>> name="alltagsfilterwikified">
|
||||
<$list filter=<<alltagsfilterwikified>>>
|
||||
{{||$:/_tw5.com-card-template}}
|
||||
</$list>
|
||||
</$wikify>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<<list-links "[tag[Saving]]">>
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
created: 20201228143125000
|
||||
fr-title: Plugin de partage
|
||||
modified: 20220221010033461
|
||||
tags: OfficialPlugins
|
||||
title: Share Plugin
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
<div class="tc-message-box">N'installez ce plugin que si vous comprenez ce qu'il fait !</div>
|
||||
|
||||
Ce plugin expérimental fournit des outils pour partager des tiddlers via des URLs, comme<<:>>
|
||||
|
||||
* La possibilité de charger un groupe de tiddlers grâce à une //adresse hachée// au démarrage
|
||||
* Un assistant et des modèles pour créer des URLs à partir d'un groupe de tiddlers
|
||||
|
||||
Dans la [[bibliothèque des plugins|Installing a plugin from the plugin library]], vous trouverez le plugin de partage sous le nom <<gf "Share Plugin">>.
|
||||
@@ -1,18 +0,0 @@
|
||||
created: 20140908163900000
|
||||
fr-title: Partager vos tiddlers avec d'autres
|
||||
modified: 20220221004623008
|
||||
tags: Learning
|
||||
title: Sharing your tiddlers with others
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Il existe plusieurs façons de partager des [[tiddlers|Tiddlers]] ou votre <<tw>> complet<<:>>
|
||||
|
||||
*Vous pouvez joindre un <<tw>> à un courriel
|
||||
*Vous pouvez publier votre <<tw>> en ligne, et envoyer le lien dans un message<<:>>
|
||||
**un lien vers l'URL du fichier lui-même
|
||||
**un [[permalien|PermaLinks]] (<<.icon $:/core/images/permalink-button>>) vers un tiddler spécifique
|
||||
**Un lien [[permaview|PermaView]] (<<.icon $:/core/images/permaview-button>>) de tous les tiddlers ouverts
|
||||
* Vous pouvez [[partager un lien Dropbox vers votre TiddlyWiki|Sharing a TiddlyWiki on Dropbox]]
|
||||
* Vous pouvez [[exporter des tiddlers|How to export tiddlers]] (<<.icon $:/core/images/export-button>>) dans plusieurs formats de fichiers tels que texte (.TID), HTML statique, JSON et CSV (valeurs séparées par des virgules, compatibles avec les tableurs)
|
||||
* Vous pouvez aussi partager des tiddlers simplement en rendant votre <<tw>> accessible aux autres, par exemple en le publiant en ligne, ce qui leur permettra [[d'importer des tiddlers|Importing Tiddlers]] qu'il contient
|
||||
* Il y a un [[plugin de partage|Share Plugin]] expérimental que vous pouvez utiliser pour partager des tiddlers grâce à une URL spécialement conçue à cet effet.
|
||||
@@ -1,6 +1,6 @@
|
||||
created: 20140122085818089
|
||||
fr-title: Partager un TiddlyWiki avec Dropbox
|
||||
modified: 20220222195202852
|
||||
modified: 20150616132729523
|
||||
tags: Learning
|
||||
title: Sharing a TiddlyWiki on Dropbox
|
||||
type: text/vnd.tiddlywiki
|
||||
@@ -9,18 +9,10 @@ Vous pouvez travailler sur un fichier TiddlyWiki dans Dropbox et publier un lien
|
||||
|
||||
# Mettez votre fichier TiddlyWiki dans un répertoire Dropbox
|
||||
# Choisir l'option "Partager lien" de Dropbox pour avoir un lien d'accès publique au fichier
|
||||
#* Dans l'interface web de Dropbox, c'est possible en cliquant sur l'icone du lien qui apparait au survol du fichier. Dropbox ajoute aussi un élément "Lien Partagé" au menu contextuel du Finder sur OS X et de l'Explorateur Windows
|
||||
#* Dans l'interface web de Dropbox, c'est possible en cliquant sur l'icone du lien qui apparait au survol du fichier. Dropbox ajoute aussi un élément "Lien Partagé" du menu contextuel du Finder sur OS X et de l'Explorer de Windows
|
||||
# L'URL générée par Dropbox aura cette forme<<:>>
|
||||
#> `https://www.dropbox.com/s/<gobbledegook>/mywiki.html`
|
||||
# Modifier l'URL ainsi, en préservant soigneusement le //gobbledegook//<<:>>
|
||||
# Modifier l'URL ainsi, en préservant soigneusement le gobbledegook:
|
||||
#> `https://dl.dropboxusercontent.com/s/<gobbledegook>/mywiki.html`
|
||||
|
||||
Le résultat est une URL "secrète" que vous pouvez envoyer à d'autres personnes qui auront alors la capacité de découvrir le wiki.
|
||||
|
||||
----
|
||||
|
||||
Entrez une URL générée par Dropbox ci-dessous et vous pourrez copier-coller l'URL secrète correspondante, ou l'ouvrir en cliquant sur <<gf open>><<:>>
|
||||
|
||||
<$edit-text tiddler="$:/temp/dropboxurl" default="https://www.dropbox.com/s/<gobbledegook>/mywiki.html" tag="input" type="text" size="60"/>
|
||||
|
||||
<$macrocall $name="dropbox-url" url={{$:/temp/dropboxurl}}/>
|
||||
Le résultat est une URL "secrète" URL que vous pouvez envoyer à d'autres personnes qui auront alors la capacité de découvrir le wiki.
|
||||
@@ -0,0 +1,16 @@
|
||||
created: 20140908163900000
|
||||
fr-title: Partager vos tiddlers avec d'autres
|
||||
modified: 20150614075725437
|
||||
tags: Learning
|
||||
title: Sharing your tiddlers with others
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Il y a plusieurs façon d'être la source ou la destination d'un partage de tiddlers <<:>>
|
||||
|
||||
*Vous pouvez joindre un ~TiddlyWiki à un courriel
|
||||
*Vous pouvez publier votre ~TiddlyWiki en ligne, et envoyer le lien dans un message<<:>>
|
||||
**un lien vers l'URL du fichier lui-même
|
||||
**un permalien vers un tiddler spécifique (see [[Permaliens|PermaLinks]])
|
||||
**Un lien permaview de tous les tiddlers courant ouverts (see [[PermaView]])
|
||||
*Vous pouvez récupérer des tiddlers de ~TiddlyWikis publiés en ligne par d'autres en cliquant sur un lien vers le tiddler dans leur fichiers, et par un copier-coller du lien dans votre propre fichier. Un tiddler d'import apparaitra, et vous pourrez cliquer pour importer le ou les tiddler/s dans votre fichier.
|
||||
* Vous pouvez [[partager un lien Dropbox vers votre TiddlyWiki|Sharing a TiddlyWiki on Dropbox]]
|
||||
@@ -1,13 +1,13 @@
|
||||
created: 20131128090536894
|
||||
fr-title: Structurer TiddlyWiki
|
||||
modified: 20220220003638545
|
||||
modified: 20150620093923918
|
||||
tags: [[Working with TiddlyWiki]]
|
||||
title: Structuring TiddlyWiki
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
TiddlyWiki5 fournit plusieurs fonctionnalités qui vous aideront à structurer les informations sous forme de [[tiddlers|Tiddlers]], et à modéliser les relations entre eux<<:>>
|
||||
TiddlyWiki5 fournit plusieurs fonctionnalités qui vous aideront à structurer les informations sous forme de [[tiddlers|Tiddlers]], et à modéliser les relations entre eux<<dp>>
|
||||
|
||||
* <<fr TiddlerLinks>>
|
||||
* <<fr Tagging>>
|
||||
* <<fr "Title List">>
|
||||
* <<fr DataTiddlers>>
|
||||
* [[Liens dans un tiddler|TiddlerLinks]]
|
||||
* [[Étiqueter par tag|Tagging]]
|
||||
* [[Tiddler de listes|ListWidget]]
|
||||
* [[Tiddlers de données|DataTiddlers]]
|
||||
|
||||
@@ -1,31 +1,30 @@
|
||||
caption: Styles et Classes
|
||||
created: 20131205160532119
|
||||
fr-title: Styles et Classes en WikiTexte
|
||||
modified: 20220304133607415
|
||||
modified: 20141116085003914
|
||||
tags: WikiText
|
||||
title: Styles and Classes in WikiText
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Vous pouvez utiliser cette structure pour affecter un style ou des classes CSS au contenu encadré<<:>>
|
||||
You can use this construction to cause the wrapped content to be assigned specified CSS classes or styles:
|
||||
|
||||
<<wikitext-example src:"@@.monStyle
|
||||
* Liste Une
|
||||
* Liste Deux
|
||||
<<wikitext-example src:"@@.myStyle
|
||||
* List One
|
||||
* List Two
|
||||
@@
|
||||
">>
|
||||
|
||||
Une syntaxe similaire permet d'affecter des styles. Par exemple<<:>>
|
||||
Similar syntax is used to assign styles. For example:
|
||||
|
||||
<<wikitext-example src:"@@background-color:red;
|
||||
* Liste Une
|
||||
* Liste Deux
|
||||
* List One
|
||||
* List Two
|
||||
@@
|
||||
">>
|
||||
|
||||
Plusieurs styles et classes peuvent être affectés en même temps<<:>>
|
||||
Multiple styles and classes can be mixed. For example:
|
||||
|
||||
<<wikitext-example src:"@@.tc-tiddler-frame
|
||||
@@width:400px;
|
||||
Du texte
|
||||
Some text
|
||||
@@
|
||||
">>
|
||||
|
||||
@@ -1,41 +1,35 @@
|
||||
created: 20140904075400000
|
||||
fr-title: Étiqueter par tag
|
||||
modified: 20220220002448916
|
||||
modified: 20150624092812640
|
||||
tags: [[Working with TiddlyWiki]] Concepts
|
||||
title: Tagging
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
L'étiquetage des tiddlers permet de les organiser en catégories. Par exemple, les tiddlers représentant des individus pourraient être étiquetés avec les tags ''ami'', ''famille'', ''collègue'', etc. pour indiquer leur relation avec l'auteur.
|
||||
|
||||
Un tag est en fait un simple tiddler (ou un tiddler potentiel), qui peut lui-même avoir ses propres tags. Plusieurs tags peuvent être appliqués au même tiddler.
|
||||
|
||||
Voir <<fr "Creating and editing tiddlers">> pour des instructions sur la façon d'étiqueter les tiddlers.
|
||||
Étiqueter un tiddler consiste à assigner par un tag à un tiddler une catégorie de votre choix (voir [[Créer et éditer des tiddlers|Creating and editing tiddlers]] pour des instructions sur la manière de taguer). Par exemple, les tiddlers représentant des individus pourraient être étiquetés par les tags ''ami'', ''famille'', ''collègue'', etc. pour indiquer leur relation avec l'auteur. Plusieurs tags peuvent être appliqués au même tiddler.
|
||||
|
||||
Le fait d'étiqueter les tiddlers vous procure de nombreux moyens supplémentaires de visualiser, parcourir, et organiser vos informations<<:>>
|
||||
|
||||
* Les pastilles colorées pour chaque tag d'un tiddler vous donnent accès à tous les autres tiddlers portant le même tag, ainsi qu'au tiddler correspondant au tag lui-même.
|
||||
|
||||
* Lorsqu'un tiddler est utilisé pour étiqueter d'autres tiddlers, l'onglet ''Étiquetage'' dans son [[panneau d'informations|InfoPanel]] liste tous les tiddlers tagués avec le titre du tiddler courant.
|
||||
|
||||
* L'onglet ''Plus'' de la barre latérale contient un onglet ''Tags'' qui permet de visualiser tous vos tags et d'accéder à vos tiddlers étiquetés.
|
||||
|
||||
* Vous pouvez utiliser des [[filtres|Filters]] pour créer des listes de tiddlers selon leurs tags, puis afficher toute combinaison de [[champs|TiddlerFields]] souhaitée. Par exemple, vous pouvez créer un glossaire en listant le titre et le texte de tous les tiddlers étiquetés //Glossaire//. De telles listes peuvent être formatées à votre goût<<:>> avec des puces, des nombres, ou séparées par des virgules, etc.
|
||||
|
||||
* Les <<gf "tags système">> contrôlent la mise en forme des tiddlers et de la page <<tw>> dans son ensemble. Voir les instructions correspondantes dans <<fr "Page and tiddler layout customisation">>.
|
||||
* Les pastilles colorées pour chaque tag d'un tiddler vous donnent accès à tous les autres tiddlers de même tag, ainsi qu'au tiddler correspondant au tag lui-même.
|
||||
* L'onglet //Étiqueté// dans le panneau d'informations du tiddler (accessible en cliquant sur le bouton {{$:/core/images/info-button}}) vous donne les liens vers tous les tiddlers tagués avec le titre du tiddler courant.
|
||||
* Vous pouvez utiliser l'onglet Tags dans l'onglet Plus de la barre latérale pour visualiser tous vos tags et accéder à vos tiddlers étiquetés.
|
||||
* Vous pouvez utiliser des [[filtres|Filters]] pour créer des listes de tiddlers selon leurs tags, puis afficher toute combinaison de champs souhaitée. Par exemple, vous pouvez créer une liste qui montre à la fois le titre et le texte de tous les tiddlers étiquetés //Glossaire//. Ces listes peuvent être formatées à votre goût<<:>> avec des puces, des nombres, ou séparées par des virgules, etc.
|
||||
* Les tags <<gf système>> peuvent servir à personnaliser la mise en forme des tiddlers et de la page ~TiddlyWiki dans son ensemble. Voir les instructions correspondantes dans [[Personnalisation de la mise en forme de la page et des tiddlers|Page and tiddler layout customisation]].
|
||||
|
||||
Encore deux choses que les tags permettent de faire<<:>>
|
||||
|
||||
! Affecter des couleurs et des icônes à un tag
|
||||
! Affecter des couleurs et des icones à un tag
|
||||
|
||||
Vous pouvez utiliser le <<.icon $:/core/images/tag-button>> [[gestionnaire de tags|$:/TagManager]], présent dans l'onglet ''Tags'' de l'onglet ''Plus'' de la barre latérale, pour affecter une couleur de fond et/ou une icône à un tag.
|
||||
Vous pouvez utiliser le [[gestionnaire de tags|$:/TagManager]], présent dans l'onglet Tags de l'onglet Plus de la barre latérale, pour affecter une couleur de fond et/ou une icone à un tag.
|
||||
|
||||
* Les couleurs peuvent être affectées à un tag en cliquant sur le bouton de la colonne des couleurs et en sélectionnant une proposition. Sinon, spécifiez la valeur [[CSS]] de la couleur dans la zone de saisie accessible en cliquant sur le bouton <<.icon $:/core/images/info-button>>.
|
||||
* Les icônes peuvent être affectées à un tag en cliquant sur le bouton <<.icon $:/core/images/down-arrow>> dans la colonne des icônes et en choisissant une des icônes proposées.
|
||||
* Les couleurs peuvent être affectées à un tag soit en spécifiant la valeur CSS de la couleur dans la fenêtre supérieure dans la colonne des couleurs, soit en choisissant une couleur à partir du menu déroulant proposé.
|
||||
* Les icones peuvent être affectées à un tag en cliquant sur le bouton {{$:/core/images/down-arrow}} dans la colonne des icones et en choisissant une des icones proposées.
|
||||
|
||||
! Changer l'ordre dans lequel les tiddlers sont listés
|
||||
! Utiliser des champs `list` pour ajuster l'ordre des listes par tag
|
||||
|
||||
Par défaut, les tiddlers tagués sont listés dans l'ordre alphabétique.
|
||||
Si vous voulez créer une liste de tiddlers à l'aide d'un [[filtre|Filters]] à partir d'un tag qu'ils ont en commun, en les triant selon un ordre particulier plutôt que selon l'ordre alphabétique par défaut, vous pouvez créer un champ appelé 'list' dans le tiddler du tag lui-même, et y ajouter les titres des tiddlers à ordonner dans l'ordre désiré. ~TiddlyWiki triera les listes de tiddlers tagués dans l'ordre de priorité suivant<<:>>
|
||||
|
||||
Si vous voulez un ordre différent, ajoutez un champ `list` au tiddler du tag, et affectez lui comme valeur la [[liste de ses tiddlers|Title List]] dans l'ordre choisi.
|
||||
|
||||
Le champ `list` n'a pas besoin de contenir tous les tiddlers. <<tw>> utilise des [[règles précises|Order of Tagged Tiddlers]] pour trier les tiddlers tagués.
|
||||
* Premièrement, les tiddlers placés dans le [[champ list|ListField]] du tiddler de tag seront placés dans une nouvelle liste dans le même ordre
|
||||
* Deuxièmement, tout tiddler sans place fixe mais disposant d'un champ ''list-before'' sera placé avant le tiddler indiqué dans le champ
|
||||
** (si le champ ''list-before'' est vide, alors le tiddler sans place prédéfinie sera placé au début de la liste)
|
||||
* Troisièmement, tout tiddler sans place prédéfinie disposant d'un champ ''list-after'' sera placé juste après le tiddler indiqué dans le champ
|
||||
* Enfin, tout tiddler n'ayant toujours pas de place prédéfinie sera placé à la fin de la liste
|
||||
|
||||
@@ -1,14 +1,12 @@
|
||||
created: 20130825213300000
|
||||
fr-title: Exemple de gestion de tâches
|
||||
modified: 20220226174224424
|
||||
modified: 20160523100238122
|
||||
tags: Learning
|
||||
title: TaskManagementExample
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
TiddlyWiki5 peut servir de système de gestion de tâches simple sans personnalisation supplémentaires. L'idée est que les tâches soient taguées avec `task`, celles étant terminées portant également le tag `done`. De cette manière, il est très simple de générer des listes de tâches.
|
||||
|
||||
<<.tip """Il y a [[une version améliorée de cet exemple|TaskManagementExample (Draggable)]] qui ajoute la possibilité de réordonner les tâches par glisser-déposer.""">>
|
||||
|
||||
! Tâches à effectuer
|
||||
|
||||
<$list filter="[!has[draft.of]tag[task]!tag[done]sort[created]]">
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
created: 20130825202900000
|
||||
fr-title: Liens dans un Tiddler
|
||||
modified: 20220219170847313
|
||||
modified: 20150624092911695
|
||||
tags: Concepts
|
||||
title: TiddlerLinks
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
Les liens sont des éléments d'un tiddler où cliquer engendre la navigation vers un tiddler différent. Le comportement d'une navigation est déterminé par le StoryView (la vue) en cours<<:>> par défaut, la vue classique de TiddlyWiki montre son déroulé comme une suite linéaire de tiddlers.
|
||||
Les liens sont des éléments d'un tiddler où cliquer engendre la navigation vers un tiddler différent. Le comportement d'une navigation est déterminé par le StoryView (la vue) en cours<<;>> par défaut, la vue classique de TiddlyWiki montre son déroulé comme une suite linéaire de tiddlers.
|
||||
|
||||
Presser la touche ''control'' ou ''command'' en cliquant sur le lien d'un link ouvre le tiddler cible sans s'y déplacer. Cela peut-être un moyen pratique de dresser une suite de tiddlers à lire plus tard.
|
||||
|
||||
@@ -13,12 +13,12 @@ Les liens sont utiles pour modéliser des relations organiques entre tiddlers, e
|
||||
|
||||
Le [[panneau d'information|InfoPanel]] liste la provenance des liens vers un tiddler dans l'onglet ''References''.
|
||||
|
||||
Les [[filtres|Filters]] peuvent inclure les opérateur de filtrage suivant qui fonctionnent avec les liens<<:>>
|
||||
Les [[filtres|Filters]] peuvent inclure les opérateur de filtrage suivant qui fonctionnent avec les liens<<:>>
|
||||
|
||||
* `[links[]]` - renvoie les titres des tiddlers dont les liens proviennent de la sélection des tiddler(s) en cours
|
||||
* `[backlinks[]]` - renvoie les titres des tiddlers destination des liens des tiddler(s) en cours sélectionnés
|
||||
|
||||
TiddlyWiki5 modifie l'apparence des liens des tiddlers pour donner plus d'informations sur la cible du lien<<:>>
|
||||
TiddlyWiki5 modifie l'apparence des liens des tiddlers pour donner plus d'informations sur la cible du lien<<:>>
|
||||
|
||||
|!Description lien |!Affichage lien |
|
||||
|Vers tiddler existant |[[Ainsi|TiddlerLinks]] |
|
||||
@@ -26,4 +26,4 @@ TiddlyWiki5 modifie l'apparence des liens des tiddlers pour donner plus d'inform
|
||||
|Vers tiddler shadow non remplacé |[[Ainsi|$:/core/copyright.txt]] |
|
||||
|Vers tiddler shadow remplacé par un tiddler ordinaire|[[Ainsi|$:/SiteTitle]] |
|
||||
|
||||
Les liens externes sont affichés comme ceci<<:>> https://tiddlywiki.com/ ou [[comme ça|https://tiddlywiki.com/]].
|
||||
Les liens externes sont affichés comme ceci<<:>> https://tiddlywiki.com/ ou [[comme ça|https://tiddlywiki.com/]].
|
||||
@@ -1,46 +0,0 @@
|
||||
created: 20171109170823847
|
||||
fr-title: L'apocalypse de TiddlyFox
|
||||
modified: 20220217174448054
|
||||
tags: TiddlyFox
|
||||
title: TiddlyFox Apocalypse
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
! Résumé
|
||||
|
||||
Le 14 novembre 2017 Mozilla [[a publié Firefox 57|https://blog.mozilla.org/blog/2017/09/26/firefox-quantum-beta-developer-edition/]], une nouvelle version majeure comprenant de nombreuses améliorations et correctifs de sécurité. Toutefois, ces améliorations comportaient ''des changements fondamentaux du modèle de sécurité qui ont eu comme effet indésirable d'empêcher ~TiddlyFox de fonctionner''.
|
||||
|
||||
TiddlyFox restera disponible pour les [[utilisateurs d'anciennes versions de Firefox|https://groups.google.com/d/topic/tiddlywiki/OJQ0yRq4zog/discussion]], mais ceux qui passeront à une version plus récente devront choisir une autre façon de gérer la sauvegarde des modifications avec TiddlyWiki.
|
||||
|
||||
Heureusement, il existe de nouvelles façons de travailler avec TiddlyWiki et les utilisateurs ont de nombreux choix alternatifs (voir les détails dans <<fr GettingStarted>>). La disparition de TiddlyFox a provoqué plusieurs de ces développements récents et pourrait finalement être bénéfique pour la communauté.
|
||||
|
||||
Ces développements font l'objet d'une [[discussion|https://groups.google.com/d/topic/tiddlywiki/LcldXzPlTK0/discussion]] sur les forums TiddlyWiki.
|
||||
|
||||
! Contexte
|
||||
|
||||
Firefox a été initialement publié en novembre 2004, quelques mois après la première version de TiddlyWiki. C'était très comparable au Faucon Millénium pour l'Étoile de la Mort de Microsoft (incarnée par Internet Explorer). IE écrasait depuis 5 ans le marché des navigateurs, provoquant la frustration de nombreux développeurs web face aux extensions au HTML de Microsoft qui étaient devenus des standards //de facto// au détriment d'une innovation qui aurait pu bénéficier à l'ensemble de la communauté web.
|
||||
|
||||
Firefox a vite eu du succès car il réussissait à afficher les pages web avec un rendu assez proche d'Internet Explorer tout en offrant une meilleure expérience utilisateur. Ses avantages résidaient en grande partie dans la possibilité offerte à l'utilisateur de modifier chaque aspect du navigateur. Deux innovations étaient à l'origine de cette capacité<<:>>
|
||||
|
||||
* L'intégralité de l'interface utilisateur du navigateur était écrite en [[XUL|https://en.wikipedia.org/wiki/XUL]], une extension au HTML qui lui permettait d'afficher des interface utilisateur conventionnelles (à l'époque, le HTML était limité à un simple rendu de documents structurés). Ajuster quelques lignes de code en XUL pouvait radicalement transformer l'interface du navigateur.
|
||||
* L'architecture d'extensions de Mozilla donnait les pleins pouvoirs aux extensions, leur permettant d'observer et d'interagir profondément avec le moteur du navigateur lui-même, ainsi qu'avec le système de fichiers de l'ordinateur sur lequel il s'exécutait.
|
||||
|
||||
Ces deux conditions permirent l'épanouissement d'un large écosystème d'extensions autour de Firefox, pour certaines extrêmement populaires. Dans de nombreux cas, les innovations apportées par des extensions furent ensuite intégrées dans le navigateur, en particulier le débogueur [[Firebug|https://en.wikipedia.org/wiki/Firebug_(software)]] qui fut par la suite cloné par tous les éditeurs de navigateurs.
|
||||
|
||||
Firefox resta très populaire jusqu'à ce que Google rejoigne le développement du moteur rival ~WebKit pour développer Chome. Google choisit une approche très différente des compromis au cœur d'un navigateur, se concentrant sur l'amélioration de la sécurité au détriment de toute autre considération. Ils innovèrent avec l'isolation de chaque onglet dans un processus dédié, qui fut rapidement repris par les principaux navigateurs concurrents.
|
||||
|
||||
L'orientation de Google les empêcha d'adopter l'approche libertaire de Mozilla pour les extensions. Au lieu d'avoir accès à tout l'environnement du navigateur et au système, les extensions de Chrome ne voient qu'une petite partie de ce qui se passe dans le navigateur, et n'ont qu'un accès minimal aux ressources de l'hôte.
|
||||
|
||||
Le ralliement de Mozilla à l'approche de la [[sécurité des extensions de navigateurs|https://support.mozilla.org/en-US/kb/firefox-add-technology-modernizing]] de Google était inévitable. A ce point, Mozilla aurait été irresponsable de publier un navigateur construit sur un modèle de sécurité notoirement inférieur à celui du leader du marché.
|
||||
|
||||
! Leçons
|
||||
|
||||
Une partie de la fécondité de l'écosystème autour de TiddlyWiki provient de l'adoption des deux principes de Firefox cités précédemment<<:>>
|
||||
|
||||
* Construire l'interface utilisateur de l'application avec les mêmes primitives que son contenu
|
||||
* Permettre aux extensions d'accéder et interagir librement avec la logique interne de l'application.
|
||||
|
||||
Ces deux caractéristiques confrontent TiddlyWiki aux mêmes défis de sécurité que Firefox en son temps. Un TiddlyWiki orienté principalement vers la sécurité serait contraint de réduire ces possibilités.
|
||||
|
||||
! Le futur
|
||||
|
||||
Dans le domaine des interfaces basées sur les navigateurs et des interactions utilisateur, l'innovation a maintenant quitté les extensions pour migrer vers une nouvelle génération d'environnements qui simplifient la créations de navigateurs sur-mesure basés sur des moteurs de rendu HTML libres sur étagère. Ainsi, TiddlyDesktop utilise [[nwjs|https://nwjs.io]], et [[Beaker Browser]] utilise une alternative nommée [[Electron|https://electron.atom.io/]].
|
||||
@@ -1,20 +1,17 @@
|
||||
created: 20130825161100000
|
||||
modified: 20220217174534558
|
||||
modified: 20160602060511458
|
||||
tags: Definitions
|
||||
title: TiddlyFox
|
||||
type: text/vnd.tiddlywiki
|
||||
|
||||
//~TiddlyFox// est une extension pour Firefox qui permet aux fichiers <<tw>> autonomes d'enregistrer leurs modifications directement sur le système de fichiers. //~TiddlyFox// fonctionne aussi bien sur les versions station de travail que mobile de [[Firefox]]. Voir [[Enregistrer avec TiddlyFox|Saving with TiddlyFox]] ou [[Enregistrer avec TiddlyFox pour Android|Saving with TiddlyFox on Android]] pour des instructions détaillées.
|
||||
|
||||
~TiddlyFox est maintenant obsolète car il n'est plus compatible avec les dernières versions de Firefox (voir <<fr "TiddlyFox Apocalypse">>). Il existe de nombreuses alternatives à ~TiddlyFox, mais aucune ne fonctionne exactement de la même façon. Voir <<fr GettingStarted>> pour plus d'informations.
|
||||
|
||||
|
||||
//~TiddlyFox// peut être téléchargé depuis le site //Mozilla Addons//<<:>>
|
||||
//~TiddlyFox// peut être téléchargé depuis le site //Mozilla Addons//<<dp>>
|
||||
|
||||
https://addons.mozilla.org/fr/firefox/addon/tiddlyfox/
|
||||
|
||||
<<<
|
||||
Vous pouvez également installer la dernière version de développement de ~TiddlyFox directement depuis GitHub<<:>>
|
||||
Vous pouvez également installer la dernière version de développement de ~TiddlyFox directement depuis GitHub<<dp>>
|
||||
|
||||
https://github.com/TiddlyWiki/TiddlyFox/raw/master/tiddlyfox.xpi
|
||||
<<<
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user