<body>
- <div id="radar">
- </div>
- <div id="ref-table"></div>
+ <div id="radar">
+ </div>
+ <div id="sidenav" class="sidenav">
+ <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">×</a>
+ <div id="new-items">
+ <%= form_for @changeset, radar_path(@conn, :create), fn f -> %>
+ <table class="radar-input-table" >
+ <thead>
+ <tr class="radar-input-status-group">
+ <td>Quadrant</td>
+ <td>Cycle</td>
+ <td>Name</td>
+ <td>Description</td>
+ <td< /td>
+ </tr>
+ </thead>
+ <tr c>
+ <td>
+ <%= select f, :quadrant, Enum.with_index(TechRadarEditor.RadarDataPoint.quadrants,1) %>
+ </td>
+ <td>
+ <%= select f, :cycle, Enum.with_index(TechRadarEditor.RadarDataPoint.cycles,1) %>
+ </td>
+ <td>
+ <%= text_input f, :name %>
+ </td>
+ <td>
+ <%= text_input f, :description %>
+ </td>
+ <td>
+ <%= hidden_input f, :is_new, value: "true" %>
+ <%= submit "Add", class: "btn btn-primary" %>
+ </td>
+ </tr>
+ </table>
+ <% end %>
+ </div>
+ <div id="ref-table">
+ </div>
+ </div>
</body>
<script>
- var adopt = new tr.models.Cycle('Adopt', 0);
- var trial = new tr.models.Cycle('Trial', 1);
- var assess = new tr.models.Cycle('Assess', 2);
- var hold = new tr.models.Cycle('Hold', 3);
-
- var radar = new tr.models.Radar();
- var toolsQuadrant = new tr.models.Quadrant('Tools');
- var techniquesQuadrant = new tr.models.Quadrant('Techniques');
- var platformsQuadrant = new tr.models.Quadrant('Platforms');
- var languageFramework = new tr.models.Quadrant('Languages & Frameworks');
-
- toolsQuadrant.add([
- new tr.models.Blip('D3', adopt),
- new tr.models.Blip('Dependency Management for JavaScript', adopt, true),
- new tr.models.Blip('Ansible', trial, true),
- new tr.models.Blip('Calabash', trial, true),
- new tr.models.Blip('Chaos Monkey', trial, true),
- new tr.models.Blip('Gatling', trial),
- new tr.models.Blip('Grunt.js', trial, true),
- new tr.models.Blip('Hystrix', trial),
- new tr.models.Blip('Icon fonts', trial),
- new tr.models.Blip('Librarian-puppet and Librarian-Chef', trial),
- new tr.models.Blip('Logstash & Graylog2', trial),
- new tr.models.Blip('Moco', trial, true),
- new tr.models.Blip('PhantomJS', trial),
- new tr.models.Blip('Prototype On Paper', trial, true),
- new tr.models.Blip('SnapCI', trial, true),
- new tr.models.Blip('Snowplow Analytics & Piwik', trial),
- new tr.models.Blip('Cloud-init', assess, true),
- new tr.models.Blip('Docker', assess, true),
- new tr.models.Blip('Octopus', assess),
- new tr.models.Blip('Sensu', assess, true),
- new tr.models.Blip('Travis for OSX/iOS', assess, true),
- new tr.models.Blip('Visual regression testing tools', assess, true),
- new tr.models.Blip('Xamarin', assess, true),
- new tr.models.Blip('Ant', hold, true),
- new tr.models.Blip('Heavyweight test tools', hold),
- new tr.models.Blip('TFS', hold)
- ]);
- techniquesQuadrant.add([
- new tr.models.Blip('Capturing client-side JavaScript errors', adopt),
- new tr.models.Blip('Continuous delivery for mobile devices', adopt),
- new tr.models.Blip('Mobile testing on mobile networks', adopt),
- new tr.models.Blip('Segregated DOM plus node for JS Testing', adopt, true),
- new tr.models.Blip('Windows infrastructure automation', adopt),
- new tr.models.Blip('Capture domain events explicitily', trial, true),
- new tr.models.Blip('Client and server rendering with same code', trial, true),
- new tr.models.Blip('HTML5 storage instead of cookies', trial),
- new tr.models.Blip('Instrument all the things', trial, true),
- new tr.models.Blip('Masterless Chef/Puppet', trial, true),
- new tr.models.Blip('Micro-services', trial),
- new tr.models.Blip('Perimeterless enterprise', trial),
- new tr.models.Blip('Provisioning testing', trial, true),
- new tr.models.Blip('Structured logging', trial, true),
- new tr.models.Blip('Bridging physical and digital worlds with simple hardware', assess, true),
- new tr.models.Blip('Collaborative analytics and data science', assess),
- new tr.models.Blip('Datensparsamkeit', assess, true),
- new tr.models.Blip('Development environments in the cloud', assess),
- new tr.models.Blip('Focus on mean time to recovery', assess),
- new tr.models.Blip('Machine image as a build artifact', assess),
- new tr.models.Blip('Tangible interaction', assess, true),
- new tr.models.Blip('Cloud lift and shift', hold, true),
- new tr.models.Blip('Ignoring OWASP Top 10', hold, true),
- new tr.models.Blip('Siloed metrics', hold, true),
- new tr.models.Blip('Velocity as productivity', hold, true)
- ]);
- platformsQuadrant.add([
- new tr.models.Blip('Elastic Search', adopt),
- new tr.models.Blip('MongoDB', adopt),
- new tr.models.Blip('Neo4J', adopt),
- new tr.models.Blip('Node.js', adopt),
- new tr.models.Blip('Redis', adopt),
- new tr.models.Blip('SMS and USSD as UI', adopt),
- new tr.models.Blip('Hadoop 2.0', trial),
- new tr.models.Blip('Hadoop as a service', trial, true),
- new tr.models.Blip('Open Stack', trial),
- new tr.models.Blip('PostgreSQL for NoSql', trial),
- new tr.models.Blip('Vumi', trial),
- new tr.models.Blip('Akka', assess, true),
- new tr.models.Blip('Backend as a service', assess, true),
- new tr.models.Blip('Low-cost robotics', assess, true),
- new tr.models.Blip('PhoneGap/Apache Cordova', assess),
- new tr.models.Blip('Private Clouds', assess),
- new tr.models.Blip('SPDY', assess, true),
- new tr.models.Blip('Storm', assess, true),
- new tr.models.Blip('Web Components standard', assess, true),
- new tr.models.Blip('Big enterprise solutions', hold),
- new tr.models.Blip('CMS as a platform', hold, true),
- new tr.models.Blip('Enterprise Data Warehouse', hold, true)
- ]);
- languageFramework.add([
- new tr.models.Blip('Clojure', adopt, true),
- new tr.models.Blip('Dropwizard', adopt),
- new tr.models.Blip('Scala, the good parts', adopt),
- new tr.models.Blip('Sinatra', adopt),
- new tr.models.Blip('CoffeeScript', trial),
- new tr.models.Blip('Go language', trial, true),
- new tr.models.Blip('Hive', trial, true),
- new tr.models.Blip('Play Framework 2', trial),
- new tr.models.Blip('Reactive Extensions across languages', trial, true),
- new tr.models.Blip('Web API', trial, true),
- new tr.models.Blip('Elixir', assess, true),
- new tr.models.Blip('Julia', assess, true),
- new tr.models.Blip('Nancy', assess),
- new tr.models.Blip('OWIN', assess),
- new tr.models.Blip('Pester', assess, true),
- new tr.models.Blip('Pointer Events', assess, true),
- new tr.models.Blip('Python 3', assess, true),
- new tr.models.Blip('TypeScript', assess, true),
- new tr.models.Blip('Yeoman', assess, true),
- new tr.models.Blip('Handwritten CSS', hold),
- new tr.models.Blip('JSF', hold, true)
- ]);
-
- radar.setFirstQuadrant(toolsQuadrant);
- radar.setSecondQuadrant(techniquesQuadrant);
- radar.setThirdQuadrant(platformsQuadrant);
- radar.setFourthQuadrant(languageFramework);
-
- var radarGraph = new tr.graphing.Radar(1080, radar);
- radarGraph.init('#radar').plot();
- var refTable = new tr.graphing.RefTable(radar);
- refTable.init('#ref-table').render();
-</script>
+var adopt = new tr.models.Cycle('Adopt', 0);
+var trial = new tr.models.Cycle('Trial', 1);
+var assess = new tr.models.Cycle('Assess', 2);
+var hold = new tr.models.Cycle('Hold', 3);
+
+var radar = new tr.models.Radar();
+var toolsQuadrant = new tr.models.Quadrant('Tools');
+var techniquesQuadrant = new tr.models.Quadrant('Techniques');
+var platformsQuadrant = new tr.models.Quadrant('Platforms');
+var languageFramework = new tr.models.Quadrant('Languages & Frameworks');
+
+<% fn_blip_line = fn(p) -> " new tr.models.Blip('" <> p.name <> "', "
+ <> String.downcase(Enum.at(TechRadarEditor.RadarDataPoint.cycles, p.cycle-1)) <> ", "
+ <> if(p.is_new, do: "true", else: "false")
+ <> if(p.description != nil, do: ",'" <> p.description <> "'", else: "")
+ <> ")"
+ end
+%>
+
+toolsQuadrant.add([
+ <%= raw(Enum.join( Enum.map(@radar_quadrants[1], fn(p) -> fn_blip_line.(p) end),",\n")) %>
+]);
+
+techniquesQuadrant.add([
+ <%= raw(Enum.join( Enum.map(@radar_quadrants[2], fn(p) -> fn_blip_line.(p) end),",\n")) %>
+]);
+
+platformsQuadrant.add([
+ <%= raw(Enum.join( Enum.map(@radar_quadrants[3], fn(p) -> fn_blip_line.(p) end),",\n")) %>
+]);
+
+languageFramework.add([
+ <%= raw(Enum.join( Enum.map(@radar_quadrants[4], fn(p) -> fn_blip_line.(p) end),",\n")) %>
+]);
+
+radar.setFirstQuadrant(toolsQuadrant);
+radar.setSecondQuadrant(techniquesQuadrant);
+radar.setThirdQuadrant(platformsQuadrant);
+radar.setFourthQuadrant(languageFramework);
-
+var innerWidth = window.innerWidth;
+var innerHeight = window.innerHeight;
+
+radarSize = Math.min(innerWidth-20, innerHeight-20, 1080);
+
+var radarGraph = new tr.graphing.Radar(radarSize, radar);
+radarGraph.init('#radar').plot();
+var refTable = new tr.graphing.RefTable(radar);
+refTable.init('#ref-table').render();
+
+ref_table = document.getElementsByClassName('radar-ref-table')[0];
+for (var i = 0, trow; trow = ref_table.rows[i]; i++) {
+ if (trow.cells.length == 3) {
+ var blip_number = trow.cells[0].textContent;
+ var new_cell = trow.insertCell(-1);
+ s_form = "<form action=\"/" + blip_number + "\" class=\"link\" method=\"post\">";
+ s_form += "<input name=\"_method\" type=\"hidden\" value=\"delete\">";
+ s_form += "<a class=\"btn btn-danger btn-xs\" data-confirm=\"Are you sure?\" data-submit=\"parent\" href=\"#\" rel=\"nofollow\">Delete</a>";
+ s_form += "<input type=\"hidden\" name=\"_csrf_token\" value=\"<%= get_csrf_token() %>\">";
+ s_form += "</form>";
+ new_cell.innerHTML = s_form;
+ };
+};
+
+/* Set the width of the side navigation to 250px */
+function openNav() {
+ document.getElementById("sidenav").style.width = "80%";
+}
+
+/* Set the width of the side navigation to 0 */
+function closeNav() {
+ document.getElementById("sidenav").style.width = "0";
+}
+
+</script>
+<button onclick="openNav()">Show Blips</button><br />
<a href="/admin/radar_data_point">Admin Radar Data Point</a>