X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;ds=sidebyside;f=src%2Fmkws-core.js;h=8d19f3a0d133a010e6c50f5fcfabe0d754ef5861;hb=383378d6a66b3b00bb540e2c1738d18d470b557e;hp=4ea36ef38d3eaf5ab69641b5d19cf25c7a555de8;hpb=0f1feb1a81659f046de02035e127d61b99e96a09;p=mkws-moved-to-github.git
diff --git a/src/mkws-core.js b/src/mkws-core.js
index 4ea36ef..8d19f3a 100644
--- a/src/mkws-core.js
+++ b/src/mkws-core.js
@@ -88,7 +88,8 @@ mkws.log = function(string) {
// you need to disable use strict at the top of the file!!!
if (mkws.log_level >= 3) {
- console.log(arguments.callee.caller);
+ // Works in Chrome; not sure about elsewhere
+ console.trace();
} else if (mkws.log_level >= 2) {
console.log(">>> called from function " + arguments.callee.caller.name + ' <<<');
}
@@ -96,14 +97,14 @@ mkws.log = function(string) {
};
-mkws.objectWithParent = function(parent) {
- function thing() {} // Must be function so `prototype' works
-
- thing.prototype = parent;
- var res = new thing();
- thing.prototype = null;
- return res;
-};
+// This function is taken from a StackOverflow answer
+// http://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript/901144#901144
+mkws.getParameterByName = function(name) {
+ name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
+ var regex = new RegExp("[\\?&]" + name + "=([^]*)"),
+ results = regex.exec(location.search);
+ return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
+}
mkws.registerWidgetType = function(name, fn) {
@@ -144,13 +145,114 @@ mkws.setMkwsConfig = function(overrides) {
dummy: "dummy"
};
- mkws.config = Object.create(config_default);
+ mkws.config = mkws.objectInheritingFrom(config_default);
for (var k in overrides) {
mkws.config[k] = overrides[k];
}
};
+// This code is from Douglas Crockford's article "Prototypal Inheritance in JavaScript"
+// http://javascript.crockford.com/prototypal.html
+// mkws.objectInheritingFrom behaves the same as Object.create,
+// but since the latter is not available in IE8 we can't use it.
+//
+mkws.objectInheritingFrom = function(o) {
+ function F() {}
+ F.prototype = o;
+ return new F();
+}
+
+
+mkws.defaultTemplate = function(name) {
+ if (name === 'Record') {
+ return '\
+
\
+ \
+ {{translate "Title"}} | \
+ \
+ {{md-title}}\
+ {{#if md-title-remainder}}\
+ ({{md-title-remainder}})\
+ {{/if}}\
+ {{#if md-title-responsibility}}\
+ {{md-title-responsibility}}\
+ {{/if}}\
+ | \
+
\
+ {{#if md-date}}\
+ \
+ {{translate "Date"}} | \
+ {{md-date}} | \
+
\
+ {{/if}}\
+ {{#if md-author}}\
+ \
+ {{translate "Author"}} | \
+ {{md-author}} | \
+
\
+ {{/if}}\
+ {{#if md-electronic-url}}\
+ \
+ {{translate "Links"}} | \
+ \
+ {{#each md-electronic-url}}\
+ Link{{index1}}\
+ {{/each}}\
+ | \
+
\
+ {{/if}}\
+ {{#if-any location having="md-subject"}}\
+ \
+ {{translate "Subject"}} | \
+ \
+ {{#first location having="md-subject"}}\
+ {{#if md-subject}}\
+ {{#commaList md-subject}}\
+ {{this}}{{/commaList}}\
+ {{/if}}\
+ {{/first}}\
+ | \
+
\
+ {{/if-any}}\
+ \
+ {{translate "Locations"}} | \
+ \
+ {{#commaList location}}\
+ {{attr "@name"}}{{/commaList}}\
+ | \
+
\
+
\
+';
+ } else if (name === "Summary") {
+ return '\
+\
+ {{md-title}}\
+\
+{{#if md-title-remainder}}\
+ {{md-title-remainder}}\
+{{/if}}\
+{{#if md-title-responsibility}}\
+ {{md-title-responsibility}}\
+{{/if}}\
+';
+ } else if (name === "Image") {
+ return '\
+ \
+ {{#first md-thumburl}}\
+ \
+ {{/first}}\
+
\
+ \
+';
+ }
+
+ var s = "There is no default '" + name +"' template!";
+ alert(s);
+ return s;
+};
+
+
// The following functions are dispatchers for team methods that
// are called from the UI using a team-name rather than implicit
// context.
@@ -170,6 +272,10 @@ mkws.limitQuery = function(tname, field, value) {
mkws.teams[tname].limitQuery(field, value);
};
+mkws.limitCategory = function(tname, id) {
+ mkws.teams[tname].limitCategory(id);
+};
+
mkws.delimitTarget = function(tname, id) {
mkws.teams[tname].delimitTarget(id);
};
@@ -217,6 +323,8 @@ mkws.pagerNext = function(tname) {
type = cname.replace(/^mkws/, '');
}
}
+
+ if (!teamName) teamName = "AUTO";
callback.call(node, teamName, type);
}
@@ -224,27 +332,43 @@ mkws.pagerNext = function(tname) {
function resizePage() {
var list = ["mkwsSwitch", "mkwsLang"];
- var width = mkws.config.responsive_design_width;
var parent = $(".mkwsTermlists").parent();
-
- if ($(window).width() <= width &&
- parent.hasClass("mkwsTermlistContainer1")) {
- log("changing from wide to narrow: " + $(window).width());
- $(".mkwsTermlistContainer1").hide();
- $(".mkwsTermlistContainer2").show();
+ var targetWidth = mkws.config.responsive_design_width;
+ var width = $(window).width();
+
+ if (mkws.width === undefined) {
+ // No state change, since we have no previous state
+ } else if (mkws.width <= targetWidth && width > targetWidth) {
+ log("narrow -> wide");
+ } else if (mkws.width > targetWidth && width <= targetWidth) {
+ log("wide -> narrow");
+ } else if (width > targetWidth) {
+ log("already wide");
+ } else {
+ log("already narrow");
+ }
+ mkws.width = width;
+
+ if (width <= targetWidth &&
+ parent.hasClass("mkwsTermlist-Container-wide")) {
+ log("changing from wide to narrow: " + width);
+ $(".mkwsTermlist-Container-wide").hide();
+ $(".mkwsTermlist-Container-narrow").show();
for (var tname in mkws.teams) {
- $(".mkwsTermlists.mkwsTeam_" + tname).appendTo($(".mkwsTermlistContainer2.mkwsTeam_" + tname));
+ mkws.teams[tname].queue("resize-narrow").publish();
+ $(".mkwsTermlists.mkwsTeam_" + tname).appendTo($(".mkwsTermlist-Container-narrow.mkwsTeam_" + tname));
for(var i = 0; i < list.length; i++) {
$("." + list[i] + ".mkwsTeam_" + tname).hide();
}
}
- } else if ($(window).width() > width &&
- parent.hasClass("mkwsTermlistContainer2")) {
- log("changing from narrow to wide: " + $(window).width());
- $(".mkwsTermlistContainer1").show();
- $(".mkwsTermlistContainer2").hide();
+ } else if (width > targetWidth &&
+ parent.hasClass("mkwsTermlist-Container-narrow")) {
+ log("changing from narrow to wide: " + width);
+ $(".mkwsTermlist-Container-wide").show();
+ $(".mkwsTermlist-Container-narrow").hide();
for (var tname in mkws.teams) {
- $(".mkwsTermlists.mkwsTeam_" + tname).appendTo($(".mkwsTermlistContainer1.mkwsTeam_" + tname));
+ mkws.teams[tname].queue("resize-wide").publish();
+ $(".mkwsTermlists.mkwsTeam_" + tname).appendTo($(".mkwsTermlist-Container-wide.mkwsTeam_" + tname));
for(var i = 0; i < list.length; i++) {
$("." + list[i] + ".mkwsTeam_" + tname).show();
}
@@ -285,8 +409,10 @@ mkws.pagerNext = function(tname) {
log("Service proxy auth successfully done");
mkws.authenticated = true;
var authName = $(data).find("displayName").text();
+ // You'd think there would be a better way to do this:
+ var realm = $(data).find("realm:not(realmAttributes realm)").text();
for (var teamName in mkws.teams) {
- mkws.teams[teamName].queue("authenticated").publish(authName);
+ mkws.teams[teamName].queue("authenticated").publish(authName, realm);
}
runAutoSearches();
@@ -298,25 +424,37 @@ mkws.pagerNext = function(tname) {
log("running auto searches");
for (var teamName in mkws.teams) {
- mkws.teams[teamName].runAutoSearch();
+ mkws.teams[teamName].queue("ready").publish();
}
}
- // I don't understand why I need this copy, but I do: mkws_config
- // is not visible inside the document.ready function, but the
- // saved copy is.
- var saved_config;
- if (typeof mkws_config === 'undefined') {
- log("setting empty config");
- saved_config = {};
- } else {
- log("using config: " + $.toJSON(mkws_config));
- saved_config = mkws_config;
+ function makeWidgetsWithin(level, node) {
+ node.find('[class^="mkws"],[class*=" mkws"]').each(function() {
+ handleNodeWithTeam(this, function(tname, type) {
+ var oldHTML = this.innerHTML;
+ var myTeam = mkws.teams[tname];
+ var myWidget = widget(j, myTeam, type, this);
+ myTeam.addWidget(myWidget);
+ var newHTML = this.innerHTML;
+ if (newHTML !== oldHTML) {
+ log("widget " + tname + ":" + type + " HTML changed from '" + oldHTML + "' to '" + newHTML + "': reparse!");
+ makeWidgetsWithin(level+1, $(this));
+ }
+ });
+ });
}
$(document).ready(function() {
+ var saved_config;
+ if (typeof mkws_config === 'undefined') {
+ log("setting empty config");
+ saved_config = {};
+ } else {
+ log("using config: " + $.toJSON(mkws_config));
+ saved_config = mkws_config;
+ }
mkws.setMkwsConfig(saved_config);
for (var key in mkws.config) {
@@ -363,15 +501,6 @@ mkws.pagerNext = function(tname) {
}
}
- // For all MKWS-classed nodes that don't have a team
- // specified, set the team to AUTO.
- $('[class^="mkws"],[class*=" mkws"]').each(function() {
- if (!this.className.match(/mkwsTeam_/)) {
- log("adding AUTO team to node with class '" + this.className + "'");
- $(this).addClass('mkwsTeam_AUTO');
- }
- });
-
// Find all nodes with an MKWS class, and determine their team from
// the mkwsTeam_* class. Make all team objects.
var then = $.now();
@@ -383,19 +512,22 @@ mkws.pagerNext = function(tname) {
}
});
});
- // Second pass: make the individual widget objects. This has
- // to be done separately, and after the team-creation, since
- // that sometimes makes new widget nodes (e.g. creating
- // mkwsTermlists inside mkwsResults.
- $('[class^="mkws"],[class*=" mkws"]').each(function() {
- handleNodeWithTeam(this, function(tname, type) {
- var myTeam = mkws.teams[tname];
- var myWidget = widget(j, myTeam, type, this);
- });
- });
+
+ makeWidgetsWithin(1, $(':root'));
+
var now = $.now();
log("Walking MKWS nodes took " + (now-then) + " ms");
+// for (var tName in mkws.teams) {
+// var myTeam = mkws.teams[tName]
+// var types = myTeam.widgetTypes();
+// log("TEAM '" + tName + "' = " + myTeam + " has widget types " + types);
+// for (var i = 0; i < types.length; i++) {
+// var type = types[i];
+// log(" has widget of type '" + type + "': " + myTeam.widget(type));
+// }
+// }
+
if (mkws.config.use_service_proxy) {
authenticateSession(mkws.config.service_proxy_auth,
mkws.config.service_proxy_auth_domain,