Introduce make_zjquery().

This commit is contained in:
Steve Howell
2017-05-24 16:49:29 -07:00
parent 6c7a5260fc
commit 689605dd2e
5 changed files with 168 additions and 158 deletions

View File

@@ -1,4 +1,4 @@
set_global('$', global.zjquery);
set_global('$', global.make_zjquery());
set_global('page_params', {
realm_users: [],

View File

@@ -1,6 +1,6 @@
var common = require("js/common.js");
set_global('$', global.zjquery);
set_global('$', global.make_zjquery());
(function test_basics() {
common.autofocus('#home');

View File

@@ -10,7 +10,7 @@ set_global('page_params', {
use_websockets: false,
});
set_global('$', global.zjquery);
set_global('$', global.make_zjquery());
add_dependencies({
compose: 'js/compose',

View File

@@ -40,8 +40,7 @@ global.write_test_output = output.write_test_output;
global.append_test_output = output.append_test_output;
// Set up fake jQuery
var zjquery = require('./zjquery.js');
global.zjquery = zjquery.zjquery;
global.make_zjquery = require('./zjquery.js').make_zjquery;
var noop = function () {};

View File

@@ -1,168 +1,179 @@
var noop = function () {};
var zjquery = (function () {
var elems = {};
var exports = {};
function new_elem(selector) {
var html = 'never-been-set';
var text = 'never-been-set';
var value;
var shown = false;
var focused = false;
var children = new Dict();
var my_parent;
var classes = new Dict();
exports.make_zjquery = function () {
var self = {
val: function () {
if (arguments.length === 0) {
return value || '';
}
value = arguments[0];
},
css: noop,
data: noop,
empty: noop,
height: noop,
removeAttr: noop,
removeData: noop,
trigger: noop,
blur: function () {
focused = false;
},
html: function (arg) {
if (arg !== undefined) {
html = arg;
} else {
return html;
}
},
text: function (arg) {
if (arg !== undefined) {
text = arg;
} else {
return text;
}
},
focus: function () {
focused = true;
},
show: function () {
shown = true;
},
hide: function () {
shown = false;
},
addClass: function (class_name) {
classes.set(class_name, true);
return self;
},
removeClass: function (class_name) {
classes.del(class_name);
return self;
},
hasClass: function (class_name) {
return classes.has(class_name);
},
debug: function () {
return {
value: value,
shown: shown,
selector: selector,
};
},
visible: function () {
return shown;
},
is_focused: function () {
// is_focused is not a jQuery thing; this is
// for our testing
return focused;
},
find: function (child_selector) {
var child = children.get(child_selector);
if (child) {
return child;
}
var elems = {};
throw "Cannot find " + child_selector + " in " + selector;
},
add_child: function (child_selector, child_elem) {
child_elem.set_parent(self);
children.set(child_selector, child_elem);
},
set_parent: function (parent_elem) {
my_parent = parent_elem;
},
parent: function () {
return my_parent;
},
expectOne: function () {
// silently do nothing
return self;
},
on: function () {
return self;
},
};
return self;
}
function new_elem(selector) {
var html = 'never-been-set';
var text = 'never-been-set';
var value;
var shown = false;
var focused = false;
var children = new Dict();
var my_parent;
var classes = new Dict();
function jquery_array(elem) {
var result = [elem];
var self = {
val: function () {
if (arguments.length === 0) {
return value || '';
}
value = arguments[0];
},
css: noop,
data: noop,
empty: noop,
height: noop,
removeAttr: noop,
removeData: noop,
trigger: noop,
blur: function () {
focused = false;
},
html: function (arg) {
if (arg !== undefined) {
html = arg;
} else {
return html;
}
},
text: function (arg) {
if (arg !== undefined) {
text = arg;
} else {
return text;
}
},
focus: function () {
focused = true;
},
show: function () {
shown = true;
},
hide: function () {
shown = false;
},
addClass: function (class_name) {
classes.set(class_name, true);
return self;
},
removeClass: function (class_name) {
classes.del(class_name);
return self;
},
hasClass: function (class_name) {
return classes.has(class_name);
},
debug: function () {
return {
value: value,
shown: shown,
selector: selector,
};
},
visible: function () {
return shown;
},
is_focused: function () {
// is_focused is not a jQuery thing; this is
// for our testing
return focused;
},
find: function (child_selector) {
var child = children.get(child_selector);
if (child) {
return child;
}
for (var attr in elem) {
if (Object.prototype.hasOwnProperty.call(elem, attr)) {
result[attr] = elem[attr];
throw "Cannot find " + child_selector + " in " + selector;
},
add_child: function (child_selector, child_elem) {
child_elem.set_parent(self);
children.set(child_selector, child_elem);
},
remove_child: function (child_selector) {
children.del(child_selector);
},
set_parent: function (parent_elem) {
my_parent = parent_elem;
},
parent: function () {
return my_parent;
},
expectOne: function () {
// silently do nothing
return self;
},
on: function () {
return self;
},
remove: function () {
if (my_parent) {
my_parent.remove_child(selector);
}
},
};
return self;
}
function jquery_array(elem) {
var result = [elem];
for (var attr in elem) {
if (Object.prototype.hasOwnProperty.call(elem, attr)) {
result[attr] = elem[attr];
}
}
return result;
}
return result;
}
var zjquery = function (arg) {
if (typeof arg === "function") {
// If somebody is passing us a function, we emulate
// jQuery's behavior of running this function after
// page load time. But there are no pages to load,
// so we just call it right away.
arg();
return;
}
exports.zjquery = function (arg) {
if (typeof arg === "function") {
// If somebody is passing us a function, we emulate
// jQuery's behavior of running this function after
// page load time. But there are no pages to load,
// so we just call it right away.
arg();
return;
}
var selector = arg;
if (elems[selector] === undefined) {
var elem = new_elem(selector);
elems[selector] = jquery_array(elem);
}
return elems[selector];
};
var selector = arg;
if (elems[selector] === undefined) {
var elem = new_elem(selector);
elems[selector] = jquery_array(elem);
}
return elems[selector];
zjquery.stub_selector = function (selector, stub) {
elems[selector] = stub;
};
zjquery.trim = function (s) { return s; };
zjquery.state = function () {
// useful for debugging
var res = _.map(elems, function (v) {
return v.debug();
});
res = _.map(res, function (v) {
return [v.selector, v.value, v.shown];
});
res.sort();
return res;
};
zjquery.Event = noop;
return zjquery;
};
exports.zjquery.stub_selector = function (selector, stub) {
elems[selector] = stub;
};
exports.zjquery.trim = function (s) { return s; };
exports.zjquery.state = function () {
// useful for debugging
var res = _.map(elems, function (v) {
return v.debug();
});
res = _.map(res, function (v) {
return [v.selector, v.value, v.shown];
});
res.sort();
return res;
};
exports.zjquery.Event = noop;
return exports;
}());
module.exports = zjquery;
module.exports = exports;