Index: src/main/webapp/application/engageConfig.json =================================================================== --- src/main/webapp/application/engageConfig.json (revision 9239) +++ src/main/webapp/application/engageConfig.json (working copy) @@ -4,9 +4,9 @@ includes: "kettle/KettleIncludes.json", includesPrefix: "kettle/", loaderFunction: "fluid.engage.initEngageApp", -queryURLTemplate: "http://titan.atrc.utoronto.ca:5984/%dbName/_fti/lucene/%view?include_docs=true&q=%query", -viewURLTemplate: "http://titan.atrc.utoronto.ca:5984/%dbName/%view", -viewURLTemplateWithKey: "http://titan.atrc.utoronto.ca:5984/%dbName/%view?key=%key", +queryURLTemplate: "http://142.150.154.59:5984/%dbName/_fti/lucene/%view?include_docs=true&q=%query", +viewURLTemplate: "http://142.150.154.59:5984/%dbName/%view", +viewURLTemplateWithKey: "http://142.150.154.59:5984/%dbName/%view?key=%key", initServices: [ "fluid.engage.initHomeService", "fluid.artifactView.initMarkupFeed", @@ -32,9 +32,10 @@ all: "all", byCollectionCategory: "by_collection_category", exhibitionByTitle: "_design/exhibitions/_view/view", - catalogueByTitle: "_design/catalogue/_view/viewWithArtifacts", - catalogueArtifacts: "_design/catalogueArtefacts/_view/view", - exhibitions: "_design/exhibitions/_view/browse" + catalogueByTitle: "_design/catalogue/_view/view", + catalogueArtifacts: "_design/catalogue/_view/browse", + exhibitions: "_design/exhibitions/_view/browse", + artifactByAccession: "_design/artifacts/_view/view" }, mount: { infusion: { Index: src/main/webapp/application/engageStandaloneConfig.json =================================================================== --- src/main/webapp/application/engageStandaloneConfig.json (revision 9239) +++ src/main/webapp/application/engageStandaloneConfig.json (working copy) @@ -4,9 +4,9 @@ includes: "kettle/KettleIncludes.json", includesPrefix: "kettle/", loaderFunction: "fluid.engage.initEngageApp", -queryURLTemplate: "http://titan.atrc.utoronto.ca:5984/%dbName/_fti/lucene/%view?include_docs=true&q=%query", -viewURLTemplate: "http://titan.atrc.utoronto.ca:5984/%dbName/%view", -viewURLTemplateWithKey: "http://titan.atrc.utoronto.ca:5984/%dbName/%view?key=%key", +queryURLTemplate: "http://142.150.154.59:5984/%dbName/_fti/lucene/%view?include_docs=true&q=%query", +viewURLTemplate: "http://142.150.154.59:5984/%dbName/%view", +viewURLTemplateWithKey: "http://142.150.154.59:5984/%dbName/%view?key=%key", initServices: [ "fluid.engage.initHomeService", "fluid.artifactView.initMarkupFeed", @@ -29,9 +29,10 @@ all: "all", byCollectionCategory: "by_collection_category", exhibitionByTitle: "_design/exhibitions/_view/view", - catalogueByTitle: "_design/catalogue/_view/viewWithArtifacts", - catalogueArtifacts: "_design/catalogueArtefacts/_view/view", - exhibitions: "_design/exhibitions/_view/browse" + catalogueByTitle: "_design/catalogue/_view/view", + catalogueArtifacts: "_design/catalogue/_view/browse", + exhibitions: "_design/exhibitions/_view/browse", + artifactByAccession: "_design/artifacts/_view/view" }, mount: { infusion: { Index: src/main/webapp/application/js/EngageApp.js =================================================================== --- src/main/webapp/application/js/EngageApp.js (revision 9239) +++ src/main/webapp/application/js/EngageApp.js (working copy) @@ -145,4 +145,9 @@ return app.app; }; + + // Modify the value of couch parameter to be in quotes. This is the only format valid for couch query parameters. + fluid.engage.formatCouchQueryParam = function (param) { + return '"' + param + '"'; + }; })(); Index: src/main/webapp/services/artifactView/js/artifactView.js =================================================================== --- src/main/webapp/services/artifactView/js/artifactView.js (revision 9239) +++ src/main/webapp/services/artifactView/js/artifactView.js (working copy) @@ -23,9 +23,9 @@ var model = {}; var successCallback = function (data, status) { - model = JSON.parse(data); + model = JSON.parse(data.substring(0, data.length - 1)); if (model.total_rows && model.total_rows > 0) { - model = model.rows[0].doc; + model = model.rows[0]; } }; @@ -40,30 +40,21 @@ }; var buildDataURL = function (params, config) { - return fluid.stringTemplate(config.queryURLTemplate, - {dbName: params.db || "", view: config.views.all, query: params.q || ""}); + return fluid.stringTemplate(config.viewURLTemplateWithKey, { + dbName: params.db, + view: config.views.artifactByAccession, + key: JSON.stringify({ + accessNumber: params.accessNumber, + lang: params.lang + }) + }); }; - var buildCategoryQuery = function (category) { - if (typeof category === "string") { - return category; - } - category = $.makeArray(category); - var catString = category.pop(); - $.each(category, function (index, value) { - catString += "AND" + value; - }); - return catString; - }; - var fetchAndNormalizeModel = function (params, config) { var urlBase = "browse.html?"; - var artifactModel = fluid.engage.mapModel(getData(buildDataURL(params, config)), params.db); - params.q = buildCategoryQuery(artifactModel.category); - + var artifactModel = fluid.engage.mapModel(getData(buildDataURL(params, config)), params.db); return { - artifact: artifactModel, - relatedArtifacts: urlBase + $.param(params) + artifact: artifactModel }; }; Index: src/main/webapp/services/browseCatalogue/js/browseCatalogue.js =================================================================== --- src/main/webapp/services/browseCatalogue/js/browseCatalogue.js (revision 9239) +++ src/main/webapp/services/browseCatalogue/js/browseCatalogue.js (working copy) @@ -50,7 +50,8 @@ view: config.views.catalogueArtifacts, key: JSON.stringify({ exhibitTitle: params.exhibition, - sectionTitle: params.title + sectionTitle: params.title, + lang: params.lang }) }); }; @@ -82,11 +83,32 @@ fluid.engage.mountAcceptor(app, "catalogue", acceptor); }; - var afterMap = function (data) { + var compileTargetURL = function (URLBase, params) { + return URLBase + "?" + $.param(params); + }; + + var compileArtifacts = function (artifacts, params) { + var baseArtifactURL = "../artifacts/view.html"; + return fluid.transform(artifacts, function (artifact) { + return { + title: artifact.title, + imageUrl: artifact.imageUrl, + media: artifact.media, + description: artifact.description, + url: compileTargetURL(baseArtifactURL, { + db: params.db.slice(0, params.db.indexOf('_')), + accessNumber: artifact.accessionNumber, + lang: params.lang + }) + }; + }); + }; + + var afterMap = function (data, params) { data.categories = $.map(data.categories, function (value) { return { name: value.name, - items: value.artifacts + items: compileArtifacts(value.artifacts, params) }; }); return data; @@ -129,7 +151,7 @@ var options = { strings: strings, - model: afterMap(data) + model: afterMap(data, params) }; return { Index: src/main/webapp/services/catalogue/js/catalogue.js =================================================================== --- src/main/webapp/services/catalogue/js/catalogue.js (revision 9239) +++ src/main/webapp/services/catalogue/js/catalogue.js (working copy) @@ -47,7 +47,10 @@ return fluid.stringTemplate(config.viewURLTemplateWithKey, { dbName: params.db || "", view: config.views.catalogueByTitle, - key: '"' + params.title + '"' + key: JSON.stringify({ + title: params.title, + lang: params.lang + }) }); }; @@ -57,20 +60,19 @@ var compileArtifacts = function (artifacts, params) { var baseArtifactURL = "../artifacts/view.html"; - var artifactsArray = []; - for (var i = 0; i < artifacts.length && i < 4; i++) { - var artifact = artifacts[i]; - artifactsArray.push({ - artifactViewURL: compileTargetURL(baseArtifactURL, { - db: params.db.substring(0, params.db.indexOf("_")), - q: artifact.accessNumber - }), - imageURL: artifact.imageURL, + return fluid.transform(artifacts, function (artifact) { + return { + description: artifact.description, + media: artifact.media, title: artifact.title, - description: artifact.description - }); - } - return artifactsArray; + image: artifact.image, + target: compileTargetURL(baseArtifactURL, { + db: params.db.slice(0, params.db.indexOf('_')), + accessNumber: artifact.accessionNumber, + lang: params.lang + }) + } + }); }; var compileTheme = function (themes, exhibitionTitle, params, baseURL) { @@ -81,7 +83,8 @@ allArtifactsViewURL: compileTargetURL(baseURL, { db: params.db, exhibition: exhibitionTitle, - title: theme.title + title: theme.title, + lang: params.lang }), numArtifacts: theme.numArtifacts, artifacts: compileArtifacts(theme.artifacts, params) @@ -97,7 +100,8 @@ allArtifactsViewURL: compileTargetURL(baseCatalogueURL, { db: params.db, exhibition: data.title, - title: "viewAll" + title: "viewAll", + lang: params.lang }), numArtifacts: data.numArtifacts, themes: compileTheme(data.themes, data.title, params, baseCatalogueURL) Index: src/main/webapp/services/exhibitionAbout/js/exhibitionAbout.js =================================================================== --- src/main/webapp/services/exhibitionAbout/js/exhibitionAbout.js (revision 9239) +++ src/main/webapp/services/exhibitionAbout/js/exhibitionAbout.js (working copy) @@ -28,7 +28,10 @@ return fluid.stringTemplate(config.viewURLTemplateWithKey, { dbName: params.db || "", view: config.views.exhibitionByTitle, - key: '"' + params.title + '"' + key: JSON.stringify({ + title: params.title, + lang: params.lang + }) }); }; Index: src/main/webapp/services/exhibitionBrowse/js/exhibitionBrowse.js =================================================================== --- src/main/webapp/services/exhibitionBrowse/js/exhibitionBrowse.js (revision 9239) +++ src/main/webapp/services/exhibitionBrowse/js/exhibitionBrowse.js (working copy) @@ -44,17 +44,20 @@ return data; }; - var compileDatabaseURL = function (db, config) { - return fluid.stringTemplate(config.viewURLTemplate, - {dbName: db + "_exhibitions" || "", view: config.views.exhibitions}); + var compileDatabaseURL = function (db, config, params) { + var url = fluid.stringTemplate(config.viewURLTemplate, {dbName: db + "_exhibitions" || "", view: config.views.exhibitions}); + return url + "?" + $.param({ + key: fluid.engage.formatCouchQueryParam(params.lang) + }) }; var compileTargetURL = function (URLBase, params) { return URLBase + "?" + $.param(params); }; - var getData = function (errorCallback, db, config) { - var url = compileDatabaseURL(db, config); + var getData = function (errorCallback, params, config) { + var db = params.db; + var url = compileDatabaseURL(db, config, params); var rawData = getAjax(url, errorCallback); var dbName = db + "_exhibitions"; var baseExhibitionURL = "view.html"; @@ -81,7 +84,8 @@ title: exhibition.title, url: compileTargetURL(exhibition.isCurrent ? baseExhibitionURL : baseUpcomingExhibitionURL, { db: dbName, - title: exhibition.title + title: exhibition.title, + lang: params.lang }), displayDate: exhibition.displayDate, endDate: exhibition.endDate @@ -105,7 +109,7 @@ fluid.exhibitionService.initExhibitionBrowseDataFeed = function (config, app) { var exhibitionsDataHandler = function (env) { - var data = JSON.stringify(getData(errorCallback, env.urlState.params.db, config)); + var data = JSON.stringify(getData(errorCallback, env.urlState.params, config)); return [200, {"Content-Type": "text/plain"}, data]; }; @@ -149,9 +153,17 @@ handler.registerProducer("browse", function (context, env) { var params = context.urlState.params; - var data = getData(errorCallback, params.db, config); - var strings = fluid.kettle.getBundle(renderHandlerConfig, params); + var data = getData(errorCallback, params, config); + // TODO: We're hand-altering the configuration for getBundle(), since by default it assumes that all language bundles + // are located relative to the HTML template. In this case, however, we've got feeds using the same template but + // applying a different set of strings to it. + var strings = fluid.kettle.getBundle({ + config: renderHandlerConfig.config, + source: "components/exhibitionBrowse/html/", + sourceMountRelative: "engage" + }, params); var options = { + showHeaderForFirstCategory: false, model: afterMap(data), useCabinet: true }; Index: src/main/webapp/services/exhibitionView/js/exhibitionView.js =================================================================== --- src/main/webapp/services/exhibitionView/js/exhibitionView.js (revision 9239) +++ src/main/webapp/services/exhibitionView/js/exhibitionView.js (working copy) @@ -28,7 +28,10 @@ return fluid.stringTemplate(config.viewURLTemplateWithKey, { dbName: params.db || "", view: config.views.exhibitionByTitle, - key: '"' + params.title + '"' + key: JSON.stringify({ + title: params.title, + lang: params.lang + }) }); }; @@ -71,13 +74,30 @@ fluid.engage.mountAcceptor(app, "exhibitions", acceptor); }; - var buildLink = function (url, db, title) { + var buildLink = function (url, lang, db, title) { return compileTargetURL(url, { db: db, - title: title + title: title, + lang: lang }); }; + var afterMap = function (data, params) { + data.cataloguePreview = fluid.transform(data.cataloguePreview, function (artifact) { + return { + target: compileTargetURL("../artifacts/view.html", { + db: params.db.slice(0, params.db.indexOf('_')), + accessNumber: artifact.accessionNumber, + lang: params.lang + }), + image: artifact.image, + media: artifact.media, + title: artifact.title + }; + }); + return data; + }; + fluid.exhibitionService.initExhibitionViewService = function (config, app) { var renderHandlerConfig = { config: config, @@ -98,24 +118,11 @@ var data = getData(errorCallback, params, config); var strings = fluid.kettle.getBundle(renderHandlerConfig, params); - data.catalogueLink = buildLink("../catalogue/view.html", params.db, data.title); - data.aboutLink = buildLink("about.html", params.db, data.title); + data.catalogueLink = buildLink("../catalogue/view.html", params.lang, params.db, data.title); + data.aboutLink = buildLink("about.html", params.lang, params.db, data.title); - ////////////////////////////////////////////////////////////////////// - // TODO: Remove this hardcoded data as soon as we get real data!!! - data.cataloguePreview = [{ - "media": true, - "title": "Thermometer", - "image": "http://helios.gsfc.nasa.gov/image_euv_press.jpg" - }, { - "title": "Barometer", - "image": "http://helios.gsfc.nasa.gov/image_euv_press.jpg" - } - ]; - ///////////////////////////////////////////////////////////////////// - var options = { - model: data + model: afterMap(data, params) }; if (strings) { options.strings = strings;