Skip to content

Commit

Permalink
made design changes and add keyword list
Browse files Browse the repository at this point in the history
  • Loading branch information
nanchenchen committed Aug 28, 2015
1 parent 74f9566 commit 3622a78
Show file tree
Hide file tree
Showing 6 changed files with 409 additions and 81 deletions.
90 changes: 90 additions & 0 deletions msgvis/static/SparQs/charts.js
Original file line number Diff line number Diff line change
Expand Up @@ -446,6 +446,96 @@

}
});

module.directive('keywordsHistogram', function () {

var get_scale = function(dimension, width){
var values = dimension.table.map(function(d){ return d.value; });
var scale = d3.scale.linear();
scale.domain([0, d3.max(values)]);
scale.range([0, width]);
return scale;
};

var render_bar = function(scope, $element, attrs, distribution){
if ( typeof(scope.keywords) !== "undefined" ){
var elementSize = {
width: $element.parent().width(),
height: $element.parent().height()
};
var scale = get_scale(scope.keywords, elementSize.width * 0.1);
var $d3_element = d3.select($element[0]);
var d3_select = $d3_element.selectAll('.level-div')
.data(distribution)
.classed('active', true);

d3_select.enter()
.append('div')
.classed('level-div', true)
.each(function(d){
var self = d3.select(this);
self.classed('active', true);

var label = self.append('div')
.classed('level-name', true);

label.append('span').classed('level-name-text', true);

self.append('div').classed('level-value', true);
self.append('div').classed('level-bar', true);
});

d3_select.exit()
.each(function(d){
var self = d3.select(this);
self.classed('active', false);
self.style('display', 'none');
});

$d3_element.selectAll('.level-div.active')
.each(function(d){
var self = d3.select(this);
var $self = $(this);
self.style('display', 'block');

self.select('.level-name-text').text(d.label || d.level);
self.select('.level-value').text(d.value);
self.select('.level-bar')
.style("width", (scale(d.value)) + "px")
.style("height", "0.7em");
});


}
};

function link(scope, $element, attrs){

scope.$watch('keywords.get_current_keywords_distribution().length', function (newVals, oldVals) {
if (newVals) {
// Note:
// For unknown reasons, the show will be reset to the original state (in filter mode is false, exclude mode is true.)
// So it need to be set to its real state based on filter/exclude.
var distribution = scope.keywords.get_current_keywords_distribution();

return render_bar(scope, $element, attrs, distribution);
}
}, false);

}

return {
restrict: 'E',
replace: false,

scope: {
keywords: '=keywords'
},
link: link

}
});


module.directive('sparqsVis', function () {

Expand Down
34 changes: 32 additions & 2 deletions msgvis/static/SparQs/controllers.js
Original file line number Diff line number Diff line change
Expand Up @@ -178,8 +178,9 @@
];
module.controller('SparQs.controllers.ExampleMessageController', ExampleMessageController);

var SearchAndGroupController = function ($scope, KeywordMessages, Group, Dataset, Selection, usSpinnerService) {
var SearchAndGroupController = function ($scope, Keywords, KeywordMessages, Group, Dataset, Selection, usSpinnerService) {

$scope.keywords = Keywords;
$scope.Group = Group;
Group.load(Dataset.id);

Expand Down Expand Up @@ -286,7 +287,7 @@


$scope.is_empty = function(){
return (!$scope.edit_mode && $scope.messages.count == -1 )
return (!$scope.edit_mode || $scope.messages.count == -1 )
};
$scope.is_being_editing = function(group){
return $scope.edit_mode && Group.current_group_id == group.id;
Expand Down Expand Up @@ -339,9 +340,38 @@
return ($scope.is_being_editing(group)) ? "edit-class" : ((group.selected) ? "active" : "");
};

// Load keywords distribution
Keywords.load_keywords_distributions();

$scope.$watch('keywords.request', function(newVal, oldVal) {
if (Keywords && Keywords.request) {
usSpinnerService.spin('keywords-spinner');

Keywords.request.then(function() {
usSpinnerService.stop('keywords-spinner');
})
}
});

$scope.loadMoreKeywords = function() {
Keywords.load_keywords_distributions();
};

$scope.keywords_search = function() {
Keywords.search_key = Keywords.search_key_tmp;
Keywords.load_keywords_distributions();
$('#keywords-list').scrollTop(0);
};
$scope.set_back_cur_keywords_search = function() {
if ( Keywords.search_key_tmp !== Keywords.search_key )
Keywords.search_key_tmp = Keywords.search_key;

};

};
SearchAndGroupController.$inject = [
'$scope',
'SparQs.services.Keywords',
'SparQs.services.KeywordMessages',
'SparQs.services.Group',
'SparQs.services.Dataset',
Expand Down
127 changes: 127 additions & 0 deletions msgvis/static/SparQs/services.js
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@
self.current_page = 1;
self.pages = 0;
self.count = -1;

};

angular.extend(KeywordMessages.prototype, {
Expand Down Expand Up @@ -360,6 +361,132 @@
}
]);

//A service for loading example messages.
module.factory('SparQs.services.Keywords', [
'$http', 'djangoUrl', 'SparQs.services.Dataset',
function keywordsFactory($http, djangoUrl, Dataset) {


var Keywords = function () {
var self = this;
self.key = "words";
self.search_results = {"": self};
self.table = undefined;
self.domain = undefined;
self.distribution = undefined;
self.search_key = "";
self.search_key_tmp = "";
self.loading = false;
};


angular.extend(Keywords.prototype, {
load_keywords_distributions: function(dataset){
var self = this;
if (!self.loading) {
self.loading = true;
var target = self;
if ( typeof(self.search_key) !== "undefined" && self.search_key !== "" &&
typeof(self.search_results[self.search_key]) === "undefined" ){
target = {};
target.table = [];
target.domain = [];
target.domain_labels = {};
target.distribution = [];
target.page = 0;
self.search_results[self.search_key] = target;

}
else if( !self.table ){
self.table = [];
self.domain = [];
self.domain_labels = {};
self.distribution = [];
self.page = 0;

}

var request = {
dataset: Dataset.id,
dimensions: [self.key],
exclude: [{dimension: self.key, levels: [""]}],
page: target.page + 1,
search_key: (self.search_key !== "") ? self.search_key : undefined
};

var apiUrl = djangoUrl.reverse('data-table');


self.request = $http.post(apiUrl, request)
.success(function (data) {
var result = data.result;
self.loading = false;
self.request = undefined;
if ( result !== null && typeof(result) !== "undefined" ){
result.table = result.table;
result.domain = result.domains[self.key];
result.domain_labels = result.domain_labels[self.key] || {};
result.distribution = self.get_keywords_distribution_in_order(result.table, result.domain, result.domain_labels);

self.add_keywords_distribution(target, result);

}
});

return self.request;
}
},
get_keywords_distribution_in_order: function (table, domain, labels) {
if (!table || !domain) {
return undefined;
}
var self = this;
var distribution_map = {};
table.forEach(function (d) {
var level = d[self.key];
distribution_map[level] = d.value;
});

return domain.map(function(level, i) {
var value = distribution_map[level] || 0;

if (level === null || level === "")
level = "No " + self.name;

var label;
if (labels && labels.length > i) {
label = labels[i];
}

return {
level: level,
label: label,
value: value
};
});
},
add_keywords_distribution: function(target, result){
$.merge(target.table, result.table);
$.merge(target.domain, result.domain);
$.extend(target.domain_labels, result.domain_labels);
$.merge(target.distribution, result.distribution);
target.page += 1;
},
get_current_keywords_distribution: function(){
var self = this;
return self.search_results[self.search_key].distribution;
},
reset_keywords_search: function () {
var self = this;
self.search_key = "";
self.search_key_tmp = "";
}
});

return new Keywords();
}
]);

//A service for Groups.
module.factory('SparQs.services.Group', [
'$http', 'djangoUrl',
Expand Down
4 changes: 2 additions & 2 deletions msgvis/static/SparQs/services/dimensions_service.js
Original file line number Diff line number Diff line change
Expand Up @@ -465,8 +465,8 @@
"group_name": "Interaction",
"dimensions": [
this.get_by_key('type'),
this.get_by_key('replies'),
this.get_by_key('shares'),
//this.get_by_key('replies'),
//this.get_by_key('shares'),
this.get_by_key('mentions')
//this.get_by_key('contains_mention')
]
Expand Down

0 comments on commit 3622a78

Please sign in to comment.