mirror of
https://github.com/haiwen/seahub.git
synced 2025-08-21 00:15:26 +00:00
309 lines
7.6 KiB
JavaScript
309 lines
7.6 KiB
JavaScript
|
/*global documents: true define: true */
|
||
|
/*!
|
||
|
* Aloha Editor
|
||
|
* Author & Copyright (c) 2011 Gentics Software GmbH
|
||
|
* aloha-sales@gentics.com
|
||
|
* Licensed under the terms of http://www.aloha-editor.com/license.html
|
||
|
*
|
||
|
* Author : Nicolas Karageuzian - http://nka.me
|
||
|
*/
|
||
|
define([
|
||
|
'jquery',
|
||
|
'util/class',
|
||
|
'i18n!image/nls/i18n',
|
||
|
'i18n!aloha/nls/i18n',
|
||
|
'ui/ui',
|
||
|
'ui/scopes',
|
||
|
'ui/button',
|
||
|
'ui/toggleButton',
|
||
|
'ui/port-helper-attribute-field'
|
||
|
],
|
||
|
function (
|
||
|
jQuery,
|
||
|
Class,
|
||
|
i18n,
|
||
|
i18nCore,
|
||
|
Ui,
|
||
|
Scopes,
|
||
|
Button,
|
||
|
ToggleButton,
|
||
|
AttributeField
|
||
|
) {
|
||
|
'use strict';
|
||
|
|
||
|
var $ = jQuery;
|
||
|
var GENTICS = window.GENTICS;
|
||
|
var Aloha = window.Aloha;
|
||
|
|
||
|
/**
|
||
|
* Toolbar elements for Image plugin
|
||
|
*
|
||
|
* @class MyClass
|
||
|
*/
|
||
|
return Class.extend({
|
||
|
/**
|
||
|
* Empty constructor
|
||
|
*
|
||
|
* @method
|
||
|
* @constructor
|
||
|
*/
|
||
|
_constructor: function () {
|
||
|
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Initialize Floating menu buttons according to plugin config
|
||
|
*/
|
||
|
init: function (plugin) {
|
||
|
plugin.floatingMenuControl = this;
|
||
|
this.plugin = plugin;
|
||
|
|
||
|
Scopes.createScope(plugin.name, 'Aloha.empty');
|
||
|
|
||
|
this._addUIInsertButton();
|
||
|
this._addUIMetaButtons();
|
||
|
this._addUIResetButton();
|
||
|
this._addUIAlignButtons();
|
||
|
this._addUIMarginButtons();
|
||
|
this._addUICropButtons();
|
||
|
this._addUIResizeButtons();
|
||
|
this._addUIAspectRatioToggleButton();
|
||
|
|
||
|
// TODO fix the function and reenable this button
|
||
|
// this._addNaturalSizeButton();
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds the aspect ratio toggle button to the floating menu
|
||
|
*/
|
||
|
_addUIAspectRatioToggleButton: function () {
|
||
|
var plugin = this.plugin;
|
||
|
|
||
|
this._imageCnrRatioButton = Ui.adopt("imageCnrRatio", ToggleButton, {
|
||
|
tooltip: i18n.t('button.toggle.tooltip'),
|
||
|
icon: 'aloha-icon-cnr-ratio',
|
||
|
scope: plugin.name,
|
||
|
click: function(){
|
||
|
plugin.toggleKeepAspectRatio();
|
||
|
}
|
||
|
});
|
||
|
|
||
|
// If the setting has been set to a number or false we need to activate the
|
||
|
// toggle button to indicate that the aspect ratio will be preserved.
|
||
|
if (plugin.settings.fixedAspectRatio !== false) {
|
||
|
this._imageCnrRatioButton.setState(true);
|
||
|
plugin.keepAspectRatio = true;
|
||
|
}
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds the reset button to the floating menu for the given tab
|
||
|
*/
|
||
|
_addUIResetButton: function () {
|
||
|
var plugin = this.plugin;
|
||
|
|
||
|
this._imageCnrResetButton = Ui.adopt("imageCnrReset", Button, {
|
||
|
tooltip: i18n.t('Reset'),
|
||
|
icon: 'aloha-icon-cnr-reset',
|
||
|
scope: plugin.name,
|
||
|
click: function(){
|
||
|
plugin.reset();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds the insert button to the floating menu
|
||
|
*/
|
||
|
_addUIInsertButton: function () {
|
||
|
var plugin = this.plugin;
|
||
|
|
||
|
this._insertImageButton = Ui.adopt("insertImage", Button, {
|
||
|
tooltip: i18n.t('button.addimg.tooltip'),
|
||
|
icon: 'aloha-button aloha-image-insert',
|
||
|
scope: 'Aloha.continuoustext',
|
||
|
click: function(){
|
||
|
plugin.insertImg();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds the ui meta fields (search, title) to the floating menu.
|
||
|
*/
|
||
|
_addUIMetaButtons: function () {
|
||
|
var plugin = this.plugin;
|
||
|
|
||
|
this.imgSrcField = AttributeField({
|
||
|
label: i18n.t('field.img.src.label'),
|
||
|
labelClass: 'aloha-image-input-label',
|
||
|
tooltip: i18n.t('field.img.src.tooltip'),
|
||
|
name: 'imageSource',
|
||
|
scope: plugin.name
|
||
|
});
|
||
|
this.imgSrcField.setTemplate( '<span><b>{name}</b><br/>{url}</span>' );
|
||
|
this.imgSrcField.setObjectTypeFilter(plugin.objectTypeFilter);
|
||
|
|
||
|
this.imgTitleField = AttributeField({
|
||
|
label: i18n.t('field.img.title.label'),
|
||
|
labelClass: 'aloha-image-input-label',
|
||
|
tooltip: i18n.t('field.img.title.tooltip'),
|
||
|
name: 'imageTitle',
|
||
|
scope: plugin.name
|
||
|
});
|
||
|
this.imgTitleField.setObjectTypeFilter();
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds the ui align buttons to the floating menu
|
||
|
*/
|
||
|
_addUIAlignButtons: function () {
|
||
|
var plugin = this.plugin;
|
||
|
|
||
|
this._imageAlignLeftButton = Ui.adopt("imageAlignLeft", Button, {
|
||
|
tooltip: i18n.t('button.img.align.left.tooltip'),
|
||
|
icon: 'aloha-img aloha-image-align-left',
|
||
|
scope: plugin.name,
|
||
|
click : function () {
|
||
|
var el = jQuery(plugin.getPluginFocus());
|
||
|
el.add(el.parent()).css('float', 'left');
|
||
|
}
|
||
|
});
|
||
|
|
||
|
this._imageAlignRightButton = Ui.adopt("imageAlignRight", Button, {
|
||
|
tooltip: i18n.t('button.img.align.right.tooltip'),
|
||
|
icon: 'aloha-img aloha-image-align-right',
|
||
|
scope: plugin.name,
|
||
|
click : function () {
|
||
|
var el = jQuery(plugin.getPluginFocus());
|
||
|
el.add(el.parent()).css('float', 'right');
|
||
|
}
|
||
|
});
|
||
|
|
||
|
this._imageAlignNoneButton = Ui.adopt("imageAlignNone", Button, {
|
||
|
tooltip: i18n.t('button.img.align.none.tooltip'),
|
||
|
icon: 'aloha-img aloha-image-align-none',
|
||
|
scope: plugin.name,
|
||
|
click : function () {
|
||
|
var el = jQuery(plugin.getPluginFocus());
|
||
|
el.add(el.parent()).css({
|
||
|
'float': 'none',
|
||
|
display: 'inline-block'
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds the ui margin buttons to the floating menu
|
||
|
*/
|
||
|
_addUIMarginButtons: function () {
|
||
|
var plugin = this.plugin;
|
||
|
|
||
|
this._imageIncPaddingButton = Ui.adopt("imageIncPadding", Button, {
|
||
|
tooltip: i18n.t('padding.increase'),
|
||
|
icon: 'aloha-img aloha-image-padding-increase',
|
||
|
scope: plugin.name,
|
||
|
click: function () {
|
||
|
jQuery(plugin.getPluginFocus()).increase('padding');
|
||
|
}
|
||
|
});
|
||
|
|
||
|
this._imageDecPaddingButton = Ui.adopt("imageDecPadding", Button, {
|
||
|
tooltip: i18n.t('padding.decrease'),
|
||
|
icon: 'aloha-img aloha-image-padding-decrease',
|
||
|
scope: plugin.name,
|
||
|
click: function () {
|
||
|
jQuery(plugin.getPluginFocus()).decrease('padding');
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds the crop buttons to the floating menu
|
||
|
*/
|
||
|
_addUICropButtons: function () {
|
||
|
var plugin = this.plugin;
|
||
|
|
||
|
Scopes.createScope('Aloha.img', ['Aloha.global']);
|
||
|
|
||
|
this._imageCropButton = Ui.adopt("imageCropButton", ToggleButton, {
|
||
|
tooltip: i18n.t('Crop'),
|
||
|
icon: 'aloha-icon-cnr-crop',
|
||
|
scope: plugin.name,
|
||
|
click: function () {
|
||
|
if (this.getState()) {
|
||
|
plugin.crop();
|
||
|
} else {
|
||
|
plugin.endCrop();
|
||
|
}
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds the resize buttons to the floating menu
|
||
|
*/
|
||
|
_addUIResizeButtons: function () {
|
||
|
var plugin = this.plugin;
|
||
|
|
||
|
// Manual resize fields
|
||
|
this.imgResizeHeightField = AttributeField({
|
||
|
label: i18n.t('height'),
|
||
|
labelClass: 'aloha-image-input-label',
|
||
|
name: "imageResizeHeight",
|
||
|
width: 50,
|
||
|
scope: plugin.name
|
||
|
});
|
||
|
this.imgResizeHeightField.maxValue = plugin.settings.maxHeight;
|
||
|
this.imgResizeHeightField.minValue = plugin.settings.minHeight;
|
||
|
|
||
|
this.imgResizeWidthField = AttributeField({
|
||
|
label: i18n.t('width'),
|
||
|
labelClass: 'aloha-image-input-label',
|
||
|
name: "imageResizeWidth",
|
||
|
width: 50,
|
||
|
scope: plugin.name
|
||
|
});
|
||
|
this.imgResizeWidthField.maxValue = plugin.settings.maxWidth;
|
||
|
this.imgResizeWidthField.minValue = plugin.settings.minWidth;
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Adds the natural size button to the floating menu
|
||
|
*/
|
||
|
/*
|
||
|
TODO currently deactivated see TODO at call site above.
|
||
|
_addNaturalSizeButton: function () {
|
||
|
var plugin = this.plugin;
|
||
|
|
||
|
this._imageNaturalSizeButton = Ui.adopt("imageNaturalSize", Button, {
|
||
|
icon: 'aloha-img aloha-image-size-natural',
|
||
|
label: i18n.t('size.natural'),
|
||
|
scope: plugin.name,
|
||
|
click: function () {
|
||
|
plugin.resetSize();
|
||
|
}
|
||
|
});
|
||
|
},
|
||
|
*/
|
||
|
|
||
|
/**
|
||
|
* Sets the scope
|
||
|
*/
|
||
|
setScope: function () {
|
||
|
Scopes.setScope(this.plugin.name);
|
||
|
},
|
||
|
|
||
|
/**
|
||
|
* Redraws UI
|
||
|
*/
|
||
|
doLayout: function () {
|
||
|
// Implementation was removed while porting this plugin to
|
||
|
// the jqueryui toolbar because it seems to be a hack that
|
||
|
// is not needed with the new implementation.
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
|