ngApp.controller('ImageManagerController', ['$scope', '$attrs', '$http', '$timeout', 'imageManagerService',
function ($scope, $attrs, $http, $timeout, imageManagerService) {
+
$scope.images = [];
$scope.imageType = $attrs.imageType;
$scope.selectedImage = false;
$scope.hasMore = false;
$scope.imageUpdateSuccess = false;
$scope.imageDeleteSuccess = false;
+ $scope.uploadedTo = $attrs.uploadedTo;
+
var page = 0;
var previousClickTime = 0;
var dataLoaded = false;
}]);
- ngApp.controller('PageEditController', ['$scope', '$http', '$attrs', '$interval', function ($scope, $http, $attrs, $interval) {
+ ngApp.controller('PageEditController', ['$scope', '$http', '$attrs', '$interval', '$timeout', '$sce',
+ function ($scope, $http, $attrs, $interval, $timeout, $sce) {
$scope.editorOptions = require('./pages/page-form');
- $scope.editorHtml = '';
+ $scope.editContent = '';
$scope.draftText = '';
var pageId = Number($attrs.pageId);
var isEdit = pageId !== 0;
+ var autosaveFrequency = 30; // AutoSave interval in seconds.
+ var isMarkdown = $attrs.editorType === 'markdown';
+ $scope.isUpdateDraft = Number($attrs.pageUpdateDraft) === 1;
+ $scope.isNewPageDraft = Number($attrs.pageNewDraft) === 1;
+
+ // Set inital header draft text
+ if ($scope.isUpdateDraft || $scope.isNewPageDraft) {
+ $scope.draftText = 'Editing Draft'
+ } else {
+ $scope.draftText = 'Editing Page'
+ };
+
+ var autoSave = false;
+
+ var currentContent = {
+ title: false,
+ html: false
+ };
if (isEdit) {
- startAutoSave();
+ setTimeout(() => {
+ startAutoSave();
+ }, 1000);
}
- $scope.editorChange = function() {
- $scope.draftText = '';
+ // Actions specifically for the markdown editor
+ if (isMarkdown) {
+ $scope.displayContent = '';
+ // Editor change event
+ $scope.editorChange = function (content) {
+ $scope.displayContent = $sce.trustAsHtml(content);
+ }
}
- function startAutoSave() {
- var currentTitle = $('#name').val();
- var currentHtml = $scope.editorHtml;
+ if (!isMarkdown) {
+ $scope.editorChange = function() {};
+ }
- console.log('Starting auto save');
+ /**
+ * Start the AutoSave loop, Checks for content change
+ * before performing the costly AJAX request.
+ */
+ function startAutoSave() {
+ currentContent.title = $('#name').val();
+ currentContent.html = $scope.editContent;
- $interval(() => {
+ autoSave = $interval(() => {
var newTitle = $('#name').val();
- var newHtml = $scope.editorHtml;
+ var newHtml = $scope.editContent;
- if (newTitle !== currentTitle || newHtml !== currentHtml) {
- currentHtml = newHtml;
- currentTitle = newTitle;
- saveDraftUpdate(newTitle, newHtml);
+ if (newTitle !== currentContent.title || newHtml !== currentContent.html) {
+ currentContent.html = newHtml;
+ currentContent.title = newTitle;
+ saveDraft();
}
- }, 1000*5);
+
+ }, 1000 * autosaveFrequency);
}
- function saveDraftUpdate(title, html) {
- $http.put('/ajax/page/' + pageId + '/save-draft', {
- name: title,
- html: html
- }).then((responseData) => {
- $scope.draftText = 'Draft saved'
- })
+ /**
+ * Save a draft update into the system via an AJAX request.
+ * @param title
+ * @param html
+ */
+ function saveDraft() {
+ var data = {
+ name: $('#name').val(),
+ html: isMarkdown ? $sce.getTrustedHtml($scope.displayContent) : $scope.editContent
+ };
+
+ if (isMarkdown) data.markdown = $scope.editContent;
+
+ $http.put('/ajax/page/' + pageId + '/save-draft', data).then((responseData) => {
+ $scope.draftText = responseData.data.message;
+ if (!$scope.isNewPageDraft) $scope.isUpdateDraft = true;
+ });
}
+ $scope.forceDraftSave = function() {
+ saveDraft();
+ };
+
+ /**
+ * Discard the current draft and grab the current page
+ * content from the system via an AJAX request.
+ */
+ $scope.discardDraft = function () {
+ $http.get('/ajax/page/' + pageId).then((responseData) => {
+ if (autoSave) $interval.cancel(autoSave);
+ $scope.draftText = 'Editing Page';
+ $scope.isUpdateDraft = false;
+ $scope.$broadcast('html-update', responseData.data.html);
+ $scope.$broadcast('markdown-update', responseData.data.markdown || responseData.data.html);
+ $('#name').val(responseData.data.name);
+ $timeout(() => {
+ startAutoSave();
+ }, 1000);
+ events.emit('success', 'Draft discarded, The editor has been updated with the current page content');
+ });
+ };
+
}]);
};
\ No newline at end of file