| author | ymh <ymh.work@gmail.com> |
| Fri, 29 May 2015 14:57:37 +0200 | |
| changeset 444 | 19f0b7803aed |
| parent 293 | fba23fde14ba |
| permissions | -rw-r--r-- |
$(function() { var originalData = { show_editor: false, container: "preview" }; var userData = { bins: [ { type: "ResourceList", title: "Resource List", list: [ { title: "IRI", url: "http://www.iri.centrepompidou.fr/", image: "http://www.iri.centrepompidou.fr/wp-content/themes/IRI-Theme/images/logo-iri-petit_fr_fr.png", description: "Institut de Recherche et d'Innovation" } ] } ], search: [ { type: "Wikipedia", lang: "en" } ] }; function getNormalizedHtml(jqsel) { return jqsel.html().replace(/[\r\n]/gm,' ').replace(/\s{2,}/g,' ').replace(/(^\s+|\s+$)/g,''); } var searchEngineTemplate = getNormalizedHtml($(".search-engine-list")); $(".search-engine-list").empty().sortable(); var resourceTemplate = getNormalizedHtml($(".resource-list")); $(".resource-list").empty(); var binTemplate = getNormalizedHtml($(".bin-list")); $(".bin-list").empty().sortable(); function addSearchEngine(data, editMode) { $(".item").removeClass("item-editing"); var element = $(searchEngineTemplate), allfields = element.find(".edit-value"), typefield = element.find(".search-engine-type .edit-value"), typedisplay = element.find(".search-engine-type .display-value"), langsection = element.find(".search-engine-language"), langfield = element.find(".search-engine-language .edit-value"), langdisplay = element.find(".search-engine-language .display-value"); element.data("userdata",data); if (editMode) { element.addClass("item-editing"); } var onChange = function() { data.type = typefield.val(); typedisplay.text(typefield.find("[value=" + data.type + "]").text()); if (data.type === "Wikipedia") { data.lang = langfield.val() || "en"; langdisplay.text(langfield.find("[value=" + data.lang + "]").text()); langsection.show(); } else { delete data.lang; langsection.hide(); } }; typefield.val(data.type); if (data.type === "Wikipedia") { langfield.val(data.lang || "en"); } allfields.on("keyup paste change", onChange); onChange(); element.click(function() { $(".item").removeClass("item-editing"); element.addClass("item-editing"); return false; }); element.find(".remove-item").click(function() { element.remove(); return false; }); $(".search-engine-list").append(element); } function addBin(data, editMode) { $(".item").removeClass("item-editing"); var element = $(binTemplate), allfields = element.find(".edit-value"), typefield = element.find(".bin-type .edit-value"), typedisplay = element.find(".bin-type .display-value"), langsection = element.find(".bin-language"), langfield = langsection.find(".edit-value"), langdisplay = langsection.find(".display-value"), ldtsection = element.find(".ldt-options"), ldttypefield = element.find(".bin-ldt-type .edit-value"), ldttypedisplay = element.find(".bin-ldt-type .display-value"), ldtpffield = element.find(".bin-ldt-platform .edit-value"), ldtpfdisplay = element.find(".bin-ldt-platform .display-value"), ldtprojsection = element.find(".bin-ldt-project"), ldtprojfield = ldtprojsection.find(".edit-value"), ldtprojdisplay = ldtprojsection.find(".display-value"), kwsection = element.find(".bin-keyword"), kwfield = kwsection.find(".edit-value"), kwdisplay = kwsection.find(".display-value"), ressection = element.find(".bin-resources"), titlefield = element.find(".bin-title .edit-value"), titledisplay = element.find(".bin-title .display-value"), reslist = element.find(".resource-list"); reslist.sortable({ stop: updateListData }); element.data("userdata",data); if (editMode) { element.addClass("item-editing"); } var onChange = function() { data.type = typefield.val(); typedisplay.text(typefield.find("[value=" + data.type + "]").text()); if (data.type === "Wikipedia") { data.lang = langfield.val() || "en"; langdisplay.text(langfield.find("[value=" + data.lang + "]").text()); langsection.show(); } else { delete data.lang; langsection.hide(); } if (data.type === "Ldt") { ldtsection.show(); data.ldt_type = ldttypefield.val() || "Results"; ldttypedisplay.text(ldttypefield.find("[value=" + data.ldt_type + "]").text()); data.ldt_platform = ldtpffield.val() || ldtpffield.val("http://ldt.iri.centrepompidou.fr/").val(); ldtpfdisplay.text(data.ldt_platform); if (data.ldt_type === "Project") { data.project_id = ldtprojfield.val(); ldtprojdisplay.text(data.ldt_project); ldtprojsection.show(); } else { delete data.ldt_project; ldtprojsection.hide(); } } else { delete data.ldt_type; delete data.project_id; delete data.ldt_platform; ldtsection.hide(); } if (data.type === "Wikipedia" || (data.type === "Ldt" && data.ldt_type === "Results")) { data.search = kwfield.val(); kwdisplay.text(data.search); kwsection.show(); } else { delete data.search; kwsection.hide(); } if (data.type === "ResourceList") { data.title = titlefield.val() || titlefield.val("Untitled Resource List").val(); titledisplay.text(data.title); ressection.show(); } else { ressection.hide(); } updateListData(); }; var updateListData = function() { if (data.type === "ResourceList") { data.list = Array.prototype.slice.call( reslist.find(".resource").map(function(){return $(this).data("userdata");}) ); } else { delete data.list; } }; var addResource = function(resdata, editmode) { var resel = $(resourceTemplate), all_fields = resel.find(".edit-value"), title_field = resel.find(".resource-title .edit-value"), title_text = resel.find(".resource-title .display-value"), url_field = resel.find(".resource-url .edit-value"), url_text = resel.find(".resource-url .display-value"), description_field = resel.find(".resource-description .edit-value"), description_text = resel.find(".resource-description .display-value"), image_field = resel.find(".resource-image .edit-value"), image_text = resel.find(".resource-image .display-value"); resel.data("userdata",resdata); if (editmode) { resel.addClass("resource-editing"); } var onResourceChange = function() { resdata.title = title_field.val(); title_text.text(resdata.title); resdata.description = description_field.val(); description_text.text(resdata.description); resdata.url = url_field.val(); url_text.text(resdata.url); resdata.image = image_field.val(); image_text.text(resdata.image); updateListData(); }; title_field.val( resdata.title || "" ); url_field.val( resdata.url || "" ); description_field.val( resdata.description || "" ); image_field.val( resdata.image || "" ); all_fields.on("keyup paste change", onResourceChange); onResourceChange(); resel.find(".remove-item").click(function() { resel.remove(); updateListData(); return false; }); resel.click(function() { $(".resource").removeClass("resource-editing"); resel.addClass("resource-editing"); return false; }); reslist.append(resel); }; if (data.list) { data.list.forEach(addResource); } typefield.val(data.type); if (data.type === "Wikipedia") { langfield.val(data.lang || "en"); } if (data.type === "Ldt") { ldttypefield.val(data.ldt_type || "Results"); ldtpffield.val(data.ldt_platform || "http://ldt.iri.centrepompidou.fr/"); if (data.ldt_type === "Project") { ldtprojfield.val(data.ldt_project); } } if (data.type === "Wikipedia" || (data.type === "Ldt" && data.ldt_type === "Results")) { kwfield.val(data.search || ""); } if (data.type === "ResourceList") { titlefield.val(data.title || "Untitled Resource List"); } allfields.on("keyup paste change", onChange); onChange(); element.click(function() { $(".item").removeClass("item-editing"); element.addClass("item-editing"); return false; }); element.find(".remove-item").click(function() { element.remove(); return false; }); element.find(".add-resource").click(function() { addResource({"title": "New Resource"},true); return false; }); $(".bin-list").append(element); } userData.search.forEach(function(data) { addSearchEngine(data,false); }); userData.bins.forEach(function(data) { addBin(data,false); }); $(".add-search-engine").click(function() { addSearchEngine({ type: "Wikipedia", lang: "en" }, true); return false; }); $(".add-bin").click(function() { addBin({ type: "Wikipedia", lang: "en", search: "" }, true); return false; }); $(".update-preview").click(function() { userData.search = Array.prototype.slice.call( $(".search-engine").map(function(){return $(this).data("userdata");}) ); userData.bins = Array.prototype.slice.call( $(".bin").map(function(){return $(this).data("userdata");}) ); new Rkns.Renkan(_.extend({}, originalData, userData)); }); new Rkns.Renkan(_.extend({}, originalData, userData)); });