the data driven web of now
play

The Data-Driven Web of Now Extending D3js Travis Smith Developer - PowerPoint PPT Presentation

The Data-Driven Web of Now Extending D3js Travis Smith Developer Evangelist Atlassian @TravisTheTechie The data-driven web @TravisTheTechie Quick demo time @TravisTheTechie the entire web is data driven @TravisTheTechie why do


  1. The Data-Driven Web of Now Extending D3js Travis Smith • Developer Evangelist • Atlassian • @TravisTheTechie

  2. The data-driven web @TravisTheTechie

  3. Quick demo time @TravisTheTechie

  4. the entire web is data driven @TravisTheTechie

  5. why do you care? @TravisTheTechie

  6. templates @TravisTheTechie

  7. mustache template

  8. react template

  9. underscore Post by <%= post.get(‘author’) %>

  10. underscore <% if (post.get(‘author’) { %> Post by <%= post.get(‘author’) %> <% } %>

  11. underscore <% if (post.get(‘author’)) { %> Post by <% if (post.get(‘alink’)) { %> <a href=“<%= post.get(‘alink’)”> <% } %> <%= post.get(‘author’) %> <% if (post.get(‘alink’)) { %> </a> <% } %> <% } %>

  12. templates are simple 
 when data is simple @TravisTheTechie

  13. when is data simple? @TravisTheTechie

  14. D3.js

  15. okay, great, how is this different? @TravisTheTechie

  16. markup is not data @TravisTheTechie

  17. markup is not code @TravisTheTechie

  18. “ Being abstract is something profoundly different from being vague… the purpose of abstraction is not to be vague, but to create a new semantic level in which one can be absolutely ” precise. - Edsger Dijkstra @TravisTheTechie

  19. express your representations @TravisTheTechie

  20. D3.js

  21. complicated, why is that better? @TravisTheTechie

  22. the value of code, abstractions @TravisTheTechie

  23. D3.js

  24. easier than, inline blocks, partials, or helpers @TravisTheTechie

  25. Selection, enter, and exit @TravisTheTechie

  26. var chart = d3.select(".charts") .selectAll("div") .data(data, function(d) { return d.action; }); chart .selectAll("span") .text(function(d) { return d.action; }); @TravisTheTechie

  27. chart .enter() .append("div") .classed({ "bar-item": true }) .append("span"); @TravisTheTechie

  28. var x = d3.scale.linear() .domain([0, d3.sum(data, function(d) { return d.value; })]) .range([0, 100]); chart .data(data, function(d) { return d.action; }); chart .style("width", function(d) { return x(d.value) + "%";}); @TravisTheTechie

  29. .charts .bar-item { ... width: 0%; -webkit-transition: width 1s ease-in-out; -moz-transition: width 1s ease-in-out; -o-transition: width 1s ease-in-out; transition: width 1s ease-in-out; } @TravisTheTechie

  30. chart .exit() .remove(); @TravisTheTechie

  31. You are now experts @TravisTheTechie

  32. Extending @TravisTheTechie

  33. row.append("td").append('span') .classed({'aui-avatar': true, 'aui-avatar-xsmall': true}) .append('span') .classed({'aui-avatar-inner': true}) .append('img') .attr('src', function(item) { return item.avatarUrls["16x16"]; }); @TravisTheTechie

  34. <td> <span class="aui-avatar aui-avatar-xsmall"> <span class="aui-avatar-inner"> <img src="..." /> </span> </span> </td> @TravisTheTechie

  35. d3.selection.enter.prototype.appendSelector = d3.selection.prototype.appendSelector = function(selector) { var self = this; var selectorParts = selector.split(/([\.\#])/); if (selectorParts.length == 0) return self; self = self.append(selectorParts.shift()); while (selectorParts.length > 1) { var selectorModifier = selectorParts.shift(); var selectorItem = selectorParts.shift(); if (selectorModifier === ".") { self = self.classed(selectorItem, true); } else if (selectorModifier === "#") { self = self.attr('id', selectorItem); } } return self; }; @TravisTheTechie

  36. row.append("td").append('span') .classed({'aui-avatar': true, 'aui-avatar-xsmall': true}) .append('span') .classed({'aui-avatar-inner': true}) .append('img') .attr('src', function(item) { return item.avatarUrls["16x16"]; }); @TravisTheTechie

  37. row.append("td") .appendSelector('span.aui-avatar.aui-avatar- xsmall') .appendSelector('span.aui-avatar-inner') .append('img') .attr('src', function(item) { return item.avatarUrls["16x16"] }); @TravisTheTechie

  38. var projHeadRow = projTable.append("thead").append("tr"); projHeadRow.append("th"); projHeadRow.append("th").text("Key"); projHeadRow.append("th").text("Name"); @TravisTheTechie

  39. projHeadRow = projTable.createTableHeaderWithHeadings( [ "", "Key", “Name" ]); @TravisTheTechie

  40. Tools in hand, it’s demo time @TravisTheTechie

  41. Questions & take aways • d3js.org • bit.ly/fowa2014-ed3 • @TravisTheTechie • spkr8.com/t/38921 Thanks for coming!

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend