/**
* Silex, live web creation
* http://projects.silexlabs.org/?/silex/
*
* Copyright (c) 2012 Silex Labs
* http://www.silexlabs.org/
*
* Silex is available under the GPL license
* http://www.silexlabs.org/silex/silex-licensing/
*/
/**
* @fileoverview A controller listens to a view element,
* and call the main {silex.controller.Controller} controller's methods
*
*/
import {Model} from '../types';
import {View} from '../types';
import {FileInfo} from '../types';
import {SilexNotification} from '../utils/notification';
import {FileExplorer} from '../view/dialog/file-explorer';
import {ControllerBase} from './controller-base';
/**
* @param view view class which holds the other views
*/
export class SettingsDialogController extends ControllerBase {
constructor(model: Model, view: View) {
super(model, view);
}
/**
* the user clicked "browse" button in the publish settings panel
*/
browsePublishPath(opt_cbk) {
// create the promise
const promise = this.view.fileExplorer.openFolder();
// add tracking and undo/redo checkpoint
this.track(promise, 'publish.browse');
this.undoredo(promise);
// handle the result
promise
.then((fileInfo) => {
if (fileInfo) {
// set the new publication path
this.model.head.setPublicationPath(fileInfo);
// notify caller (used to reopen settings)
if (opt_cbk) {
opt_cbk();
}
}
})
.catch((error) => {
SilexNotification.notifyError(
'Error: I could not select the publish path.
' +
(error.message || ''));
});
}
/**
* the user clicked "browse" button to choose a favicon
*/
browseFaviconPath(opt_cbk) {
// create the promise
const promise =
this.view.fileExplorer.openFile(FileExplorer.IMAGE_EXTENSIONS);
// add tracking and undo/redo checkpoint
this.track(promise, 'favicon.browse');
this.undoredo(promise);
// handle the result
promise
.then((fileInfo) => {
if (fileInfo) {
// set the new favicon path
this.model.head.setFaviconPath(fileInfo.absPath);
// notify caller (used to reopen settings)
if (opt_cbk) {
opt_cbk();
}
}
})
.catch((error) => {
SilexNotification.notifyError(
'Error: I could not select the favicon.
' +
(error.message || ''));
});
}
/**
* the user clicked "browse" button to choose a thumbnail for social netorks
*/
browseThumbnailSocialPath(opt_cbk) {
// create the promise
const promise =
this.view.fileExplorer.openFile(FileExplorer.IMAGE_EXTENSIONS);
// add tracking and undo/redo checkpoint
this.track(promise, 'thumbnail-social.browse');
this.undoredo(promise);
// handle the result
promise
.then((fileInfo) => {
if (fileInfo) {
// set the new path
this.model.head.setThumbnailSocialPath(fileInfo.absPath);
// notify caller (used to reopen settings)
if (opt_cbk) {
opt_cbk();
}
}
})
.catch((error) => {
SilexNotification.notifyError(
'Error: I could not select the thumbnail.
' +
(error.message || ''));
});
}
/**
* enable/disable mobile version
*/
toggleEnableMobile() {
// undo checkpoint
this.undoCheckPoint();
this.model.head.setEnableMobile(!this.model.head.getEnableMobile());
}
/**
* set website width
*/
setWebsiteWidth(opt_data?: number) {
// undo checkpoint
this.undoCheckPoint();
this.model.head.setWebsiteWidth(opt_data);
}
/**
* callback for the publication path text input
*/
setPublicationPath(opt_data?: FileInfo) {
// undo checkpoint
this.undoCheckPoint();
this.model.head.setPublicationPath(opt_data);
}
/**
* callback for the publication path text input
*/
getPublicationPath(): FileInfo {
return this.model.head.getPublicationPath();
}
/**
* callback for the favicon path text input
*/
setFaviconPath(opt_data?: string) {
// undo checkpoint
this.undoCheckPoint();
this.model.head.setFaviconPath(opt_data);
}
/**
* set new file description
*/
setDescription(opt_data?: string) {
// undo checkpoint
this.undoCheckPoint();
this.model.head.setDescription(opt_data);
}
/**
* set new title for social networks
*/
setTitleSocial(opt_data?: string) {
// undo checkpoint
this.undoCheckPoint();
this.model.head.setTitleSocial(opt_data);
}
/**
* set new description for social networks
*/
setDescriptionSocial(opt_data?: string) {
// undo checkpoint
this.undoCheckPoint();
this.model.head.setDescriptionSocial(opt_data);
}
/**
* set new thumbnail for social networks
*/
setThumbnailSocialPath(opt_data?: string) {
// undo checkpoint
this.undoCheckPoint();
this.model.head.setThumbnailSocialPath(opt_data);
}
/**
* set twitter account
*/
setTwitterSocial(opt_data?: string) {
// undo checkpoint
this.undoCheckPoint();
this.model.head.setTwitterSocial(opt_data);
}
}