diff --git a/mindplot/pom.xml b/mindplot/pom.xml
index 15defd0b..28bb976f 100644
--- a/mindplot/pom.xml
+++ b/mindplot/pom.xml
@@ -67,7 +67,7 @@
-
+
diff --git a/mindplot/src/main/javascript/Beta2PelaMigrator.js b/mindplot/src/main/javascript/Beta2PelaMigrator.js
index 309024bb..1f8b6eaa 100644
--- a/mindplot/src/main/javascript/Beta2PelaMigrator.js
+++ b/mindplot/src/main/javascript/Beta2PelaMigrator.js
@@ -25,7 +25,8 @@ mindplot.Beta2PelaMigrator = new Class({
return this._pelaSerializer.toXML(mindmap);
},
- loadFromDom : function(dom) {
+ loadFromDom : function(dom,mapId) {
+ $assert($defined(mapId),"mapId can not be null");
var mindmap = this._betaSerializer.loadFromDom(dom);
mindmap.setVersion(mindplot.ModelCodeName.PELA);
return mindmap;
diff --git a/mindplot/src/main/javascript/MindmapDesigner.js b/mindplot/src/main/javascript/MindmapDesigner.js
index ab39ce14..cd8d3213 100644
--- a/mindplot/src/main/javascript/MindmapDesigner.js
+++ b/mindplot/src/main/javascript/MindmapDesigner.js
@@ -25,9 +25,12 @@ mindplot.MindmapDesigner = new Class({
// Dispatcher manager ...
var commandContext = new mindplot.CommandContext(this);
- this._actionDispatcher = new mindplot.BrixActionDispatcher(commandContext);
-// this._actionDispatcher = new mindplot.LocalActionDispatcher(commandContext);
-// this._actionDispatcher = new mindplot.LocalActionDispatcher(commandContext);
+ if (profile.collab == 'standalone') {
+ this._actionDispatcher = new mindplot.StandaloneActionDispatcher(commandContext);
+ } else {
+ this._actionDispatcher = new mindplot.BrixActionDispatcher(commandContext);
+ }
+
this._actionDispatcher.addEvent("modelUpdate", function(event) {
this.fireEvent("modelUpdate", event);
}.bind(this));
diff --git a/mindplot/src/main/javascript/LocalActionDispatcher.js b/mindplot/src/main/javascript/StandaloneActionDispatcher.js
similarity index 99%
rename from mindplot/src/main/javascript/LocalActionDispatcher.js
rename to mindplot/src/main/javascript/StandaloneActionDispatcher.js
index 42bc1b75..31d74fae 100644
--- a/mindplot/src/main/javascript/LocalActionDispatcher.js
+++ b/mindplot/src/main/javascript/StandaloneActionDispatcher.js
@@ -16,7 +16,7 @@
* limitations under the License.
*/
-mindplot.LocalActionDispatcher = new Class({
+mindplot.StandaloneActionDispatcher = new Class({
Extends: mindplot.ActionDispatcher,
initialize: function(commandContext) {
this.parent(commandContext);
diff --git a/mindplot/src/main/javascript/collaboration/framework/AbstractCollaborativeFramework.js b/mindplot/src/main/javascript/collaboration/framework/AbstractCollaborativeFramework.js
index 7713cfc8..b14e44d8 100644
--- a/mindplot/src/main/javascript/collaboration/framework/AbstractCollaborativeFramework.js
+++ b/mindplot/src/main/javascript/collaboration/framework/AbstractCollaborativeFramework.js
@@ -46,7 +46,7 @@ mindplot.collaboration.framework.AbstractCollaborativeFramework = new Class({
getActionDispatcher:function() {
if (this._actionDispatcher == null) {
var context = mindplot.ActionDispatcher.getInstance()._commandContext;
- this._actionDispatcher = new mindplot.LocalActionDispatcher(context);
+ this._actionDispatcher = new mindplot.StandaloneActionDispatcher(context);
}
return this._actionDispatcher;
}
diff --git a/pom.xml b/pom.xml
index 3ae6b0b4..cf035b44 100644
--- a/pom.xml
+++ b/pom.xml
@@ -67,7 +67,7 @@
web2d
core-js
mindplot
-
+ wise-webapp
wise-doc
diff --git a/wise-doc/src/main/webapp/html/editor.html b/wise-doc/src/main/webapp/html/editor.html
index 62cee8ac..ebcb835f 100644
--- a/wise-doc/src/main/webapp/html/editor.html
+++ b/wise-doc/src/main/webapp/html/editor.html
@@ -11,8 +11,7 @@
WiseMapping - Editor
-
+
diff --git a/wise-webapp/pom.xml b/wise-webapp/pom.xml
index be10c7c5..024c84a4 100644
--- a/wise-webapp/pom.xml
+++ b/wise-webapp/pom.xml
@@ -8,7 +8,7 @@
org.wisemapping
wisemapping
- ../pom.xml
+ ../pom.xml
1.0-SNAPSHOT
@@ -345,7 +345,7 @@
maven-war-plugin
-
+
wisemapping
@@ -385,55 +385,6 @@
net.sf.alchim
yuicompressor-maven-plugin
-
- wiseLibrary
- generate-resources
-
- compress
-
-
-
-
-
-
- mootools.js
- common.js
- windoo.js
-
-
-
- true
- true
- false
- false
-
-
-
- wiseListLibrary
- generate-resources
-
- compress
-
-
-
-
-
-
- menu.js
- slideShow.js
-
-
-
- true
- true
- false
- false
-
-
wiseEditorLibrary
generate-resources
@@ -444,14 +395,11 @@
- mooRainbow.js
help.js
helpPanel.js
- IconPanel.js
-
diff --git a/wise-webapp/src/main/webapp/js/editor.js b/wise-webapp/src/main/webapp/js/editor.js
index 358210c2..ff585e92 100644
--- a/wise-webapp/src/main/webapp/js/editor.js
+++ b/wise-webapp/src/main/webapp/js/editor.js
@@ -18,7 +18,7 @@
Asset.javascript('../js/mindplot-min.js', {
id: 'MindplotSVGLib',
onLoad: function() {
- afterMindpotLibraryLoading();
+ $(document).fireEvent('loadcomplete', 'mind')
}
});
@@ -157,8 +157,9 @@ Tabs.Init();
// Hide the content while waiting for the onload event to trigger.
var contentId = window.location.hash || "#Introduction";
-function afterMindpotLibraryLoading() {
- buildMindmapDesigner();
+function setUpToolbar(designer, isTryMode) {
+
+ var menu = new mindplot.widget.Menu(designer, 'toolbar');
if ($('helpButton') != null) {
var helpPanel = new Panel({panelButton:$('helpButton'), backgroundColor:'black'});
@@ -187,15 +188,16 @@ function afterMindpotLibraryLoading() {
saveButton.addEvent('click', function(event) {
if (!isTryMode) {
- saveButton.setStyle('cursor', 'wait');
- var saveFunc = function() {
- designer.save(function() {
- var monitor = core.Monitor.getInstance();
- monitor.logMessage('Save completed successfully');
- saveButton.setStyle('cursor', 'pointer');
- }, true);
- }
- saveFunc.delay(1);
+ // @todo: This must be fixed ...
+// saveButton.setStyle('cursor', 'wait');
+// var saveFunc = function() {
+// designer.save(function() {
+// var monitor = core.Monitor.getInstance();
+// monitor.logMessage('Save completed successfully');
+// saveButton.setStyle('cursor', 'pointer');
+// }, true);
+// };
+// saveFunc.delay(1);
} else {
new Windoo.Confirm('This option is not enabled in try mode. You must by signed in order to execute this action.
to create an account click here',
{
@@ -280,51 +282,36 @@ function afterMindpotLibraryLoading() {
}
}
- var menu = new mindplot.widget.Menu(designer);
-
// If a node has focus, focus can be move to another node using the keys.
designer._cleanScreen = function() {
menu.clear()
};
- // If not problem has occured, I close the dialod ...
- var closeDialog = function() {
- if (!window.hasUnexpectedErrors) {
- waitDialog.deactivate();
- }
- }.delay(500);
}
-function buildMindmapDesigner() {
+
+function buildDesigner(editorProperties, isTryMode) {
+ $assert(editorProperties, "editorProperties can not be null");
// Initialize message logger ...
- var monitor = new core.Monitor($('msgLoggerContainer'), $('msgLogger'));
- core.Monitor.setInstance(monitor);
+ //@Todo: Fix.
+// var monitor = new core.Monitor($('msgLoggerContainer'), $('msgLogger'));
+// core.Monitor.setInstance(monitor);
- // Initialize Editor ...
var container = $('mindplot');
-// container.setStyles({
-// height: screen.height - 151,
-// width: screen.width
-// });
-
container.setStyles({
- height: window.getHeight() - 151,
- width: window.getWidth()
+ height: parseInt(screen.height),
+ width: parseInt(screen.width)
});
designer = new mindplot.MindmapDesigner(editorProperties, container);
- designer.loadFromXML(mapId, mapXml);
+ designer.setViewPort({
+ height: parseInt(window.innerHeight - 151), // Footer and Header
+ width: parseInt(window.innerWidth)
+ });
- // Save map on load ....
- if (editorProperties.saveOnLoad) {
- var saveOnLoad = function() {
- designer.save(function() {
- }, false);
- }.delay(1000)
- }
+ setUpToolbar(designer, isTryMode);
+ return designer;
}
-;
-
diff --git a/wise-webapp/src/main/webapp/js/menu2.js b/wise-webapp/src/main/webapp/js/menu2.js
deleted file mode 100644
index 530e9895..00000000
--- a/wise-webapp/src/main/webapp/js/menu2.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-* Copyright [2011] [wisemapping]
-*
-* Licensed under WiseMapping Public License, Version 1.0 (the "License").
-* It is basically the Apache License, Version 2.0 (the "License") plus the
-* "powered by wisemapping" text requirement on every single page;
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the license at
-*
-* http://www.wisemapping.org/license
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-Window.onDomReady(function() {
- // variable for the list status
- var listStatus = 'closed';
- // setup var that holds our opened list's id
- var listOpen;
- // show list function
- var showList = function(lid) {
- var listId = lid.replace(/For/g, '');
- // need to check if there is an open list
- if (listStatus == "open") {
- // check if the open list is the same
- // as toggled list. If not, then we hide it
- if (listId != listOpen) {
- hideList();
- }
- }
- if (listStatus == "closed") {
- // set our list status
- listStatus = 'open';
- // set the curent open list id
- listOpen = listId;
- // show our list with a little effects
- new fx.Opacity($(listOpen), {duration: 500}).custom(0, 1);
- new fx.Height($(listOpen), {duration: 300}).custom(20, 40);
- new fx.Width($(listOpen), {duration: 300}).custom(20, 131);
- // we add a timeout so the sublist goes away
- // if the user doesn't click/mouseover another
- // menu item
- (hideList).delay(15000);
- }
- };
- // hide list function
- var hideList = function() {
- if (listOpen) {
- // check if our list is shown already - if so run the effects to hide list
- if ($(listOpen).getStyle('visibility') == "visible") {
- new fx.Opacity($(listOpen), {duration: 500}).custom(1, 0);
- new fx.Height($(listOpen), {duration: 300}).custom(40, 20);
- new fx.Width($(listOpen), {duration: 300}).custom(131, 20);
- }
- // set our list status
- listStatus = 'closed';
- // reset open list id
- listOpen = '';
- }
- };
- $ES('a.navbutton').action({
- // initialize the submenu - gets general data in order to attempt to position
- // the submenu in relation to the image/anchor tag that opens it
- initialize: function() {
- // check if element has our flag for having a drop menu
- if (this.hasClass('hasSubNav')) {
- var listId = this.name.replace(/For/g, '');
- // have to do it this way.
- // for some reason this.firstChild.getTag() won't work
- if ($(this.firstChild).getTag() == 'img') {
- // attempt to set offset to be a little taller
- // than your image
- var yOffset = this.firstChild.height + 1;
- } else {
- // set your default offset here
- var yOffset = 20;
- }
- // set the styles of your list
- // to position it (relatively) correctly
- $(listId).setStyles({ top: yOffset + 'px', left: this.getLeft() + 'px' });
- }
- },
- onmouseover: function() {
- // add mouseover action to change image
- this.firstChild.src = this.firstChild.src.replace(/off/g, 'on');
- // optional effect for mouseover
- this.effect('opacity').custom(.3, 1);
- // check if element has our flag for having a drop menu
- if (this.hasClass('hasSubNav')) {
- // pass the id of the mouseover, so we can determine
- // which list to show
- showList(this.id);
- } else {
- // if the button moused over does not have a list
- // then we close the list since we are obviously
- // on another button now
- if (listStatus == 'open') {
- hideList();
- }
- }
- },
- onmouseout: function() {
- // switch mouseout button
- this.firstChild.src = this.firstChild.src.replace(/on/g, 'off');
- // optional effect for mouseout
- this.effect('opacity').custom(.3, 1);
- }
- });
-});
\ No newline at end of file
diff --git a/wise-webapp/src/main/webapp/js/mooRainbow.js b/wise-webapp/src/main/webapp/js/mooRainbow.js
deleted file mode 100755
index f31b3c0a..00000000
--- a/wise-webapp/src/main/webapp/js/mooRainbow.js
+++ /dev/null
@@ -1,628 +0,0 @@
-/*
-* Copyright [2011] [wisemapping]
-*
-* Licensed under WiseMapping Public License, Version 1.0 (the "License").
-* It is basically the Apache License, Version 2.0 (the "License") plus the
-* "powered by wisemapping" text requirement on every single page;
-* you may not use this file except in compliance with the License.
-* You may obtain a copy of the license at
-*
-* http://www.wisemapping.org/license
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*/
-
-/***
- * MooRainbow
- *
- * @version 1.0
- * @license MIT-style license
- * @author w00fz - < w00fzIT [at] gmail.com >
- * @infos http://w00fz.altervista.org/mooRainbow
- * @copyright Author
- *
- * Lot of thanks also to kamicane, tomocchino, ibolmo, Inviz.
- */
-
-var MooRainbow = new Class({
- options: {
- id: 'mooRainbow',
- prefix: 'moor-',
- imgPath: 'images/',
- startColor: [255, 0, 0],
- wheel: false,
- onComplete: Class.empty,
- onChange: Class.empty
- },
-
- initialize: function(el, options) {
- this.element = $(el);
- if (!this.element) return;
- this.setOptions(options);
-
- this.sliderPos = 0;
- this.pickerPos = {x: 0, y: 0};
- this.backupColor = this.options.startColor;
- this.currentColor = this.options.startColor;
- this.sets = {
- rgb: [],
- hsb: [],
- hex: []
- };
- this.pickerClick = this.sliderClick = false;
- if (!this.layout) this.doLayout();
- this.OverlayEvents();
- this.sliderEvents();
- this.backupEvent();
- if (this.options.wheel) this.wheelEvents();
- this.element.addEvent('click', function(e) {
- this.toggle(e);
- }.bind(this));
-
- this.layout.overlay.setStyle('background-color', this.options.startColor.rgbToHex());
- this.layout.backup.setStyle('background-color', this.backupColor.rgbToHex());
-
- this.pickerPos.x = this.snippet('curPos').l + this.snippet('curSize', 'int').w;
- this.pickerPos.y = this.snippet('curPos').t + this.snippet('curSize', 'int').h;
-
- this.manualSet(this.options.startColor);
-
- this.pickerPos.x = this.snippet('curPos').l + this.snippet('curSize', 'int').w;
- this.pickerPos.y = this.snippet('curPos').t + this.snippet('curSize', 'int').h;
- this.sliderPos = this.snippet('arrPos') - this.snippet('arrSize', 'int');
-
- if (window.khtml) this.hide();
- },
-
- toggle: function() {
- this[this.visible ? 'hide' : 'show']()
- },
-
- show: function() {
- this.fireEvent('onInit', [this.sets, this]);
- this.rePosition();
- this.layout.setStyle('display', 'block');
- this.visible = true;
- },
-
- hide: function() {
- this.layout.setStyles({'display': 'none'});
- this.visible = false;
- },
-
- manualSet: function(color, type) {
- if (!type || (type != 'hsb' && type != 'hex')) type = 'rgb';
- var rgb, hsb, hex;
-
- if (type == 'rgb') {
- rgb = color;
- hsb = color.rgbToHsb();
- hex = color.rgbToHex();
- }
- else if (type == 'hsb') {
- hsb = color;
- rgb = color.hsbToRgb();
- hex = rgb.rgbToHex();
- }
- else {
- hex = color;
- rgb = color.hexToRgb();
- hsb = rgb.rgbToHsb();
- }
-
- this.setMooRainbow(rgb);
- this.autoSet(hsb);
- },
-
- autoSet: function(hsb) {
- var curH = this.snippet('curSize', 'int').h;
- var curW = this.snippet('curSize', 'int').w;
- var oveH = this.layout.overlay.height;
- var oveW = this.layout.overlay.width;
- var sliH = this.layout.slider.height;
- var arwH = this.snippet('arrSize', 'int');
- var hue;
-
- var posx = Math.round(((oveW * hsb[1]) / 100) - curW);
- var posy = Math.round(- ((oveH * hsb[2]) / 100) + oveH - curH);
-
- var c = Math.round(((sliH * hsb[0]) / 360));
- c = (c == 360) ? 0 : c;
- var position = sliH - c + this.snippet('slider') - arwH;
- hue = [this.sets.hsb[0], 100, 100].hsbToRgb().rgbToHex();
-
- this.layout.cursor.setStyles({'top': posy, 'left': posx});
- this.layout.arrows.setStyle('top', position);
- this.layout.overlay.setStyle('background-color', hue);
- this.sliderPos = this.snippet('arrPos') - arwH;
- this.pickerPos.x = this.snippet('curPos').l + curW;
- this.pickerPos.y = this.snippet('curPos').t + curH;
- },
-
- setMooRainbow: function(color, type) {
- if (!type || (type != 'hsb' && type != 'hex')) type = 'rgb';
- var rgb, hsb, hex;
-
- if (type == 'rgb') {
- rgb = color;
- hsb = color.rgbToHsb();
- hex = color.rgbToHex();
- }
- else if (type == 'hsb') {
- hsb = color;
- rgb = color.hsbToRgb();
- hex = rgb.rgbToHex();
- }
- else {
- hex = color;
- rgb = color.hexToRgb();
- hsb = rgb.rgbToHsb();
- }
-
- this.sets = {
- rgb: rgb,
- hsb: hsb,
- hex: hex
- };
-
- if (!$defined(this.pickerPos.x))
- this.autoSet(hsb);
-
- this.RedInput.value = rgb[0];
- this.GreenInput.value = rgb[1];
- this.BlueInput.value = rgb[2];
- this.HueInput.value = hsb[0];
- this.SatuInput.value = hsb[1];
- this.BrighInput.value = hsb[2];
- this.hexInput.value = hex;
-
- this.currentColor = rgb;
-
- this.chooseColor.setStyle('background-color', rgb.rgbToHex());
- },
-
- parseColors: function(x, y, z) {
- var s = Math.round((x * 100) / this.layout.overlay.width);
- var b = 100 - Math.round((y * 100) / this.layout.overlay.height);
- var h = 360 - Math.round((z * 360) / this.layout.slider.height) + this.snippet('slider') - this.snippet('arrSize', 'int');
- h -= this.snippet('arrSize', 'int');
- h = (h >= 360) ? 0 : (h < 0) ? 0 : h;
- s = (s > 100) ? 100 : (s < 0) ? 0 : s;
- b = (b > 100) ? 100 : (b < 0) ? 0 : b;
-
- return [h, s, b];
- },
-
- OverlayEvents: function() {
- var lim, curH, curW, inputs;
- curH = this.snippet('curSize', 'int').h;
- curW = this.snippet('curSize', 'int').w;
- inputs = this.arrRGB.clone().concat(this.arrHSB, this.hexInput);
-
- document.addEvent('click', function() {
- if (this.visible) this.hide(this.layout);
- }.bind(this));
-
- inputs.each(function(el) {
- el.addEvent('keydown', this.eventKeydown.bindWithEvent(this, el));
- el.addEvent('keyup', this.eventKeyup.bindWithEvent(this, el));
- }, this);
- [this.element, this.layout].each(function(el) {
- el.addEvents({
- 'click': function(e) {
- new Event(e).stop();
- },
- 'keyup': function(e) {
- e = new Event(e);
- if (e.key == 'esc' && this.visible) this.hide(this.layout);
- }.bind(this)
- }, this);
- }, this);
-
- lim = {
- x: [0 - curW, (this.layout.overlay.width - curW)],
- y: [0 - curH, (this.layout.overlay.height - curH)]
- };
-
- this.layout.drag = new Drag(this.layout.cursor, {
- limit: lim,
- onStart: this.overlayDrag.bind(this),
- onDrag: this.overlayDrag.bind(this),
- snap: 0
- });
-
- this.layout.overlay2.addEvent('mousedown', function(e) {
- e = new Event(e);
- this.layout.cursor.setStyles({
- 'top': e.page.y - this.layout.overlay.getTop() - curH,
- 'left': e.page.x - this.layout.overlay.getLeft() - curW
- });
- this.layout.drag.start(e);
- }.bind(this));
-
- this.okButton.addEvent('click', function() {
- if (this.currentColor == this.options.startColor) {
- this.hide();
- this.fireEvent('onComplete', [this.sets, this]);
- }
- else {
- this.backupColor = this.currentColor;
- this.layout.backup.setStyle('background-color', this.backupColor.rgbToHex());
- this.hide();
- this.fireEvent('onComplete', [this.sets, this]);
- }
- }.bind(this));
- },
-
- overlayDrag: function() {
- var curH = this.snippet('curSize', 'int').h;
- var curW = this.snippet('curSize', 'int').w;
- this.pickerPos.x = this.snippet('curPos').l + curW;
- this.pickerPos.y = this.snippet('curPos').t + curH;
-
- this.setMooRainbow(this.parseColors(this.pickerPos.x, this.pickerPos.y, this.sliderPos), 'hsb');
- this.fireEvent('onChange', [this.sets, this]);
- },
-
- sliderEvents: function() {
- var arwH = this.snippet('arrSize', 'int'), lim;
-
- lim = [0 + this.snippet('slider') - arwH, this.layout.slider.height - arwH + this.snippet('slider')];
- this.layout.sliderDrag = new Drag(this.layout.arrows, {
- limit: {y: lim},
- modifiers: {x: false},
- onStart: this.sliderDrag.bind(this),
- onDrag: this.sliderDrag.bind(this),
- snap: 0
- });
-
- this.layout.slider.addEvent('mousedown', function(e) {
- e = new Event(e);
-
- this.layout.arrows.setStyle(
- 'top', e.page.y - this.layout.slider.getTop() + this.snippet('slider') - arwH
- );
- this.layout.sliderDrag.start(e);
- }.bind(this));
- },
-
- sliderDrag: function() {
- var arwH = this.snippet('arrSize', 'int'), hue;
-
- this.sliderPos = this.snippet('arrPos') - arwH;
- this.setMooRainbow(this.parseColors(this.pickerPos.x, this.pickerPos.y, this.sliderPos), 'hsb');
- hue = [this.sets.hsb[0], 100, 100].hsbToRgb().rgbToHex();
- this.layout.overlay.setStyle('background-color', hue);
- this.fireEvent('onChange', [this.sets, this]);
- },
-
- backupEvent: function() {
- this.layout.backup.addEvent('click', function() {
- this.manualSet(this.backupColor);
- this.fireEvent('onChange', [this.sets, this]);
- }.bind(this));
- },
-
- wheelEvents: function() {
- var arrColors = this.arrRGB.clone().extend(this.arrHSB);
-
- arrColors.each(function(el) {
- el.addEvents({
- 'mousewheel': this.eventKeys.bindWithEvent(this, el),
- 'keydown': this.eventKeys.bindWithEvent(this, el)
- });
- }, this);
-
- [this.layout.arrows, this.layout.slider].each(function(el) {
- el.addEvents({
- 'mousewheel': this.eventKeys.bindWithEvent(this, [this.arrHSB[0], 'slider']),
- 'keydown': this.eventKeys.bindWithEvent(this, [this.arrHSB[0], 'slider'])
- });
- }, this);
- },
-
- eventKeys: function(e, el, id) {
- var wheel, type;
- id = (!id) ? el.id : this.arrHSB[0];
-
- if (e.type == 'keydown') {
- if (e.key == 'up') wheel = 1;
- else if (e.key == 'down') wheel = -1;
- else return;
- } else if (e.type == Element.Events.mousewheel.type) wheel = (e.wheel > 0) ? 1 : -1;
-
- if (this.arrRGB.test(el)) type = 'rgb';
- else if (this.arrHSB.test(el)) type = 'hsb';
- else type = 'hsb';
-
- if (type == 'rgb') {
- var rgb = this.sets.rgb, hsb = this.sets.hsb, prefix = this.options.prefix, pass;
- var value = el.value.toInt() + wheel;
- value = (value > 255) ? 255 : (value < 0) ? 0 : value;
-
- switch (el.className) {
- case prefix + 'rInput': pass = [value, rgb[1], rgb[2]]; break;
- case prefix + 'gInput': pass = [rgb[0], value, rgb[2]]; break;
- case prefix + 'bInput': pass = [rgb[0], rgb[1], value]; break;
- default : pass = rgb;
- }
- this.manualSet(pass);
- this.fireEvent('onChange', [this.sets, this]);
- } else {
- var rgb = this.sets.rgb, hsb = this.sets.hsb, prefix = this.options.prefix, pass;
- var value = el.value.toInt() + wheel;
-
- if (el.className.test(/(HueInput)/)) value = (value > 359) ? 0 : (value < 0) ? 0 : value;
- else value = (value > 100) ? 100 : (value < 0) ? 0 : value;
-
- switch (el.className) {
- case prefix + 'HueInput': pass = [value, hsb[1], hsb[2]]; break;
- case prefix + 'SatuInput': pass = [hsb[0], value, hsb[2]]; break;
- case prefix + 'BrighInput': pass = [hsb[0], hsb[1], value]; break;
- default : pass = hsb;
- }
- this.manualSet(pass, 'hsb');
- this.fireEvent('onChange', [this.sets, this]);
- }
- e.stop();
- },
-
- eventKeydown: function(e, el) {
- var n = e.code, k = e.key;
-
- if ((!el.className.test(/hexInput/) && !(n >= 48 && n <= 57)) &&
- (k != 'backspace' && k != 'tab' && k != 'delete' && k != 'left' && k != 'right'))
- e.stop();
- },
-
- eventKeyup: function(e, el) {
- var n = e.code, k = e.key, pass, prefix, chr = el.value.charAt(0);
-
- if (!$defined(el.value)) return;
- if (el.className.test(/hexInput/)) {
- if (chr != "#" && el.value.length != 6) return;
- if (chr == '#' && el.value.length != 7) return;
- } else {
- if (!(n >= 48 && n <= 57) && (!['backspace', 'tab', 'delete', 'left', 'right'].test(k)) && el.value.length > 3) return;
- }
-
- prefix = this.options.prefix;
-
- if (el.className.test(/(rInput|gInput|bInput)/)) {
- if (el.value < 0 || el.value > 255) return;
- switch (el.className) {
- case prefix + 'rInput': pass = [el.value, this.sets.rgb[1], this.sets.rgb[2]]; break;
- case prefix + 'gInput': pass = [this.sets.rgb[0], el.value, this.sets.rgb[2]]; break;
- case prefix + 'bInput': pass = [this.sets.rgb[0], this.sets.rgb[1], el.value]; break;
- default : pass = this.sets.rgb;
- }
- this.manualSet(pass);
- this.fireEvent('onChange', [this.sets, this]);
- }
- else if (!el.className.test(/hexInput/)) {
- if (el.className.test(/HueInput/) && el.value < 0 || el.value > 360) return;
- else if (el.className.test(/HueInput/) && el.value == 360) el.value = 0;
- else if (el.className.test(/(SatuInput|BrighInput)/) && el.value < 0 || el.value > 100) return;
- switch (el.className) {
- case prefix + 'HueInput': pass = [el.value, this.sets.hsb[1], this.sets.hsb[2]]; break;
- case prefix + 'SatuInput': pass = [this.sets.hsb[0], el.value, this.sets.hsb[2]]; break;
- case prefix + 'BrighInput': pass = [this.sets.hsb[0], this.sets.hsb[1], el.value]; break;
- default : pass = this.sets.hsb;
- }
- this.manualSet(pass, 'hsb');
- this.fireEvent('onChange', [this.sets, this]);
- } else {
- pass = el.value.hexToRgb(true);
- if (isNaN(pass[0]) || isNaN(pass[1]) || isNaN(pass[2])) return;
-
- if ($defined(pass)) {
- this.manualSet(pass);
- this.fireEvent('onChange', [this.sets, this]);
- }
- }
-
- },
-
- doLayout: function() {
- var id = this.options.id, prefix = this.options.prefix;
- var idPrefix = id + ' .' + prefix;
-
- this.layout = new Element('div', {
- 'styles': {'display': 'block', 'position': 'absolute'},
- 'id': id
- }).inject(document.body);
-
- var box = new Element('div', {
- 'styles': {'position': 'relative'},
- 'class': prefix + 'box'
- }).inject(this.layout);
-
- var div = new Element('div', {
- 'styles': {'position': 'absolute', 'overflow': 'hidden'},
- 'class': prefix + 'overlayBox'
- }).inject(box);
-
- var ar = new Element('div', {
- 'styles': {'position': 'absolute', 'zIndex': 1},
- 'class': prefix + 'arrows'
- }).inject(box);
- ar.width = ar.getStyle('width').toInt();
- ar.height = ar.getStyle('height').toInt();
-
- var ov = new Element('img', {
- 'styles': {'background-color': '#fff', 'position': 'relative', 'zIndex': 2},
- 'src': this.options.imgPath + 'moor_woverlay.png',
- 'class': prefix + 'overlay'
- }).inject(div);
-
- var ov2 = new Element('img', {
- 'styles': {'position': 'absolute', 'top': 0, 'left': 0, 'zIndex': 2},
- 'src': this.options.imgPath + 'moor_boverlay.png',
- 'class': prefix + 'overlay'
- }).inject(div);
-
- if (window.ie6) {
- div.setStyle('overflow', '');
- var src = ov.src;
- ov.src = this.options.imgPath + 'blank.gif';
- ov.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')";
- src = ov2.src;
- ov2.src = this.options.imgPath + 'blank.gif';
- ov2.style.filter = "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='" + src + "', sizingMethod='scale')";
- }
- ov.width = ov2.width = div.getStyle('width').toInt();
- ov.height = ov2.height = div.getStyle('height').toInt();
-
- var cr = new Element('div', {
- 'styles': {'overflow': 'hidden', 'position': 'absolute', 'zIndex': 2},
- 'class': prefix + 'cursor'
- }).inject(div);
- cr.width = cr.getStyle('width').toInt();
- cr.height = cr.getStyle('height').toInt();
-
- var sl = new Element('img', {
- 'styles': {'position': 'absolute', 'z-index': 2},
- 'src': this.options.imgPath + 'moor_slider.png',
- 'class': prefix + 'slider'
- }).inject(box);
- this.layout.slider = sl;
- //$E('#' + idPrefix + 'slider');
- sl.width = sl.getStyle('width').toInt();
- sl.height = sl.getStyle('height').toInt();
-
- new Element('div', {
- 'styles': {'position': 'absolute'},
- 'class': prefix + 'colorBox'
- }).inject(box);
-
- var chooseColor = new Element('div', {
- 'styles': {'zIndex': 2, 'position': 'absolute'},
- 'class': prefix + 'chooseColor'
- }).inject(box);
-
- this.layout.backup = new Element('div', {
- 'styles': {'zIndex': 2, 'position': 'absolute', 'cursor': 'pointer'},
- 'class': prefix + 'currentColor'
- }).inject(box);
-
- var R = new Element('label').inject(box).setStyle('position', 'absolute');
- var G = R.clone().inject(box).addClass(prefix + 'gLabel').appendText('G: ');
- var B = R.clone().inject(box).addClass(prefix + 'bLabel').appendText('B: ');
- R.appendText('R: ').addClass(prefix + 'rLabel');
-
- var inputR = new Element('input');
- var inputG = inputR.clone().inject(G).addClass(prefix + 'gInput');
- var inputB = inputR.clone().inject(B).addClass(prefix + 'bInput');
- inputR.inject(R).addClass(prefix + 'rInput');
-
- var HU = new Element('label').inject(box).setStyle('position', 'absolute');
- var SA = HU.clone().inject(box).addClass(prefix + 'SatuLabel').appendText('S: ');
- var BR = HU.clone().inject(box).addClass(prefix + 'BrighLabel').appendText('B: ');
- HU.appendText('H: ').addClass(prefix + 'HueLabel');
-
- var inputHU = new Element('input');
- var inputSA = inputHU.clone().inject(SA).addClass(prefix + 'SatuInput');
- var inputBR = inputHU.clone().inject(BR).addClass(prefix + 'BrighInput');
- inputHU.inject(HU).addClass(prefix + 'HueInput');
- SA.appendText(' %');
- BR.appendText(' %');
-
- var spanElem = new Element('span', {'styles': {'position': 'absolute'}, 'class': prefix + 'ballino'});
- spanElem.innerHTML = " °";
- spanElem.inject(HU,'after');
-
- var inputHex = new Element('input').addClass(prefix + 'hexInput');
- var hex = new Element('label').inject(box).setStyle('position', 'absolute').addClass(prefix + 'hexLabel').appendText('#hex: ').adopt(inputHex);
-
- var ok = new Element('input', {
- 'styles': {'position': 'absolute'},
- 'type': 'button',
- 'value': 'Select',
- 'class': prefix + 'okButton'
- }).inject(box);
-
- this.rePosition();
-
- var overlays = $$('#' + idPrefix + 'overlay');
- this.layout.overlay = ov;
- //overlays[0];
- this.layout.overlay2 = ov2;
- //overlays[1];
- this.layout.cursor = cr;
- //$E('#' + idPrefix + 'cursor');
- this.layout.arrows = ar;
- //$E('#' + idPrefix + 'arrows');
- this.chooseColor = chooseColor;
- //$E('#' + idPrefix + 'chooseColor');
- //this.layout.backup = $E('#' + idPrefix + 'currentColor');
- this.RedInput = inputR;
- //$E('#' + idPrefix + 'rInput');
- this.GreenInput = inputG;
- //$E('#' + idPrefix + 'gInput');
- this.BlueInput = inputB;
- //$E('#' + idPrefix + 'bInput');
- this.HueInput = inputHU;
- //$E('#' + idPrefix + 'HueInput');
- this.SatuInput = inputSA;
- //$E('#' + idPrefix + 'SatuInput');
- this.BrighInput = inputBR;
- //$E('#' + idPrefix + 'BrighInput');
- this.hexInput = inputHex;
- //$E('#' + idPrefix + 'hexInput');
-
- this.arrRGB = [this.RedInput, this.GreenInput, this.BlueInput];
- this.arrHSB = [this.HueInput, this.SatuInput, this.BrighInput];
- this.okButton = ok;
- //$E('#' + idPrefix + 'okButton');
-
- if (!window.khtml) this.hide();
- },
- rePosition: function() {
- var coords = this.element.getCoordinates();
- this.layout.setStyles({
- 'left': coords.left,
- 'top': coords.top + coords.height + 1
- });
- },
-
- snippet: function(mode, type) {
- var size;
- type = (type) ? type : 'none';
-
- switch (mode) {
- case 'arrPos':
- var t = this.layout.arrows.getStyle('top').toInt();
- size = t;
- break;
- case 'arrSize':
- var h = this.layout.arrows.height;
- h = (type == 'int') ? (h / 2).toInt() : h;
- size = h;
- break;
- case 'curPos':
- var l = this.layout.cursor.getStyle('left').toInt();
- var t = this.layout.cursor.getStyle('top').toInt();
- size = {'l': l, 't': t};
- break;
- case 'slider':
- var t = this.layout.slider.getStyle('marginTop').toInt();
- size = t;
- break;
- default :
- var h = this.layout.cursor.height;
- var w = this.layout.cursor.width;
- h = (type == 'int') ? (h / 2).toInt() : h;
- w = (type == 'int') ? (w / 2).toInt() : w;
- size = {w: w, h: h};
- }
- ;
- return size;
- }
-});
-
-MooRainbow.implement(new Options);
-MooRainbow.implement(new Events);
\ No newline at end of file
diff --git a/wise-webapp/src/main/webapp/js/mootools-core-1.3.2-full-compat.js b/wise-webapp/src/main/webapp/js/mootools-core-1.3.2-full-compat.js
new file mode 100644
index 00000000..91bdd87f
--- /dev/null
+++ b/wise-webapp/src/main/webapp/js/mootools-core-1.3.2-full-compat.js
@@ -0,0 +1,5952 @@
+/*
+---
+MooTools: the javascript framework
+
+web build:
+ - http://mootools.net/core/7c56cfef9dddcf170a5d68e3fb61cfd7
+
+packager build:
+ - packager build Core/Core Core/Array Core/String Core/Number Core/Function Core/Object Core/Event Core/Browser Core/Class Core/Class.Extras Core/Slick.Parser Core/Slick.Finder Core/Element Core/Element.Style Core/Element.Event Core/Element.Dimensions Core/Fx Core/Fx.CSS Core/Fx.Tween Core/Fx.Morph Core/Fx.Transitions Core/Request Core/Request.HTML Core/Request.JSON Core/Cookie Core/JSON Core/DOMReady Core/Swiff
+
+/*
+---
+
+name: Core
+
+description: The heart of MooTools.
+
+license: MIT-style license.
+
+copyright: Copyright (c) 2006-2010 [Valerio Proietti](http://mad4milk.net/).
+
+authors: The MooTools production team (http://mootools.net/developers/)
+
+inspiration:
+ - Class implementation inspired by [Base.js](http://dean.edwards.name/weblog/2006/03/base/) Copyright (c) 2006 Dean Edwards, [GNU Lesser General Public License](http://opensource.org/licenses/lgpl-license.php)
+ - Some functionality inspired by [Prototype.js](http://prototypejs.org) Copyright (c) 2005-2007 Sam Stephenson, [MIT License](http://opensource.org/licenses/mit-license.php)
+
+provides: [Core, MooTools, Type, typeOf, instanceOf, Native]
+
+...
+*/
+
+(function(){
+
+this.MooTools = {
+ version: '1.3.2',
+ build: 'c9f1ff10e9e7facb65e9481049ed1b450959d587'
+};
+
+// typeOf, instanceOf
+
+var typeOf = this.typeOf = function(item){
+ if (item == null) return 'null';
+ if (item.$family) return item.$family();
+
+ if (item.nodeName){
+ if (item.nodeType == 1) return 'element';
+ if (item.nodeType == 3) return (/\S/).test(item.nodeValue) ? 'textnode' : 'whitespace';
+ } else if (typeof item.length == 'number'){
+ if (item.callee) return 'arguments';
+ if ('item' in item) return 'collection';
+ }
+
+ return typeof item;
+};
+
+var instanceOf = this.instanceOf = function(item, object){
+ if (item == null) return false;
+ var constructor = item.$constructor || item.constructor;
+ while (constructor){
+ if (constructor === object) return true;
+ constructor = constructor.parent;
+ }
+ return item instanceof object;
+};
+
+// Function overloading
+
+var Function = this.Function;
+
+var enumerables = true;
+for (var i in {toString: 1}) enumerables = null;
+if (enumerables) enumerables = ['hasOwnProperty', 'valueOf', 'isPrototypeOf', 'propertyIsEnumerable', 'toLocaleString', 'toString', 'constructor'];
+
+Function.prototype.overloadSetter = function(usePlural){
+ var self = this;
+ return function(a, b){
+ if (a == null) return this;
+ if (usePlural || typeof a != 'string'){
+ for (var k in a) self.call(this, k, a[k]);
+ if (enumerables) for (var i = enumerables.length; i--;){
+ k = enumerables[i];
+ if (a.hasOwnProperty(k)) self.call(this, k, a[k]);
+ }
+ } else {
+ self.call(this, a, b);
+ }
+ return this;
+ };
+};
+
+Function.prototype.overloadGetter = function(usePlural){
+ var self = this;
+ return function(a){
+ var args, result;
+ if (usePlural || typeof a != 'string') args = a;
+ else if (arguments.length > 1) args = arguments;
+ if (args){
+ result = {};
+ for (var i = 0; i < args.length; i++) result[args[i]] = self.call(this, args[i]);
+ } else {
+ result = self.call(this, a);
+ }
+ return result;
+ };
+};
+
+Function.prototype.extend = function(key, value){
+ this[key] = value;
+}.overloadSetter();
+
+Function.prototype.implement = function(key, value){
+ this.prototype[key] = value;
+}.overloadSetter();
+
+// From
+
+var slice = Array.prototype.slice;
+
+Function.from = function(item){
+ return (typeOf(item) == 'function') ? item : function(){
+ return item;
+ };
+};
+
+Array.from = function(item){
+ if (item == null) return [];
+ return (Type.isEnumerable(item) && typeof item != 'string') ? (typeOf(item) == 'array') ? item : slice.call(item) : [item];
+};
+
+Number.from = function(item){
+ var number = parseFloat(item);
+ return isFinite(number) ? number : null;
+};
+
+String.from = function(item){
+ return item + '';
+};
+
+// hide, protect
+
+Function.implement({
+
+ hide: function(){
+ this.$hidden = true;
+ return this;
+ },
+
+ protect: function(){
+ this.$protected = true;
+ return this;
+ }
+
+});
+
+// Type
+
+var Type = this.Type = function(name, object){
+ if (name){
+ var lower = name.toLowerCase();
+ var typeCheck = function(item){
+ return (typeOf(item) == lower);
+ };
+
+ Type['is' + name] = typeCheck;
+ if (object != null){
+ object.prototype.$family = (function(){
+ return lower;
+ }).hide();
+ //<1.2compat>
+ object.type = typeCheck;
+ //1.2compat>
+ }
+ }
+
+ if (object == null) return null;
+
+ object.extend(this);
+ object.$constructor = Type;
+ object.prototype.$constructor = object;
+
+ return object;
+};
+
+var toString = Object.prototype.toString;
+
+Type.isEnumerable = function(item){
+ return (item != null && typeof item.length == 'number' && toString.call(item) != '[object Function]' );
+};
+
+var hooks = {};
+
+var hooksOf = function(object){
+ var type = typeOf(object.prototype);
+ return hooks[type] || (hooks[type] = []);
+};
+
+var implement = function(name, method){
+ if (method && method.$hidden) return;
+
+ var hooks = hooksOf(this);
+
+ for (var i = 0; i < hooks.length; i++){
+ var hook = hooks[i];
+ if (typeOf(hook) == 'type') implement.call(hook, name, method);
+ else hook.call(this, name, method);
+ }
+
+ var previous = this.prototype[name];
+ if (previous == null || !previous.$protected) this.prototype[name] = method;
+
+ if (this[name] == null && typeOf(method) == 'function') extend.call(this, name, function(item){
+ return method.apply(item, slice.call(arguments, 1));
+ });
+};
+
+var extend = function(name, method){
+ if (method && method.$hidden) return;
+ var previous = this[name];
+ if (previous == null || !previous.$protected) this[name] = method;
+};
+
+Type.implement({
+
+ implement: implement.overloadSetter(),
+
+ extend: extend.overloadSetter(),
+
+ alias: function(name, existing){
+ implement.call(this, name, this.prototype[existing]);
+ }.overloadSetter(),
+
+ mirror: function(hook){
+ hooksOf(this).push(hook);
+ return this;
+ }
+
+});
+
+new Type('Type', Type);
+
+// Default Types
+
+var force = function(name, object, methods){
+ var isType = (object != Object),
+ prototype = object.prototype;
+
+ if (isType) object = new Type(name, object);
+
+ for (var i = 0, l = methods.length; i < l; i++){
+ var key = methods[i],
+ generic = object[key],
+ proto = prototype[key];
+
+ if (generic) generic.protect();
+
+ if (isType && proto){
+ delete prototype[key];
+ prototype[key] = proto.protect();
+ }
+ }
+
+ if (isType) object.implement(prototype);
+
+ return force;
+};
+
+force('String', String, [
+ 'charAt', 'charCodeAt', 'concat', 'indexOf', 'lastIndexOf', 'match', 'quote', 'replace', 'search',
+ 'slice', 'split', 'substr', 'substring', 'toLowerCase', 'toUpperCase'
+])('Array', Array, [
+ 'pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift', 'concat', 'join', 'slice',
+ 'indexOf', 'lastIndexOf', 'filter', 'forEach', 'every', 'map', 'some', 'reduce', 'reduceRight'
+])('Number', Number, [
+ 'toExponential', 'toFixed', 'toLocaleString', 'toPrecision'
+])('Function', Function, [
+ 'apply', 'call', 'bind'
+])('RegExp', RegExp, [
+ 'exec', 'test'
+])('Object', Object, [
+ 'create', 'defineProperty', 'defineProperties', 'keys',
+ 'getPrototypeOf', 'getOwnPropertyDescriptor', 'getOwnPropertyNames',
+ 'preventExtensions', 'isExtensible', 'seal', 'isSealed', 'freeze', 'isFrozen'
+])('Date', Date, ['now']);
+
+Object.extend = extend.overloadSetter();
+
+Date.extend('now', function(){
+ return +(new Date);
+});
+
+new Type('Boolean', Boolean);
+
+// fixes NaN returning as Number
+
+Number.prototype.$family = function(){
+ return isFinite(this) ? 'number' : 'null';
+}.hide();
+
+// Number.random
+
+Number.extend('random', function(min, max){
+ return Math.floor(Math.random() * (max - min + 1) + min);
+});
+
+// forEach, each
+
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+Object.extend('forEach', function(object, fn, bind){
+ for (var key in object){
+ if (hasOwnProperty.call(object, key)) fn.call(bind, object[key], key, object);
+ }
+});
+
+Object.each = Object.forEach;
+
+Array.implement({
+
+ forEach: function(fn, bind){
+ for (var i = 0, l = this.length; i < l; i++){
+ if (i in this) fn.call(bind, this[i], i, this);
+ }
+ },
+
+ each: function(fn, bind){
+ Array.forEach(this, fn, bind);
+ return this;
+ }
+
+});
+
+// Array & Object cloning, Object merging and appending
+
+var cloneOf = function(item){
+ switch (typeOf(item)){
+ case 'array': return item.clone();
+ case 'object': return Object.clone(item);
+ default: return item;
+ }
+};
+
+Array.implement('clone', function(){
+ var i = this.length, clone = new Array(i);
+ while (i--) clone[i] = cloneOf(this[i]);
+ return clone;
+});
+
+var mergeOne = function(source, key, current){
+ switch (typeOf(current)){
+ case 'object':
+ if (typeOf(source[key]) == 'object') Object.merge(source[key], current);
+ else source[key] = Object.clone(current);
+ break;
+ case 'array': source[key] = current.clone(); break;
+ default: source[key] = current;
+ }
+ return source;
+};
+
+Object.extend({
+
+ merge: function(source, k, v){
+ if (typeOf(k) == 'string') return mergeOne(source, k, v);
+ for (var i = 1, l = arguments.length; i < l; i++){
+ var object = arguments[i];
+ for (var key in object) mergeOne(source, key, object[key]);
+ }
+ return source;
+ },
+
+ clone: function(object){
+ var clone = {};
+ for (var key in object) clone[key] = cloneOf(object[key]);
+ return clone;
+ },
+
+ append: function(original){
+ for (var i = 1, l = arguments.length; i < l; i++){
+ var extended = arguments[i] || {};
+ for (var key in extended) original[key] = extended[key];
+ }
+ return original;
+ }
+
+});
+
+// Object-less types
+
+['Object', 'WhiteSpace', 'TextNode', 'Collection', 'Arguments'].each(function(name){
+ new Type(name);
+});
+
+// Unique ID
+
+var UID = Date.now();
+
+String.extend('uniqueID', function(){
+ return (UID++).toString(36);
+});
+
+//<1.2compat>
+
+var Hash = this.Hash = new Type('Hash', function(object){
+ if (typeOf(object) == 'hash') object = Object.clone(object.getClean());
+ for (var key in object) this[key] = object[key];
+ return this;
+});
+
+Hash.implement({
+
+ forEach: function(fn, bind){
+ Object.forEach(this, fn, bind);
+ },
+
+ getClean: function(){
+ var clean = {};
+ for (var key in this){
+ if (this.hasOwnProperty(key)) clean[key] = this[key];
+ }
+ return clean;
+ },
+
+ getLength: function(){
+ var length = 0;
+ for (var key in this){
+ if (this.hasOwnProperty(key)) length++;
+ }
+ return length;
+ }
+
+});
+
+Hash.alias('each', 'forEach');
+
+Object.type = Type.isObject;
+
+var Native = this.Native = function(properties){
+ return new Type(properties.name, properties.initialize);
+};
+
+Native.type = Type.type;
+
+Native.implement = function(objects, methods){
+ for (var i = 0; i < objects.length; i++) objects[i].implement(methods);
+ return Native;
+};
+
+var arrayType = Array.type;
+Array.type = function(item){
+ return instanceOf(item, Array) || arrayType(item);
+};
+
+this.$A = function(item){
+ return Array.from(item).slice();
+};
+
+this.$arguments = function(i){
+ return function(){
+ return arguments[i];
+ };
+};
+
+this.$chk = function(obj){
+ return !!(obj || obj === 0);
+};
+
+this.$clear = function(timer){
+ clearTimeout(timer);
+ clearInterval(timer);
+ return null;
+};
+
+this.$defined = function(obj){
+ return (obj != null);
+};
+
+this.$each = function(iterable, fn, bind){
+ var type = typeOf(iterable);
+ ((type == 'arguments' || type == 'collection' || type == 'array' || type == 'elements') ? Array : Object).each(iterable, fn, bind);
+};
+
+this.$empty = function(){};
+
+this.$extend = function(original, extended){
+ return Object.append(original, extended);
+};
+
+this.$H = function(object){
+ return new Hash(object);
+};
+
+this.$merge = function(){
+ var args = Array.slice(arguments);
+ args.unshift({});
+ return Object.merge.apply(null, args);
+};
+
+this.$lambda = Function.from;
+this.$mixin = Object.merge;
+this.$random = Number.random;
+this.$splat = Array.from;
+this.$time = Date.now;
+
+this.$type = function(object){
+ var type = typeOf(object);
+ if (type == 'elements') return 'array';
+ return (type == 'null') ? false : type;
+};
+
+this.$unlink = function(object){
+ switch (typeOf(object)){
+ case 'object': return Object.clone(object);
+ case 'array': return Array.clone(object);
+ case 'hash': return new Hash(object);
+ default: return object;
+ }
+};
+
+//1.2compat>
+
+})();
+
+
+/*
+---
+
+name: Array
+
+description: Contains Array Prototypes like each, contains, and erase.
+
+license: MIT-style license.
+
+requires: Type
+
+provides: Array
+
+...
+*/
+
+Array.implement({
+
+ /**/
+ every: function(fn, bind){
+ for (var i = 0, l = this.length; i < l; i++){
+ if ((i in this) && !fn.call(bind, this[i], i, this)) return false;
+ }
+ return true;
+ },
+
+ filter: function(fn, bind){
+ var results = [];
+ for (var i = 0, l = this.length; i < l; i++){
+ if ((i in this) && fn.call(bind, this[i], i, this)) results.push(this[i]);
+ }
+ return results;
+ },
+
+ indexOf: function(item, from){
+ var len = this.length;
+ for (var i = (from < 0) ? Math.max(0, len + from) : from || 0; i < len; i++){
+ if (this[i] === item) return i;
+ }
+ return -1;
+ },
+
+ map: function(fn, bind){
+ var results = [];
+ for (var i = 0, l = this.length; i < l; i++){
+ if (i in this) results[i] = fn.call(bind, this[i], i, this);
+ }
+ return results;
+ },
+
+ some: function(fn, bind){
+ for (var i = 0, l = this.length; i < l; i++){
+ if ((i in this) && fn.call(bind, this[i], i, this)) return true;
+ }
+ return false;
+ },
+ /*!ES5>*/
+
+ clean: function(){
+ return this.filter(function(item){
+ return item != null;
+ });
+ },
+
+ invoke: function(methodName){
+ var args = Array.slice(arguments, 1);
+ return this.map(function(item){
+ return item[methodName].apply(item, args);
+ });
+ },
+
+ associate: function(keys){
+ var obj = {}, length = Math.min(this.length, keys.length);
+ for (var i = 0; i < length; i++) obj[keys[i]] = this[i];
+ return obj;
+ },
+
+ link: function(object){
+ var result = {};
+ for (var i = 0, l = this.length; i < l; i++){
+ for (var key in object){
+ if (object[key](this[i])){
+ result[key] = this[i];
+ delete object[key];
+ break;
+ }
+ }
+ }
+ return result;
+ },
+
+ contains: function(item, from){
+ return this.indexOf(item, from) != -1;
+ },
+
+ append: function(array){
+ this.push.apply(this, array);
+ return this;
+ },
+
+ getLast: function(){
+ return (this.length) ? this[this.length - 1] : null;
+ },
+
+ getRandom: function(){
+ return (this.length) ? this[Number.random(0, this.length - 1)] : null;
+ },
+
+ include: function(item){
+ if (!this.contains(item)) this.push(item);
+ return this;
+ },
+
+ combine: function(array){
+ for (var i = 0, l = array.length; i < l; i++) this.include(array[i]);
+ return this;
+ },
+
+ erase: function(item){
+ for (var i = this.length; i--;){
+ if (this[i] === item) this.splice(i, 1);
+ }
+ return this;
+ },
+
+ empty: function(){
+ this.length = 0;
+ return this;
+ },
+
+ flatten: function(){
+ var array = [];
+ for (var i = 0, l = this.length; i < l; i++){
+ var type = typeOf(this[i]);
+ if (type == 'null') continue;
+ array = array.concat((type == 'array' || type == 'collection' || type == 'arguments' || instanceOf(this[i], Array)) ? Array.flatten(this[i]) : this[i]);
+ }
+ return array;
+ },
+
+ pick: function(){
+ for (var i = 0, l = this.length; i < l; i++){
+ if (this[i] != null) return this[i];
+ }
+ return null;
+ },
+
+ hexToRgb: function(array){
+ if (this.length != 3) return null;
+ var rgb = this.map(function(value){
+ if (value.length == 1) value += value;
+ return value.toInt(16);
+ });
+ return (array) ? rgb : 'rgb(' + rgb + ')';
+ },
+
+ rgbToHex: function(array){
+ if (this.length < 3) return null;
+ if (this.length == 4 && this[3] == 0 && !array) return 'transparent';
+ var hex = [];
+ for (var i = 0; i < 3; i++){
+ var bit = (this[i] - 0).toString(16);
+ hex.push((bit.length == 1) ? '0' + bit : bit);
+ }
+ return (array) ? hex : '#' + hex.join('');
+ }
+
+});
+
+//<1.2compat>
+
+Array.alias('extend', 'append');
+
+var $pick = function(){
+ return Array.from(arguments).pick();
+};
+
+//1.2compat>
+
+
+/*
+---
+
+name: String
+
+description: Contains String Prototypes like camelCase, capitalize, test, and toInt.
+
+license: MIT-style license.
+
+requires: Type
+
+provides: String
+
+...
+*/
+
+String.implement({
+
+ test: function(regex, params){
+ return ((typeOf(regex) == 'regexp') ? regex : new RegExp('' + regex, params)).test(this);
+ },
+
+ contains: function(string, separator){
+ return (separator) ? (separator + this + separator).indexOf(separator + string + separator) > -1 : this.indexOf(string) > -1;
+ },
+
+ trim: function(){
+ return this.replace(/^\s+|\s+$/g, '');
+ },
+
+ clean: function(){
+ return this.replace(/\s+/g, ' ').trim();
+ },
+
+ camelCase: function(){
+ return this.replace(/-\D/g, function(match){
+ return match.charAt(1).toUpperCase();
+ });
+ },
+
+ hyphenate: function(){
+ return this.replace(/[A-Z]/g, function(match){
+ return ('-' + match.charAt(0).toLowerCase());
+ });
+ },
+
+ capitalize: function(){
+ return this.replace(/\b[a-z]/g, function(match){
+ return match.toUpperCase();
+ });
+ },
+
+ escapeRegExp: function(){
+ return this.replace(/([-.*+?^${}()|[\]\/\\])/g, '\\$1');
+ },
+
+ toInt: function(base){
+ return parseInt(this, base || 10);
+ },
+
+ toFloat: function(){
+ return parseFloat(this);
+ },
+
+ hexToRgb: function(array){
+ var hex = this.match(/^#?(\w{1,2})(\w{1,2})(\w{1,2})$/);
+ return (hex) ? hex.slice(1).hexToRgb(array) : null;
+ },
+
+ rgbToHex: function(array){
+ var rgb = this.match(/\d{1,3}/g);
+ return (rgb) ? rgb.rgbToHex(array) : null;
+ },
+
+ substitute: function(object, regexp){
+ return this.replace(regexp || (/\\?\{([^{}]+)\}/g), function(match, name){
+ if (match.charAt(0) == '\\') return match.slice(1);
+ return (object[name] != null) ? object[name] : '';
+ });
+ }
+
+});
+
+
+/*
+---
+
+name: Number
+
+description: Contains Number Prototypes like limit, round, times, and ceil.
+
+license: MIT-style license.
+
+requires: Type
+
+provides: Number
+
+...
+*/
+
+Number.implement({
+
+ limit: function(min, max){
+ return Math.min(max, Math.max(min, this));
+ },
+
+ round: function(precision){
+ precision = Math.pow(10, precision || 0).toFixed(precision < 0 ? -precision : 0);
+ return Math.round(this * precision) / precision;
+ },
+
+ times: function(fn, bind){
+ for (var i = 0; i < this; i++) fn.call(bind, i, this);
+ },
+
+ toFloat: function(){
+ return parseFloat(this);
+ },
+
+ toInt: function(base){
+ return parseInt(this, base || 10);
+ }
+
+});
+
+Number.alias('each', 'times');
+
+(function(math){
+ var methods = {};
+ math.each(function(name){
+ if (!Number[name]) methods[name] = function(){
+ return Math[name].apply(null, [this].concat(Array.from(arguments)));
+ };
+ });
+ Number.implement(methods);
+})(['abs', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'exp', 'floor', 'log', 'max', 'min', 'pow', 'sin', 'sqrt', 'tan']);
+
+
+/*
+---
+
+name: Function
+
+description: Contains Function Prototypes like create, bind, pass, and delay.
+
+license: MIT-style license.
+
+requires: Type
+
+provides: Function
+
+...
+*/
+
+Function.extend({
+
+ attempt: function(){
+ for (var i = 0, l = arguments.length; i < l; i++){
+ try {
+ return arguments[i]();
+ } catch (e){}
+ }
+ return null;
+ }
+
+});
+
+Function.implement({
+
+ attempt: function(args, bind){
+ try {
+ return this.apply(bind, Array.from(args));
+ } catch (e){}
+
+ return null;
+ },
+
+ /**/
+ bind: function(bind){
+ var self = this,
+ args = (arguments.length > 1) ? Array.slice(arguments, 1) : null;
+
+ return function(){
+ if (!args && !arguments.length) return self.call(bind);
+ if (args && arguments.length) return self.apply(bind, args.concat(Array.from(arguments)));
+ return self.apply(bind, args || arguments);
+ };
+ },
+ /*!ES5>*/
+
+ pass: function(args, bind){
+ var self = this;
+ if (args != null) args = Array.from(args);
+ return function(){
+ return self.apply(bind, args || arguments);
+ };
+ },
+
+ delay: function(delay, bind, args){
+ return setTimeout(this.pass((args == null ? [] : args), bind), delay);
+ },
+
+ periodical: function(periodical, bind, args){
+ return setInterval(this.pass((args == null ? [] : args), bind), periodical);
+ }
+
+});
+
+//<1.2compat>
+
+delete Function.prototype.bind;
+
+Function.implement({
+
+ create: function(options){
+ var self = this;
+ options = options || {};
+ return function(event){
+ var args = options.arguments;
+ args = (args != null) ? Array.from(args) : Array.slice(arguments, (options.event) ? 1 : 0);
+ if (options.event) args = [event || window.event].extend(args);
+ var returns = function(){
+ return self.apply(options.bind || null, args);
+ };
+ if (options.delay) return setTimeout(returns, options.delay);
+ if (options.periodical) return setInterval(returns, options.periodical);
+ if (options.attempt) return Function.attempt(returns);
+ return returns();
+ };
+ },
+
+ bind: function(bind, args){
+ var self = this;
+ if (args != null) args = Array.from(args);
+ return function(){
+ return self.apply(bind, args || arguments);
+ };
+ },
+
+ bindWithEvent: function(bind, args){
+ var self = this;
+ if (args != null) args = Array.from(args);
+ return function(event){
+ return self.apply(bind, (args == null) ? arguments : [event].concat(args));
+ };
+ },
+
+ run: function(args, bind){
+ return this.apply(bind, Array.from(args));
+ }
+
+});
+
+var $try = Function.attempt;
+
+//1.2compat>
+
+
+/*
+---
+
+name: Object
+
+description: Object generic methods
+
+license: MIT-style license.
+
+requires: Type
+
+provides: [Object, Hash]
+
+...
+*/
+
+(function(){
+
+var hasOwnProperty = Object.prototype.hasOwnProperty;
+
+Object.extend({
+
+ subset: function(object, keys){
+ var results = {};
+ for (var i = 0, l = keys.length; i < l; i++){
+ var k = keys[i];
+ if (k in object) results[k] = object[k];
+ }
+ return results;
+ },
+
+ map: function(object, fn, bind){
+ var results = {};
+ for (var key in object){
+ if (hasOwnProperty.call(object, key)) results[key] = fn.call(bind, object[key], key, object);
+ }
+ return results;
+ },
+
+ filter: function(object, fn, bind){
+ var results = {};
+ for (var key in object){
+ var value = object[key];
+ if (hasOwnProperty.call(object, key) && fn.call(bind, value, key, object)) results[key] = value;
+ }
+ return results;
+ },
+
+ every: function(object, fn, bind){
+ for (var key in object){
+ if (hasOwnProperty.call(object, key) && !fn.call(bind, object[key], key)) return false;
+ }
+ return true;
+ },
+
+ some: function(object, fn, bind){
+ for (var key in object){
+ if (hasOwnProperty.call(object, key) && fn.call(bind, object[key], key)) return true;
+ }
+ return false;
+ },
+
+ keys: function(object){
+ var keys = [];
+ for (var key in object){
+ if (hasOwnProperty.call(object, key)) keys.push(key);
+ }
+ return keys;
+ },
+
+ values: function(object){
+ var values = [];
+ for (var key in object){
+ if (hasOwnProperty.call(object, key)) values.push(object[key]);
+ }
+ return values;
+ },
+
+ getLength: function(object){
+ return Object.keys(object).length;
+ },
+
+ keyOf: function(object, value){
+ for (var key in object){
+ if (hasOwnProperty.call(object, key) && object[key] === value) return key;
+ }
+ return null;
+ },
+
+ contains: function(object, value){
+ return Object.keyOf(object, value) != null;
+ },
+
+ toQueryString: function(object, base){
+ var queryString = [];
+
+ Object.each(object, function(value, key){
+ if (base) key = base + '[' + key + ']';
+ var result;
+ switch (typeOf(value)){
+ case 'object': result = Object.toQueryString(value, key); break;
+ case 'array':
+ var qs = {};
+ value.each(function(val, i){
+ qs[i] = val;
+ });
+ result = Object.toQueryString(qs, key);
+ break;
+ default: result = key + '=' + encodeURIComponent(value);
+ }
+ if (value != null) queryString.push(result);
+ });
+
+ return queryString.join('&');
+ }
+
+});
+
+})();
+
+//<1.2compat>
+
+Hash.implement({
+
+ has: Object.prototype.hasOwnProperty,
+
+ keyOf: function(value){
+ return Object.keyOf(this, value);
+ },
+
+ hasValue: function(value){
+ return Object.contains(this, value);
+ },
+
+ extend: function(properties){
+ Hash.each(properties || {}, function(value, key){
+ Hash.set(this, key, value);
+ }, this);
+ return this;
+ },
+
+ combine: function(properties){
+ Hash.each(properties || {}, function(value, key){
+ Hash.include(this, key, value);
+ }, this);
+ return this;
+ },
+
+ erase: function(key){
+ if (this.hasOwnProperty(key)) delete this[key];
+ return this;
+ },
+
+ get: function(key){
+ return (this.hasOwnProperty(key)) ? this[key] : null;
+ },
+
+ set: function(key, value){
+ if (!this[key] || this.hasOwnProperty(key)) this[key] = value;
+ return this;
+ },
+
+ empty: function(){
+ Hash.each(this, function(value, key){
+ delete this[key];
+ }, this);
+ return this;
+ },
+
+ include: function(key, value){
+ if (this[key] == null) this[key] = value;
+ return this;
+ },
+
+ map: function(fn, bind){
+ return new Hash(Object.map(this, fn, bind));
+ },
+
+ filter: function(fn, bind){
+ return new Hash(Object.filter(this, fn, bind));
+ },
+
+ every: function(fn, bind){
+ return Object.every(this, fn, bind);
+ },
+
+ some: function(fn, bind){
+ return Object.some(this, fn, bind);
+ },
+
+ getKeys: function(){
+ return Object.keys(this);
+ },
+
+ getValues: function(){
+ return Object.values(this);
+ },
+
+ toQueryString: function(base){
+ return Object.toQueryString(this, base);
+ }
+
+});
+
+Hash.extend = Object.append;
+
+Hash.alias({indexOf: 'keyOf', contains: 'hasValue'});
+
+//1.2compat>
+
+
+/*
+---
+
+name: Browser
+
+description: The Browser Object. Contains Browser initialization, Window and Document, and the Browser Hash.
+
+license: MIT-style license.
+
+requires: [Array, Function, Number, String]
+
+provides: [Browser, Window, Document]
+
+...
+*/
+
+(function(){
+
+var document = this.document;
+var window = document.window = this;
+
+var UID = 1;
+
+this.$uid = (window.ActiveXObject) ? function(item){
+ return (item.uid || (item.uid = [UID++]))[0];
+} : function(item){
+ return item.uid || (item.uid = UID++);
+};
+
+$uid(window);
+$uid(document);
+
+var ua = navigator.userAgent.toLowerCase(),
+ platform = navigator.platform.toLowerCase(),
+ UA = ua.match(/(opera|ie|firefox|chrome|version)[\s\/:]([\w\d\.]+)?.*?(safari|version[\s\/:]([\w\d\.]+)|$)/) || [null, 'unknown', 0],
+ mode = UA[1] == 'ie' && document.documentMode;
+
+var Browser = this.Browser = {
+
+ extend: Function.prototype.extend,
+
+ name: (UA[1] == 'version') ? UA[3] : UA[1],
+
+ version: mode || parseFloat((UA[1] == 'opera' && UA[4]) ? UA[4] : UA[2]),
+
+ Platform: {
+ name: ua.match(/ip(?:ad|od|hone)/) ? 'ios' : (ua.match(/(?:webos|android)/) || platform.match(/mac|win|linux/) || ['other'])[0]
+ },
+
+ Features: {
+ xpath: !!(document.evaluate),
+ air: !!(window.runtime),
+ query: !!(document.querySelector),
+ json: !!(window.JSON)
+ },
+
+ Plugins: {}
+
+};
+
+Browser[Browser.name] = true;
+Browser[Browser.name + parseInt(Browser.version, 10)] = true;
+Browser.Platform[Browser.Platform.name] = true;
+
+// Request
+
+Browser.Request = (function(){
+
+ var XMLHTTP = function(){
+ return new XMLHttpRequest();
+ };
+
+ var MSXML2 = function(){
+ return new ActiveXObject('MSXML2.XMLHTTP');
+ };
+
+ var MSXML = function(){
+ return new ActiveXObject('Microsoft.XMLHTTP');
+ };
+
+ return Function.attempt(function(){
+ XMLHTTP();
+ return XMLHTTP;
+ }, function(){
+ MSXML2();
+ return MSXML2;
+ }, function(){
+ MSXML();
+ return MSXML;
+ });
+
+})();
+
+Browser.Features.xhr = !!(Browser.Request);
+
+// Flash detection
+
+var version = (Function.attempt(function(){
+ return navigator.plugins['Shockwave Flash'].description;
+}, function(){
+ return new ActiveXObject('ShockwaveFlash.ShockwaveFlash').GetVariable('$version');
+}) || '0 r0').match(/\d+/g);
+
+Browser.Plugins.Flash = {
+ version: Number(version[0] || '0.' + version[1]) || 0,
+ build: Number(version[2]) || 0
+};
+
+// String scripts
+
+Browser.exec = function(text){
+ if (!text) return text;
+ if (window.execScript){
+ window.execScript(text);
+ } else {
+ var script = document.createElement('script');
+ script.setAttribute('type', 'text/javascript');
+ script.text = text;
+ document.head.appendChild(script);
+ document.head.removeChild(script);
+ }
+ return text;
+};
+
+String.implement('stripScripts', function(exec){
+ var scripts = '';
+ var text = this.replace(/
+
diff --git a/wise-webapp/src/main/webapp/jsp/embeddedViewImg.jsp b/wise-webapp/src/main/webapp/jsp/embeddedViewImg.jsp
index fa613b7f..6133753b 100644
--- a/wise-webapp/src/main/webapp/jsp/embeddedViewImg.jsp
+++ b/wise-webapp/src/main/webapp/jsp/embeddedViewImg.jsp
@@ -8,7 +8,7 @@
-
+
diff --git a/wise-webapp/src/main/webapp/jsp/mindmapEditor.jsp b/wise-webapp/src/main/webapp/jsp/mindmapEditor.jsp
index 5c0e0e8f..debff340 100644
--- a/wise-webapp/src/main/webapp/jsp/mindmapEditor.jsp
+++ b/wise-webapp/src/main/webapp/jsp/mindmapEditor.jsp
@@ -13,33 +13,64 @@
-
+
- ${mindmap.title}
-
+
+
-
-
-
+
+
+
-
@@ -72,18 +103,13 @@
return false;
});
-
- var mapId = '${mindmap.id}';
- var mapXml = '${mapXml}';
- var editorProperties = ${mindmap.properties};
- var isTryMode = ${editorTryMode};
-
function printMap() {
document.printForm.mapSvg.value = $("workspaceContainer").innerHTML;
document.printForm.submit();
}
+
@@ -104,10 +130,13 @@
@@ -146,8 +175,8 @@
">
">
-
+ title="
">
+
@@ -193,7 +222,8 @@
">
- ">
+ ">
diff --git a/wise-webapp/src/main/webapp/jsp/mindmapList.jsp b/wise-webapp/src/main/webapp/jsp/mindmapList.jsp
index f0b9694e..357ae6ba 100644
--- a/wise-webapp/src/main/webapp/jsp/mindmapList.jsp
+++ b/wise-webapp/src/main/webapp/jsp/mindmapList.jsp
@@ -14,7 +14,7 @@
-
+