angular.module('gettingStarted', []) | |
.directive('gettingStartedFactory', function() { | |
return { | |
bindToController : true, | |
controller: 'FactoryController', | |
controllerAs: 'factoryController', | |
templateUrl: 'scripts/factory-widget.html', | |
scope: { | |
factory: '=factory', | |
} | |
}; | |
}) | |
.filter('factoryCategoryFilter', function () { | |
return function (factories, enabledCategories) { | |
if (enabledCategories.length > 0) { | |
var filtered = []; | |
for (var i = 0; i < factories.length; i++) { | |
var factory = factories[i]; | |
if (enabledCategories.indexOf(factory.category) >= 0) { | |
filtered.push(factory); | |
} | |
} | |
return filtered; | |
} | |
return factories; | |
} | |
}) | |
.filter('factoryLanguageFilter', function () { | |
return function (factories, enabledLanguages) { | |
if (enabledLanguages.length > 0) { | |
var filtered = []; | |
for (var i = 0; i < factories.length; i++) { | |
var factory = factories[i]; | |
var languages = factory.languages; | |
if (languages) { | |
languages.forEach(function (language) { | |
if (enabledLanguages.indexOf(language) >= 0) { | |
filtered.push(factory); | |
} | |
}); | |
} | |
} | |
return filtered; | |
} | |
return factories; | |
} | |
}) | |
.controller('FactoryController', function () { | |
}) | |
.directive('gettingStartedFactories', function() { | |
return { | |
bindToController : true, | |
controller: 'FactoriesController', | |
controllerAs: 'factoriesController', | |
templateUrl: 'scripts/factories-widget.html' | |
}; | |
}) | |
.controller('FactoriesController', ['$http', function ($http) { | |
this.availableCategories = []; | |
this.availableLanguages = []; | |
this.enabledCategories = []; | |
this.enabledLanguages = []; | |
this.factories = []; | |
var self = this; | |
var promise = $http.get('scripts/factories.json'); | |
this.toggleSelected = function (item, enabledArray) { | |
var index = enabledArray.indexOf(item); | |
if (index < 0) { | |
enabledArray.push(item); | |
} else { | |
enabledArray.splice(index, 1); | |
} | |
}; | |
this.isChecked = function (item, enabledArray) { | |
return enabledArray.indexOf(item) >= 0; | |
}; | |
this.checkAll = function (availableArray) { | |
return availableArray.slice(0); | |
}; | |
this.toggleSelectedLanguage = function (language) { | |
return self.toggleSelected(language, self.enabledLanguages); | |
}; | |
this.toggleSelectedCategory = function (category) { | |
return self.toggleSelected(category, self.enabledCategories); | |
}; | |
this.isCheckedCategory = function (category) { | |
return self.isChecked(category, self.enabledCategories); | |
}; | |
this.isCheckedLanguage = function (language) { | |
return self.isChecked(language, self.enabledLanguages); | |
}; | |
this.checkAllLanguages = function () { | |
self.enabledLanguages = self.checkAll(self.availableLanguages); | |
}; | |
this.checkAllCategories = function () { | |
self.enabledCategories = self.checkAll(self.availableCategories); | |
}; | |
promise.then(function (response) { | |
self.factories = response.data.factories; | |
// now, populate the different categories | |
self.factories.forEach(function(factory) { | |
if (self.availableCategories.indexOf(factory.category) < 0) { | |
self.availableCategories.push(factory.category); | |
} | |
var languages = factory.languages; | |
if (languages) { | |
languages.forEach(function (language) { | |
if (self.availableLanguages.indexOf(language) < 0) { | |
self.availableLanguages.push(language); | |
} | |
}); | |
} | |
}); | |
// sort arrays | |
self.availableCategories.sort(); | |
self.availableLanguages.sort(); | |
}); | |
this.toggleCategory = function (category) { | |
var index = self.enabledCategories.indexOf(category); | |
if (index >= 0) { | |
self.enabledCategories.splice(index, 1); | |
} else { | |
self.enabledCategories.push(category); | |
} | |
} | |
}]); |