+ if (!sortOrder) sortOrder = widget.config.sort;
+ if (!maxrecs) maxrecs = widget.config.maxrecs;
+ if (!perpage) perpage = widget.config.perpage;
+ if (!limit) limit = widget.config.limit;
+ if (!targets) targets = widget.config.targets;
+ if (!torusquery) torusquery = widget.config.targetfilter;
+ var target = widget.config.target;
+ if (target) torusquery = 'udb=="' + target + '"';
+
+ var s = "running search: '" + query + "'";
+ if (sortOrder) s += " sorted by '" + sortOrder + "'";
+ if (maxrecs) s += " restricted to " + maxrecs + " records";
+ if (perpage) s += " with " + perpage + " per page";
+ if (limit) s += " limited by '" + limit + "'";
+ if (targets) s += " in targets '" + targets + "'";
+ if (torusquery) s += " constrained by torusquery '" + torusquery + "'";
+ that.info(s);
+ }
+
+ m_filterSet.removeMatching(function(f) { return f.type !== 'category' });
+ triggerSearch(query, sortOrder, maxrecs, perpage, limit, targets, torusquery);
+ switchView('records'); // In case it's configured to start off as hidden
+ m_submitted = true;
+ }
+ that.newSearch = newSearch;
+
+
+ function triggerSearch(query, sortOrder, maxrecs, perpage, limit, targets, torusquery) {
+ resetPage();
+
+ // Continue to use previous query/sort-order unless new ones are specified
+ if (query) m_query = query;
+ if (sortOrder) m_sortOrder = sortOrder;
+ if (perpage) m_perpage = perpage;
+ if (targets) m_filterSet.add(targetFilter(targets, targets));
+
+ var pp2filter = m_filterSet.pp2filter();
+ var pp2limit = m_filterSet.pp2limit(limit);
+ var pp2catLimit = m_filterSet.pp2catLimit();
+ if (pp2catLimit) {
+ pp2filter = pp2filter ? pp2filter + "," + pp2catLimit : pp2catLimit;
+ }
+
+ var params = {};
+ if (pp2limit) params.limit = pp2limit;
+ if (maxrecs) params.maxrecs = maxrecs;
+ if (torusquery) {
+ if (!mkws.config.use_service_proxy)
+ alert("can't narrow search by torusquery when not authenticated");
+ params.torusquery = torusquery;
+ }
+
+ that.info("triggerSearch(" + m_query + "): filters = " + m_filterSet.toJSON() + ", " +
+ "pp2filter = " + pp2filter + ", params = " + $.toJSON(params));
+
+ m_paz.search(m_query, m_perpage, m_sortOrder, pp2filter, undefined, params);
+ queue("searchtriggered").publish();
+ }
+
+ // fetch record details to be retrieved from the record queue
+ that.fetchDetails = function(recId) {
+ that.info("fetchDetails() requesting record '" + recId + "'");
+ m_paz.record(recId);
+ };
+
+
+ // switching view between targets and records
+ function switchView(view) {
+ var targets = widgetNode('targets');
+ var results = widgetNode('results') || widgetNode('records');
+ var blanket = widgetNode('blanket');
+ var motd = widgetNode('motd');
+
+ switch(view) {
+ case 'targets':
+ if (targets) $(targets).show();
+ if (results) $(results).hide();
+ if (blanket) $(blanket).hide();
+ if (motd) $(motd).hide();
+ break;
+ case 'records':
+ if (targets) $(targets).hide();
+ if (results) $(results).show();
+ if (blanket) $(blanket).show();
+ if (motd) $(motd).hide();
+ break;
+ default:
+ alert("Unknown view '" + view + "'");
+ }
+ }
+ that.switchView = switchView;
+
+
+ // detailed record drawing
+ that.showDetails = function(recId) {
+ var oldRecordId = m_currentRecordId;
+ m_currentRecordId = recId;
+
+ // remove current detailed view if any
+ findnode('#' + recordDetailsId(oldRecordId)).remove();
+
+ // if the same clicked, just hide
+ if (recId == oldRecordId) {
+ m_currentRecordId = '';
+ m_currentRecordData = null;
+ return;
+ }
+ // request the record
+ that.info("showDetails() requesting record '" + recId + "'");
+ m_paz.record(recId);
+ };
+
+
+ // Finds the node of the specified class within the current team
+ function findnode(selector, teamName) {
+ teamName = teamName || m_teamName;
+
+ if (teamName === 'AUTO') {
+ selector = (selector + '.mkws-team-' + teamName + ',' +
+ selector + ':not([class^="mkws-team"],[class*=" mkws-team"])');
+ } else {
+ selector = selector + '.mkws-team-' + teamName;
+ }
+
+ var node = $(selector);
+ //that.debug('findnode(' + selector + ') found ' + node.length + ' nodes');
+ return node;
+ }
+
+
+ function widgetNode(type) {
+ var w = that.widget(type);
+ return w ? w.node : undefined;
+ }
+
+ function renderDetails(data, marker) {
+ var template = loadTemplate("details");
+ var details = template(data);
+ return '<div class="mkws-details mkwsDetails mkwsTeam_' + m_teamName + '" ' +
+ 'id="' + recordDetailsId(data.recid[0]) + '">' + details + '</div>';
+ }
+ that.renderDetails = renderDetails;
+
+
+ that.registerTemplate = function(name, text) {
+ if(mkws._old2new.hasOwnProperty(name)) {
+ that.warn("registerTemplate: old widget name: " + name + " => " + mkws._old2new[name]);
+ name = mkws._old2new[name];
+ }
+ m_templateText[name] = text;
+ };
+
+
+ function loadTemplate(name, fallbackString) {
+ if(mkws._old2new.hasOwnProperty(name)) {
+ that.warn("loadTemplate: old widget name: " + name + " => " + mkws._old2new[name]);
+ name = mkws._old2new[name];
+ }
+
+ var template = m_template[name];
+ if (template === undefined && Handlebars.compile) {
+ var source;
+ var node = $(".mkws-template-" + name + " .mkws-team-" + that.name());
+ if (node && node.length < 1) {
+ node = $(".mkws-template-" + name);
+ }
+ if (node) source = node.html();
+ if (!source) source = m_templateText[name];
+ if (source) {
+ template = Handlebars.compile(source);
+ that.info("compiled template '" + name + "'");
+ }
+ }
+ //if (template === undefined) template = mkws_templatesbyteam[m_teamName][name];
+ if (template === undefined && Handlebars.templates) {
+ template = Handlebars.templates["mkws-template-" + name];
+ }
+ if (template === undefined && mkws.defaultTemplates) {
+ template = mkws.defaultTemplates[name];
+ }
+ if (template) {
+ m_template[name] = template;
+ return template;
+ }
+ else {
+ that.info("No MKWS template for " + name);
+ return null;
+ }
+ }
+ that.loadTemplate = loadTemplate;