diff --git a/mindplot/pom.xml b/mindplot/pom.xml index 649957b9..c1e35500 100644 --- a/mindplot/pom.xml +++ b/mindplot/pom.xml @@ -110,7 +110,8 @@ - + + @@ -130,7 +131,7 @@ + files="commands/ChangeLinkToTopicCommand.js"/> + + diff --git a/mindplot/src/main/javascript/ActionDispatcher.js b/mindplot/src/main/javascript/ActionDispatcher.js index 08ca676e..4e613117 100644 --- a/mindplot/src/main/javascript/ActionDispatcher.js +++ b/mindplot/src/main/javascript/ActionDispatcher.js @@ -27,7 +27,7 @@ mindplot.ActionDispatcher = new Class({ throw "method must be implemented."; }, - addLinkToTopic: function(topicId, url) { + changeLinkToTopic: function(topicId, url) { throw "method must be implemented."; }, diff --git a/mindplot/src/main/javascript/IconGroup.js b/mindplot/src/main/javascript/IconGroup.js index 3b57b06a..3cae7278 100644 --- a/mindplot/src/main/javascript/IconGroup.js +++ b/mindplot/src/main/javascript/IconGroup.js @@ -99,6 +99,7 @@ mindplot.IconGroup = new Class({ removeIconByUrl : function(url) { var icon = this._findIconFromUrl(url); + $assert(icon,'icon could not be found'); this._removeIcon(icon); }, diff --git a/mindplot/src/main/javascript/LinkIcon.js b/mindplot/src/main/javascript/LinkIcon.js index bce71f96..7a2227cc 100644 --- a/mindplot/src/main/javascript/LinkIcon.js +++ b/mindplot/src/main/javascript/LinkIcon.js @@ -18,179 +18,40 @@ mindplot.LinkIcon = new Class({ - Extends:mindplot.Icon, - initialize:function(urlModel, topic, designer) { - $assert(urlModel, "urlModel can not be null"); - $assert(designer, "designer can not be null"); - $assert(topic, "topic can not be null"); + Extends: mindplot.Icon, + initialize : function(topic, linkModel) { + $assert(topic, 'topic can not be null'); + $assert(linkModel, 'linkModel can not be null'); + this.parent(mindplot.LinkIcon.IMAGE_URL); - - var divContainer = designer.getWorkSpace().getScreenManager().getContainer(); - var bubbleTip = mindplot.BubbleTip.getInstance(divContainer); - - this._linkModel = urlModel; + this._noteModel = linkModel; this._topic = topic; - this._designer = designer; - var image = this.getImage(); - var imgContainer = new Element('div').setStyles({textAlign:'center', cursor:'pointer'}); - this._img = new Element('img'); - var url = urlModel.getUrl(); - this._img.src = 'http://open.thumbshots.org/image.pxf?url=' + url; - if (url.indexOf('http:') == -1) { - url = 'http://' + url; - } - this._img.alt = url; - this._url = url; - var openWindow = function() { - var wOpen; - var sOptions; - - sOptions = 'status=yes,menubar=yes,scrollbars=yes,resizable=yes,toolbar=yes'; - sOptions = sOptions + ',width=' + (screen.availWidth - 10).toString(); - sOptions = sOptions + ',height=' + (screen.availHeight - 122).toString(); - sOptions = sOptions + ',screenX=0,screenY=0,left=0,top=0'; - var url = this._img.alt; - wOpen = window.open(url, "link", "width=100px, height=100px"); - wOpen.focus(); - wOpen.moveTo(0, 0); - wOpen.resizeTo(screen.availWidth, screen.availHeight); - }; - - this._img.addEvent('click', openWindow.bindWithEvent(this)); - this._img.inject(imgContainer); - - var attribution = new Element('div').setStyles({fontSize:10, textAlign:"center"}); - attribution.innerHTML = "About Thumbshots thumbnails"; - - var container = new Element('div'); - var element = new Element('div').setStyles({borderBottom:'1px solid #e5e5e5'}); - - var title = new Element('div').setStyles({fontSize:12, textAlign:'center'}); - this._link = new Element('span'); - this._link.href = url; - this._link.innerHTML = url; - this._link.setStyle("text-decoration", "underline"); - this._link.setStyle("cursor", "pointer"); - this._link.inject(title); - this._link.addEvent('click', openWindow.bindWithEvent(this)); - title.inject(element); - - imgContainer.inject(element); - attribution.inject(element); - element.inject(container); - - if (!$defined(designer._readOnly) || ($defined(designer._readOnly) && !designer._readOnly)) { - var buttonContainer = new Element('div').setStyles({paddingTop:5, textAlign:'center'}); - var editBtn = new Element('input', {type:'button', 'class':'btn-primary', value:'Edit'}).addClass('button').inject(buttonContainer); - var removeBtn = new Element('input', {type:'button', value:'Remove','class':'btn-primary'}).addClass('button').inject(buttonContainer); - - editBtn.setStyle("margin-right", "3px"); - removeBtn.setStyle("margin-left", "3px"); - - removeBtn.addEvent('click', function(event) { - - var actionDispatcher = mindplot.ActionDispatcher.getInstance(); - actionDispatcher.removeLinkFromTopic(this._topic.getId()); - bubbleTip.forceClose(); - }.bindWithEvent(this)); - - var okButtonId = 'okLinkButtonId'; - editBtn.addEvent('click', function(event) { - var topic = this._topic; - var designer = this._designer; - var link = this; - var okFunction = function(e) { - var result = false; - var url = urlInput.value; - if ("" != url.trim()) { - link._img.src = 'http://open.thumbshots.org/image.pxf?url=' + url; - link._img.alt = url; - link._link.href = url; - link._link.innerHTML = url; - this._linkModel.setUrl(url); - result = true; - } - return result; - }; - var msg = new Element('div'); - var urlText = new Element('div').inject(msg); - urlText.innerHTML = "URL:"; - - var formElem = new Element('form', {'action': 'none', 'id':'linkFormId'}); - var urlInput = new Element('input', {'type': 'text', 'size':30,'value':url}); - urlInput.inject(formElem); - formElem.inject(msg); - - formElem.addEvent('submit', function(e) { - $(okButtonId).fireEvent('click', e); - e = new Event(e); - e.stop(); - }); - - - var dialog = mindplot.LinkIcon.buildDialog(designer, okFunction, okButtonId); - dialog.adopt(msg).show(); - - }.bindWithEvent(this)); - buttonContainer.inject(container); - } - - var linkIcon = this; - image.addEvent('mouseover', function(event) { - bubbleTip.open(event, container, linkIcon); - }); - image.addEvent('mousemove', function(event) { - bubbleTip.updatePosition(event); - }); - image.addEvent('mouseout', function(event) { - bubbleTip.close(event); - }); + this._registerEvents(); }, - getUrl : function() { - return this._url; + _registerEvents : function() { + this._image.setCursor('pointer'); + + // Add on click event to open the editor ... + this.addEvent('click', function(event) { + this._topic.showLinkEditor(); + event.stopPropagation(); + }.bind(this)); + + this._tip = new mindplot.widget.LinkIconTooltip(this); }, getModel : function() { - return this._linkModel; + return this._noteModel; + }, + + remove : function() { + var actionDispatcher = mindplot.ActionDispatcher.getInstance(); + actionDispatcher.removeLinkFromTopic(this._topic.getId()); } }); - -mindplot.LinkIcon.buildDialog = function(designer, okFunction, okButtonId) { - var windoo = new Windoo({ - title: 'Write link URL', - theme: Windoo.Themes.wise, - modal:true, - buttons:{'menu':false, 'close':false, 'minimize':false, 'roll':false, 'maximize':false}, - destroyOnClose:true, - height:130 - }); - - var cancel = new Element('input', {'type': 'button', 'class':'btn-primary', 'value': 'Cancel'}).setStyle('margin-right', "5px"); - cancel.setStyle('margin-left', "5px"); - cancel.addEvent('click', function(event) { - $(document).addEvent('keydown', designer.keyEventHandler.bindWithEvent(designer)); - windoo.close(); - }.bindWithEvent(this)); - - var ok = new Element('input', {'type': 'button', 'class':'btn-primary','value': 'Ok','id':okButtonId}).setStyle('marginRight', 10); - ok.addEvent('click', function(event) { - var couldBeUpdated = okFunction.attempt(); - if (couldBeUpdated) { - $(document).addEvent('keydown', designer.keyEventHandler.bindWithEvent(designer)); - windoo.close(); - } - }.bindWithEvent(this)); - - var panel = new Element('div', {'styles': {'padding-top': 10, 'text-align': 'right'}}).adopt(ok, cancel); - - windoo.addPanel(panel); - $(document).removeEvents('keydown'); - return windoo; -}; - mindplot.LinkIcon.IMAGE_URL = "../images/world_link.png"; \ No newline at end of file diff --git a/mindplot/src/main/javascript/Note.js b/mindplot/src/main/javascript/NoteIcon.js similarity index 92% rename from mindplot/src/main/javascript/Note.js rename to mindplot/src/main/javascript/NoteIcon.js index b3d0ba68..4e27fc7e 100644 --- a/mindplot/src/main/javascript/Note.js +++ b/mindplot/src/main/javascript/NoteIcon.js @@ -16,12 +16,12 @@ * limitations under the License. */ -mindplot.Note = new Class({ +mindplot.NoteIcon = new Class({ Extends: mindplot.Icon, initialize : function(topic, noteModel) { $assert(topic, 'topic can not be null'); - this.parent(mindplot.Note.IMAGE_URL); + this.parent(mindplot.NoteIcon.IMAGE_URL); this._noteModel = noteModel; this._topic = topic; @@ -37,7 +37,7 @@ mindplot.Note = new Class({ event.stopPropagation(); }.bind(this)); - this.tip = new mindplot.widget.FloatingTip(this.getImage()._peer._native, { + this._tip = new mindplot.widget.FloatingTip(this.getImage()._peer._native, { // Content can also be a function of the target element! content: function() { var result = new Element('div'); @@ -82,5 +82,5 @@ mindplot.Note = new Class({ } }); -mindplot.Note.IMAGE_URL = "../images/note.png"; +mindplot.NoteIcon.IMAGE_URL = "../images/note.png"; diff --git a/mindplot/src/main/javascript/StandaloneActionDispatcher.js b/mindplot/src/main/javascript/StandaloneActionDispatcher.js index 04855b44..a2078708 100644 --- a/mindplot/src/main/javascript/StandaloneActionDispatcher.js +++ b/mindplot/src/main/javascript/StandaloneActionDispatcher.js @@ -33,8 +33,8 @@ mindplot.StandaloneActionDispatcher = new Class({ this.execute(command); }, - addLinkToTopic: function(topicId, url) { - var command = new mindplot.commands.AddLinkToTopicCommand(topicId, url); + changeLinkToTopic: function(topicId, url) { + var command = new mindplot.commands.ChangeLinkToTopicCommand(topicId, url); this.execute(command); }, diff --git a/mindplot/src/main/javascript/Topic.js b/mindplot/src/main/javascript/Topic.js index 1fa5b103..205b6f7f 100644 --- a/mindplot/src/main/javascript/Topic.js +++ b/mindplot/src/main/javascript/Topic.js @@ -280,7 +280,6 @@ mindplot.Topic = new Class({ //Links var links = model.getLinks(); for (var i = 0; i < links.length; i++) { - this._hasLink = true; this._link = new mindplot.LinkIcon(links[i], this, designer); result.addIcon(this._link); } @@ -288,22 +287,21 @@ mindplot.Topic = new Class({ //Notes var notes = model.getNotes(); for (var j = 0; j < notes.length; j++) { - this._hasNote = true; - this._note = new mindplot.Note(this, notes[j]); + this._note = new mindplot.NoteIcon(this, notes[j]); result.addIcon(this._note); } return result; }, - addLink : function(url, designer) { + addLink : function(url) { var iconGroup = this.getOrBuildIconGroup(); var model = this.getModel(); var linkModel = model.createLink(url); model.addLink(linkModel); - this._link = new mindplot.LinkIcon(linkModel, this, designer); + + this._link = new mindplot.LinkIcon(this, linkModel); iconGroup.addIcon(this._link); - this._hasLink = true; this._adjustShapes(); }, @@ -314,9 +312,8 @@ mindplot.Topic = new Class({ var noteModel = model.createNote(text); model.addNote(noteModel); - this._note = new mindplot.Note(this, noteModel); + this._note = new mindplot.NoteIcon(this, noteModel); iconGroup.addIcon(this._note); - this._hasNote = true; this._adjustShapes(); }, @@ -349,19 +346,18 @@ mindplot.Topic = new Class({ }, removeLink : function() { + // Update model ... var model = this.getModel(); var links = model.getLinks(); model._removeLink(links[0]); + + // Remove UI ... var iconGroup = this.getIconGroup(); if ($defined(iconGroup)) { - iconGroup.removeIcon(mindplot.LinkIcon.IMAGE_URL); - if (iconGroup.getIcons().length == 0) { - this.get2DElement().removeChild(iconGroup.getNativeElement()); - this._iconsGroup = null; - } + iconGroup.removeIconByUrl(mindplot.LinkIcon.IMAGE_URL); } + this._link = null; - this._hasLink = false; this._adjustShapes(); }, @@ -374,16 +370,19 @@ mindplot.Topic = new Class({ // Remove UI ... var iconGroup = this.getIconGroup(); if ($defined(iconGroup)) { - iconGroup.removeIconByUrl(mindplot.Note.IMAGE_URL); + iconGroup.removeIconByUrl(mindplot.NoteIcon.IMAGE_URL); } this._note = null; - this._hasNote = false; this._adjustShapes(); }, hasNote : function() { - return this._hasNote; + return this.getModel().getNotes().length != 0; + }, + + hasLink : function() { + return this.getModel().getLinks().length != 0; }, addRelationship : function(relationship) { @@ -747,9 +746,8 @@ mindplot.Topic = new Class({ } } }; - - this.closeEditors(); var editor = new mindplot.widget.NoteEditor(editorModel); + this.closeEditors(); editor.show(); }, @@ -759,22 +757,22 @@ mindplot.Topic = new Class({ var model = this.getModel(); var editorModel = { getValue : function() { -// var notes = model.getNotes(); -// var result; -// if (notes.length > 0) -// result = notes[0].getText(); -// -// return result; + var links = model.getLinks(); + var result; + if (links.length > 0) + result = links[0].getUrl(); + + return result; }, setValue : function(value) { -// var dispatcher = mindplot.ActionDispatcher.getInstance(); -// if (!$defined(value)) { -// dispatcher.removeNoteFromTopic(topicId); -// } -// else { -// dispatcher.changeNoteToTopic(topicId, value); -// } + var dispatcher = mindplot.ActionDispatcher.getInstance(); + if (!$defined(value)) { + dispatcher.removeLinkFromTopic(topicId); + } + else { + dispatcher.changeLinkToTopic(topicId, value); + } } }; diff --git a/mindplot/src/main/javascript/commands/AddLinkToTopicCommand.js b/mindplot/src/main/javascript/commands/ChangeLinkToTopicCommand.js similarity index 73% rename from mindplot/src/main/javascript/commands/AddLinkToTopicCommand.js rename to mindplot/src/main/javascript/commands/ChangeLinkToTopicCommand.js index db63891a..1d1314f4 100644 --- a/mindplot/src/main/javascript/commands/AddLinkToTopicCommand.js +++ b/mindplot/src/main/javascript/commands/ChangeLinkToTopicCommand.js @@ -16,7 +16,7 @@ * limitations under the License. */ -mindplot.commands.AddLinkToTopicCommand = new Class({ +mindplot.commands.ChangeLinkToTopicCommand = new Class({ Extends:mindplot.Command, initialize: function(topicId, url) { $assert(topicId, 'topicId can not be null'); @@ -24,12 +24,25 @@ mindplot.commands.AddLinkToTopicCommand = new Class({ this._url = url; this._id = mindplot.Command._nextUUID(); }, + execute: function(commandContext) { var topic = commandContext.findTopics(this._objectsIds)[0]; - topic.addLink(this._url, commandContext._designer); + if (topic.hasLink()) { + var model = topic.getModel(); + var link = model.getLinks()[0]; + this._oldUrl = link.getUrl(); + topic.removeLink(); + } + topic.addLink(this._url); }, + undoExecute: function(commandContext) { var topic = commandContext.findTopics(this._objectsIds)[0]; - topic.removeLink(); + if (this._oldtext) { + topic.removeLink(); + topic.addLink(this._oldUrl); + } else { + topic.removeLink(); + } } }); \ No newline at end of file diff --git a/mindplot/src/main/javascript/commands/ChangeNoteToTopicCommand.js b/mindplot/src/main/javascript/commands/ChangeNoteToTopicCommand.js index 0bf42c52..d556a529 100644 --- a/mindplot/src/main/javascript/commands/ChangeNoteToTopicCommand.js +++ b/mindplot/src/main/javascript/commands/ChangeNoteToTopicCommand.js @@ -25,7 +25,8 @@ mindplot.commands.ChangeNoteToTopicCommand = new Class({ this._oldtext = null; this._id = mindplot.Command._nextUUID(); }, - execute: function(commandContext) { + + execute: function(commandContext) { var topic = commandContext.findTopics(this._objectsIds)[0]; if (topic.hasNote()) { var model = topic.getModel(); @@ -35,6 +36,7 @@ mindplot.commands.ChangeNoteToTopicCommand = new Class({ } topic.addNote(this._text); }, + undoExecute: function(commandContext) { var topic = commandContext.findTopics(this._objectsIds)[0]; if (this._oldtext) { diff --git a/mindplot/src/main/javascript/commands/RemoveLinkFromTopicCommand.js b/mindplot/src/main/javascript/commands/RemoveLinkFromTopicCommand.js index 0639349c..bb759485 100644 --- a/mindplot/src/main/javascript/commands/RemoveLinkFromTopicCommand.js +++ b/mindplot/src/main/javascript/commands/RemoveLinkFromTopicCommand.js @@ -22,11 +22,15 @@ mindplot.commands.RemoveLinkFromTopicCommand = new Class({ $assert(topicId, 'topicId can not be null'); this._objectsIds = topicId; }, + execute: function(commandContext) { var topic = commandContext.findTopics(this._objectsIds)[0]; - this._url = topic._link.getUrl(); + var model = topic.getModel(); + var links = model.getLinks()[0]; + this._text = links.getUrl(); topic.removeLink(); }, + undoExecute: function(commandContext) { var topic = commandContext.findTopics(this._objectsIds)[0]; topic.addLink(this._url, commandContext._designer); diff --git a/mindplot/src/main/javascript/libraries/moodialog/MooDialog.js b/mindplot/src/main/javascript/libraries/moodialog/MooDialog.js index affc08d7..4c3e236d 100644 --- a/mindplot/src/main/javascript/libraries/moodialog/MooDialog.js +++ b/mindplot/src/main/javascript/libraries/moodialog/MooDialog.js @@ -33,11 +33,7 @@ var MooDialog = new Class({ onBeforeClose: function(){ this.wrapper.setStyle('display', 'none'); this.fireEvent('hide'); - }/*, - onOpen: function(){}, - onClose: function(){}, - onShow: function(){}, - onHide: function(){}*/ + } }, initialize: function(options){ diff --git a/mindplot/src/main/javascript/model/LinkModel.js b/mindplot/src/main/javascript/model/LinkModel.js index fd7fc016..dabc18d7 100644 --- a/mindplot/src/main/javascript/model/LinkModel.js +++ b/mindplot/src/main/javascript/model/LinkModel.js @@ -20,9 +20,8 @@ mindplot.model.LinkModel = new Class({ initialize : function(url, topic) { $assert(url, 'url can not be null'); $assert(topic, 'mindmap can not be null'); - - this._url = url; this._topic = topic; + this.setUrl(url); }, getUrl : function() { @@ -31,7 +30,8 @@ mindplot.model.LinkModel = new Class({ setUrl : function(url) { $assert(url, 'url can not be null'); - this._url = url; + this._url = this._fixUrl(url); + this._type = this._url.contains('mailto:') ? 'mail' : 'url'; }, getTopic : function() { @@ -41,4 +41,12 @@ mindplot.model.LinkModel = new Class({ isLinkModel : function() { return true; } + , + _fixUrl : function(url) { + var result = url; + if (!result.contains('http://') && !result.contains('https://') && !result.contains('mailto://')) { + result = "http://" + result; + } + return result; + } }); \ No newline at end of file diff --git a/mindplot/src/main/javascript/widget/FloatingTip.js b/mindplot/src/main/javascript/widget/FloatingTip.js index 75c913a1..2d27edb1 100644 --- a/mindplot/src/main/javascript/widget/FloatingTip.js +++ b/mindplot/src/main/javascript/widget/FloatingTip.js @@ -34,7 +34,7 @@ mindplot.widget.FloatingTip = new Class({ showOn: 'mouseenter', hideOn: 'mouseleave', showDelay: 500, - hideDelay: 0, + hideDelay: 250, className: 'floating-tip', offset: {x: 0, y: 0}, fx: { 'duration': 'short' } @@ -71,9 +71,13 @@ mindplot.widget.FloatingTip = new Class({ return this; } var tip = this._create(element); - if (tip == null) return this; + if (tip == null) + return this; element.store('floatingtip', tip); this._animate(tip, 'in'); + tip.addEvent(this.options.showOn, this.boundShow); + tip.addEvent(this.options.hideOn, this.boundHide); + this.fireEvent('show', [tip, element]); return this; }, diff --git a/mindplot/src/main/javascript/widget/LinkEditor.js b/mindplot/src/main/javascript/widget/LinkEditor.js index ed87f982..157cb999 100644 --- a/mindplot/src/main/javascript/widget/LinkEditor.js +++ b/mindplot/src/main/javascript/widget/LinkEditor.js @@ -64,25 +64,36 @@ mindplot.widget.LinkEditor = new Class({ var result = new Element('div'); var form = new Element('form', {'action': 'none', 'id':'linkFormId'}); - // Add textarea ... - var textArea = new Element('textarea', {placeholder: 'Write your note here ...'}); - if (model.getValue() != null) - textArea.value = model.getValue(); + // Add combo ... + var select = new Element('select'); + select.setStyles({margin: '5px'}); + new Element('option', {text:'URL'}).inject(select); + new Element('option', {text:'Mail'}).inject(select); + select.inject(form); - textArea.setStyles({'width':'100%', 'height':80,resize: 'none' - }); - textArea.inject(form); + // Add Input ... + var input = new Element('input', {placeholder: 'http://www.example.com/',type:'url',required:true}); + if (model.getValue() != null) + input.value = model.getValue(); + + input.setStyles({'width':'70%'}); + input.inject(form); + + // Register submit event ... + form.addEvent('submit', function(event) { + event.stopPropagation(); + event.preventDefault(); + + model.setValue(input.value); + this.close(); + }.bind(this)); // Add buttons ... var buttonContainer = new Element('div').setStyles({paddingTop:5, textAlign:'center'}); // Create accept button ... - var okButton = new Element('input', {type:'button', value:'Accept','class':'btn-primary'}); + var okButton = new Element('input', {type:'submit', value:'Accept','class':'btn-primary'}); okButton.addClass('button'); - okButton.addEvent('click', function() { - model.setValue(textArea.value); - this.close(); - }.bind(this)); okButton.inject(buttonContainer); // Create remove button ... @@ -91,16 +102,16 @@ mindplot.widget.LinkEditor = new Class({ rmButton.setStyle('margin', '5px'); rmButton.addClass('button'); rmButton.inject(buttonContainer); - rmButton.addEvent('click', function() { + rmButton.addEvent('click', function(event) { model.setValue(null); + event.stopPropagation(); this.close(); }.bind(this)); buttonContainer.inject(form); } - // Create cancel button ... - var cButton = new Element('input', {type:'button', value:'Cancel','class':'btn-primary'}); + var cButton = new Element('input', {type:'button', value:'Cancel','class':'btn-secondary'}); cButton.setStyle('margin', '5px'); cButton.addClass('button'); cButton.inject(buttonContainer); diff --git a/mindplot/src/main/javascript/widget/LinkIconTooltip.js b/mindplot/src/main/javascript/widget/LinkIconTooltip.js new file mode 100644 index 00000000..5c6d338c --- /dev/null +++ b/mindplot/src/main/javascript/widget/LinkIconTooltip.js @@ -0,0 +1,91 @@ +/* + * 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. + */ + +mindplot.widget.LinkIconTooltip = new Class({ + Extends: mindplot.widget.FloatingTip, + + initialize : function(linkIcon) { + $assert(linkIcon, "linkIcon can not be null"); + this.parent(linkIcon.getImage()._peer._native, { + // Content can also be a function of the target element! + content: this._buildContent.pass(linkIcon, this), + html: true, + position: 'bottom', + arrowOffset : 10, + center: true, + arrowSize: 15, + offset : {x:10,y:20} + }); + }, + + _buildContent : function(linkIcon) { + var result = new Element('div'); + result.setStyles({ + padding:'5px', + width:'100%' + }); + + var title = new Element('div', {text:'Link'}); + title.setStyles({ + 'font-weight':'bold', + color:'black', + 'padding-bottom':'5px', + width: '100px' + }); + title.inject(result); + + var text = new Element('div', {text: "URL: " + linkIcon.getModel().getUrl()}); + text.setStyles({ + 'white-space': 'pre-wrap', + 'word-wrap': 'break-word' + } + ); + text.inject(result); + + var imgContainer = new Element('div'); + imgContainer.setStyles({ + width: '100%', + textAlign: 'center', + 'padding-bottom':'5px', + 'padding-top': '5px' + }); + + var img = new Element('img', { + src: 'http://open.thumbshots.org/image.pxf?url=' + linkIcon.getModel().getUrl(), + img : linkIcon.getModel().getUrl(), + alt : linkIcon.getModel().getUrl() + } + ); + img.setStyles({ + padding: '5px' + } + ); + + var link = new Element('a', { + href : linkIcon.getModel().getUrl(), + alt : 'Open in new window ...', + target : '_blank' + + }); + img.inject(link); + link.inject(imgContainer); + imgContainer.inject(result); + + return result; + } +}); \ No newline at end of file diff --git a/mindplot/src/main/javascript/widget/NoteEditor.js b/mindplot/src/main/javascript/widget/NoteEditor.js index 7c6c87b1..debaed5f 100644 --- a/mindplot/src/main/javascript/widget/NoteEditor.js +++ b/mindplot/src/main/javascript/widget/NoteEditor.js @@ -65,24 +65,33 @@ mindplot.widget.NoteEditor = new Class({ var form = new Element('form', {'action': 'none', 'id':'noteFormId'}); // Add textarea ... - var textArea = new Element('textarea', {placeholder: 'Write your note here ...'}); + var textArea = new Element('textarea', {placeholder: 'Write your note here ...',required:true}); if (model.getValue() != null) textArea.value = model.getValue(); - textArea.setStyles({'width':'100%', 'height':80,resize: 'none' + textArea.setStyles({ + 'width':'100%', + 'height':80 + ,resize: 'none' }); textArea.inject(form); + // Register submit event ... + form.addEvent('submit', function(event) { + event.preventDefault(); + event.stopPropagation(); + + model.setValue(textArea.value); + this.close(); + + }.bind(this)); + // Add buttons ... var buttonContainer = new Element('div').setStyles({paddingTop:5, textAlign:'center'}); // Create accept button ... - var okButton = new Element('input', {type:'button', value:'Accept','class':'btn-primary'}); + var okButton = new Element('input', {type:'submit', value:'Accept','class':'btn-primary'}); okButton.addClass('button'); - okButton.addEvent('click', function() { - model.setValue(textArea.value); - this.close(); - }.bind(this)); okButton.inject(buttonContainer); // Create remove button ... @@ -100,7 +109,7 @@ mindplot.widget.NoteEditor = new Class({ // Create cancel button ... - var cButton = new Element('input', {type:'button', value:'Cancel','class':'btn-primary'}); + var cButton = new Element('input', {type:'button', value:'Cancel','class':'btn-secondary'}); cButton.setStyle('margin', '5px'); cButton.addClass('button'); cButton.inject(buttonContainer); diff --git a/web2d/src/main/javascript/Group.js b/web2d/src/main/javascript/Group.js index 95d320cc..cb7e210d 100644 --- a/web2d/src/main/javascript/Group.js +++ b/web2d/src/main/javascript/Group.js @@ -39,7 +39,7 @@ web2d.Group = new Class({ } if (element == this) { - throw "It's not posible to add the group as a child of itself"; + throw "It's not possible to add the group as a child of itself"; } var elementType = element.getType(); diff --git a/wise-doc/src/main/webapp/css/common.css b/wise-doc/src/main/webapp/css/common.css index 14b98fad..3e6f24d9 100644 --- a/wise-doc/src/main/webapp/css/common.css +++ b/wise-doc/src/main/webapp/css/common.css @@ -130,7 +130,7 @@ h1 { } h3 { -/* use as subhead on main body */ + /* use as subhead on main body */ clear: left; font-style: normal; font-size: 130%; @@ -138,7 +138,7 @@ h3 { } h4 { -/* use as headers in footer */ + /* use as headers in footer */ font-weight: bold; font-size: 120%; border-bottom: 1px solid #8e9181; @@ -249,7 +249,7 @@ span#headerSubTitle { } div#headerButtons a:hover { -/*text-decoration: underline;*/ + /*text-decoration: underline;*/ color: #7e72ad; } @@ -346,57 +346,84 @@ div#printLogo { } .btn-primary { - cursor: pointer; - display: inline-block; - background-color: #e6e6e6; - background-repeat: no-repeat; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); - padding: 5px 14px 6px; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - color: #333; - font-size: 13px; - line-height: normal; - border: 1px solid #ccc; - border-bottom-color: #bbb; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -webkit-transition: 0.1s linear all; - -moz-transition: 0.1s linear all; - -ms-transition: 0.1s linear all; - -o-transition: 0.1s linear all; - transition: 0.1s linear all; - color: #ffffff; - background-color: #0064cd; - background-repeat: repeat-x; - background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); - background-image: -moz-linear-gradient(top, #049cdb, #0064cd); - background-image: -ms-linear-gradient(top, #049cdb, #0064cd); - background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); - background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); - background-image: -o-linear-gradient(top, #049cdb, #0064cd); - background-image: linear-gradient(top, #049cdb, #0064cd); - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#049cdb', endColorstr='#0064cd', GradientType=0); - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - border-color: #0064cd #0064cd #003f81; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); + cursor: pointer; + display: inline-block; + padding: 5px 14px 6px; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + color: #333; + font-size: 13px; + line-height: normal; + border: 1px solid #ccc; + border-bottom-color: #bbb; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-transition: 0.1s linear all; + -moz-transition: 0.1s linear all; + -ms-transition: 0.1s linear all; + -o-transition: 0.1s linear all; + transition: 0.1s linear all; + color: #ffffff; + background-color: #0064cd; + background-repeat: repeat-x; + background-image: -khtml-gradient(linear, left top, left bottom, from(#049cdb), to(#0064cd)); + background-image: -moz-linear-gradient(top, #049cdb, #0064cd); + background-image: -ms-linear-gradient(top, #049cdb, #0064cd); + background-image: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #049cdb), color-stop(100%, #0064cd)); + background-image: -webkit-linear-gradient(top, #049cdb, #0064cd); + background-image: -o-linear-gradient(top, #049cdb, #0064cd); + background-image: linear-gradient(top, #049cdb, #0064cd); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#049cdb', endColorstr = '#0064cd', GradientType = 0); + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); + border-color: #0064cd #0064cd #003f81; + border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); } .btn-primary:hover { - background-position: 0 -15px; - /*color: #333;*/ - text-decoration: none; + background-position: 0 -15px; + text-decoration: none; } +.btn-secondary { + cursor: pointer; + display: inline-block; + background-color: #e6e6e6; + background-repeat: no-repeat; + background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); + background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); + background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); + filter: progid:DXImageTransform.Microsoft.gradient(startColorstr = '#ffffff', endColorstr = '#e6e6e6', GradientType = 0); + padding: 5px 14px 6px; + text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); + color: #333; + font-size: 13px; + line-height: normal; + border: 1px solid #ccc; + border-bottom-color: #bbb; + -webkit-border-radius: 4px; + -moz-border-radius: 4px; + border-radius: 4px; + -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); + -webkit-transition: 0.1s linear all; + -moz-transition: 0.1s linear all; + -ms-transition: 0.1s linear all; + -o-transition: 0.1s linear all; + transition: 0.1s linear all; + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); +} + +.btn-secondary:hover { + background-position: 0 -15px; + text-decoration: none; +} div#paypal { float: left; @@ -610,30 +637,28 @@ span.fieldRequired { padding: 5px; } - div.installCFG { - width:100%; - font-size:130%; + width: 100%; + font-size: 130%; } -div.installCFG h1{ - width:100%; - font-size:130%; +div.installCFG h1 { + width: 100%; + font-size: 130%; } -div.installCFG h2{ - font-size:100%; - border-bottom:0 solid black; +div.installCFG h2 { + font-size: 100%; + border-bottom: 0 solid black; } .chromeFrameInstallDefaultStyle { - position:relative; - left:0; - top:0; - margin:0; + position: relative; + left: 0; + top: 0; + margin: 0; } - .floating-tip { background-color: #dfcf3c; padding: 5px 15px; @@ -645,4 +670,5 @@ div.installCFG h2{ -webkit-border-radius: 3px; border-radius: 3px; box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.2); -} \ No newline at end of file +} + diff --git a/wise-doc/src/main/webapp/images/world_link.png b/wise-doc/src/main/webapp/images/world_link.png new file mode 100644 index 00000000..b8edc126 Binary files /dev/null and b/wise-doc/src/main/webapp/images/world_link.png differ