'use strict';
suxessServices.service('mockupEditorService', [
'Restangular',
'$uibModal',
'$q',
function ( Restangular, $uibModal, $q ) {
/**
* Returns function that can be injected to mockup editor for image selection..
*
* @param {Restangular} project - current project
*/
this.getProjectImageSelector = function ( project ) {
return function() {
var views = 'angular-app/templates/views/mockup-editor/';
var dialog = $uibModal.open({
templateUrl: views+'mockup-editor-image-selection-dialog.html',
controller: 'mockupEditorImageSelectionController',
resolve:{
project: function () {
return project;
}
}
});
return dialog.result;
};
};
/**
* Saves state of current editor, returns Promise with updated elements.
* @param {Restangular} mockup
* @param {SUXESS.MockupEditor} editor
*
* @return {Promise}
*/
this.saveState = function ( mockup, editor ) {
var elements = mockup.all('elements');
var state = editor.getState();
var updatePromises = [];
var promise;
for(var i = 0; i< state.length; i++) {
if( state[i].deleted && state[i].id !== undefined) {
Restangular.restangularizeElement(mockup,state[i],'elements').remove();
}
else if( state[i].id === undefined ) {
updatePromises.push(elements.post(state[i]));
} else {
promise = Restangular.restangularizeElement(mockup,state[i],'elements').put();
updatePromises.push(promise);
}
}
return $q.all(updatePromises);
};
/**
* Loads state of current editor, returns Promise.
* @param {Restangular} mockup
* @param {SUXESS.MockupEditor} editor
*
* @return {Promise}
*/
this.loadState = function ( mockup, editor ) {
var deferred = $q.defer();
var elements = mockup.all('elements');
elements.getList().then(
function ( elementStates ) {
editor.loadState(elementStates);
deferred.resolve( elementStates.length );
},
deferred.reject
);
return deferred.promise;
};
/**
*
* @param {Restangular} mockup
* @return {Promise}
*/
this.createMockupEditorHash = function ( mockup, project ) {
var deferred = $q.defer();
var obj = {
editor: new SUXESS.MockupEditor({
imageSelection: this.getProjectImageSelector(project)
}),
render: null
};
this.loadState( mockup, obj.editor).then(
function ( numOfelems ) {
obj.render = obj.editor.render();
deferred.resolve(obj);
},
deferred.reject
);
return deferred.promise;
};
}
]);