UNPKG

d3-metatable

Version:

a table element for heterogenous objects

1 lines 3.36 kB
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("d3-selection"),require("d3-dispatch"),require("d3-array"),require("d3-collection")):"function"==typeof define&&define.amd?define(["exports","d3-selection","d3-dispatch","d3-array","d3-collection"],t):t(e.d3=e.d3||{},e.d3,e.d3,e.d3,e.d3)}(this,function(e,t,n,a,r){"use strict";e.metatable=function(e){function l(e){e.each(function(e){function n(){function e(e){p.splice(p.indexOf(e),1),h.selectAll("textarea").data(function(t,n){var a=r.map(t);a.remove(e);var l=f(a);return c.call("change",c,l,n),{data:l,index:n}}),n()}function u(e,t){p.splice(p.indexOf(t),1,e),h.selectAll("textarea").data(function(n,a){var l=r.map(n);l.set(e,l.get(t)),l.remove(t);var o=f(l);return c.call("change",c,o,a),{data:o,index:a}}),n()}function s(e){e.data[t.select(this).attr("field")]=function(e){var t=parseFloat(e);return t.toString()===e?t:e}(this.value),c.call("change",c,e.data,e.index)}function f(e){return e.entries().reduce(function(e,t){return e[t.key]=t.value,e},{})}var v=l.select("thead").select("tr").selectAll("th").data(p,function(e){return e});v.exit().remove();var m=v.enter().append("th").text(String).append("div").attr("class","small");d.deleteCol&&m.append("a").attr("href","#").attr("class","icon trash").text("Delete").on("click",function(n){t.event.preventDefault();var a=n;c.call("deleteprompt",c,n,e),i&&confirm("Delete column "+a+"?")&&e(n),i=!0}),d.renameCol&&m.append("a").attr("href","#").attr("class","icon pencil").text("Rename").on("click",function(e){t.event.preventDefault();var n=e;c.call("renameprompt",c,e,u);var a=o?prompt("New name for column "+n+"?"):void 0;o&&a&&u(a,n),o=!0});var h=l.select("tbody").selectAll("tr").data(function(e){return e});h.exit().remove();var x=(h=h.enter().append("tr").merge(h)).selectAll("td").data(p,function(e){return e});x.exit().remove(),x.enter().append("td").append("textarea").attr("field",String),h.selectAll("textarea").data(function(e,t){return a.range(p.length).map(function(){return{data:e,index:t}})}).classed("disabled",function(e){return void 0===e.data[t.select(this).attr("field")]}).property("value",function(e){var n=e.data[t.select(this).attr("field")];return isNaN(n)?n||"":n}).on("keyup",s).on("change",s).on("click",function(e){void 0===e.data[t.select(this).attr("field")]&&(e.data[t.select(this).attr("field")]="",n())}).on("focus",function(e){c.call("rowfocus",c,e.data,e.index)})}var l,u=t.select(this),s=r.set();e.map(Object.keys).forEach(function(e){e.forEach(function(e){s.add(e)})});var p=s.values();!function(){var a=u.selectAll(".controls").data([e]).enter().append("div").attr("class","controls");d.newCol&&a.append("a").text("New column").attr("href","#").attr("class","button icon plus").on("click",function(){t.event.preventDefault();var e=prompt("column name");e&&(p.push(e),n())});var r=u.selectAll("table").data([e]).enter().append("table"),c=r.append("thead");r.append("tbody"),c.append("tr"),l=u.select("table")}(),n(),c.preventprompt=function(e){switch(e){case"rename":o=!1;break;case"delete":i=!1}}})}var c=n.dispatch("change","rowfocus","renameprompt","deleteprompt"),o=!0,i=!0,d={newCol:!1!==(e=e||{}).newCol,renameCol:!1!==e.renameCol,deleteCol:!1!==e.deleteCol};return l.on=function(){return c.on.apply(c,arguments),l},l},Object.defineProperty(e,"__esModule",{value:!0})});