Skip to content

Commit

Permalink
Merge branch 'feature/angular'
Browse files Browse the repository at this point in the history
  • Loading branch information
jgallen23 committed Nov 26, 2012
2 parents f12236d + 89b1125 commit 4dd5ef7
Show file tree
Hide file tree
Showing 35 changed files with 591 additions and 5,233 deletions.
2 changes: 2 additions & 0 deletions .gitignore
@@ -1 +1,3 @@
node_modules
components
_dist
21 changes: 0 additions & 21 deletions Makefile

This file was deleted.

16 changes: 16 additions & 0 deletions app/controllers/hubsearch.js
@@ -0,0 +1,16 @@
app.controller('HubSearchController', function($scope, $routeParams, $location, debug) {
var log = debug('app:hubSearch');
$scope.query = $routeParams.query;
$scope.language = $routeParams.lang;

$scope.updateQuery = function(lang, query) {
lang = lang || 'all';
$location.path('/'+lang+'/'+query);
};

$scope.$on('$routeChangeSuccess', function(event, route, previousRoute) {
log('route changed', route);
$scope.query = route.params.query;
$scope.language = $routeParams.lang;
});
});
28 changes: 28 additions & 0 deletions app/controllers/results.js
@@ -0,0 +1,28 @@
app.controller('SearchResultsController', function($scope, github, debug) {
var log = debug('app:searchResults');

$scope.sortKey = '-forks';
$scope.searching = false;
$scope.repos = [];

$scope.$watch('query', function() {
search($scope.query, $scope.language);
});
$scope.$watch('language', function() {
search($scope.query, $scope.language);
});

var search = function(query, lang) {
log('query', query);
$scope.searching = true;
github
.search(query, lang)
.then(function(response) {
log('results', response);
$scope.repos = response;
$scope.searching = false;
});
};


});
23 changes: 23 additions & 0 deletions app/controllers/searchbox.js
@@ -0,0 +1,23 @@
app.controller('SearchBoxController', function($rootScope, $scope, debug) {
var log = debug('app:searchBox');

$scope.languages = _languages;
$scope.inputLanguage = localStorage.getItem('lang') || _languages[0];

$scope.$watch('query', function() {
$scope.inputQuery = $scope.query;
});

$scope.$watch('language', function() {
if (!$scope.language) {
return;
}
$scope.inputLanguage = $scope.language;
});

$scope.onSubmit = function() {
log('submit', $scope.inputLanguage, $scope.inputQuery);
localStorage.setItem('lang', $scope.inputLanguage);
$scope.updateQuery($scope.inputLanguage, $scope.inputQuery);
};
});
@@ -1,6 +1,6 @@
$.fn.relativeTime = function() {
app.filter('relativeDate', function() {
return function(timestamp) {

var getRelativeTime = function(timestamp) {
var now = new Date().getTime() / 1000;
var d = new Date(timestamp).getTime() / 1000;
var diff = now - d;
Expand All @@ -21,13 +21,4 @@ $.fn.relativeTime = function() {
}
return 'Just now';
};
return this.each(function() {

var el = $(this);
var time = el.data('timestamp');

el.html(getRelativeTime(time));

});

};
});
2 changes: 2 additions & 0 deletions app/main.js
@@ -0,0 +1,2 @@

window.app = angular.module('hubSearch', ['ui']);
5 changes: 5 additions & 0 deletions app/services/debug.js
@@ -0,0 +1,5 @@
app.factory('debug', function() {
return function() {
return debug.apply(debug, arguments);
};
});
23 changes: 23 additions & 0 deletions app/services/github.js
@@ -0,0 +1,23 @@
app.factory('github', ['$http', 'score', 'utils', function($http, score, utils) {
return {
search: function(query, language) {
if (language) {
language = '&language='+language;
} else {
language = '';
}
return $http
//.get('/fixtures/results.json')
.jsonp('https://api.github.com/legacy/repos/search/'+query+'?callback=JSON_CALLBACK'+language)
.then(function(response) {
var repos = response.data.data.repositories;
utils.each(repos, function(repo, index) {
var result = score(repo, index);
repo.score = result.value;
repo.githubRank = index+1;
});
return repos;
});
}
};
}]);
8 changes: 8 additions & 0 deletions app/services/router.js
@@ -0,0 +1,8 @@
app.config(function($routeProvider, $locationProvider) {
$routeProvider
.when('/:lang/:query', {
controller: 'SearchResultsController',
templateUrl: 'searchResults.html'
})
.otherwise({ redirectTo: '' });
});
22 changes: 9 additions & 13 deletions ui/scripts/utils/score.js → app/services/score.js
@@ -1,14 +1,12 @@
(function(exports) {
app.factory('score', function() {

var round = function(num) {
return Math.round(num*100)/100;
};

var week = 1000 * 60 * 60 * 24 * 7;

var calculateScore = function(repo, index) {

//TODO: factor in github result index
return function(repo, githubRank) {

//commit time
var now = new Date().getTime();
Expand All @@ -24,16 +22,14 @@
//forks
var forkScore = repo.forks * 100 / 1000;

repo.score = {
var score = {
commit: round(commitScore),
star: round(starScore),
fork: round(forkScore)
fork: round(forkScore),
githubRank: githubRank + 1,
value: Math.round(commitScore + starScore + forkScore)
};
repo.githubRank = index + 1;
repo.scoreValue = Math.round(commitScore + starScore + forkScore);
return score;
};

window.calculateScores = function(arr) {
_.each(arr, calculateScore);
};
})(window);
});
10 changes: 10 additions & 0 deletions app/services/utils.js
@@ -0,0 +1,10 @@
app.factory('utils', function() {
return {
each: function(arr, cb) {
for (var i = 0, c = arr.length; i < c; i++) {
var item = arr[i];
cb(item, i);
}
}
};
});
9 changes: 9 additions & 0 deletions component.json
@@ -0,0 +1,9 @@
{
"name": "hubsearch",
"dependencies": {
"angular": "*",
"jquery": "1.8.3",
"angular-ui": "~0.3.1",
"select2": "~3.2.0"
}
}
102 changes: 66 additions & 36 deletions grunt.js
@@ -1,6 +1,26 @@
module.exports = function(grunt) {
grunt.initConfig({
output: 'ui/_dist',
dist: {
script: '_dist/app.js',
style: '_dist/app.css'
},
files: {
vendor: [
'components/jquery/jquery.js',
'ui/vendor/bootstrap/js/bootstrap.js',
'components/angular/angular.js',
'components/select2/select2.js',
'components/angular-ui/common/module.js',
'components/angular-ui/modules/directives/select2/select2.js',
'components/debug/debug.js'
],
app: [
'app/main.js',
'app/controllers/*.js',
'app/filters/*.js',
'app/services/*.js'
]
},
template: {
main: {
src: 'views/main.ejs',
Expand All @@ -10,62 +30,50 @@ module.exports = function(grunt) {
},
lint: {
grunt: 'grunt.js',
scripts: [
'ui/scripts/plugins/fidel-underscore.js',
'ui/scripts/plugins/relative-time.js',
'ui/scripts/utils/score.js',
'ui/scripts/services/github-search.js',
'ui/scripts/modules/search-box.js',
'ui/scripts/modules/search-results.js',
'ui/scripts/app.js'
]
scripts: '<config:files.app>'
},
concat: {
styles: {
src: [
'ui/vendor/bootstrap/css/bootstrap.css',
'components/select2/select2.css',
'ui/stylesheets/common.css'
],
dest: '<%= output %>/app.css'
dest: '<config:dist.style>'
},
scripts: {
src: [
'ui/vendor/jquery/jquery-1.7.2.min.js',
'ui/vendor/underscore/underscore-min.js',
'ui/vendor/bootstrap/js/bootstrap.js',
'ui/vendor/fidel/fidel.js',
'ui/vendor/fidel-routes/fidel.routes.js',
'<config:lint.scripts>'
'<config:files.vendor>',
'<config:files.app>'
],
dest: '<%= output %>/app.js'
dest: '<config:dist.script>'
}
},
min: {
styles: {
src: '<config:concat.styles.dest>',
dest: '<config:concat.styles.dest>'
},
scripts: {
src: '<config:concat.scripts.dest>',
dest: '<config:concat.scripts.dest>'
src: '<config:dist.script>',
dest: '<config:dist.script>'
}
},
hash: {
src: [
'<%= output %>/app.css',
'<%= output %>/app.js'
],
dest: '<%= output %>',
mapping: 'assets.json'
mincss: {
compress: {
files: {
'_dist/app.css': '<config:dist.style>'
}
}
},
watch: {
view: {
files: '<config:template.main.src>',
tasks: 'template'
},
styles: {
files: '<config:concat.styles.src>',
tasks: 'concat.styles'
tasks: 'concat:styles'
},
scripts: {
files: '<config:lint.scripts>',
tasks: 'lint concat'
files: '<config:files.app>',
tasks: 'lint concat:scripts'
},
grunt: {
files: 'grunt.js',
Expand All @@ -77,13 +85,35 @@ module.exports = function(grunt) {
}
},
server: {
},
bootstrap: {
dest: 'ui/vendor/bootstrap',
css: [
"reset.less",
"type.less",
"tables.less",
"buttons.less",
"forms.less",
"navs.less",
"navbar.less",
"scaffolding.less",
"grid.less",
"layouts.less",
"wells.less",
"dropdowns.less"
],
js: [
"bootstrap-typeahead.js"
]
}
});
grunt.loadNpmTasks('grunt-bootstrap');
grunt.loadNpmTasks('grunt-growl');
grunt.loadNpmTasks('grunt-hash');
grunt.loadNpmTasks('grunt-contrib-mincss');
grunt.loadNpmTasks('grunt-templater');

grunt.registerTask('default', 'lint concat');
grunt.registerTask('prod', 'default min');
grunt.registerTask('default', 'template lint concat');
grunt.registerTask('prod', 'default min mincss');
grunt.registerTask('dev', 'default server watch');
};

0 comments on commit 4dd5ef7

Please sign in to comment.