mirror of
https://github.com/TiddlyWiki/TiddlyWiki5.git
synced 2026-05-02 20:16:57 +00:00
Revised test data
Testing against the output of cook.rb isn't satisfactory because of the bugs in it; instead we're now going to test against the tiddlywiki.com build products
This commit is contained in:
264
test/tiddlywiki.2.6.5/source/tiddlywiki/js/Dom.js
Executable file
264
test/tiddlywiki.2.6.5/source/tiddlywiki/js/Dom.js
Executable file
@@ -0,0 +1,264 @@
|
||||
//--
|
||||
//-- DOM utilities - many derived from www.quirksmode.org
|
||||
//--
|
||||
|
||||
function drawGradient(place,horiz,locolors,hicolors)
|
||||
{
|
||||
if(!hicolors)
|
||||
hicolors = locolors;
|
||||
var t;
|
||||
for(t=0; t<= 100; t+=2) {
|
||||
var bar = document.createElement("div");
|
||||
place.appendChild(bar);
|
||||
bar.style.position = "absolute";
|
||||
bar.style.left = horiz ? t + "%" : 0;
|
||||
bar.style.top = horiz ? 0 : t + "%";
|
||||
bar.style.width = horiz ? (101-t) + "%" : "100%";
|
||||
bar.style.height = horiz ? "100%" : (101-t) + "%";
|
||||
bar.style.zIndex = -1;
|
||||
var p = t/100*(locolors.length-1);
|
||||
var hc = hicolors[Math.floor(p)];
|
||||
if(typeof hc == "string")
|
||||
hc = new RGB(hc);
|
||||
var lc = locolors[Math.ceil(p)];
|
||||
if(typeof lc == "string")
|
||||
lc = new RGB(lc);
|
||||
bar.style.backgroundColor = hc.mix(lc,p-Math.floor(p)).toString();
|
||||
}
|
||||
}
|
||||
|
||||
//# Add an event handler
|
||||
//# Thanks to John Resig, via QuirksMode
|
||||
function addEvent(obj,type,fn)
|
||||
{
|
||||
if(obj.attachEvent) {
|
||||
obj["e"+type+fn] = fn;
|
||||
obj[type+fn] = function(){obj["e"+type+fn](window.event);};
|
||||
obj.attachEvent("on"+type,obj[type+fn]);
|
||||
} else {
|
||||
obj.addEventListener(type,fn,false);
|
||||
}
|
||||
}
|
||||
|
||||
//# Remove an event handler
|
||||
//# Thanks to John Resig, via QuirksMode
|
||||
function removeEvent(obj,type,fn)
|
||||
{
|
||||
if(obj.detachEvent) {
|
||||
obj.detachEvent("on"+type,obj[type+fn]);
|
||||
obj[type+fn] = null;
|
||||
} else {
|
||||
obj.removeEventListener(type,fn,false);
|
||||
}
|
||||
}
|
||||
|
||||
// Find the closest relative with a given property value (property defaults to tagName, relative defaults to parentNode)
|
||||
function findRelated(e,value,name,relative)
|
||||
{
|
||||
name = name || "tagName";
|
||||
relative = relative || "parentNode";
|
||||
if(name == "className") {
|
||||
while(e && !jQuery(e).hasClass(value)) {
|
||||
e = e[relative];
|
||||
}
|
||||
} else {
|
||||
while(e && e[name] != value) {
|
||||
e = e[relative];
|
||||
}
|
||||
}
|
||||
return e;
|
||||
}
|
||||
|
||||
// Get the scroll position for window.scrollTo necessary to scroll a given element into view
|
||||
function ensureVisible(e)
|
||||
{
|
||||
var posTop = findPosY(e);
|
||||
var posBot = posTop + e.offsetHeight;
|
||||
var winTop = findScrollY();
|
||||
var winHeight = findWindowHeight();
|
||||
var winBot = winTop + winHeight;
|
||||
if(posTop < winTop) {
|
||||
return posTop;
|
||||
} else if(posBot > winBot) {
|
||||
if(e.offsetHeight < winHeight)
|
||||
return posTop - (winHeight - e.offsetHeight);
|
||||
else
|
||||
return posTop;
|
||||
} else {
|
||||
return winTop;
|
||||
}
|
||||
}
|
||||
|
||||
// Get the current width of the display window
|
||||
function findWindowWidth()
|
||||
{
|
||||
return window.innerWidth || document.documentElement.clientWidth;
|
||||
}
|
||||
|
||||
// Get the current height of the display window
|
||||
function findWindowHeight()
|
||||
{
|
||||
return window.innerHeight || document.documentElement.clientHeight;
|
||||
}
|
||||
|
||||
// Get the current horizontal page scroll position
|
||||
function findScrollX()
|
||||
{
|
||||
return window.scrollX || document.documentElement.scrollLeft;
|
||||
}
|
||||
|
||||
// Get the current vertical page scroll position
|
||||
function findScrollY()
|
||||
{
|
||||
return window.scrollY || document.documentElement.scrollTop;
|
||||
}
|
||||
|
||||
function findPosX(obj)
|
||||
{
|
||||
var curleft = 0;
|
||||
while(obj.offsetParent) {
|
||||
curleft += obj.offsetLeft;
|
||||
obj = obj.offsetParent;
|
||||
}
|
||||
return curleft;
|
||||
}
|
||||
|
||||
function findPosY(obj)
|
||||
{
|
||||
var curtop = 0;
|
||||
while(obj.offsetParent) {
|
||||
curtop += obj.offsetTop;
|
||||
obj = obj.offsetParent;
|
||||
}
|
||||
return curtop;
|
||||
}
|
||||
|
||||
// Blur a particular element
|
||||
function blurElement(e)
|
||||
{
|
||||
if(e && e.focus && e.blur) {
|
||||
e.focus();
|
||||
e.blur();
|
||||
}
|
||||
}
|
||||
|
||||
// Create a non-breaking space
|
||||
function insertSpacer(place)
|
||||
{
|
||||
var e = document.createTextNode(String.fromCharCode(160));
|
||||
if(place)
|
||||
place.appendChild(e);
|
||||
return e;
|
||||
}
|
||||
|
||||
// Replace the current selection of a textarea or text input and scroll it into view
|
||||
function replaceSelection(e,text)
|
||||
{
|
||||
if(e.setSelectionRange) {
|
||||
var oldpos = e.selectionStart;
|
||||
var isRange = e.selectionEnd > e.selectionStart;
|
||||
e.value = e.value.substr(0,e.selectionStart) + text + e.value.substr(e.selectionEnd);
|
||||
e.setSelectionRange(isRange ? oldpos : oldpos + text.length,oldpos + text.length);
|
||||
var linecount = e.value.split("\n").length;
|
||||
var thisline = e.value.substr(0,e.selectionStart).split("\n").length-1;
|
||||
e.scrollTop = Math.floor((thisline - e.rows / 2) * e.scrollHeight / linecount);
|
||||
} else if(document.selection) {
|
||||
var range = document.selection.createRange();
|
||||
if(range.parentElement() == e) {
|
||||
var isCollapsed = range.text == "";
|
||||
range.text = text;
|
||||
if(!isCollapsed) {
|
||||
range.moveStart("character", -text.length);
|
||||
range.select();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Set the caret position in a text area
|
||||
function setCaretPosition(e,pos)
|
||||
{
|
||||
if(e.selectionStart || e.selectionStart == '0') {
|
||||
e.selectionStart = pos;
|
||||
e.selectionEnd = pos;
|
||||
e.focus();
|
||||
} else if(document.selection) {
|
||||
// IE support
|
||||
e.focus ();
|
||||
var sel = document.selection.createRange();
|
||||
sel.moveStart('character', -e.value.length);
|
||||
sel.moveStart('character',pos);
|
||||
sel.moveEnd('character',0);
|
||||
sel.select();
|
||||
}
|
||||
}
|
||||
|
||||
// Returns the text of the given (text) node, possibly merging subsequent text nodes
|
||||
function getNodeText(e)
|
||||
{
|
||||
var t = "";
|
||||
while(e && e.nodeName == "#text") {
|
||||
t += e.nodeValue;
|
||||
e = e.nextSibling;
|
||||
}
|
||||
return t;
|
||||
}
|
||||
|
||||
// Returns true if the element e has a given ancestor element
|
||||
function isDescendant(e,ancestor)
|
||||
{
|
||||
while(e) {
|
||||
if(e === ancestor)
|
||||
return true;
|
||||
e = e.parentNode;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// deprecate the following...
|
||||
|
||||
// Prevent an event from bubbling
|
||||
function stopEvent(e)
|
||||
{
|
||||
var ev = e || window.event;
|
||||
ev.cancelBubble = true;
|
||||
if(ev.stopPropagation) ev.stopPropagation();
|
||||
return false;
|
||||
}
|
||||
|
||||
// Remove any event handlers or non-primitve custom attributes
|
||||
function scrubNode(e)
|
||||
{
|
||||
if(!config.browser.isIE)
|
||||
return;
|
||||
var att = e.attributes;
|
||||
if(att) {
|
||||
var t;
|
||||
for(t=0; t<att.length; t++) {
|
||||
var n = att[t].name;
|
||||
if(n !== "style" && (typeof e[n] === "function" || (typeof e[n] === "object" && e[n] != null))) {
|
||||
try {
|
||||
e[n] = null;
|
||||
} catch(ex) {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
var c = e.firstChild;
|
||||
while(c) {
|
||||
scrubNode(c);
|
||||
c = c.nextSibling;
|
||||
}
|
||||
}
|
||||
|
||||
function setStylesheet(s,id,doc)
|
||||
{
|
||||
jQuery.twStylesheet(s,{id:id,doc:doc});
|
||||
}
|
||||
|
||||
function removeStyleSheet(id)
|
||||
{
|
||||
jQuery.twStylesheet.remove({id:id});
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user