pyk 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ //= require_tree ./launchpad/
@@ -0,0 +1,49 @@
1
+ function CustomTooltip(tooltipId, width){
2
+ var tooltipId = tooltipId;
3
+ $("body").append("<div class='tooltip' id='"+tooltipId+"'></div>");
4
+
5
+ if(width){
6
+ $("#"+tooltipId).css("width", width);
7
+ }
8
+
9
+ hideTooltip();
10
+
11
+ function showTooltip(content, event){
12
+ $("#"+tooltipId).html(content);
13
+ $("#"+tooltipId).show();
14
+
15
+ updatePosition(event);
16
+ }
17
+
18
+ function hideTooltip(){
19
+ $("#"+tooltipId).hide();
20
+ }
21
+
22
+ function updatePosition(event){
23
+ var ttid = "#"+tooltipId;
24
+ var xOffset = 20;
25
+ var yOffset = 10;
26
+
27
+ var ttw = $(ttid).width();
28
+ var tth = $(ttid).height();
29
+ var wscrY = $(window).scrollTop();
30
+ var wscrX = $(window).scrollLeft();
31
+ var curX = (document.all) ? event.clientX + wscrX : event.pageX;
32
+ var curY = (document.all) ? event.clientY + wscrY : event.pageY;
33
+ var ttleft = ((curX - wscrX + xOffset*2 + ttw) > $(window).width()) ? curX - ttw - xOffset*2 : curX + xOffset;
34
+ if (ttleft < wscrX + xOffset){
35
+ ttleft = wscrX + xOffset;
36
+ }
37
+ var tttop = ((curY - wscrY + yOffset*2 + tth) > $(window).height()) ? curY - tth - yOffset*2 : curY + yOffset;
38
+ if (tttop < wscrY + yOffset){
39
+ tttop = curY + yOffset;
40
+ }
41
+ $(ttid).css('top', tttop + 'px').css('left', ttleft + 'px');
42
+ }
43
+
44
+ return {
45
+ showTooltip: showTooltip,
46
+ hideTooltip: hideTooltip,
47
+ updatePosition: updatePosition
48
+ }
49
+ }
@@ -0,0 +1,56 @@
1
+ var map;
2
+
3
+ function initialize() {
4
+ var mapOptions = {
5
+ zoom: 1,
6
+ center: new google.maps.LatLng(51.4788, 0.0106),
7
+ mapTypeId: google.maps.MapTypeId.SATELLITE
8
+ };
9
+
10
+ map = new google.maps.Map(document.getElementById('map-canvas'),
11
+ mapOptions);
12
+
13
+
14
+ // Create a script tag and set the USGS URL as the source.
15
+ // Append this tag to the document's <head>.
16
+ var script = document.createElement('script');
17
+ //script.src = 'http://earthquake.usgs.gov/earthquakes/feed/geojsonp/2.5/week';
18
+ script.src = '/data/bubbles_geo.json';
19
+ document.getElementsByTagName('head')[0].appendChild(script);
20
+ }
21
+
22
+ window.eqfeed_callback = function(results) {
23
+ for (var i = 0; i < results.features.length; i++) {
24
+ var earthquake = results.features[i];
25
+ var coords = earthquake.geometry.coordinates;
26
+ var latLng = new google.maps.LatLng(coords[1],coords[0]);
27
+ var marker = new google.maps.Marker({
28
+ position: latLng,
29
+ map: map,
30
+ icon: getCircle(earthquake),
31
+ title: earthquake.data.tooltip_contents
32
+ });
33
+ var infowindow = new google.maps.InfoWindow({
34
+ content: earthquake.data.tooltip_contents ,
35
+ maxWidth: 200,
36
+ position: marker.getPosition()
37
+ });
38
+ google.maps.event.addListener(marker, 'click', function() {
39
+ alert("tip" + earthquake.data.tooltip_contents);
40
+ infowindow.open(map,marker);
41
+ });
42
+ }
43
+
44
+ }
45
+
46
+ function getCircle(mark) {
47
+ return {
48
+ path: google.maps.SymbolPath.CIRCLE,
49
+ fillColor: mark.data.background_color,
50
+ fillOpacity: mark.data.background_opacity,
51
+ radius: mark.data.weight,
52
+ scale: 10,
53
+ strokeColor: mark.data.border_color,
54
+ strokeWeight: mark.data.border_weight
55
+ };
56
+ }
@@ -0,0 +1,224 @@
1
+
2
+ var custom_bubble_chart = (function(d3, CustomTooltip
3
+ ) {
4
+ "use strict";
5
+
6
+ var width = 800,
7
+ height = 600,
8
+ tooltip = CustomTooltip("gates_tooltip", 240),
9
+ layout_gravity = -0.01,
10
+ damper = 0.1,
11
+ nodes = [],
12
+ year_centers = [],
13
+ years_x = [],
14
+ vis, force, circles, radius_scale;
15
+
16
+ var center = {x: width /2, y: height/3};
17
+
18
+
19
+ function find_unique_elements(data, param, deltaWidthParam) {
20
+ var birthDates = {};
21
+ $.each(data, function() {
22
+ if (!birthDates[this[param]])
23
+ birthDates[this[param]] = [];
24
+ birthDates[this[param]].push(this);
25
+ })
26
+ var length = 0;
27
+ for (var d in birthDates) {
28
+ length ++;
29
+ };
30
+ var rows = Math.floor(length / 3) + 1;
31
+ var col =3;
32
+ var deltaWidth = (height /rows);
33
+ var h = deltaWidthParam;
34
+ for(var d in birthDates) {
35
+ var key = d;
36
+ var w;
37
+ if (col > 0) {
38
+ switch(col) {
39
+ case 3 : w = width /5; break;
40
+ case 2 : w = width /2; break;
41
+ case 1 : w = 4 * width /5;break;
42
+
43
+ }
44
+ year_centers[key] = {
45
+ x: w,
46
+ y: h
47
+ }
48
+ years_x[key] = {
49
+ x:w
50
+ }
51
+ console.log("key:"+ key + " x:" + w+ "y:"+h);
52
+ if (col == 3) {
53
+ rows --;
54
+
55
+ }
56
+ col --;
57
+ if (col == 0) {col = 3;h += deltaWidth;}
58
+ }
59
+
60
+ }
61
+ }
62
+
63
+ function custom_chart(data, type, divId) {
64
+ var max_amount = d3.max(data, function(d) { return parseInt(d.weight/10, 10); } );
65
+ radius_scale = d3.scale.pow().exponent(0.5).domain([0, max_amount]).range([10, 100]);
66
+
67
+ //create node objects from original data
68
+ //that will serve as the data behind each
69
+ //bubble in the vis, then add each node
70
+ //to nodes to be used later
71
+ data.forEach(function(d){
72
+ var node = {
73
+ id: d.id,
74
+ radius: radius_scale(parseInt(d.weight/10, 10)),
75
+ value: d.weight,
76
+ name: d.name,
77
+ visits: d.visits,
78
+ calls: d.calls,
79
+ leads: d.leads,
80
+ color: d.color,
81
+ genre: d.genre,
82
+ genre2:d.genre2,
83
+ x: Math.random() * 900,
84
+ y: Math.random() * 800
85
+ }
86
+ nodes.push(node);
87
+ });
88
+
89
+ nodes.sort(function(a, b) {return b.value- a.value; });
90
+
91
+ vis = d3.select("#"+ divID).append("svg")
92
+ .attr("width", width)
93
+ .attr("height", height)
94
+ .attr("id", "svg_vis");
95
+
96
+ circles = vis.selectAll("circle")
97
+ .data(nodes, function(d) { return d.id ;});
98
+
99
+ circles.enter().append("circle")
100
+ .attr("r", 0)
101
+ .attr("fill", function(d) { return d.color ;})
102
+ .attr("stroke-width", 2)
103
+ .attr("stroke", function(d) {return d3.rgb(d.color).darker();})
104
+ .attr("id", function(d) { return "bubble_" + d.id; })
105
+ .on("mouseover", function(d, i) {show_details(d, i, this);} )
106
+ .on("mouseout", function(d, i) {hide_details(d, i, this);} )
107
+
108
+ circles.transition().duration(2000).attr("r", function(d) { return d.radius; });
109
+ }
110
+
111
+ function charge(d) {
112
+ return -Math.pow(d.radius, 2.0) / 8;
113
+ }
114
+
115
+ function start() {
116
+ force = d3.layout.force()
117
+ .nodes(nodes)
118
+ .size([width, height]);
119
+ }
120
+
121
+ function display_group_all() {
122
+ force.gravity(layout_gravity)
123
+ .charge(charge)
124
+ .friction(0.9)
125
+ .on("tick", function(e) {
126
+ circles.each(move_towards_center(e.alpha))
127
+ .attr("cx", function(d) {return d.x;})
128
+ .attr("cy", function(d) {return d.y;});
129
+ });
130
+ force.start();
131
+ hide_years();
132
+ }
133
+
134
+ function move_towards_center(alpha) {
135
+ return function(d) {
136
+ d.x = d.x + (center.x - d.x) * (damper + 0.02) * alpha;
137
+ d.y = d.y + (center.y - d.y) * (damper + 0.02) * alpha;
138
+ };
139
+ }
140
+
141
+ function display_by_year(type) {
142
+ force.gravity(layout_gravity)
143
+ .charge(charge)
144
+ .friction(0.9)
145
+ .on("tick", function(e) {
146
+ circles.each(move_towards_year(e.alpha, type))
147
+ .attr("cx", function(d) {return d.x;})
148
+ .attr("cy", function(d) {return d.y;});
149
+ });
150
+ force.start();
151
+ display_years();
152
+ }
153
+
154
+ function move_towards_year(alpha, type1) {
155
+ return function(d) {
156
+ var key1 = "";
157
+ for(var k in d) {
158
+ if (type1 == k) {
159
+ key1 = d[k];
160
+ break;
161
+ }
162
+ }
163
+ var target = year_centers[key1];
164
+ d.x = d.x + (target.x - d.x) * (damper + 0.02) * alpha * 1.1;
165
+ d.y = d.y + (target.y - d.y) * (damper + 0.02) * alpha * 1.1;
166
+ };
167
+ }
168
+
169
+
170
+ function display_years() {
171
+ var years_data = d3.keys(year_centers);
172
+ var years = vis.selectAll(".years")
173
+ .data(years_data);
174
+
175
+ years.enter().append("text")
176
+ .attr("class", "years")
177
+ .attr("x", function(d) { return year_centers[d].x; } )
178
+ .attr("y", function(d) { return year_centers[d].y;})
179
+ .attr("text-anchor", "middle")
180
+ .attr("fill", "white")
181
+ .text(function(d) { return d;});
182
+
183
+ }
184
+
185
+ function hide_years() {
186
+ var years = vis.selectAll(".years").remove();
187
+ }
188
+
189
+
190
+ function show_details(data, i, element) {
191
+ d3.select(element).attr("stroke", "black");
192
+ var content = "<h3>" + data.name + "</h3>";
193
+ content +="<span class=\"name\">Visits:</span><span class=\"value\"> " + data.visits + "</span><br/>";
194
+ content +="<span class=\"name\">Calls:</span><span class=\"value\"> " + data.calls + "</span><br/>";
195
+ content +="<span class=\"name\">Leads:</span><span class=\"value\"> " + data.leads + "</span><br/>";
196
+
197
+ tooltip.showTooltip(content, d3.event);
198
+ }
199
+
200
+ function hide_details(data, i, element) {
201
+ d3.select(element).attr("stroke", function(d) { return d3.rgb(d.color).darker();} );
202
+ tooltip.hideTooltip();
203
+ }
204
+
205
+ var my_mod = {};
206
+ my_mod.init = function (_data, type, deltaWidthParam,divId) {
207
+ custom_chart(_data, type, divId);
208
+ find_unique_elements(_data, type, deltaWidthParam);
209
+ start();
210
+ };
211
+
212
+ my_mod.display_all = display_group_all;
213
+ my_mod.display_year = display_by_year;
214
+ my_mod.toggle_view = function(view_type, type) {
215
+ if (view_type == 'year') {
216
+ display_by_year(type);
217
+ } else {
218
+ display_group_all();
219
+ }
220
+ };
221
+
222
+ return my_mod;
223
+ })(d3, CustomTooltip
224
+ );
metadata CHANGED
@@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 2
9
- version: 0.0.2
8
+ - 3
9
+ version: 0.0.3
10
10
  platform: ruby
11
11
  authors:
12
12
  - Pykih Software LLP
@@ -118,6 +118,10 @@ files:
118
118
  - app/assets/images/sprites/file-icons-16-px.png
119
119
  - app/assets/images/sprites/signup.png
120
120
  - app/assets/images/sprites/so.png
121
+ - app/assets/javascripts/pyk/bubbles_geo.js
122
+ - app/assets/javascripts/pyk/CustomTooltip.js
123
+ - app/assets/javascripts/pyk/types_bubbles.js
124
+ - app/assets/javascripts/pyk.js
121
125
  - app/assets/stylesheets/pyk/bootstrap.css.scss
122
126
  - app/assets/stylesheets/pyk/global.css.scss
123
127
  - app/assets/stylesheets/pyk/helpers.css.scss