var app = angular.module("app", ["ngRoute", "ngSanitize", "ngTagsInput"]); app.config( function ($routeProvider, $locationProvider) { $routeProvider .when("/", {templateUrl: "views/blog.html", controller: "blog"}) .when("/create", {templateUrl: "views/create.html", controller: "create"}) .when("/about", {templateUrl: "views/about.html", controller: "about"}) .when("/faq", {templateUrl: "views/faq.html", controller: "faq"}) .otherwise({templateUrl: "404.html"}); $locationProvider.html5Mode({enabled: true, requireBase: false}); } ); app.run(($anchorScroll) => { $anchorScroll.yOffset = 100; }) app.controller("blog", ["$scope", "$http", function($scope, $http) { $scope.posts = []; $http.get("/api/posts") .then((r) => { $scope.posts = angular.fromJson(r.data); }); } ]); app.controller("create", ["$scope", "$http", function($scope, $http) { $scope.title = ""; $scope.author = ""; $scope.content = ""; $scope.tags = []; $scope.previewing = false; $scope.onSubmit = function() { // Create the post object post = { "title": $scope.title, "author": $scope.author, "content": $scope.content, "tags": $scope.tags, "date": new Date().getTime() }; // POST it to the server $http.post("/api/posts", post); // Clear the fields $scope.title = ""; $scope.author = ""; $scope.content = ""; $scope.tags = []; alert("Post has been submitted."); } $scope.onTagAdding = ($tag) => { if (!$tag.text.startsWith("#")) $tag.text = "#" + $tag.text; return $scope.tags.indexOf($tag.text) === -1; } $scope.onPreview = () => { $scope.previewing = !$scope.previewing; // Update HTML on preview to avoid parsing for each character change $scope.previewHtml = () => { return $scope.content && $scope.previewing ? marked($scope.content) : ""; } } } ]); app.controller("about", ["$scope", "$http", function($scope, $http) { $scope.aboutContent = ""; $http.get("/api/about") .then((r) => { $scope.aboutContent = angular.fromJson(r.data).content; }); } ]); app.controller("faq", ["$scope", "$http", "$location", "$anchorScroll", function($scope, $http, $location, $anchorScroll) { $scope.entries = [] $http.get("/api/faq") .then((r) => { $scope.entries = angular.fromJson(r.data) }); $scope.scrollTo = (hash) => { $anchorScroll(hash); }; } ]); app.controller("navButtons", ["$scope", "$location", function($scope, $location) { // Set the current relative path // Helpful to set the navButtons appropriately when refreshing $scope.current = $location.path(); // Changes location to the given target and sets the current path $scope.navClick = (target) => { $location.path(target); $scope.current = target; } // Applies the 'current' class if the target matches the current path $scope.isCurrent = (target) => { return $scope.current == target ? "current" : ""; } } ]); // -specific functionality app.controller("head", ["$scope", function($scope) { $scope.title = "Lemonblog"; } ]); app.controller("footer", ["$scope", function($scope) { $scope.year = new Date().getFullYear(); } ]); app.filter("markdown", () => { return function(input) { return marked(input); } });