527 lines
19 KiB
JavaScript
Raw Normal View History

2011-08-07 18:59:20 -03:00
/*
2012-10-04 20:48:01 -03:00
* Copyright [2012] [wisemapping]
2011-08-07 18:59:20 -03:00
*
* 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.Menu = new Class({
2014-03-04 22:59:39 -03:00
Extends: mindplot.widget.IMenu,
2011-11-30 18:06:45 -03:00
2014-03-04 22:59:39 -03:00
initialize: function (designer, containerId, mapId, readOnly, baseUrl) {
2011-11-30 18:06:45 -03:00
this.parent(designer, containerId, mapId);
2011-08-08 20:48:59 -03:00
baseUrl = !$defined(baseUrl) ? "" : baseUrl;
var widgetsBaseUrl = baseUrl + "css/widget";
2011-08-08 20:48:59 -03:00
// Stop event propagation ...
2014-03-04 23:09:39 -03:00
$('#'+this._containerId).bind('click', function (event) {
2011-08-08 20:48:59 -03:00
event.stopPropagation();
2011-08-09 01:45:24 -03:00
return false;
2011-08-08 20:48:59 -03:00
});
2014-03-04 22:59:39 -03:00
$("#" + this._containerId).bind('dblclick', function (event) {
2011-08-08 20:48:59 -03:00
event.stopPropagation();
2011-08-09 01:45:24 -03:00
return false;
2011-08-08 20:48:59 -03:00
});
2011-08-07 18:59:20 -03:00
2011-08-08 20:48:59 -03:00
// Create panels ...
var designerModel = designer.getModel();
2014-03-04 22:59:39 -03:00
var fontFamilyBtn = $('#fontFamily');
if (fontFamilyBtn) {
var fontFamilyModel = {
2014-03-04 22:59:39 -03:00
getValue: function () {
var nodes = designerModel.filterSelectedTopics();
var result = null;
for (var i = 0; i < nodes.length; i++) {
var fontFamily = nodes[i].getFontFamily();
if (result != null && result != fontFamily) {
result = null;
break;
}
result = fontFamily;
2011-08-09 09:03:46 -03:00
}
return result;
},
2014-03-04 22:59:39 -03:00
setValue: function (value) {
designer.changeFontFamily(value);
2011-08-07 18:59:20 -03:00
}
};
this._toolbarElems.push(new mindplot.widget.FontFamilyPanel("fontFamily", fontFamilyModel));
2012-07-01 17:21:02 -03:00
this._registerTooltip('fontFamily', $msg('FONT_FAMILY'));
}
2014-03-04 22:59:39 -03:00
var fontSizeBtn = $('#fontSize');
if (fontSizeBtn) {
var fontSizeModel = {
2014-03-04 22:59:39 -03:00
getValue: function () {
var nodes = designerModel.filterSelectedTopics();
var result = null;
for (var i = 0; i < nodes.length; i++) {
var fontSize = nodes[i].getFontSize();
if (result != null && result != fontSize) {
result = null;
break;
}
result = fontSize;
2011-08-09 09:03:46 -03:00
}
return result;
},
2014-03-04 22:59:39 -03:00
setValue: function (value) {
designer.changeFontSize(value);
2011-08-07 18:59:20 -03:00
}
};
this._toolbarElems.push(new mindplot.widget.FontSizePanel("fontSize", fontSizeModel));
2012-07-01 17:21:02 -03:00
this._registerTooltip('fontSize', $msg('FONT_SIZE'));
}
2014-03-04 22:59:39 -03:00
var topicShapeBtn = $('#topicShape');
if (topicShapeBtn) {
var topicShapeModel = {
2014-03-04 22:59:39 -03:00
getValue: function () {
var nodes = designerModel.filterSelectedTopics();
var result = null;
for (var i = 0; i < nodes.length; i++) {
var shapeType = nodes[i].getShapeType();
if (result != null && result != shapeType) {
result = null;
break;
}
result = shapeType;
2011-08-09 09:03:46 -03:00
}
return result;
},
2014-03-04 22:59:39 -03:00
setValue: function (value) {
designer.changeTopicShape(value);
2011-08-07 18:59:20 -03:00
}
};
this._toolbarElems.push(new mindplot.widget.TopicShapePanel("topicShape", topicShapeModel));
2012-07-01 17:21:02 -03:00
this._registerTooltip('topicShape', $msg('TOPIC_SHAPE'));
}
2014-03-04 22:59:39 -03:00
var topicIconBtn = $('#topicIcon');
if (topicIconBtn) {
// Create icon panel dialog ...
var topicIconModel = {
2014-03-04 22:59:39 -03:00
getValue: function () {
return null;
},
2014-03-04 22:59:39 -03:00
setValue: function (value) {
designer.addIconType(value);
}
};
this._toolbarElems.push(new mindplot.widget.IconPanel('topicIcon', topicIconModel));
2012-07-01 17:21:02 -03:00
this._registerTooltip('topicIcon', $msg('TOPIC_ICON'));
}
2011-08-07 18:59:20 -03:00
2011-08-08 20:48:59 -03:00
// Topic color item ...
2014-03-04 22:59:39 -03:00
var topicColorBtn = $('#topicColor');
if (topicColorBtn) {
var topicColorModel = {
2014-03-04 22:59:39 -03:00
getValue: function () {
var nodes = designerModel.filterSelectedTopics();
var result = null;
for (var i = 0; i < nodes.length; i++) {
var color = nodes[i].getBackgroundColor();
if (result != null && result != color) {
result = null;
break;
}
result = color;
2011-08-09 09:03:46 -03:00
}
return result;
},
2014-03-04 22:59:39 -03:00
setValue: function (hex) {
designer.changeBackgroundColor(hex);
2011-08-09 01:45:24 -03:00
}
};
this._toolbarElems.push(new mindplot.widget.ColorPalettePanel('topicColor', topicColorModel, widgetsBaseUrl));
2012-07-01 17:21:02 -03:00
this._registerTooltip('topicColor', $msg('TOPIC_COLOR'));
}
2011-08-08 20:48:59 -03:00
// Border color item ...
2014-03-04 22:59:39 -03:00
var topicBorderBtn = $('#topicBorder');
if (topicBorderBtn) {
var borderColorModel =
{
2014-03-04 22:59:39 -03:00
getValue: function () {
var nodes = designerModel.filterSelectedTopics();
var result = null;
for (var i = 0; i < nodes.length; i++) {
var color = nodes[i].getBorderColor();
if (result != null && result != color) {
result = null;
break;
}
result = color;
2011-08-09 09:03:46 -03:00
}
return result;
},
2014-03-04 22:59:39 -03:00
setValue: function (hex) {
designer.changeBorderColor(hex);
2011-08-09 01:45:24 -03:00
}
};
this._toolbarElems.push(new mindplot.widget.ColorPalettePanel('topicBorder', borderColorModel, widgetsBaseUrl));
2012-07-01 17:21:02 -03:00
this._registerTooltip('topicBorder', $msg('TOPIC_BORDER_COLOR'));
}
2011-08-07 18:59:20 -03:00
2011-08-08 20:48:59 -03:00
// Font color item ...
2014-03-04 22:59:39 -03:00
var fontColorBtn = $('#fontColor');
if (fontColorBtn) {
var fontColorModel =
{
2014-03-04 22:59:39 -03:00
getValue: function () {
var result = null;
var nodes = designerModel.filterSelectedTopics();
for (var i = 0; i < nodes.length; i++) {
var color = nodes[i].getFontColor();
if (result != null && result != color) {
result = null;
break;
}
result = color;
2011-08-09 09:03:46 -03:00
}
return result;
},
2014-03-04 22:59:39 -03:00
setValue: function (hex) {
designer.changeFontColor(hex);
2011-08-09 01:45:24 -03:00
}
};
this._toolbarElems.push(new mindplot.widget.ColorPalettePanel('fontColor', fontColorModel, baseUrl));
2012-07-01 17:21:02 -03:00
this._registerTooltip('fontColor', $msg('FONT_COLOR'));
}
2011-08-08 20:48:59 -03:00
2012-07-01 17:21:02 -03:00
this._addButton('export', false, false, function () {
2012-07-01 22:34:01 -03:00
var reqDialog = new MooDialog.Request('c/iframeWrapper.htm?url=c/maps/' + mapId + "/exportf", null,
2014-03-04 22:59:39 -03:00
{'class': 'modalDialog exportModalDialog',
closeButton: true,
destroyOnClose: true,
title: $msg('EXPORT')
2011-10-15 13:23:27 -03:00
});
reqDialog.setRequestOptions({
2014-03-04 22:59:39 -03:00
onRequest: function () {
2012-07-01 17:21:02 -03:00
reqDialog.setContent($msg('LOADING'));
2011-10-15 13:23:27 -03:00
}
});
2011-10-16 21:42:02 -03:00
MooDialog.Request.active = reqDialog;
2011-10-15 13:23:27 -03:00
});
2012-07-01 17:21:02 -03:00
this._registerTooltip('export', $msg('EXPORT'));
2012-03-19 23:29:52 -03:00
2012-07-01 17:21:02 -03:00
this._addButton('print', false, false, function () {
this.save(saveElem, designer, false);
var baseUrl = window.location.href.substring(0, window.location.href.lastIndexOf("c/maps/"));
window.open(baseUrl + 'c/maps/' + mapId + '/print');
}.bind(this));
2012-07-01 17:21:02 -03:00
this._registerTooltip('print', $msg('PRINT'));
2011-10-15 13:23:27 -03:00
2012-07-01 17:21:02 -03:00
this._addButton('zoomIn', false, false, function () {
2011-10-10 18:30:02 -03:00
designer.zoomIn();
2011-10-04 01:16:29 -03:00
});
2012-07-01 17:21:02 -03:00
this._registerTooltip('zoomIn', $msg('ZOOM_IN'));
2011-08-08 09:20:32 -03:00
2012-07-01 17:21:02 -03:00
this._addButton('zoomOut', false, false, function () {
2011-10-10 18:30:02 -03:00
designer.zoomOut();
2011-10-04 01:16:29 -03:00
});
2012-07-01 17:21:02 -03:00
this._registerTooltip('zoomOut', $msg('ZOOM_OUT'));
2012-03-19 23:29:52 -03:00
2011-08-08 09:20:32 -03:00
var undoButton = this._addButton('undoEdition', false, false, function () {
2011-10-10 18:30:02 -03:00
designer.undo();
2011-10-04 01:16:29 -03:00
});
2012-08-15 21:45:24 -03:00
if (undoButton) {
undoButton.disable();
}
2012-07-01 17:21:02 -03:00
this._registerTooltip('undoEdition', $msg('UNDO'), "meta+Z");
2012-03-19 23:29:52 -03:00
2011-08-08 09:20:32 -03:00
var redoButton = this._addButton('redoEdition', false, false, function () {
2011-08-08 09:20:32 -03:00
designer.redo();
2011-10-04 01:16:29 -03:00
});
2012-08-15 21:45:24 -03:00
if (redoButton) {
redoButton.disable();
}
this._registerTooltip('redoEdition', $msg('REDO'), "meta+shift+Z");
2012-03-19 23:29:52 -03:00
if (redoButton && undoButton) {
designer.addEvent('modelUpdate', function (event) {
if (event.undoSteps > 0) {
undoButton.enable();
} else {
undoButton.disable();
}
if (event.redoSteps > 0) {
redoButton.enable();
} else {
redoButton.disable();
}
}.bind(this));
}
2011-08-08 09:20:32 -03:00
this._addButton('addTopic', true, false, function () {
2012-11-19 23:31:10 -03:00
designer.createSiblingForSelectedNode();
2011-10-04 01:16:29 -03:00
});
2012-07-16 00:28:33 -03:00
this._registerTooltip('addTopic', $msg('ADD_TOPIC'), "Enter");
2012-03-19 23:29:52 -03:00
2011-08-08 09:20:32 -03:00
2012-07-01 17:21:02 -03:00
this._addButton('deleteTopic', true, true, function () {
designer.deleteSelectedEntities();
2011-10-04 01:16:29 -03:00
});
2012-07-02 00:37:48 -03:00
this._registerTooltip('deleteTopic', $msg('TOPIC_DELETE'), "Delete");
2012-03-19 23:29:52 -03:00
2011-08-08 09:20:32 -03:00
2012-07-01 17:21:02 -03:00
this._addButton('topicLink', true, false, function () {
2011-08-21 12:42:00 -03:00
designer.addLink();
2011-10-04 01:16:29 -03:00
});
2012-07-01 17:21:02 -03:00
this._registerTooltip('topicLink', $msg('TOPIC_LINK'));
2012-03-19 23:29:52 -03:00
2011-08-08 09:20:32 -03:00
2012-07-01 17:21:02 -03:00
this._addButton('topicRelation', true, false, function (event) {
2011-10-09 17:59:16 -03:00
designer.showRelPivot(event);
2011-08-08 09:20:32 -03:00
});
2012-07-01 17:21:02 -03:00
this._registerTooltip('topicRelation', $msg('TOPIC_RELATIONSHIP'));
2012-03-19 23:29:52 -03:00
2011-08-08 09:20:32 -03:00
2012-07-01 17:21:02 -03:00
this._addButton('topicNote', true, false, function () {
2011-08-21 12:42:00 -03:00
designer.addNote();
2011-10-04 01:16:29 -03:00
});
2012-07-01 17:21:02 -03:00
this._registerTooltip('topicNote', $msg('TOPIC_NOTE'));
2012-03-19 23:29:52 -03:00
2011-08-08 09:20:32 -03:00
2012-07-01 17:21:02 -03:00
this._addButton('fontBold', true, false, function () {
2011-08-20 11:08:18 -03:00
designer.changeFontWeight();
2011-08-08 09:20:32 -03:00
});
2012-07-01 17:21:02 -03:00
this._registerTooltip('fontBold', $msg('FONT_BOLD'), "meta+B");
2012-03-19 23:29:52 -03:00
2011-08-08 09:20:32 -03:00
2012-07-01 17:21:02 -03:00
this._addButton('fontItalic', true, false, function () {
2011-08-20 11:08:18 -03:00
designer.changeFontStyle();
2011-08-08 09:20:32 -03:00
});
2012-07-01 17:21:02 -03:00
this._registerTooltip('fontItalic', $msg('FONT_ITALIC'), "meta+I");
2012-03-19 23:29:52 -03:00
2011-08-08 09:20:32 -03:00
2014-03-04 22:59:39 -03:00
var saveElem = $('#save');
2011-10-02 14:47:54 -03:00
if (saveElem) {
2012-07-01 17:21:02 -03:00
this._addButton('save', false, false, function () {
this.save(saveElem, designer, true);
2011-11-29 00:51:38 -03:00
}.bind(this));
2012-07-01 17:21:02 -03:00
this._registerTooltip('save', $msg('SAVE'), "meta+S");
2012-03-19 23:29:52 -03:00
if (!readOnly) {
// To prevent the user from leaving the page with changes ...
2012-11-11 17:23:15 -03:00
Element.NativeEvents.unload = 1;
2014-03-04 22:59:39 -03:00
$(window).bind('unload', function () {
if (this.isSaveRequired()) {
2012-09-30 17:15:01 -03:00
this.save(saveElem, designer, false, true);
}
2012-09-30 17:15:01 -03:00
this.unlockMap(designer);
}.bind(this));
// Autosave on a fixed period of time ...
2012-07-01 17:21:02 -03:00
(function () {
if (this.isSaveRequired()) {
this.save(saveElem, designer, false);
}
}.bind(this)).periodical(30000);
}
2011-10-02 14:47:54 -03:00
}
2014-03-04 22:59:39 -03:00
var discardElem = $('#discard');
if (discardElem) {
2012-07-01 17:21:02 -03:00
this._addButton('discard', false, false, function () {
2012-09-30 17:15:01 -03:00
this.discardChanges(designer);
2012-03-07 20:52:09 -03:00
}.bind(this));
2012-07-01 17:21:02 -03:00
this._registerTooltip('discard', $msg('DISCARD_CHANGES'));
2011-10-02 14:47:54 -03:00
}
2014-03-04 22:59:39 -03:00
var shareElem = $('#shareIt');
2011-10-15 02:52:44 -03:00
if (shareElem) {
2012-07-01 17:21:02 -03:00
this._addButton('shareIt', false, false, function () {
2012-07-01 22:34:01 -03:00
var reqDialog = new MooDialog.Request('c/iframeWrapper?url=c/maps/' + mapId + "/sharef", null,
2014-03-04 22:59:39 -03:00
{'class': 'modalDialog shareModalDialog',
closeButton: true,
destroyOnClose: true,
title: $msg('COLLABORATE')
2011-10-15 13:23:27 -03:00
});
reqDialog.setRequestOptions({
2014-03-04 22:59:39 -03:00
onRequest: function () {
2012-07-01 17:21:02 -03:00
reqDialog.setContent($msg('LOADING'));
2011-10-15 13:23:27 -03:00
}
});
2012-06-09 15:49:19 -03:00
MooDialog.Request.active = reqDialog;
2011-10-02 14:47:54 -03:00
});
2012-07-01 17:21:02 -03:00
this._registerTooltip('shareIt', $msg('COLLABORATE'));
2012-04-05 00:58:38 -03:00
2011-10-15 02:52:44 -03:00
}
2011-10-02 14:47:54 -03:00
2014-03-04 22:59:39 -03:00
var publishElem = $('#publishIt');
2011-10-15 02:52:44 -03:00
if (publishElem) {
2012-07-01 17:21:02 -03:00
this._addButton('publishIt', false, false, function () {
2012-07-01 22:34:01 -03:00
var reqDialog = new MooDialog.Request('c/iframeWrapper?url=c/maps/' + mapId + "/publishf", null,
2014-03-04 22:59:39 -03:00
{'class': 'modalDialog publishModalDialog',
closeButton: true,
destroyOnClose: true,
title: $msg('PUBLISH')
2011-10-16 21:42:02 -03:00
});
reqDialog.setRequestOptions({
2014-03-04 22:59:39 -03:00
onRequest: function () {
2012-07-01 17:21:02 -03:00
reqDialog.setContent($msg('LOADING'));
2011-10-16 21:42:02 -03:00
}
});
2012-05-27 18:15:46 -03:00
MooDialog.Request.active = reqDialog;
2011-10-02 14:47:54 -03:00
2011-10-16 21:42:02 -03:00
});
2012-07-01 17:21:02 -03:00
this._registerTooltip('publishIt', $msg('PUBLISH'));
2011-10-15 02:52:44 -03:00
}
2011-10-16 21:42:02 -03:00
2014-03-04 22:59:39 -03:00
var historyElem = $('#history');
2011-10-15 02:52:44 -03:00
if (historyElem) {
2011-10-02 14:47:54 -03:00
2012-07-01 17:21:02 -03:00
this._addButton('history', false, false, function () {
2012-07-01 22:34:01 -03:00
var reqDialog = new MooDialog.Request('c/iframeWrapper?url=c/maps/' + mapId + "/historyf", null,
2014-03-04 22:59:39 -03:00
{'class': 'modalDialog historyModalDialog',
closeButton: true,
destroyOnClose: true,
title: $msg('HISTORY')
2011-10-15 13:23:27 -03:00
});
reqDialog.setRequestOptions({
2014-03-04 22:59:39 -03:00
onRequest: function () {
2012-07-01 17:21:02 -03:00
reqDialog.setContent($msg('LOADING'));
2011-10-15 13:23:27 -03:00
}
});
2011-10-02 14:47:54 -03:00
});
2012-07-01 17:21:02 -03:00
this._registerTooltip('history', $msg('HISTORY'));
2011-10-02 14:47:54 -03:00
}
2011-10-04 01:16:29 -03:00
this._registerEvents(designer);
2012-07-02 00:06:26 -03:00
// Keyboard Shortcuts Action ...
2014-03-04 22:59:39 -03:00
var keyboardShortcut = $('#keyboardShortcuts');
2012-07-02 00:06:26 -03:00
if (keyboardShortcut) {
2014-03-04 23:09:39 -03:00
keyboardShortcut.bind('click', function (event) {
2012-07-02 00:06:26 -03:00
var reqDialog = new MooDialog.Request('c/keyboard', null,
2014-03-04 22:59:39 -03:00
{'class': 'modalDialog keyboardModalDialog',
closeButton: true,
destroyOnClose: true,
title: $msg('SHORTCUTS')
2012-07-02 00:06:26 -03:00
});
reqDialog.setRequestOptions({
2014-03-04 22:59:39 -03:00
onRequest: function () {
2012-07-02 00:06:26 -03:00
reqDialog.setContent($msg('LOADING'));
}
});
MooDialog.Request.active = reqDialog;
event.preventDefault();
});
}
2012-11-30 21:52:01 -03:00
2014-03-04 22:48:31 -03:00
var videoElem = $('#tutorialVideo');
2012-11-30 21:52:01 -03:00
if (videoElem) {
var width = 900;
var height = 500;
var left = (screen.width / 2) - (width / 2);
var top = (screen.height / 2) - (height / 2);
2014-03-04 23:09:39 -03:00
videoElem.bind('click', function (event) {
2012-11-30 21:52:01 -03:00
window.open("https://www.youtube.com/tv?vq=medium#/watch?v=rKxZwNKs9cE", "_blank", 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=yes, copyhistory=no, width=' + width + ', height=' + height + ', top=' + top + ', left=' + left);
event.preventDefault();
});
}
2011-10-04 01:16:29 -03:00
},
2014-03-04 22:59:39 -03:00
_registerEvents: function (designer) {
// Register on close events ...
this._toolbarElems.each(function (elem) {
2012-07-01 17:21:02 -03:00
elem.addEvent('show', function () {
this.clear()
}.bind(this));
}.bind(this));
2012-07-01 17:21:02 -03:00
designer.addEvent('onblur', function () {
var topics = designer.getModel().filterSelectedTopics();
var rels = designer.getModel().filterSelectedRelationships();
this._toolbarElems.each(function (button) {
var isTopicAction = button.isTopicAction();
var isRelAction = button.isRelAction();
if (isTopicAction || isRelAction) {
if ((isTopicAction && topics.length != 0) || (isRelAction && rels.length != 0)) {
button.enable();
} else {
button.disable();
}
}
})
}.bind(this));
2012-07-01 17:21:02 -03:00
designer.addEvent('onfocus', function () {
var topics = designer.getModel().filterSelectedTopics();
var rels = designer.getModel().filterSelectedRelationships();
this._toolbarElems.each(function (button) {
var isTopicAction = button.isTopicAction();
var isRelAction = button.isRelAction();
if (isTopicAction || isRelAction) {
if (isTopicAction && topics.length > 0) {
button.enable();
}
if (isRelAction && rels.length > 0) {
button.enable();
}
}
})
}.bind(this));
},
2014-03-04 22:59:39 -03:00
_addButton: function (buttonId, topic, rel, fn) {
2011-10-04 01:16:29 -03:00
// Register Events ...
var result = null;
2014-03-04 22:59:39 -03:00
if ($('#'+buttonId)) {
2012-02-01 20:31:40 -03:00
2012-07-01 17:21:02 -03:00
var button = new mindplot.widget.ToolbarItem(buttonId, function (event) {
2012-02-01 20:31:40 -03:00
fn(event);
this.clear();
2014-03-04 22:59:39 -03:00
}.bind(this), {topicAction: topic, relAction: rel});
2012-03-19 23:29:52 -03:00
2012-02-01 20:31:40 -03:00
this._toolbarElems.push(button);
result = button;
2012-02-01 20:31:40 -03:00
}
return result;
2012-03-19 23:29:52 -03:00
},
2014-03-04 22:59:39 -03:00
_registerTooltip: function (buttonId, text, shortcut) {
if ($('#'+buttonId)) {
2012-03-19 23:29:52 -03:00
var tooltip = text;
if (shortcut) {
2012-06-24 20:53:31 -03:00
shortcut = Browser.Platform.mac ? shortcut.replace("meta+", "⌘") : shortcut.replace("meta+", "ctrl+");
2012-03-19 23:29:52 -03:00
tooltip = tooltip + " (" + shortcut + ")";
}
2014-03-04 22:59:39 -03:00
new mindplot.widget.KeyboardShortcutTooltip($('#'+buttonId), tooltip);
2012-03-19 23:29:52 -03:00
}
2011-08-07 18:59:20 -03:00
}
2011-10-05 02:38:43 -03:00
});