Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix JS error when computing tab wrapping. #69

Open
wants to merge 3 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
190 changes: 177 additions & 13 deletions dist/syn.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* Syn - 0.0.2
*
* @copyright 2014 Bitovi
* Mon, 30 Jun 2014 22:44:59 GMT
* Thu, 13 Nov 2014 00:56:49 GMT
* @license MIT
*/

Expand Down Expand Up @@ -907,7 +907,7 @@ var __m2 = (function () {
})();

// ## src/mouse.js
var __m3 = (function (Syn) {
var __m4 = (function (Syn) {
//handles mosue events

var h = Syn.helpers,
Expand Down Expand Up @@ -1123,8 +1123,84 @@ var __m3 = (function (Syn) {
return Syn;
})(__m2);

// ## src/mouse.support.js
var __m3 = (function checkSupport(Syn) {

if (!document.body) {
Syn.schedule(function () {
checkSupport(Syn);
}, 1);
return;
}

window.__synthTest = function () {
Syn.support.linkHrefJS = true;
};

var div = document.createElement("div"),
checkbox, submit, form, select;

div.innerHTML = "<form id='outer'>" + "<input name='checkbox' type='checkbox'/>" + "<input name='radio' type='radio' />" + "<input type='submit' name='submitter'/>" + "<input type='input' name='inputter'/>" + "<input name='one'>" + "<input name='two'/>" + "<a href='javascript:__synthTest()' id='synlink'></a>" + "<select><option></option></select>" + "</form>";
document.documentElement.appendChild(div);
form = div.firstChild;
checkbox = form.childNodes[0];
submit = form.childNodes[2];
select = form.getElementsByTagName('select')[0];

//trigger click for linkHrefJS support, childNodes[6] === anchor
Syn.trigger('click', {}, form.childNodes[6]);

checkbox.checked = false;
checkbox.onchange = function () {
Syn.support.clickChanges = true;
};

Syn.trigger("click", {}, checkbox);
Syn.support.clickChecks = checkbox.checked;

checkbox.checked = false;

Syn.trigger("change", {}, checkbox);

Syn.support.changeChecks = checkbox.checked;

form.onsubmit = function (ev) {
if (ev.preventDefault) {
ev.preventDefault();
}
Syn.support.clickSubmits = true;
return false;
};
Syn.trigger("click", {}, submit);

form.childNodes[1].onchange = function () {
Syn.support.radioClickChanges = true;
};
Syn.trigger("click", {}, form.childNodes[1]);

Syn.bind(div, 'click', function onclick() {
Syn.support.optionClickBubbles = true;
Syn.unbind(div, 'click', onclick);
});
Syn.trigger("click", {}, select.firstChild);

Syn.support.changeBubbles = Syn.eventSupported('change');

//test if mousedown followed by mouseup causes click (opera), make sure there are no clicks after this
div.onclick = function () {
Syn.support.mouseDownUpClicks = true;
};
Syn.trigger("mousedown", {}, div);
Syn.trigger("mouseup", {}, div);

document.documentElement.removeChild(div);

//check stuff
Syn.support.ready++;
})(__m2, __m4);

// ## src/browsers.js
var __m4 = (function (Syn) {
var __m5 = (function (Syn) {
Syn.key.browsers = {
webkit: {
'prevent': {
Expand Down Expand Up @@ -1549,10 +1625,10 @@ var __m4 = (function (Syn) {
return Syn.mouse.browsers.gecko;
})();
return Syn;
})(__m2, __m3);
})(__m2, __m4);

// ## src/typeable.js
var __m6 = (function (Syn) {
var __m8 = (function (Syn) {
// Holds functions that test for typeability
var typeables = [];

Expand Down Expand Up @@ -1619,7 +1695,7 @@ var __m6 = (function (Syn) {
})(__m2);

// ## src/key.js
var __m5 = (function (Syn) {
var __m7 = (function (Syn) {
var h = Syn.helpers,

// gets the selection of an input or textarea
Expand Down Expand Up @@ -2213,13 +2289,11 @@ var __m5 = (function (Syn) {
el = orders[i][0];
if (this === el) {
if (!Syn.key.shiftKey) {
current = orders[i + 1][0];
if (!current) {
if (i === orders.length - 1 || !(current = orders[i + 1][0])) {
current = orders[0][0];
}
} else {
current = orders[i - 1][0];
if (!current) {
if (i === 0 || !(current = orders[i - 1][0])) {
current = orders[focusEls.length - 1][0];
}
}
Expand Down Expand Up @@ -2517,10 +2591,100 @@ var __m5 = (function (Syn) {
});

return Syn;
})(__m2, __m6, __m4);
})(__m2, __m8, __m5);

// ## src/key.support.js
var __m6 = (function (Syn) {

if (!Syn.config.support) {
//do support code
(function checkForSupport() {
if (!document.body) {
return Syn.schedule(checkForSupport, 1);
}

var div = document.createElement("div"),
checkbox, submit, form, anchor, textarea, inputter, one, doc;

doc = document.documentElement;

div.innerHTML = "<form id='outer'>" +
"<input name='checkbox' type='checkbox'/>" +
"<input name='radio' type='radio' />" +
"<input type='submit' name='submitter'/>" +
"<input type='input' name='inputter'/>" +
"<input name='one'>" +
"<input name='two'/>" +
"<a href='#abc'></a>" +
"<textarea>1\n2</textarea>" +
"</form>";

doc.insertBefore(div, doc.firstElementChild || doc.children[0]);
form = div.firstChild;
checkbox = form.childNodes[0];
submit = form.childNodes[2];
anchor = form.getElementsByTagName("a")[0];
textarea = form.getElementsByTagName("textarea")[0];
inputter = form.childNodes[3];
one = form.childNodes[4];

form.onsubmit = function (ev) {
if (ev.preventDefault) {
ev.preventDefault();
}
Syn.support.keypressSubmits = true;
ev.returnValue = false;
return false;
};
// Firefox 4 won't write key events if the element isn't focused
Syn.__tryFocus(inputter);
Syn.trigger("keypress", "\r", inputter);

Syn.trigger("keypress", "a", inputter);
Syn.support.keyCharacters = inputter.value === "a";

inputter.value = "a";
Syn.trigger("keypress", "\b", inputter);
Syn.support.backspaceWorks = inputter.value === "";

inputter.onchange = function () {
Syn.support.focusChanges = true;
};
Syn.__tryFocus(inputter);
Syn.trigger("keypress", "a", inputter);
Syn.__tryFocus(form.childNodes[5]); // this will throw a change event
Syn.trigger("keypress", "b", inputter);
Syn.support.keysOnNotFocused = inputter.value === "ab";

//test keypress \r on anchor submits
Syn.bind(anchor, "click", function (ev) {
if (ev.preventDefault) {
ev.preventDefault();
}
Syn.support.keypressOnAnchorClicks = true;
ev.returnValue = false;
return false;
});
Syn.trigger("keypress", "\r", anchor);

Syn.support.textareaCarriage = textarea.value.length === 4;

// IE only, oninput event.
Syn.support.oninput = 'oninput' in one;

doc.removeChild(div);

Syn.support.ready++;
})();
} else {
Syn.helpers.extend(Syn.support, Syn.config.support);
}

return Syn;
})(__m2, __m7);

// ## src/drag/drag.js
var __m7 = (function (Syn) {
var __m9 = (function (Syn) {

// check if elementFromPageExists
(function dragSupport() {
Expand Down Expand Up @@ -2853,6 +3017,6 @@ var __m1 = (function (Syn) {
window.Syn = Syn;

return Syn;
})(__m2, __m3, __m4, __m5, __m7);
})(__m2, __m3, __m4, __m5, __m6, __m7, __m9);

}(window);
4 changes: 2 additions & 2 deletions dist/syn.min.js

Large diffs are not rendered by default.

6 changes: 2 additions & 4 deletions src/key.js
Original file line number Diff line number Diff line change
Expand Up @@ -592,13 +592,11 @@ steal('./synthetic.js', './typeable.js', './browsers.js', function (Syn) {
el = orders[i][0];
if (this === el) {
if (!Syn.key.shiftKey) {
current = orders[i + 1][0];
if (!current) {
if (i === orders.length - 1 || !(current = orders[i + 1][0])) {
current = orders[0][0];
}
} else {
current = orders[i - 1][0];
if (!current) {
if (i === 0 || !(current = orders[i - 1][0])) {
current = orders[focusEls.length - 1][0];
}
}
Expand Down
2 changes: 2 additions & 0 deletions src/syn.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
steal('./synthetic.js',
'./mouse.support.js',
'./mouse.js',
'./browsers.js',
'./key.support.js',
'./key.js',
'./drag/drag.js', function (Syn) {
window.Syn = Syn;
Expand Down
4 changes: 3 additions & 1 deletion test/qunit/key_test.js
Original file line number Diff line number Diff line change
Expand Up @@ -331,14 +331,16 @@ steal("src/synthetic.js", function (Syn) {
stop();
//give ie a second to focus
setTimeout(function () {
Syn.type('\r\tSecond\tThird\tFourth', 'first', function () {
Syn.type('\r\tSecond\tThird\tFourth\t', 'first', function () {
equal(clicked, 1, "clickd first");
equal(st.g('second')
.value, "Second", "moved to second");
equal(st.g('third')
.value, "Third", "moved to Third");
equal(st.g('fourth')
.value, "Fourth", "moved to Fourth");
equal(st.g('third')
.value, "Third", "moved to Third");
start();
});
}, 1);
Expand Down