1
0
mirror of https://github.com/Jermolene/TiddlyWiki5 synced 2024-06-29 00:33:15 +00:00

Add switch for enabling duplicates within filters

Along with some suitably eye catching notification messages
This commit is contained in:
Jermolene 2019-02-21 15:32:36 +00:00
parent 810033bd71
commit 5376f4953c
3 changed files with 147 additions and 22 deletions

View File

@ -76,34 +76,42 @@ Push entries onto an array, removing them first if they already exist in the arr
$tw.utils.pushTop = function(array,value) { $tw.utils.pushTop = function(array,value) {
var t,p; var t,p;
if($tw.utils.isArray(value)) { if($tw.utils.isArray(value)) {
// Remove any array entries that are duplicated in the new values if($tw.config._temp_allowDuplicates) {
if(value.length !== 0) { Array.prototype.push.apply(array,value);
if(array.length !== 0) { } else {
if(value.length < array.length) { // Remove any array entries that are duplicated in the new values
for(t=0; t<value.length; t++) { if(value.length !== 0) {
p = array.indexOf(value[t]); if(array.length !== 0) {
if(p !== -1) { if(value.length < array.length) {
array.splice(p,1); for(t=0; t<value.length; t++) {
p = array.indexOf(value[t]);
if(p !== -1) {
array.splice(p,1);
}
} }
} } else {
} else { for(t=array.length-1; t>=0; t--) {
for(t=array.length-1; t>=0; t--) { p = value.indexOf(array[t]);
p = value.indexOf(array[t]); if(p !== -1) {
if(p !== -1) { array.splice(t,1);
array.splice(t,1); }
} }
} }
} }
} // Push the values on top of the main array
// Push the values on top of the main array Array.prototype.push.apply(array,value);
array.push.apply(array,value); }
} }
} else { } else {
p = array.indexOf(value); if($tw.config._temp_allowDuplicates) {
if(p !== -1) { array.push(value);
array.splice(p,1); } else {
p = array.indexOf(value);
if(p !== -1) {
array.splice(p,1);
}
array.push(value);
} }
array.push(value);
} }
return array; return array;
}; };
@ -339,7 +347,7 @@ $tw.utils.parseStringArray = function(value, allowDuplicate) {
match = memberRegExp.exec(value); match = memberRegExp.exec(value);
if(match) { if(match) {
var item = match[1] || match[2]; var item = match[1] || match[2];
if(item !== undefined && (!$tw.utils.hop(names,item) || allowDuplicate)) { if(item !== undefined && (!$tw.utils.hop(names,item) || allowDuplicate || $tw.config._temp_allowDuplicates)) {
results.push(item); results.push(item);
names[item] = true; names[item] = true;
} }
@ -2021,15 +2029,25 @@ $tw.loadTiddlersNode = function() {
Startup TiddlyWiki Startup TiddlyWiki
*/ */
$tw.boot.startup = function(options) { $tw.boot.startup = function(options) {
var _temp_allowDuplicates;
options = options || {}; options = options || {};
// Get the URL hash and check for safe mode // Get the URL hash and check for safe mode
$tw.locationHash = "#"; $tw.locationHash = "#";
if($tw.browser && !$tw.node) { if($tw.browser && !$tw.node) {
if(location.hash === "#:safe") { if(location.hash === "#:safe") {
$tw.safeMode = true; $tw.safeMode = true;
} else if(location.hash === "#dupes") {
_temp_allowDuplicates = true;
$tw.locationHash = $tw.utils.getLocationHash();
} else { } else {
$tw.locationHash = $tw.utils.getLocationHash(); $tw.locationHash = $tw.utils.getLocationHash();
} }
} else {
var p = $tw.boot.argv.indexOf("--dupes");
if(p !== -1) {
_temp_allowDuplicates = true;
$tw.boot.argv.splice(p,1);
}
} }
// Initialise some more $tw properties // Initialise some more $tw properties
$tw.utils.deepDefaults($tw,{ $tw.utils.deepDefaults($tw,{
@ -2038,6 +2056,7 @@ $tw.boot.startup = function(options) {
types: {} // hashmap by module type of hashmap of exports types: {} // hashmap by module type of hashmap of exports
}, },
config: { // Configuration overridables config: { // Configuration overridables
_temp_allowDuplicates: _temp_allowDuplicates,
pluginsPath: "../plugins/", pluginsPath: "../plugins/",
themesPath: "../themes/", themesPath: "../themes/",
languagesPath: "../languages/", languagesPath: "../languages/",
@ -2172,6 +2191,14 @@ $tw.boot.startup = function(options) {
if($tw.crypto) { if($tw.crypto) {
$tw.crypto.updateCryptoStateTiddler(); $tw.crypto.updateCryptoStateTiddler();
} }
// Warn if using duplicates mode
console.log("\x1b[0;31m--------=====>>>>>> " + $tw.wiki.getTiddler("$:/core/_temp_allowDuplicates/Heading").fields.text + "\x1b[0m");
console.log("\x1b[0;34m--------=====>>>>>> " + $tw.wiki.getTiddler("$:/core/_temp_allowDuplicates/Warning").fields.text + "\x1b[0m");
if($tw.config._temp_allowDuplicates) {
console.log("\x1b[0;31m--------=====>>>>>> " + $tw.wiki.getTiddler("$:/core/_temp_allowDuplicates/StatusOn").fields.text + "\x1b[0m");
} else {
console.log("\x1b[0;32m--------=====>>>>>> " + $tw.wiki.getTiddler("$:/core/_temp_allowDuplicates/StatusOff").fields.text + "\x1b[0m");
}
// Gather up any startup modules // Gather up any startup modules
$tw.boot.remainingStartupModules = []; // Array of startup modules $tw.boot.remainingStartupModules = []; // Array of startup modules
$tw.modules.forEachModuleOfType("startup",function(title,module) { $tw.modules.forEachModuleOfType("startup",function(title,module) {

View File

@ -0,0 +1,92 @@
title: $:/core/_temp_allowDuplicates
tags: $:/tags/AboveStory
<div class="marching-ants-box" style="
position: fixed;
top: 100px;
left: -4px;
max-width: 50%;
z-index: 1000;
padding: 1em;
border-top-right-radius: 16px;
border-bottom-right-radius: 16px;
color: #fff;">
<$reveal type="match" state="$:/state/_temp_allowDuplicatesWarning" text="hide" default="show">
<$button set="$:/state/_temp_allowDuplicatesWarning" setTo="show" class="tc-btn-invisible" style="
width: 100%;
text-align: left;
fill: #ff0;">
{{$:/core/images/warning}}
</$button>
</$reveal>
<$reveal type="nomatch" state="$:/state/_temp_allowDuplicatesWarning" text="hide" default="show">
<$button set="$:/state/_temp_allowDuplicatesWarning" setTo="hide" class="tc-btn-invisible" style="
width: 100%;
text-align: left;
fill: #ff0;">
<span style="float:right;">{{$:/core/images/chevron-left}}</span> {{$:/core/images/warning}}
</$button>
<div style="
font-weight: bold;">
{{$:/core/_temp_allowDuplicates/Heading}}
</div>
<div style="">
{{$:/core/_temp_allowDuplicates/Warning}}
</div>
<$list filter="1 1 1 1 +[butfirst[]limit[1]]" emptyMessage="""
<div style="
font-weight: bold;
color: #0f0;">
{{$:/core/_temp_allowDuplicates/StatusOff}}
//Append `#dupes` to the browser address bar to enable//
</div>
""">
<div style="
font-weight: bold;
color: #fff;
font-size: 1.5em;
padding: 4px;" class="marching-ants-box">
{{$:/core/_temp_allowDuplicates/StatusOn}}
//Remove `#dupes` from the browser address bar to disable//
</div>
</$list>
</$reveal>
</div>
<style>
@keyframes marching-ants { to { background-position: 100% 100% } }
.marching-ants-box {
border: 4px solid transparent;
background: linear-gradient(#d85858, #d85858) padding-box,
repeating-linear-gradient(-45deg, #f00 0, #f00 25%, transparent 0, transparent 50%) 0 / 12px 12px;
animation: marching-ants 12s linear infinite;
}
</style>

6
core/messages.multids Normal file
View File

@ -0,0 +1,6 @@
title: $:/core/_temp_allowDuplicates/
Heading: Important Warning
Warning: This is a special prerelease version of TW5 for experimenting with a potentially incompatible change to the core logic of filter processing. It is only intended to be used for evaluation and testing
StatusOff: The allow duplicates setting is currently: OFF
StatusOn: The allow duplicates setting is currently: ON