174 Commits

Author SHA1 Message Date
Paulo Gustavo Veiga
c1318e496c Capture meta+- keys. 2012-11-12 22:27:42 -03:00
Paulo Gustavo Veiga
8de31d9edc Avoid overlapping saves ... 2012-11-12 21:45:08 -03:00
Paulo Gustavo Veiga
90b584569b Fix children shrunken issue. 2012-11-11 21:06:20 -03:00
Paulo Gustavo Veiga
df98282620 Improve error reporting. 2012-11-11 20:23:21 -03:00
Paulo Gustavo Veiga
751692837c Improve error handling ... 2012-11-11 20:07:56 -03:00
Paulo Gustavo Veiga
3f2f23d3c1 Change event registration for unload. 2012-11-11 17:23:15 -03:00
Paulo Gustavo Veiga
4ac8a41a46 Fix logger url. 2012-11-11 02:18:25 -03:00
Paulo Gustavo Veiga
cba00adc41 Fix embedded url 2012-11-10 20:34:04 -03:00
Paulo Gustavo Veiga
0f66d6fb6d Push not read only. 2012-11-10 20:22:26 -03:00
Paulo Gustavo Veiga
b36df012f8 Merge branch 'db-purge' of repo.wisemapping.org:wisemapping/wiseorg into db-purge 2012-11-10 20:03:08 -03:00
Paulo Gustavo Veiga
e302171ac9 Merge branch 'master' into db-purge 2012-11-10 20:02:44 -03:00
Paulo Gustavo Veiga
abdb56c35d Merge branch 'master' into db-purge 2012-11-10 19:53:10 -03:00
Paulo Gustavo Veiga
a228ea6ed5 Split rest authentication into two. For web apps integration url is /c/restful/ 2012-11-10 19:53:04 -03:00
Paulo Gustavo Veiga
6c2d277f02 This is to avoid enter on edition mode in the node when alt+tab is pressed. 2012-11-07 21:07:28 -03:00
Paulo Gustavo Veiga
10f8b5748e Fix site.location resolution. Evironment seems not be be resolved . 2012-11-07 20:47:15 -03:00
Paulo Gustavo Veiga
6a9d1c684e Add dialog message support. 2012-11-07 20:14:07 -03:00
Paulo Gustavo Veiga
2f8cd121e3 add $notifyModal function. 2012-11-05 21:55:19 -03:00
Paulo Gustavo Veiga
fe8516bb94 Merge branch 'master' into db-purge
Conflicts:
	wise-webapp/src/main/webapp/WEB-INF/classes/log4j.properties
2012-11-05 20:40:54 -03:00
Paulo Gustavo Veiga
29e397ab3f Fix call to undefined value 2012-11-05 00:58:00 -03:00
Paulo Gustavo Veiga
c1d041e3f8 Remove logger info. 2012-11-05 00:55:51 -03:00
Paulo Gustavo Veiga
98729c2582 Configure loggers for proper login. 2012-11-05 00:51:06 -03:00
Paulo Gustavo Veiga
53768b5400 Workaround for change text event. 2012-11-05 00:11:14 -03:00
Paulo Gustavo Veiga
7feb29b151 Add additional log information 2012-11-04 23:33:30 -03:00
Paulo Gustavo Veiga
031bbe50e1 Add addional debug info. 2012-11-04 23:20:21 -03:00
Paulo Gustavo Veiga
17ea409542 Add start.sh script to the distribution. 2012-11-04 18:25:49 -03:00
Paulo Gustavo Veiga
37b4298579 Fix Apache Proxy configuration property. 2012-11-04 18:17:32 -03:00
Paulo Gustavo Veiga
5cb2289cbc Disable images support. 2012-11-04 15:56:26 -03:00
Paulo Gustavo Veiga
c86bd15382 Fix unit tests. 2012-11-04 01:51:23 -03:00
Paulo Gustavo Veiga
aed1c0afcb Fix wrong merge. 2012-11-04 01:40:40 -03:00
Paulo Gustavo Veiga
a74efa4647 Merge branch 'master' into db-purge
Conflicts:
	mindplot/src/main/javascript/MainTopic.js
	wise-webapp/src/main/java/com/wisemapping/exporter/FreemindExporter.java
	wise-webapp/src/main/java/com/wisemapping/rest/BaseController.java
2012-11-04 01:38:52 -03:00
Paulo Gustavo Veiga
cf0f0a8c00 Do not print exception message. 2012-11-04 01:15:46 -03:00
Paulo Gustavo Veiga
52ce817e3a Fix integration tests execution. 2012-11-04 01:06:02 -03:00
Paulo Gustavo Veiga
45a190bbac Merge branch 'images'
Conflicts:
	mindplot/src/main/javascript/StandaloneActionDispatcher.js
2012-11-02 02:08:28 -03:00
Paulo Gustavo Veiga
d7c74e289e Try to detect delete node error on close. 2012-11-02 02:04:22 -03:00
Paulo Gustavo Veiga
27a82d9e41 Fix NPE with empty node text. 2012-11-02 00:47:55 -03:00
Paulo Gustavo Veiga
806bb96ce1 Fix error when the connections in the pool has been closed. 2012-11-02 00:38:13 -03:00
Paulo Gustavo Veiga
9067a6cff2 Fix error when the connections in the pool has been closed. 2012-11-01 23:29:18 -03:00
Paulo Gustavo Veiga
ef88ee06de Merge branch 'db-purge' of repo.wisemapping.org:wisemapping/wiseorg into db-purge
Conflicts:
	wise-webapp/src/test/resources/data/freemind/richtextnode.mmr
2012-11-01 21:43:27 -03:00
Paulo Gustavo Veiga
b4005c8159 Add new doc. 2012-11-01 21:36:41 -03:00
Paulo Gustavo Veiga
2d58e9a0f5 Temporal commit. 2012-11-01 21:35:01 -03:00
Paulo Gustavo Veiga
af8d833356 Update copyright year. 2012-11-01 21:35:01 -03:00
Paulo Gustavo Veiga
6303ba93c7 Edition lock is working. Working on user interation. 2012-11-01 21:35:00 -03:00
Paulo Gustavo Veiga
04d43e62c7 - Change MYSQL blob to mediumblob. 2012-11-01 21:35:00 -03:00
Paulo Gustavo Veiga
a179875fee - Finish exclusive locking support. 2012-11-01 21:35:00 -03:00
Paulo Gustavo Veiga
e5e2e86fce Fix parser error on export. 2012-11-01 00:14:21 -03:00
Paulo Gustavo Veiga
dafe8eeb03 Fix i18n during import. 2012-10-31 23:14:13 -03:00
Paulo Gustavo Veiga
a492521a10 Remove xml prolog from generation. 2012-10-07 15:04:48 -03:00
Paulo Gustavo Veiga
ddaa89acee - Fix export NPE. 2012-10-06 22:07:44 -03:00
Paulo Gustavo Veiga
a155477eff Fix import NPE. 2012-10-05 20:42:32 -03:00
Paulo Gustavo Veiga
24b4f4b190 Temporal commit. 2012-10-05 20:05:33 -03:00
Paulo Gustavo Veiga
cc57fae5cf Update copyright year. 2012-10-05 08:35:31 -03:00
Paulo Gustavo Veiga
d17b8397f7 Edition lock is working. Working on user interation. 2012-10-04 20:28:59 -03:00
Paulo Gustavo Veiga
ad9d00843f Add Opera 12 support to the list. 2012-10-03 00:27:19 -03:00
Paulo Gustavo Veiga
742fa9d03e - Add Opera 11 support. 2012-10-03 00:26:11 -03:00
Paulo Gustavo Veiga
7fa766c2d0 Add debug information. REMOVE COMMIT 2012-10-01 23:26:28 -03:00
Paulo Gustavo Veiga
3fdbcb31d3 - Change MYSQL blob to mediumblob. 2012-10-01 23:14:25 -03:00
Paulo Gustavo Veiga
3672d2a8e2 - Finish exclusive locking support. 2012-10-01 00:22:17 -03:00
Paulo Gustavo Veiga
4f1bb45fc2 Minor improvement to change freemind change if the background color was defined. 2012-09-29 17:38:51 -03:00
Paulo Gustavo Veiga
c37b632ac9 Fix FeeMind size conversion. Now it's mapped to the proper wise size. 2012-09-29 16:53:43 -03:00
Paulo Gustavo Veiga
c7f7b20260 Fix wrong exception mapping. 2012-09-29 15:42:41 -03:00
Paulo Gustavo Veiga
9985384a7f Improve freemind imported to support html text nodes. 2012-09-29 15:27:16 -03:00
Paulo Gustavo Veiga
295fbba387 - Add freemind import exception data on failure. 2012-09-29 12:39:20 -03:00
Paulo Gustavo Veiga
dfe07e2da0 - Features are not created inside topic. This helps on revert action. 2012-09-28 23:14:37 -03:00
Paulo Gustavo Veiga
dbf8b0e28c - Add restriction to the input name for the map
- Translate some pending resources.
2012-09-28 20:35:31 -03:00
Paulo Gustavo Veiga
1811749964 - Fix error when the node is being deleted and the text is being edited. 2012-09-28 00:49:45 -03:00
Paulo Gustavo Veiga
e72ae37ac7 - Remove fade event on node creation.
- Node are always hidden on creation.
2012-09-28 00:07:34 -03:00
Paulo Gustavo Veiga
6b76c53663 - Try to fix feature remove issues. 2012-09-27 23:44:52 -03:00
Paulo Gustavo Veiga
3bd2242080 - Try to fix feature remove issues. 2012-09-27 23:41:17 -03:00
Paulo Gustavo Veiga
e5ab234d01 - Fix feature issue on redo. 2012-09-27 23:28:24 -03:00
Paulo Gustavo Veiga
22d9f7a199 - Do not propagate some keyboard events. 2012-09-27 20:53:32 -03:00
Paulo Gustavo Veiga
1e5e11a309 - Fix wrong state issue when the topic is restored. 2012-09-27 20:18:12 -03:00
Paulo Gustavo Veiga
f6e5018272 - Remove visibility flag on createTopic. 2012-09-27 09:17:34 -03:00
Paulo Gustavo Veiga
4a0d70e3b3 - Minor fixes 2012-09-27 08:12:03 -03:00
Paulo Gustavo Veiga
3d1dc9bfc6 - Fix Cannot call method 'getTextShape' of null' 2012-09-26 20:00:38 -03:00
Paulo Gustavo Veiga
14e9bf0e06 - TypeError: $("#userSettingsBtn") is null, line:4 2012-09-26 19:42:24 -03:00
Paulo Gustavo Veiga
f8fb56e49f - Add tab as option to creating a child node. 2012-09-26 19:31:41 -03:00
Paulo Gustavo Veiga
65f4238c3e Disable scrolling with arrows in Firefox. 2012-09-26 19:24:31 -03:00
Paulo Gustavo Veiga
66fcc68677 Fix npe removing relationships. 2012-09-25 08:58:37 -03:00
Paulo Gustavo Veiga
63d4de6da1 - Add open button to the link editor. 2012-09-24 21:36:20 -03:00
Paulo Gustavo Veiga
8320ae0abf - Fix orphan relationships. 2012-09-24 20:40:01 -03:00
Paulo Gustavo Veiga
be4d7d1c91 Fix toolbar issue. Now alawys is on the top. 2012-09-24 19:39:42 -03:00
Paulo Gustavo Veiga
f6b1499322 - Ups. Complete footer rename. 2012-09-24 19:34:57 -03:00
Paulo Gustavo Veiga
25ac0bbadd - Add additional debug info. RootTree seems to be out of sync. 2012-09-24 16:43:31 -03:00
Paulo Gustavo Veiga
b847782079 - Add additional debug info. RootTree seems to be out of sync. 2012-09-24 15:55:45 -03:00
Paulo Gustavo Veiga
cfaa8f786d - Fix setting position on beta maps. 2012-09-24 15:20:43 -03:00
Paulo Gustavo Veiga
0dafb4b31b - Fix undo of multiple nodes. 2012-09-24 14:54:19 -03:00
Paulo Gustavo Veiga
acd149bfc9 - Add more info to detect errors. 2012-09-24 13:15:24 -03:00
Paulo Gustavo Veiga
155ec74dea - Add more info to detect errors. 2012-09-24 13:11:11 -03:00
Paulo Gustavo Veiga
56ac4aaed3 Add button refers to http://www.wisemapping.com 2012-09-23 11:40:45 -03:00
Paulo Gustavo Veiga
7db5bb3591 - Add more error details on parsing error. 2012-09-23 10:59:05 -03:00
Paulo Gustavo Veiga
9c632faf77 - Improve error login message. 2012-09-23 10:39:56 -03:00
Paulo Gustavo Veiga
85d41300bf - Do not log "Script Error." 2012-09-23 10:30:42 -03:00
Paulo Gustavo Veiga
a42c54678a Minor analytics refector. 2012-09-23 10:26:26 -03:00
Paulo Gustavo Veiga
88f5f1a5bd - Try to catch more exception details. 2012-09-22 21:34:43 -03:00
Paulo Gustavo Veiga
f5d3b51f6e Fix typo. 2012-09-22 21:12:20 -03:00
Paulo Gustavo Veiga
ff63b4f89c - Update IE parser to Msxml2.DOMDocument.6.0 2012-09-22 21:08:06 -03:00
Paulo Gustavo Veiga
d2f9749d61 - Refactor node properties to topics. 2012-09-21 09:34:33 -03:00
Paulo Gustavo Veiga
7bbcd82488 - Remove CENTRAL_NODE flag. 2012-09-20 19:00:31 -03:00
Paulo Gustavo Veiga
a0ee153ca0 - Remove getTopicType flag. 2012-09-20 09:23:48 -03:00
Paulo Gustavo Veiga
8a8922f2a6 - Minot fix on password recovery. 2012-09-19 23:33:52 -03:00
Paulo Gustavo Veiga
7c4f500361 - Fix error on IE9 on sharing ... 2012-09-19 23:12:47 -03:00
Paulo Gustavo Veiga
9cbb6eadc2 - I18 link and note dialog. 2012-09-19 21:28:31 -03:00
Paulo Gustavo Veiga
310a6b9e03 - I18 link and note dialog. 2012-09-19 20:21:20 -03:00
Paulo Gustavo Veiga
cd776073dc - Throw Error objects instead of Strings. 2012-09-19 20:01:22 -03:00
Paulo Gustavo Veiga
6555203a94 - Fix java.lang.NullPointerException
at com.wisemapping.util.Browser.isInUserAgentString(Browser.java:267)
      	at com.wisemapping.util.Browser.checkUserAgent(Browser.java:2 issue.
2012-09-19 19:24:30 -03:00
Paulo Gustavo Veiga
f8cb849597 Add more logs. 2012-09-19 09:02:21 -03:00
Paulo Gustavo Veiga
5e93c0a98c - Fix I18n resource
- Fix "$(this._divContainer).addEvent is not a function" error.
2012-09-19 08:52:05 -03:00
Paulo Gustavo Veiga
4ec8e75bdb i18n forgot password. 2012-09-18 21:17:57 -03:00
Paulo Gustavo Veiga
a19003077c Fix NPE when browser version can not be detected. 2012-09-18 21:02:44 -03:00
Paulo Gustavo Veiga
8a9c219b9d Minor fix. 2012-09-18 20:56:51 -03:00
Paulo Gustavo Veiga
662fc82919 Wheel enabled on read only maps
Fix NPE on mobile firefox on UserAgent
MindmapList display list fix on read only maps.
2012-09-18 20:46:04 -03:00
Paulo Gustavo Veiga
029bfa809a Fix NPE on Firefox mobile. 2012-09-18 10:47:14 -03:00
Paulo Gustavo Veiga
7246260220 - Fix the problem tha public links where not properly displayed. 2012-09-17 22:20:22 -03:00
Paulo Gustavo Veiga
000b6a693d - Fix save errors when the resturned value is a HTML and not a JSON object. 2012-09-17 21:28:27 -03:00
Paulo Gustavo Veiga
e1d4f0afc8 - Fix login button bug when the form produces an error. 2012-09-17 00:35:39 -03:00
Paulo Gustavo Veiga
849cb4a9ce - Fix wrong redirection path. 2012-09-17 00:25:06 -03:00
Paulo Gustavo Veiga
de64764306 - Fix wrong redirection path. 2012-09-16 23:53:57 -03:00
Paulo Gustavo Veiga
c44d88eb09 - Add some automatic tests to detect user agent. 2012-09-16 21:45:58 -03:00
Paulo Gustavo Veiga
66e214ca88 Another minor stupid fix. 2012-09-16 21:25:59 -03:00
Paulo Gustavo Veiga
bb26d73462 Add IE8 to the list. 2012-09-16 21:22:22 -03:00
Paulo Gustavo Veiga
6badd972b0 - Catch save exception is the object is not JSON 2012-09-16 21:08:35 -03:00
Paulo Gustavo Veiga
7b1574150a - Add Safari 6 to the supported matrix. 2012-09-16 20:47:13 -03:00
Paulo Gustavo Veiga
46f3ec96c5 - Add images support 2012-09-16 20:33:51 -03:00
Paulo Gustavo Veiga
69ed3d8126 Fix br time language issue. 2012-09-16 20:23:25 -03:00
Paulo Gustavo Veiga
1400130ebf Fix @NotNull import. 2012-09-16 20:05:12 -03:00
Paulo Gustavo Veiga
a0ea9a6980 - Add support for serialized sessions... 2012-09-16 20:02:08 -03:00
Paulo Gustavo Veiga
36a35b44d7 - Replace Browser user agent detection 2012-09-16 18:36:23 -03:00
Paulo Gustavo Veiga
f90dd4f22a - Footer lt staayout 2012-09-16 16:05:10 -03:00
Paulo Gustavo Veiga
f1c9c95ed5 - Fix layout 2012-09-15 12:59:56 -03:00
Paulo Gustavo Veiga
15e03c690f - Filter collaborators from export. 2012-09-15 11:35:53 -03:00
Paulo Gustavo Veiga
e0a67fe1d7 - Fix User.parameter Conflict on JSON 2012-09-14 22:43:47 -03:00
Paulo Gustavo Veiga
b4f036745f Minor fix. 2012-09-14 11:02:28 -03:00
Paulo Gustavo Veiga
5719e54091 Hack for wron encoding on UTF chars. 2012-09-14 10:55:59 -03:00
Paulo Gustavo Veiga
3895365d93 - Remove DOMParser wrapper. 2012-09-14 09:03:50 -03:00
Paulo Gustavo Veiga
7d073920df - Add more info for detecting Firefox 15 error on dom serialization 2012-09-13 09:26:43 -03:00
Paulo Gustavo Veiga
5c9a10b878 - Catch IO exceptions during JSON deserialization 2012-09-13 09:21:30 -03:00
Paulo Gustavo Veiga
bef8711138 Enter is supported in any part of the text node. Not only at the end. 2012-09-13 01:22:20 -03:00
Paulo Gustavo Veiga
011acba666 Minor fix. 2012-09-13 00:35:46 -03:00
Paulo Gustavo Veiga
a1199687d4 Fix problem opening public maps. 2012-09-13 00:17:49 -03:00
Paulo Gustavo Veiga
4c988d4ae2 - Footer is more positioned in the bottom 2012-09-12 23:29:57 -03:00
Paulo Gustavo Veiga
022e3d982a - Add stacktrace support for IE. 2012-09-12 20:18:19 -03:00
Paulo Gustavo Veiga
69912ecef4 Fix service.xml fie. 2012-09-11 21:24:23 -03:00
Paulo Gustavo Veiga
a263a05520 Minor permissions modification. 2012-09-11 21:09:37 -03:00
Paulo Gustavo Veiga
2e2e978c43 - Fix IE 9 issue that true value is serialized as number instead of boolean string. 2012-09-11 20:46:53 -03:00
Paulo Gustavo Veiga
1e53ba827f - Fix java.lang.NullPointerException,at java.util.regex.Matcher.getTextLength(Matcher.java:1140) exception. 2012-09-11 20:30:00 -03:00
Paulo Gustavo Veiga
d811c8f011 Handle validations exceptions. 2012-09-11 14:02:06 -03:00
Paulo Gustavo Veiga
0cbe108910 Add added to the top. 2012-09-11 02:01:52 -03:00
Paulo Gustavo Veiga
3fb746f79b - Change to start using bootstrap grid 2012-09-11 01:47:23 -03:00
Paulo Gustavo Veiga
6efc068a6c Fix editor.js url location. 2012-09-10 14:45:44 -03:00
Paulo Gustavo Veiga
db49d96b97 - Fix image URL on sharing. 2012-09-10 13:16:52 -03:00
Paulo Gustavo Veiga
3fda0c9dab Fix better default for email notifications. 2012-09-10 09:50:56 -03:00
Paulo Gustavo Veiga
e83fa28ae8 Relax and add support for Firefox 10 and Chrome 18. 2012-09-09 19:13:53 -03:00
Paulo Gustavo Veiga
84fcad2688 Fix compilation. 2012-09-09 19:04:34 -03:00
Paulo Gustavo Veiga
3f2b343a06 Detect Google Mediapartners browser. 2012-09-09 19:02:41 -03:00
Paulo Gustavo Veiga
e76a2372d0 Fix minor french translation typos. 2012-09-09 13:34:33 -03:00
Paulo Gustavo Veiga
861d265891 - Fix MooDialog.Request.active is null 2012-09-08 14:32:43 -03:00
Paulo Gustavo Veiga
0b0cb960f7 Enable annotations driven. 2012-09-08 12:49:49 -03:00
Paulo Gustavo Veiga
c15c1824b3 Fix stack overflow 2012-09-08 12:27:50 -03:00
Paulo Gustavo Veiga
8321363333 Add freemind converted. 2012-09-08 12:01:26 -03:00
Paulo Gustavo Veiga
c950e68a27 - Bug Cannot call method 'trim' of undefined, line:2255 fixed. 2012-09-07 20:15:42 -03:00
Paulo Gustavo Veiga
8d9fb53741 Minor fix. 2012-09-07 19:49:36 -03:00
Paulo Gustavo Veiga
4cce432bb8 Add debug information on broken input streams. 2012-09-07 19:40:08 -03:00
Paulo Gustavo Veiga
337a67a8f6 Fix ReCaptha NPE
Improve error handling when permission are removed.
2012-09-06 23:52:53 -03:00
Paulo Gustavo Veiga
743164ade4 - Fix Uncaught Cilcular connection, line:8 error 2012-09-04 23:41:34 -03:00
Paulo Gustavo Veiga
9a94326469 - Minor improvement on relationship. Show arrow. 2012-09-04 23:29:24 -03:00
Paulo Gustavo Veiga
a86a38d157 - Fix character encodding issue on mysql 2012-09-04 22:12:52 -03:00
Paulo Gustavo Veiga
9ab4c4975c - Fix undo issues over features. 2012-09-04 01:06:50 -03:00
Paulo Gustavo Veiga
1efa24f2aa - Fix Uncaught Icon can no be found., line:3940 2012-09-04 00:50:12 -03:00
Paulo Gustavo Veiga
3f173ec2f1 - Fix Cannot call method 'set' of null. This occurs on zoomIn and zoomOut of print. 2012-09-03 22:16:36 -03:00
Paulo Gustavo Veiga
6008376ad5 - Add Mediapartners-Google add sense crawler 2012-09-03 21:39:40 -03:00
Paulo Gustavo Veiga
c4c3f30303 Bug TypeError: c is undefined, line:4491 fixed. 2012-09-03 21:13:35 -03:00
Paulo Gustavo Veiga
bcc5676b49 - Bug Cannot call method 'getChildren' of null, line:1955 fixed. 2012-09-03 20:54:18 -03:00
Paulo Gustavo Veiga
ca37d3f384 -Fix Uncaught RangeError: Maximum call stack size exceeded, line:114 2012-09-02 19:52:37 -03:00
Paulo Gustavo Veiga
04a221799a Add filter for avoiding multiple emails on error reporting. 2012-09-02 18:24:15 -03:00
387 changed files with 10290 additions and 5212 deletions

1
.gitignore vendored
View File

@@ -9,3 +9,4 @@ wisemapping.log*
*/.DS_Store
.DS_Store
target
.idea

View File

@@ -13,15 +13,9 @@ $defined = function (obj) {
$assert = function (assert, message) {
if (!$defined(assert) || !assert) {
var stack;
try {
null.eval();
} catch (e) {
stack = e;
}
console.log(message + "," + stack);
window.errorStack = stackTrace();
throw message;
logStackTrace();
console.log(message);
throw new Error(message);
}
};
@@ -29,77 +23,35 @@ Math.sign = function (value) {
return (value >= 0) ? 1 : -1;
};
function stackTrace() {
var result = "";
var isCallstackPopulated = false;
try {
null.eval();
} catch (e) {
if (e.stack) { //Firefox and Chrome...
result = e.stack;
isCallstackPopulated = true;
}
else if (window.opera && e.message) { //Opera
result = e.message;
isCallstackPopulated = true;
function logStackTrace(exception) {
if (!$defined(exception)) {
try {
throw Error("Unexpected Exception");
} catch (e) {
exception = e;
}
}
var result = "";
if (exception.stack) { //Firefox and Chrome...
result = exception.stack;
}
else if (window.opera && exception.message) { //Opera
result = exception.message;
} else { //IE and Safari
result = exception.sourceURL + ': ' + exception.line + "\n\n";
var currentFunction = arguments.callee.caller;
while (currentFunction) {
var fn = currentFunction.toString();
result = result + "\n" + fn;
currentFunction = currentFunction.caller;
}
}
window.errorStack = result;
return result;
}
/*
* DOMParser HTML extension
* 2012-02-02
*
* By Eli Grey, http://eligrey.com
* Public domain.
* NO WARRANTY EXPRESSED OR IMPLIED. USE AT YOUR OWN RISK.
*/
/*! @source https://gist.github.com/1129031 */
/*global document, DOMParser*/
(function (DOMParser) {
"use strict";
var DOMParser_proto = DOMParser.prototype , real_parseFromString = DOMParser_proto.parseFromString;
// Firefox/Opera/IE throw errors on unsupported types
try {
// WebKit returns null on unsupported types
if ((new DOMParser).parseFromString("", "text/html")) {
// text/html parsing is natively supported
return;
}
} catch (ex) {
}
DOMParser_proto.parseFromString = function (markup, type) {
if (/^\s*text\/html\s*(?:;|$)/i.test(type)) {
var
doc = document.implementation.createHTMLDocument("")
, doc_elt = doc.documentElement
, first_elt
;
doc_elt.innerHTML = markup;
first_elt = doc_elt.firstElementChild;
if (// are we dealing with an entire document or a fragment?
doc_elt.childElementCount === 1
&& first_elt.localName.toLowerCase() === "html"
) {
doc.replaceChild(first_elt, doc_elt);
}
return doc;
} else {
return real_parseFromString.apply(this, arguments);
}
};
}(DOMParser));
// Support for Windows ...
if (!window.console) {
console = {

View File

@@ -1,64 +1,61 @@
/*
* 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.
*/
core.Utils = {
};
core.Utils.innerXML = function(/*Node*/node) {
// summary:
// Implementation of MS's innerXML function.
if ($defined(node.innerXML)) {
return node.innerXML;
// string
} else if ($defined(node.xml)) {
return node.xml;
// string
} else if ($defined(XMLSerializer)) {
return (new XMLSerializer()).serializeToString(node);
// string
}
};
core.Utils.createDocument = function() {
// summary:
// cross-browser implementation of creating an XML document object.
var doc = null;
var _document = window.document;
if ($defined(window.ActiveXObject)) {
var prefixes = [ "MSXML2", "Microsoft", "MSXML", "MSXML3" ];
for (var i = 0; i < prefixes.length; i++) {
try {
doc = new ActiveXObject(prefixes[i] + ".XMLDOM");
} catch(e) { /* squelch */
}
if ($defined(doc)) {
break;
}
}
} else if ((_document.implementation) &&
(_document.implementation.createDocument)) {
doc = _document.implementation.createDocument("", "", null);
}
return doc;
// DOMDocument
/*
* Copyright [2012] [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.
*/
core.Utils = {
};
core.Utils.innerXML = function (node) {
// summary:
// Implementation of MS's innerXML function.
if ($defined(node.innerXML)) {
return node.innerXML;
// string
} else if ($defined(node.xml)) {
return node.xml;
// string
} else if ($defined(XMLSerializer)) {
return (new XMLSerializer()).serializeToString(node);
// string
}
};
/**
* Cross-browser implementation of creating an XML document object.
*/
core.Utils.createDocument = function () {
var doc = null;
if ($defined(window.ActiveXObject)) {
//http://blogs.msdn.com/b/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx
var progIDs = [ 'Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.3.0'];
for (var i = 0; i < progIDs.length; i++) {
try {
doc = new ActiveXObject(progIDs[i]);
break;
}
catch (ex) {
}
}
} else if (window.document.implementation && window.document.implementation.createDocument) {
doc = window.document.implementation.createDocument("", "", null);
}
$assert(doc, "Parser could not be instantiated");
return doc;
};

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -16,5 +16,6 @@ WISE_BIN_FILE_PATH=./target/${WISE_BIN_FILE_NAME}
scp ${WISE_BIN_FILE_PATH} thecrow@wisemapping.com:${SERVER_DOWNLOAD_DIR}
# It's there ?
cd target
wget -S http://downloads.wisemapping.org/stable/${WISE_BIN_FILE_NAME}
#wget -S http://downloads.wisemapping.org/stable/${WISE_SRC_FILE_NAME}

View File

@@ -1,6 +1,5 @@
#!/bin/bash
set -x
set -e
set -u
@@ -9,7 +8,8 @@ BASE_DIR=`pwd`
TARGET_DIR=$BASE_DIR/target
JETTY_DIR=$TARGET_DIR/wisemapping-$WISE_VERSION
WISE_WEBAPP_DIR=$JETTY_DIR/webapps/wisemapping
JETTY_DIST_DIR=jetty-distribution-8.1.4.v20120524
JETTY_VERSION=8.1.5.v20120716
JETTY_DIST_DIR=jetty-distribution-${JETTY_VERSION}
JETTY_ZIP=${JETTY_DIST_DIR}.zip
# Clean ...
@@ -24,7 +24,7 @@ mvn -o -f $BASE_DIR/../pom.xml package -Dmaven.test.skip=true
if [ ! -f ./target/${JETTY_ZIP} ]
then
echo "Download Jetty"
wget http://download.eclipse.org/jetty/8.1.4.v20120524/dist/jetty-distribution-8.1.4.v20120524.zip -P $TARGET_DIR
wget http://download.eclipse.org/jetty/${JETTY_VERSION}/dist/${JETTY_ZIP} -P $TARGET_DIR
fi
echo "Unzip Jetty ...:"
@@ -42,10 +42,9 @@ mkdir $WISE_WEBAPP_DIR
unzip $BASE_DIR/../wise-webapp/target/wisemapping.war -d $WISE_WEBAPP_DIR >/dev/null
# DB Configuration ...
sed 's/target\/db\/wisemapping/webapps\/wisemapping\/WEB-INF\/database\/wisemapping/' $WISE_WEBAPP_DIR/WEB-INF/app.properties > $WISE_WEBAPP_DIR/WEB-INF/app.properties2
sed 's/\${database.base.url}\/db\/wisemapping/webapps\/wisemapping\/WEB-INF\/database\/wisemapping/' $WISE_WEBAPP_DIR/WEB-INF/app.properties > $WISE_WEBAPP_DIR/WEB-INF/app.properties2
mv $WISE_WEBAPP_DIR/WEB-INF/app.properties2 $WISE_WEBAPP_DIR/WEB-INF/app.properties
mkdir $WISE_WEBAPP_DIR/WEB-INF/database
cp -r $BASE_DIR/../wise-webapp/target/db/* $WISE_WEBAPP_DIR/WEB-INF/database/
cp $BASE_DIR/wisemapping.xml $JETTY_DIR/contexts/
@@ -53,6 +52,7 @@ cp $BASE_DIR/wisemapping.xml $JETTY_DIR/contexts/
# Distribute scripts
cp -r $BASE_DIR/../wise-webapp/src/test/sql $TARGET_DIR/wisemapping-$WISE_VERSION/config
cp ./start.sh ${JETTY_DIR}/
# Store version
echo $1 > $WISE_WEBAPP_DIR/version

4
distribution/start.sh Executable file
View File

@@ -0,0 +1,4 @@
#!/bin/sh
java -Xmx256m -Dorg.apache.jasper.compiler.disablejsr199=true -jar start.jar

View File

@@ -1,4 +1,4 @@
Copyright [2011] [wisemapping]
Copyright [2012] [wisemapping]
Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -140,6 +140,7 @@
<include>Workspace.js</include>
<include>ShrinkConnector.js</include>
<include>DesignerKeyboard.js</include>
<include>TopicStyle.js</include>
<include>NodeGraph.js</include>
<include>Topic.js</include>
<include>CentralTopic.js</include>
@@ -195,6 +196,7 @@
<include>collaboration/CollaborationManager.js</include>
<include>collaboration/framework/AbstractCollaborativeFramework.js</include>
<include>collaboration/framework/AbstractCollaborativeModelFactory.js</include>
<include>widget/ModalDialogNotifier.js</include>
<include>widget/ToolbarNotifier.js</include>
<include>widget/ToolbarItem.js</include>
<include>widget/ToolbarPaneItem.js</include>

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -36,29 +36,11 @@ mindplot.CentralTopic = new Class({
return this.getPosition();
},
_getInnerPadding:function () {
return 11;
},
getTopicType:function () {
return mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE;
},
setCursor:function (type) {
type = (type == 'move') ? 'default' : type;
this.parent(type);
},
isConnectedToCentralTopic:function () {
return false;
},
_defaultShapeType:function () {
return mindplot.model.TopicShape.ROUNDED_RECT;
},
updateTopicShape:function () {
},
@@ -70,28 +52,6 @@ mindplot.CentralTopic = new Class({
this.setPosition(zeroPoint);
},
_defaultText:function () {
return $msg('CENTRAL_TOPIC');
},
_defaultBackgroundColor:function () {
return "rgb(80,157,192)";
},
_defaultBorderColor:function () {
return "rgb(57,113,177)";
},
_defaultFontStyle:function () {
return {
font:"Verdana",
size:10,
style:"normal",
weight:"bold",
color:"#ffffff"
};
},
getShrinkConnector:function () {
return null;
},

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -20,7 +20,7 @@ mindplot.ConnectionLine = new Class({
initialize:function (sourceNode, targetNode, lineType) {
$assert(targetNode, 'parentNode node can not be null');
$assert(sourceNode, 'childNode node can not be null');
$assert(sourceNode != targetNode, 'Cilcular connection');
$assert(sourceNode != targetNode, 'Circular connection');
this._targetTopic = targetNode;
this._sourceTopic = sourceNode;

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -55,9 +55,15 @@ mindplot.Designer = new Class({
// Register events
if (!this.isReadOnly()) {
this._registerEvents();
// Register mouse events ...
this._registerMouseEvents();
// Register keyboard events ...
mindplot.DesignerKeyboard.register(this);
this._dragManager = this._buildDragManager(this._workspace);
}
this._registerWheelEvents();
this._relPivot = new mindplot.RelationshipPivot(this._workspace, this);
@@ -76,6 +82,32 @@ mindplot.Designer = new Class({
this.deselectAll();
},
_registerWheelEvents:function () {
var workspace = this._workspace;
var screenManager = workspace.getScreenManager();
// Zoom In and Zoom Out must active event
$(document).addEvent('mousewheel', function (event) {
// Change mousewheel handling so we let the default
//event happen if we are outside the container.
var coords = screenManager.getContainer().getCoordinates();
var isOutsideContainer = event.client.y < coords.top ||
event.client.y > coords.bottom ||
event.client.x < coords.left ||
event.client.x > coords.right;
if (!isOutsideContainer) {
if (event.wheel > 0) {
this.zoomIn(1.05);
}
else {
this.zoomOut(1.05);
}
event.preventDefault();
}
}.bind(this));
},
/**
* Activates the keyboard events so you can enter text into forms
*/
@@ -84,14 +116,6 @@ mindplot.Designer = new Class({
},
_registerEvents:function () {
// Register mouse events ...
this._registerMouseEvents();
// Register keyboard events ...
mindplot.DesignerKeyboard.register(this);
},
addEvent:function (type, listener) {
if (type == mindplot.TopicEvent.EDIT || type == mindplot.TopicEvent.CLICK) {
var editor = mindplot.TopicEventDispatcher.getInstance();
@@ -136,26 +160,48 @@ mindplot.Designer = new Class({
}
}.bind(this));
// Register mouse drag and drop event ...
function noopHandler(evt) {
evt.stopPropagation();
evt.preventDefault();
}
$(document).addEvent('mousewheel', function (event) {
// Change mousewheel handling so we let the default
//event happen if we are outside the container.
var coords = screenManager.getContainer().getCoordinates();
var isOutsideContainer = event.client.y < coords.top ||
event.client.y > coords.bottom ||
event.client.x < coords.left ||
event.client.x > coords.right;
// Enable drag events ...
// @Todo: Images support on progress ...
// Element.NativeEvents.dragenter = 2;
// Element.NativeEvents.dragexit = 2;
// Element.NativeEvents.dragover = 2;
// Element.NativeEvents.drop = 2;
//
// screenManager.addEvent('dragenter', noopHandler);
// screenManager.addEvent('dragexit', noopHandler);
// screenManager.addEvent('dragover', noopHandler);
// screenManager.addEvent('drop', function (evt) {
// evt.stopPropagation();
// evt.preventDefault();
////
// var files = evt.event.dataTransfer.files;
// console.log(event);
//
// var count = files.length;
//
// // Only call the handler if 1 or more files was dropped.
// if (count > 0) {
//
// var model = this.getMindmap().createNode();
// model.setImageSize(80, 43);
// model.setMetadata("{'media':'video,'url':'http://www.youtube.com/watch?v=P3FrXftyuzw&feature=g-vrec&context=G2b4ab69RVAAAAAAAAAA'}");
// model.setImageUrl("images/logo-small.png");
// model.setShapeType(mindplot.model.TopicShape.IMAGE);
//
// var position = screenManager.getWorkspaceMousePosition(evt);
// model.setPosition(position.x, position.y);
// model.setPosition(100, 100);
//
// this._actionDispatcher.addTopics([model]);
// }
// }.bind(this));
if (!isOutsideContainer) {
if (event.wheel > 0) {
this.zoomIn(1.05);
}
else {
this.zoomOut(1.05);
}
event.preventDefault();
}
}.bind(this));
},
@@ -203,12 +249,8 @@ mindplot.Designer = new Class({
_buildNodeGraph:function (model, readOnly) {
var workspace = this._workspace;
// Create node graph ...
var topic = mindplot.NodeGraph.create(model, {readOnly:readOnly});
// Append it to the workspace ...
this.getModel().addTopic(topic);
// Add Topic events ...
@@ -244,7 +286,7 @@ mindplot.Designer = new Class({
}
}
$assert(targetTopic, "Could not find a topic to connect");
topic.connectTo(targetTopic, workspace);
topic.connectTo(targetTopic, this._workspace);
}
topic.addEvent('ontblur', function () {
@@ -358,7 +400,7 @@ mindplot.Designer = new Class({
// Exclude central topic ..
topics = topics.filter(function (topic) {
return topic.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE
return !topic.isCentralTopic();
});
this._clipboard = topics.map(function (topic) {
@@ -552,7 +594,7 @@ mindplot.Designer = new Class({
for (var i = 0; i < branches.length; i++) {
// NodeModel -> NodeGraph ...
var nodeModel = branches[i];
var nodeGraph = this._nodeModelToNodeGraph(nodeModel, false);
var nodeGraph = this._nodeModelToNodeGraph(nodeModel);
// Update shrink render state...
nodeGraph.setBranchVisibility(true);
@@ -590,7 +632,7 @@ mindplot.Designer = new Class({
return this._options.readOnly;
},
_nodeModelToNodeGraph:function (nodeModel, isVisible) {
_nodeModelToNodeGraph:function (nodeModel) {
$assert(nodeModel, "Node model can not be null");
var children = nodeModel.getChildren().slice();
children = children.sort(function (a, b) {
@@ -598,16 +640,13 @@ mindplot.Designer = new Class({
});
var nodeGraph = this._buildNodeGraph(nodeModel, this.isReadOnly());
if (isVisible) {
nodeGraph.setVisibility(isVisible);
}
nodeGraph.setVisibility(false);
this._workspace.appendChild(nodeGraph);
for (var i = 0; i < children.length; i++) {
var child = children[i];
if ($defined(child))
this._nodeModelToNodeGraph(child, false);
this._nodeModelToNodeGraph(child);
}
return nodeGraph;
@@ -688,7 +727,7 @@ mindplot.Designer = new Class({
},
_removeTopic:function (node) {
if (node.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (!node.isCentralTopic()) {
var parent = node._parent;
node.disconnect(this._workspace);
@@ -718,14 +757,14 @@ mindplot.Designer = new Class({
// If there are more than one node selected,
$notify($msg('ENTITIES_COULD_NOT_BE_DELETED'));
return;
} else if (topics.length == 1 && topics[0].getTopicType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
} else if (topics.length == 1 && topics[0].isCentralTopic()) {
$notify($msg('CENTRAL_TOPIC_CAN_NOT_BE_DELETED'));
return;
}
// If the central topic has been selected, I must filter ir
var topicIds = topics.filter(function (topic) {
return topic.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE
return !topic.isCentralTopic();
}).map(function (topic) {
return topic.getId()
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -60,19 +60,32 @@ mindplot.DesignerKeyboard = new Class({
}
}.bind(this),
'delete':function () {
'delete':function (event) {
designer.deleteSelectedEntities();
event.preventDefault();
event.stopPropagation();
}.bind(this),
'enter':function () {
designer.createSiblingForSelectedNode();
}.bind(this),
'insert':function () {
'insert':function (event) {
designer.createChildForSelectedNode();
event.preventDefault();
event.stopPropagation();
}.bind(this),
'-':function () {
'tab':function (event) {
designer.createChildForSelectedNode();
event.preventDefault();
event.stopPropagation();
}.bind(this),
'-':function () { // "-" is a insert on several Browsers. Don't ask why ...
designer.createChildForSelectedNode();
}.bind(this),
@@ -225,10 +238,39 @@ mindplot.DesignerKeyboard = new Class({
designer.selectAll();
},
'right':function () {
'meta+=':function (event) {
event.preventDefault();
event.stopPropagation();
designer.zoomIn();
},
'meta+-':function (event) {
event.preventDefault();
event.stopPropagation();
designer.zoomOut();
},
'ctrl++':function (event) {
event.preventDefault();
event.stopPropagation();
designer.zoomIn();
},
'ctrl+-':function (event) {
event.preventDefault();
event.stopPropagation();
designer.zoomOut();
},
'right':function (event) {
var node = model.selectedTopic();
if (node) {
if (node.getTopicType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (node.isCentralTopic()) {
this._goToSideChild(designer, node, 'RIGHT');
}
else {
@@ -243,12 +285,14 @@ mindplot.DesignerKeyboard = new Class({
var centralTopic = model.getCentralTopic();
this._goToNode(designer, centralTopic);
}
event.preventDefault();
event.stopPropagation();
}.bind(this),
'left':function () {
'left':function (event) {
var node = model.selectedTopic();
if (node) {
if (node.getTopicType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (node.isCentralTopic()) {
this._goToSideChild(designer, node, 'LEFT');
}
else {
@@ -263,37 +307,48 @@ mindplot.DesignerKeyboard = new Class({
var centralTopic = model.getCentralTopic();
this._goToNode(designer, centralTopic);
}
event.preventDefault();
event.stopPropagation();
}.bind(this),
'up':function () {
'up':function (event) {
var node = model.selectedTopic();
if (node) {
if (node.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (!node.isCentralTopic()) {
this._goToBrother(designer, node, 'UP');
}
} else {
var centralTopic = model.getCentralTopic();
this._goToNode(designer, centralTopic);
}
event.preventDefault();
event.stopPropagation();
}.bind(this),
'down':function () {
'down':function (event) {
var node = model.selectedTopic();
if (node) {
if (node.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (!node.isCentralTopic()) {
this._goToBrother(designer, node, 'DOWN');
}
} else {
var centralTopic = model.getCentralTopic();
this._goToNode(designer, centralTopic);
}
event.preventDefault();
event.stopPropagation();
}.bind(this)
};
this.addEvents(keyboardEvents);
var regex = /^(?:shift|control|ctrl|alt|meta)$/;
var modifiers = ['shift', 'control', 'alt', 'meta'];
var excludes = ['esc', 'capslock', 'tab', 'f1', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'f10', 'f11', 'f12', 'backspace', 'down', 'up', 'left', 'right', 'control'];
if (!Browser.Platform.mac) {
// This is to avoid enter on edition mode in the node when alt+tab is pressed.
excludes.push("alt");
}
$(document).addEvent('keydown', function (event) {
@@ -335,39 +390,43 @@ mindplot.DesignerKeyboard = new Class({
},
_goToBrother:function (designer, node, direction) {
var brothers = node.getParent().getChildren();
var target = node;
var y = node.getPosition().y;
var x = node.getPosition().x;
var dist = null;
for (var i = 0; i < brothers.length; i++) {
var sameSide = (x * brothers[i].getPosition().x) >= 0;
if (brothers[i] != node && sameSide) {
var brother = brothers[i];
var brotherY = brother.getPosition().y;
if (direction == "DOWN" && brotherY > y) {
var distancia = y - brotherY;
if (distancia < 0) {
distancia = distancia * (-1);
var parent = node.getParent();
if (parent) {
var brothers = parent.getChildren();
var target = node;
var y = node.getPosition().y;
var x = node.getPosition().x;
var dist = null;
for (var i = 0; i < brothers.length; i++) {
var sameSide = (x * brothers[i].getPosition().x) >= 0;
if (brothers[i] != node && sameSide) {
var brother = brothers[i];
var brotherY = brother.getPosition().y;
if (direction == "DOWN" && brotherY > y) {
var distancia = y - brotherY;
if (distancia < 0) {
distancia = distancia * (-1);
}
if (dist == null || dist > distancia) {
dist = distancia;
target = brothers[i];
}
}
if (dist == null || dist > distancia) {
dist = distancia;
target = brothers[i];
}
}
else if (direction == "UP" && brotherY < y) {
var distance = y - brotherY;
if (distance < 0) {
distance = distance * (-1);
}
if (dist == null || dist > distance) {
dist = distance;
target = brothers[i];
else if (direction == "UP" && brotherY < y) {
var distance = y - brotherY;
if (distance < 0) {
distance = distance * (-1);
}
if (dist == null || dist > distance) {
dist = distance;
target = brothers[i];
}
}
}
}
this._goToNode(designer, target);
}
this._goToNode(designer, target);
},

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -83,6 +83,7 @@ mindplot.DesignerModel = new Class({
addTopic:function (topic) {
$assert(topic, "topic can not be null");
$assert(typeof topic.getId() == "number", "id is not a number:" + topic.getId());
this._topics.push(topic);
},

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,107 +1,112 @@
/*
* 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.DragConnector = new Class({
initialize:function (designerModel, workspace) {
$assert(designerModel, 'designerModel can not be null');
$assert(workspace, 'workspace can not be null');
// this._layoutManager = layoutManager;
this._designerModel = designerModel;
this._workspace = workspace;
},
checkConnection:function (dragTopic) {
var topics = this._designerModel.getTopics();
// Must be disconnected from their current connection ?.
var candidates = this._searchConnectionCandidates(dragTopic);
var currentConnection = dragTopic.getConnectedToTopic();
if (currentConnection && (candidates.length == 0 || candidates[0] != currentConnection)) {
dragTopic.disconnect(this._workspace);
}
// Finally, connect nodes ...
if (!dragTopic.isConnected() && candidates.length > 0) {
dragTopic.connectTo(candidates[0]);
}
},
_searchConnectionCandidates:function (dragTopic) {
var topics = this._designerModel.getTopics();
var draggedNode = dragTopic.getDraggedTopic();
// Drag node connects to the border ...
var dragTopicWidth = dragTopic.getSize ? dragTopic.getSize().width : 0; // Hack...
var xMouseGap = dragTopic.getPosition().x > 0 ? 0 : dragTopicWidth;
var sPos = {x:dragTopic.getPosition().x - xMouseGap, y:dragTopic.getPosition().y};
// Perform a initial filter to discard topics:
// - Exclude dragged topic
// - Exclude dragTopic pivot
// - Nodes that are collapsed
topics = topics.filter(function (topic) {
return draggedNode != topic && topic != draggedNode && !topic.areChildrenShrunken() && !topic.isCollapsed();
});
// Filter all the nodes that are outside the vertical boundary:
// * The node is to out of the x scope
// * The x distance greater the vertical tolerated distance
topics = topics.filter(function (topic) {
var tpos = topic.getPosition();
// Center topic has different alignment than the rest of the nodes. That's why i need to divide it by two...
var txborder = tpos.x + (topic.getSize().width / 2) * Math.sign(sPos.x);
var distance = (sPos.x - txborder) * Math.sign(sPos.x);
return distance > 0 && (distance < mindplot.DragConnector.MAX_VERTICAL_CONNECTION_TOLERANCE);
});
// Assign a priority based on the distance:
// - Alignment with the targetNode
// - Vertical distance
// - Horizontal proximity
// - It's already connected.
var currentConnection = dragTopic.getConnectedToTopic();
topics = topics.sort(function (a, b) {
var aPos = a.getPosition();
var bPos = b.getPosition();
var av = this._isVerticallyAligned(a.getSize(), aPos, sPos);
var bv = this._isVerticallyAligned(b.getSize(), bPos, sPos);
return this._proximityWeight(av, a, sPos, currentConnection) - this._proximityWeight(bv, b, sPos, currentConnection);
}.bind(this));
return topics;
},
_proximityWeight:function (isAligned, target, sPos, currentConnection) {
var tPos = target.getPosition();
return (isAligned ? 0 : 200 ) + Math.abs(tPos.x - sPos.x) + Math.abs(tPos.y - sPos.y) + (currentConnection == target ? 0 : 100);
},
_isVerticallyAligned:function (targetSize, targetPosition, sourcePosition) {
return Math.abs(sourcePosition.y - targetPosition.y) < targetSize.height / 2;
}
});
mindplot.DragConnector.MAX_VERTICAL_CONNECTION_TOLERANCE = 80;
/*
* Copyright [2012] [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.DragConnector = new Class({
initialize:function (designerModel, workspace) {
$assert(designerModel, 'designerModel can not be null');
$assert(workspace, 'workspace can not be null');
// this._layoutManager = layoutManager;
this._designerModel = designerModel;
this._workspace = workspace;
},
checkConnection:function (dragTopic) {
var topics = this._designerModel.getTopics();
// Must be disconnected from their current connection ?.
var candidates = this._searchConnectionCandidates(dragTopic);
var currentConnection = dragTopic.getConnectedToTopic();
if (currentConnection && (candidates.length == 0 || candidates[0] != currentConnection)) {
dragTopic.disconnect(this._workspace);
}
// Finally, connect nodes ...
if (!dragTopic.isConnected() && candidates.length > 0) {
dragTopic.connectTo(candidates[0]);
}
},
_searchConnectionCandidates:function (dragTopic) {
var topics = this._designerModel.getTopics();
var draggedNode = dragTopic.getDraggedTopic();
// Drag node connects to the border ...
var dragTopicWidth = dragTopic.getSize ? dragTopic.getSize().width : 0; // Hack...
var xMouseGap = dragTopic.getPosition().x > 0 ? 0 : dragTopicWidth;
var sPos = {x:dragTopic.getPosition().x - xMouseGap, y:dragTopic.getPosition().y};
// Perform a initial filter to discard topics:
// - Exclude dragged topic
// - Exclude dragTopic pivot
// - Nodes that are collapsed
// - It's not part of the branch dragged itself
topics = topics.filter(function (topic) {
var result = draggedNode != topic;
result = result && topic != draggedNode;
result = result && !topic.areChildrenShrunken() && !topic.isCollapsed();
result = result && !draggedNode.isChildTopic(topic);
return result;
});
// Filter all the nodes that are outside the vertical boundary:
// * The node is to out of the x scope
// * The x distance greater the vertical tolerated distance
topics = topics.filter(function (topic) {
var tpos = topic.getPosition();
// Center topic has different alignment than the rest of the nodes. That's why i need to divide it by two...
var txborder = tpos.x + (topic.getSize().width / 2) * Math.sign(sPos.x);
var distance = (sPos.x - txborder) * Math.sign(sPos.x);
return distance > 0 && (distance < mindplot.DragConnector.MAX_VERTICAL_CONNECTION_TOLERANCE);
});
// Assign a priority based on the distance:
// - Alignment with the targetNode
// - Vertical distance
// - Horizontal proximity
// - It's already connected.
var currentConnection = dragTopic.getConnectedToTopic();
topics = topics.sort(function (a, b) {
var aPos = a.getPosition();
var bPos = b.getPosition();
var av = this._isVerticallyAligned(a.getSize(), aPos, sPos);
var bv = this._isVerticallyAligned(b.getSize(), bPos, sPos);
return this._proximityWeight(av, a, sPos, currentConnection) - this._proximityWeight(bv, b, sPos, currentConnection);
}.bind(this));
return topics;
},
_proximityWeight:function (isAligned, target, sPos, currentConnection) {
var tPos = target.getPosition();
return (isAligned ? 0 : 200 ) + Math.abs(tPos.x - sPos.x) + Math.abs(tPos.y - sPos.y) + (currentConnection == target ? 0 : 100);
},
_isVerticallyAligned:function (targetSize, targetPosition, sourcePosition) {
return Math.abs(sourcePosition.y - targetPosition.y) < targetSize.height / 2;
}
});
mindplot.DragConnector.MAX_VERTICAL_CONNECTION_TOLERANCE = 80;

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,3 +1,21 @@
/*
* Copyright [2012] [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.EditorOptions =
{
LayoutManager:"OriginalLayout",

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -80,7 +80,7 @@ mindplot.IconGroup = new Class({
}, this);
if (result == null) {
throw "Icon can no be found.";
throw new Error("Icon can no be found:" + iconModel.getId() + ", Icons:" + this._icons);
}
return result;

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -18,28 +18,27 @@
mindplot.LocalStorageManager = new Class({
Extends:mindplot.PersistenceManager,
initialize: function() {
initialize:function () {
this.parent();
},
saveMapXml : function(mapId, mapXml, pref, saveHistory, events) {
saveMapXml:function (mapId, mapXml, pref, saveHistory, events) {
localStorage.setItem(mapId + "-xml", mapXml);
events.onSuccess();
},
discardChanges : function(mapId) {
discardChanges:function (mapId) {
localStorage.removeItem(mapId + "-xml");
},
loadMapDom : function(mapId) {
loadMapDom:function (mapId) {
var xml = localStorage.getItem(mapId + "-xml");
if (xml == null) {
// Let's try to open one from the local directory ...
var xmlRequest = new Request({
url: 'samples/' + mapId + '.xml',
method: 'get',
async: false,
onSuccess: function(responseText) {
url:'samples/' + mapId + '.xml',
method:'get',
async:false,
onSuccess:function (responseText) {
xml = responseText;
}
});
@@ -47,13 +46,16 @@ mindplot.LocalStorageManager = new Class({
// If I could not load it from a file, hard code one.
if (xml == null) {
throw "Map could not be loaded";
throw new Error("Map could not be loaded");
}
}
var parser = new DOMParser();
return parser.parseFromString(xml, "text/xml");
},
unlockMap:function (mindmap) {
// Ignore, no implementation required ...
}
}
);

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -55,16 +55,11 @@ mindplot.MainTopic = new Class({
return group;
},
_defaultShapeType:function () {
return mindplot.model.TopicShape.LINE;
},
updateTopicShape:function (targetTopic, workspace) {
// Change figure based on the connected topic ...
var model = this.getModel();
var shapeType = model.getShapeType();
if (targetTopic.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (!targetTopic.isCentralTopic()) {
if (!$defined(shapeType)) {
// Get the real shape type ...
shapeType = this.getShapeType();
@@ -88,10 +83,6 @@ mindplot.MainTopic = new Class({
innerShape.setVisibility(true);
},
getTopicType:function () {
return "MainTopic";
},
_updatePositionOnChangeSize:function (oldSize, newSize) {
var xOffset = Math.round((newSize.width - oldSize.width) / 2);
@@ -167,82 +158,6 @@ mindplot.MainTopic = new Class({
result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight, true);
}
return result;
},
_getInnerPadding:function () {
var result;
var parent = this.getModel().getParent();
if (parent && mindplot.model.INodeModel.MAIN_TOPIC_TYPE == parent.getType()) {
result = 3;
}
else {
result = 4;
}
return result;
},
isConnectedToCentralTopic:function () {
var model = this.getModel();
var parent = model.getParent();
return parent && parent.getType() === mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE;
},
_defaultText:function () {
var targetTopic = this.getOutgoingConnectedTopic();
var result = "";
if ($defined(targetTopic)) {
if (targetTopic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
result = $msg('MAIN_TOPIC');
} else {
result = $msg('SUB_TOPIC');
}
} else {
result = $msg('ISOLATED_TOPIC');
;
}
return result;
},
_defaultFontStyle:function () {
var targetTopic = this.getOutgoingConnectedTopic();
var result;
if ($defined(targetTopic)) {
if (targetTopic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
result = {
font:"Arial",
size:8,
style:"normal",
weight:"normal",
color:"rgb(82,92,97)"
};
} else {
result = {
font:"Arial",
size:6,
style:"normal",
weight:"normal",
color:"rgb(82,92,97)"
};
}
} else {
result = {
font:"Verdana",
size:8,
style:"normal",
weight:"normal",
color:"rgb(82,92,97)"
};
}
return result;
},
_defaultBackgroundColor:function () {
return "rgb(224,229,239)";
},
_defaultBorderColor:function () {
return 'rgb(2,59,185)';
}
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -17,20 +17,21 @@
*/
mindplot.MultilineTextEditor = new Class({
Extends: Events,
initialize:function() {
Extends:Events,
initialize:function () {
this._topic = null;
this._timeoutId = -1;
},
_buildEditor : function() {
_buildEditor:function () {
var result = new Element('div');
result.setStyles({
position:"absolute",
display: "none",
zIndex: "8",
display:"none",
zIndex:"8",
overflow:"hidden",
border: "0 none"
border:"0 none"
}
);
@@ -42,17 +43,17 @@ mindplot.MultilineTextEditor = new Class({
);
textareaElem.setStyles({
border: "1px gray dashed",
border:"1px gray dashed",
background:"rgba(98, 135, 167, .3)",
outline: '0 none',
resize: 'none',
outline:'0 none',
resize:'none',
overflow:"hidden"
});
textareaElem.inject(result);
return result;
},
_registerEvents : function(containerElem) {
_registerEvents:function (containerElem) {
var textareaElem = this._getTextareaElem();
textareaElem.addEvent('keydown', function (event) {
@@ -63,8 +64,30 @@ mindplot.MultilineTextEditor = new Class({
case 'enter':
if (event.meta || event.control) {
// @todo: Enters must be in any place ...
textareaElem.value = textareaElem.value + "\n";
// Add return ...
var text = textareaElem.value;
var cursorPosition = text.length;
if (textareaElem.selectionStart) {
cursorPosition = textareaElem.selectionStart;
}
var head = text.substring(0, cursorPosition);
var tail = "";
if (cursorPosition < text.length) {
tail = text.substring(cursorPosition, text.length);
}
textareaElem.value = head + "\n" + tail;
// Position cursor ...
if (textareaElem.setSelectionRange) {
textareaElem.focus();
textareaElem.setSelectionRange(cursorPosition + 1, cursorPosition + 1);
} else if (textareaElem.createTextRange) {
var range = textareaElem.createTextRange();
range.moveStart('character', cursorPosition + 1);
range.select();
}
}
else {
this.close(true);
@@ -74,36 +97,36 @@ mindplot.MultilineTextEditor = new Class({
event.stopPropagation();
}.bind(this));
textareaElem.addEvent('keypress', function(event) {
textareaElem.addEvent('keypress', function (event) {
event.stopPropagation();
});
textareaElem.addEvent('keyup', function(event) {
textareaElem.addEvent('keyup', function (event) {
var text = this._getTextareaElem().value;
this.fireEvent('input', [event, text]);
this._adjustEditorSize();
}.bind(this));
// If the user clicks on the input, all event must be ignored ...
containerElem.addEvent('click', function(event) {
containerElem.addEvent('click', function (event) {
event.stopPropagation();
});
containerElem.addEvent('dblclick', function(event) {
containerElem.addEvent('dblclick', function (event) {
event.stopPropagation();
});
containerElem.addEvent('mousedown', function(event) {
containerElem.addEvent('mousedown', function (event) {
event.stopPropagation();
});
},
_adjustEditorSize : function() {
_adjustEditorSize:function () {
if (this.isVisible()) {
var textElem = this._getTextareaElem();
var lines = textElem.value.split('\n');
var maxLineLength = 1;
lines.each(function(line) {
lines.each(function (line) {
if (maxLineLength < line.length)
maxLineLength = line.length;
});
@@ -112,17 +135,17 @@ mindplot.MultilineTextEditor = new Class({
textElem.setAttribute('rows', lines.length);
this._containerElem.setStyles({
width: (maxLineLength + 3) + 'em',
height: textElem.getSize().height
width:(maxLineLength + 3) + 'em',
height:textElem.getSize().height
});
}
},
isVisible : function () {
isVisible:function () {
return $defined(this._containerElem) && this._containerElem.getStyle('display') == 'block';
},
_updateModel : function () {
_updateModel:function () {
if (this._topic.getText() != this._getText()) {
var text = this._getText();
@@ -133,7 +156,11 @@ mindplot.MultilineTextEditor = new Class({
}
},
show : function (topic,text) {
show:function (topic, text) {
// Close a previous node editor if it's opened ...
if (this._topic) {
this.close(false);
}
this._topic = topic;
if (!this.isVisible()) {
@@ -147,7 +174,7 @@ mindplot.MultilineTextEditor = new Class({
}
},
_showEditor : function (defaultText) {
_showEditor:function (defaultText) {
var topic = this._topic;
@@ -162,12 +189,12 @@ mindplot.MultilineTextEditor = new Class({
this._setStyle(font);
// Set editor's initial size
var displayFunc = function() {
var displayFunc = function () {
// Position the editor and set the size...
var textShape = this._topic.getTextShape();
textShape.positionRelativeTo(this._containerElem, {
position: {x: 'left',y:'top'},
edge: {x: 'left', y: 'top'}
position:{x:'left', y:'top'},
edge:{x:'left', y:'top'}
});
this._containerElem.setStyle('display', 'block');
@@ -181,10 +208,10 @@ mindplot.MultilineTextEditor = new Class({
}.bind(this);
displayFunc.delay(10);
this._timeoutId = displayFunc.delay(10);
},
_setStyle : function (fontStyle) {
_setStyle:function (fontStyle) {
var inputField = this._getTextareaElem();
if (!$defined(fontStyle.font)) {
fontStyle.font = "Arial";
@@ -199,31 +226,31 @@ mindplot.MultilineTextEditor = new Class({
fontStyle.size = 12;
}
var style = {
fontSize : fontStyle.size + "px",
fontFamily : fontStyle.font,
fontStyle : fontStyle.style,
fontWeight : fontStyle.weight,
color : fontStyle.color
fontSize:fontStyle.size + "px",
fontFamily:fontStyle.font,
fontStyle:fontStyle.style,
fontWeight:fontStyle.weight,
color:fontStyle.color
};
inputField.setStyles(style);
this._containerElem.setStyles(style);
},
_setText : function(text) {
_setText:function (text) {
var textareaElem = this._getTextareaElem();
textareaElem.value = text;
this._adjustEditorSize();
},
_getText : function() {
_getText:function () {
return this._getTextareaElem().value;
},
_getTextareaElem : function() {
_getTextareaElem:function () {
return this._containerElem.getElement('textarea');
},
_positionCursor : function(textareaElem, selectText) {
_positionCursor:function (textareaElem, selectText) {
textareaElem.focus();
if (selectText) {
// Mark text as selected ...
@@ -248,9 +275,11 @@ mindplot.MultilineTextEditor = new Class({
},
close : function(update) {
if (this.isVisible()) {
close:function (update) {
if (this.isVisible() && this._topic) {
// Update changes ...
clearTimeout(this._timeoutId);
if (!$defined(update) || update) {
this._updateModel();
}
@@ -261,8 +290,9 @@ mindplot.MultilineTextEditor = new Class({
// Remove it form the screen ...
this._containerElem.dispose();
this._containerElem = null;
this._topic = null;
this._timeoutId = -1;
}
this._topic = null;
}
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -38,6 +38,7 @@ mindplot.NodeGraph = new Class({
},
setId : function(id) {
$assert(typeof topic.getId() == "number", "id is not a number:" + id);
this.getModel().setId(id);
},

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -47,7 +47,7 @@ mindplot.NoteIcon = new Class({
var result = new Element('div');
result.setStyles({padding:'5px'});
var title = new Element('div', {text:'Note'});
var title = new Element('div', {text:$msg('NOTE')});
title.setStyles({
'font-weight':'bold',
color:'black',

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -31,7 +31,7 @@ mindplot.PersistenceManager = new Class({
},
save:function (mindmap, editorProperties, saveHistory, events) {
save:function (mindmap, editorProperties, saveHistory, events, sync) {
$assert(mindmap, "mindmap can not be null");
$assert(editorProperties, "editorProperties can not be null");
@@ -44,10 +44,10 @@ mindplot.PersistenceManager = new Class({
var pref = JSON.encode(editorProperties);
try {
this.saveMapXml(mapId, mapXml, pref, saveHistory, events);
this.saveMapXml(mapId, mapXml, pref, saveHistory, events, sync);
} catch (e) {
console.log(e);
events.onError();
events.onError(this._buildError());
}
},
@@ -58,15 +58,19 @@ mindplot.PersistenceManager = new Class({
},
discardChanges:function (mapId) {
throw "Method must be implemented";
throw new Error("Method must be implemented");
},
loadMapDom:function (mapId) {
throw "Method must be implemented";
throw new Error("Method must be implemented");
},
saveMapXml:function (mapId, mapXml, pref, saveHistory, events) {
throw "Method must be implemented";
saveMapXml:function (mapId, mapXml, pref, saveHistory, events, sync) {
throw new Error("Method must be implemented");
},
unlockMap:function (mindmap) {
throw new Error("Method must be implemented");
}
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -39,13 +39,24 @@ mindplot.RelationshipPivot = new Class({
this._workspace.enableWorkspaceEvents(false);
var sourcePos = sourceTopic.getPosition();
var strokeColor = mindplot.Relationship.getStrokeColor();
this._pivot = new web2d.CurvedLine();
this._pivot.setStyle(web2d.CurvedLine.SIMPLE_LINE);
this._pivot.setDashed(2, 2);
this._pivot.setFrom(sourcePos.x, sourcePos.y);
this._pivot.setTo(targetPos.x, targetPos.y);
this._workspace.appendChild(this._pivot);
this._pivot.setTo(targetPos.x, targetPos.y);
this._pivot.setStroke(2, 'solid', strokeColor);
this._pivot.setDashed(4, 2);
this._startArrow = new web2d.Arrow();
this._startArrow.setStrokeColor(strokeColor);
this._startArrow.setStrokeWidth(2);
this._startArrow.setFrom(sourcePos.x, sourcePos.y);
this._workspace.appendChild(this._pivot);
this._workspace.appendChild(this._startArrow);
this._workspace.addEvent('mousemove', this._mouseMoveEvent);
this._workspace.addEvent('click', this._onClickEvent);
@@ -74,10 +85,12 @@ mindplot.RelationshipPivot = new Class({
}.bind(this));
workspace.removeChild(this._pivot);
workspace.removeChild(this._startArrow);
workspace.enableWorkspaceEvents(true);
this._sourceTopic = null;
this._pivot = null;
this._startArrow = null;
}
},
@@ -85,7 +98,15 @@ mindplot.RelationshipPivot = new Class({
var screen = this._workspace.getScreenManager();
var pos = screen.getWorkspaceMousePosition(event);
this._pivot.setTo(pos.x - 1, pos.y - 1);
// Leave the arrow a couple of pixels away from the cursor.
var gapDistance = Math.sign(pos.x - this._sourceTopic.getPosition().x) * 5;
this._pivot.setTo(pos.x - gapDistance, pos.y);
var controlPoints = this._pivot.getControlPoints();
this._startArrow.setFrom(pos.x - gapDistance, pos.y);
this._startArrow.setControlPoint(controlPoints[1]);
event.stopPropagation();
return false;
},
@@ -100,8 +121,12 @@ mindplot.RelationshipPivot = new Class({
_connectOnFocus:function (targetTopic) {
var sourceTopic = this._sourceTopic;
var mindmap = this._designer.getMindmap();
var relModel = mindmap.createRelationship(targetTopic.getId(), sourceTopic.getId());
this._designer._actionDispatcher.addRelationship(relModel);
// Avoid circular connections ...
if (targetTopic.getId() != sourceTopic.getId()) {
var relModel = mindmap.createRelationship(targetTopic.getId(), sourceTopic.getId());
this._designer._actionDispatcher.addRelationship(relModel);
}
this.dispose();
},

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -18,15 +18,22 @@
mindplot.RESTPersistenceManager = new Class({
Extends:mindplot.PersistenceManager,
initialize:function (saveUrl, revertUrl) {
initialize:function (options) {
this.parent();
$assert(saveUrl, "saveUrl can not be null");
$assert(revertUrl, "revertUrl can not be null");
this.saveUrl = saveUrl;
this.revertUrl = revertUrl;
$assert(options.saveUrl, "saveUrl can not be null");
$assert(options.revertUrl, "revertUrl can not be null");
$assert(options.lockUrl, "lockUrl can not be null");
$assert(options.session, "session can not be null");
$assert(options.timestamp, "timestamp can not be null");
this.saveUrl = options.saveUrl;
this.revertUrl = options.revertUrl;
this.lockUrl = options.lockUrl;
this.timestamp = options.timestamp;
this.session = options.session;
},
saveMapXml:function (mapId, mapXml, pref, saveHistory, events) {
saveMapXml:function (mapId, mapXml, pref, saveHistory, events, sync) {
var data = {
id:mapId,
@@ -34,24 +41,76 @@ mindplot.RESTPersistenceManager = new Class({
properties:pref
};
var request = new Request({
url:this.saveUrl.replace("{id}", mapId) + "?minor=" + !saveHistory,
method:'put',
onSuccess:function (responseText, responseXML) {
events.onSuccess();
var persistence = this;
var query = "minor=" + !saveHistory;
query = query + (this.timestamp ? "&timestamp=" + this.timestamp : "");
query = query + (this.session ? "&session=" + this.session : "");
},
onException:function (headerName, value) {
events.onError();
},
onFailure:function (xhr) {
events.onError();
},
headers:{"Content-Type":"application/json", "Accept":"application/json"},
emulation:false,
urlEncoded:false
});
request.put(JSON.encode(data));
if (!persistence.onSave) {
// Mark save in process and fire a event unlocking the save ...
persistence.onSave = true;
persistence.clearTimeout = setTimeout(function () {
persistence.clearTimeout = null;
persistence.onSave = false;
}, 10000);
var request = new Request({
url:this.saveUrl.replace("{id}", mapId) + "?" + query,
method:'put',
async:!sync,
onSuccess:function (responseText, responseXML) {
persistence.timestamp = responseText;
events.onSuccess();
},
onException:function (headerName, value) {
events.onError(persistence._buildError());
},
onComplete:function () {
// Clear event timeout ...
if (persistence.clearTimeout) {
clearTimeout(persistence.clearTimeout);
}
persistence.onSave = false;
},
onFailure:function (xhr) {
var responseText = xhr.responseText;
var userMsg = {severity:"SEVERE", message:$msg('SAVE_COULD_NOT_BE_COMPLETED')};
var contentType = this.getHeader("Content-Type");
if (contentType != null && contentType.indexOf("application/json") != -1) {
var serverMsg = null;
try {
serverMsg = JSON.decode(responseText);
serverMsg = serverMsg.globalSeverity ? serverMsg : null;
} catch (e) {
// Message could not be decoded ...
}
userMsg = persistence._buildError(serverMsg);
} else {
if (this.status == 405) {
userMsg = {severity:"SEVERE", message:$msg('SESSION_EXPIRED')};
}
}
events.onError(userMsg);
// @Todo: Only for debug. Remove.
persistence.onSave = false;
throw new Error("responseText:" + responseText + ",status:" + this.status);
},
headers:{"Content-Type":"application/json", "Accept":"application/json"},
emulation:false,
urlEncoded:false
});
request.put(JSON.encode(data));
}
},
discardChanges:function (mapId) {
@@ -60,7 +119,6 @@ mindplot.RESTPersistenceManager = new Class({
async:false,
method:'post',
onSuccess:function () {
console.log("Revert success ....");
},
onException:function () {
},
@@ -71,8 +129,41 @@ mindplot.RESTPersistenceManager = new Class({
urlEncoded:false
});
request.post();
}
},
unlockMap:function (mindmap) {
var mapId = mindmap.getId();
var request = new Request({
url:this.lockUrl.replace("{id}", mapId),
async:false,
method:'put',
onSuccess:function () {
},
onException:function () {
},
onFailure:function () {
},
headers:{"Content-Type":"text/plain"},
emulation:false,
urlEncoded:false
});
request.put("false");
},
_buildError:function (jsonSeverResponse) {
var message = jsonSeverResponse ? jsonSeverResponse.globalErrors[0] : null;
var severity = jsonSeverResponse ? jsonSeverResponse.globalSeverity : null;
if (!message) {
message = $msg('SAVE_COULD_NOT_BE_COMPLETED');
}
if (!severity) {
severity = "INFO";
}
return {severity:severity, message:message};
}
}
);

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -43,14 +43,16 @@ mindplot.ScreenManager = new Class({
if (event == 'click')
this._clickEvents.push(listener);
else
$(this._divContainer).addEvent(event, listener);
this._divContainer.addEvent(event, listener);
},
removeEvent : function(event, listener) {
if (event == 'click')
if (event == 'click') {
this._clickEvents.remove(listener);
else
$(this._divContainer).removeEvent(event, listener);
}
else{
this._divContainer.removeEvent(event, listener);
}
},
fireEvent : function(type, event) {
@@ -60,7 +62,7 @@ mindplot.ScreenManager = new Class({
});
}
else {
$(this._divContainer).fireEvent(type, event);
this._divContainer.fireEvent(type, event);
}
},

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -83,6 +83,7 @@ mindplot.StandaloneActionDispatcher = new Class({
topic.setText(value);
return result;
};
commandFunc.commandType = "changeTextToTopic";
var command = new mindplot.commands.GenericFunctionCommand(commandFunc, topicsIds, text);
this.execute(command);
@@ -242,18 +243,26 @@ mindplot.CommandContext = new Class({
}
var designerTopics = this._designer.getModel().getTopics();
return designerTopics.filter(function (topic) {
var result = designerTopics.filter(function (topic) {
return topicsIds.contains(topic.getId());
});
if (result.length != topicsIds.length) {
var ids = designerTopics.map(function (topic) {
return topic.getId();
});
$assert(result.length == topicsIds.length, "Could not find topic. Result:" + result + ", Filter Criteria:" + topicsIds + ", Current Topics: [" + ids + "]");
}
return result;
},
deleteTopic:function (topic) {
this._designer._removeTopic(topic);
},
createTopic:function (model, isVisible) {
createTopic:function (model) {
$assert(model, "model can not be null");
return this._designer._nodeModelToNodeGraph(model, isVisible);
return this._designer._nodeModelToNodeGraph(model);
},
createModel:function () {
@@ -261,8 +270,8 @@ mindplot.CommandContext = new Class({
return mindmap.createNode(mindplot.NodeModel.MAIN_TOPIC_TYPE);
},
connect:function (childTopic, parentTopic, isVisible) {
childTopic.connectTo(parentTopic, this._designer._workspace, isVisible);
connect:function (childTopic, parentTopic) {
childTopic.connectTo(parentTopic, this._designer._workspace);
},
disconnect:function (topic) {

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -29,7 +29,7 @@ mindplot.Topic = new Class({
// Position a topic ....
var pos = model.getPosition();
if (pos != null && model.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (pos != null && this.isCentralTopic()) {
this.setPosition(pos);
}
@@ -107,7 +107,7 @@ mindplot.Topic = new Class({
var model = this.getModel();
var result = model.getShapeType();
if (!$defined(result)) {
result = this._defaultShapeType();
result = mindplot.TopicStyle.defaultShapeType(this);
}
return result;
},
@@ -134,7 +134,7 @@ mindplot.Topic = new Class({
this._setBorderColor(brColor, false);
// Define the pointer ...
if (this.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE && !this.isReadOnly()) {
if (!this.isCentralTopic() && !this.isReadOnly()) {
this._innerShape.setCursor('move');
} else {
this._innerShape.setCursor('default');
@@ -259,7 +259,7 @@ mindplot.Topic = new Class({
_buildIconGroup:function () {
var textHeight = this.getTextShape().getFontHeight();
var result = new mindplot.IconGroup(this.getId(), textHeight);
var padding = this._getInnerPadding();
var padding = mindplot.TopicStyle.getInnerPadding(this);
result.setPosition(padding, padding);
// Load topic features ...
@@ -274,18 +274,16 @@ mindplot.Topic = new Class({
return result;
},
addFeature:function (type, attributes) {
addFeature:function (featureModel) {
var iconGroup = this.getOrBuildIconGroup();
this.closeEditors();
var model = this.getModel();
// Update model ...
var feature = model.createFeature(type, attributes);
model.addFeature(feature);
var model = this.getModel();
model.addFeature(featureModel);
var result = mindplot.TopicFeature.createIcon(this, feature, this.isReadOnly());
iconGroup.addIcon(result, type == mindplot.TopicFeature.Icon.id && !this.isReadOnly());
var result = mindplot.TopicFeature.createIcon(this, featureModel, this.isReadOnly());
iconGroup.addIcon(result, featureModel.getType() == mindplot.TopicFeature.Icon.id && !this.isReadOnly());
this._adjustShapes();
return result;
@@ -336,7 +334,7 @@ mindplot.Topic = new Class({
if (!readOnly) {
// Propagate mouse events ...
if (this.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (!this.isCentralTopic()) {
result.setCursor('move');
} else {
result.setCursor('default');
@@ -346,10 +344,6 @@ mindplot.Topic = new Class({
return result;
},
_getInnerPadding:function () {
throw "this must be implemented";
},
setFontFamily:function (value, updateModel) {
var textShape = this.getTextShape();
textShape.setFontFamily(value);
@@ -397,7 +391,7 @@ mindplot.Topic = new Class({
var model = this.getModel();
var result = model.getFontWeight();
if (!$defined(result)) {
var font = this._defaultFontStyle();
var font = mindplot.TopicStyle.defaultFontStyle(this);
result = font.weight;
}
return result;
@@ -407,7 +401,7 @@ mindplot.Topic = new Class({
var model = this.getModel();
var result = model.getFontFamily();
if (!$defined(result)) {
var font = this._defaultFontStyle();
var font = mindplot.TopicStyle.defaultFontStyle(this);
result = font.font;
}
return result;
@@ -417,7 +411,7 @@ mindplot.Topic = new Class({
var model = this.getModel();
var result = model.getFontColor();
if (!$defined(result)) {
var font = this._defaultFontStyle();
var font = mindplot.TopicStyle.defaultFontStyle(this);
result = font.color;
}
return result;
@@ -427,7 +421,7 @@ mindplot.Topic = new Class({
var model = this.getModel();
var result = model.getFontStyle();
if (!$defined(result)) {
var font = this._defaultFontStyle();
var font = mindplot.TopicStyle.defaultFontStyle(this);
result = font.style;
}
return result;
@@ -437,7 +431,7 @@ mindplot.Topic = new Class({
var model = this.getModel();
var result = model.getFontSize();
if (!$defined(result)) {
var font = this._defaultFontStyle();
var font = mindplot.TopicStyle.defaultFontStyle(this);
result = font.size;
}
return result;
@@ -454,7 +448,7 @@ mindplot.Topic = new Class({
_setText:function (text, updateModel) {
var textShape = this.getTextShape();
textShape.setText(text == null ? this._defaultText() : text);
textShape.setText(text == null ? mindplot.TopicStyle.defaultText(this) : text);
if ($defined(updateModel) && updateModel) {
var model = this.getModel();
@@ -464,7 +458,7 @@ mindplot.Topic = new Class({
setText:function (text) {
// Avoid empty nodes ...
if (text.trim().length == 0) {
if (!text || text.trim().length == 0) {
text = null;
}
@@ -476,7 +470,7 @@ mindplot.Topic = new Class({
var model = this.getModel();
var result = model.getText();
if (!$defined(result)) {
result = this._defaultText();
result = mindplot.TopicStyle.defaultText(this);
}
return result;
},
@@ -504,7 +498,7 @@ mindplot.Topic = new Class({
var model = this.getModel();
var result = model.getBackgroundColor();
if (!$defined(result)) {
result = this._defaultBackgroundColor();
result = mindplot.TopicStyle.defaultBackgroundColor(this);
}
return result;
},
@@ -532,7 +526,7 @@ mindplot.Topic = new Class({
var model = this.getModel();
var result = model.getBorderColor();
if (!$defined(result)) {
result = this._defaultBorderColor();
result = mindplot.TopicStyle.defaultBorderColor(this);
}
return result;
},
@@ -633,9 +627,20 @@ mindplot.Topic = new Class({
var elements = this._flatten2DElements(this);
var fade = new mindplot.util.FadeEffect(elements, !value);
fade.addEvent('complete', function () {
// Set focus on the parent node ...
if (value) {
this.setOnFocus(true);
}
});
// Set focus in false for all the children ...
elements.forEach(function (elem) {
if (elem.setOnFocus) {
elem.setOnFocus(false);
}
});
}.bind(this));
fade.start();
mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeShrinkEvent, model);
},
@@ -669,7 +674,6 @@ mindplot.Topic = new Class({
showNoteEditor:function () {
var topicId = this.getId();
var model = this.getModel();
var editorModel = {
@@ -826,7 +830,7 @@ mindplot.Topic = new Class({
setBranchVisibility:function (value) {
var current = this;
var parent = this;
while (parent != null && parent.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
while (parent != null && !parent.isCentralTopic()) {
current = parent;
parent = current.getParent();
}
@@ -840,7 +844,14 @@ mindplot.Topic = new Class({
// Hide all children...
this._setChildrenVisibility(value);
// If there there are connection to the node, topic must be hidden.
this._setRelationshipLinesVisibility(value);
// If it's connected, the connection must be rendered.
var outgoingLine = this.getOutgoingLine();
if (outgoingLine) {
outgoingLine.setVisibility(value);
}
},
moveToBack:function () {
@@ -1020,9 +1031,9 @@ mindplot.Topic = new Class({
model.setOrder(value);
},
connectTo:function (targetTopic, workspace, isVisible) {
connectTo:function (targetTopic, workspace) {
$assert(!this._outgoingLine, 'Could not connect an already connected node');
$assert(targetTopic != this, 'Cilcular connection are not allowed');
$assert(targetTopic != this, 'Circular connection are not allowed');
$assert(targetTopic, 'Parent Graph can not be null');
$assert(workspace, 'Workspace can not be null');
@@ -1037,9 +1048,8 @@ mindplot.Topic = new Class({
// Create a connection line ...
var outgoingLine = new mindplot.ConnectionLine(this, targetTopic);
if ($defined(isVisible)) {
outgoingLine.setVisibility(isVisible);
}
outgoingLine.setVisibility(false);
this._outgoingLine = outgoingLine;
workspace.appendChild(outgoingLine);
@@ -1071,7 +1081,6 @@ mindplot.Topic = new Class({
if (this.isInWorkspace()) {
mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeConnectEvent, {parentNode:targetTopic.getModel(), childNode:this.getModel()});
}
},
appendChild:function (child) {
@@ -1108,7 +1117,7 @@ mindplot.Topic = new Class({
var elem = this.get2DElement();
workspace.appendChild(elem);
if (!this.isInWorkspace()) {
if (this.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (!this.isCentralTopic()) {
mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.NodeAdded, this.getModel());
}
@@ -1151,7 +1160,7 @@ mindplot.Topic = new Class({
var textHeight = textShape.getHeight();
textHeight = textHeight != 0 ? textHeight : 20;
var topicPadding = this._getInnerPadding();
var topicPadding = mindplot.TopicStyle.getInnerPadding(this);
// Adjust the icon size to the size of the text ...
var iconGroup = this.getOrBuildIconGroup();
@@ -1194,12 +1203,34 @@ mindplot.Topic = new Class({
var relationships = child.getRelationships();
result = result.concat(relationships);
var innerChilds = this._flatten2DElements(child);
result = result.concat(innerChilds);
if(!child.areChildrenShrunken()){
var innerChilds = this._flatten2DElements(child);
result = result.concat(innerChilds);
}
}
return result;
},
isChildTopic:function (childTopic) {
var result = (this.getId() == childTopic.getId());
if (!result) {
var children = this.getChildren();
for (var i = 0; i < children.length; i++) {
var parent = children[i];
result = parent.isChildTopic(childTopic);
if (result) {
break;
}
}
}
return result;
},
isCentralTopic:function () {
return this.getModel().getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE;
}
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -41,12 +41,12 @@ mindplot.TopicFeature = {
});
},
createModel:function (id, attributes) {
$assert(id, 'type can not be null');
createModel:function (type, attributes) {
$assert(type, 'type can not be null');
$assert(attributes, 'attributes can not be null');
var model = mindplot.TopicFeature._featuresMetadataById.filter(function (elem) {
return elem.id == id;
return elem.id == type;
})[0].model;
return new model(attributes);
},

View File

@@ -0,0 +1,132 @@
/*
* 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.TopicStyle = new Class({
Static:{
_getStyles:function (topic) {
$assert(topic, "topic can not be null");
var result;
if (topic.isCentralTopic()) {
result = mindplot.TopicStyle.STYLES.CENTRAL_TOPIC;
} else {
var targetTopic = topic.getOutgoingConnectedTopic();
if ($defined(targetTopic)) {
if (targetTopic.isCentralTopic()) {
result = mindplot.TopicStyle.STYLES.MAIN_TOPIC;
} else {
result = mindplot.TopicStyle.STYLES.SUB_TOPIC;
}
} else {
result = mindplot.TopicStyle.STYLES.ISOLATED_TOPIC;
}
}
return result;
},
defaultText:function (topic) {
var msgKey = this._getStyles(topic).msgKey;
return $msg(msgKey);
},
defaultFontStyle:function (topic) {
return this._getStyles(topic).fontStyle;
},
defaultBackgroundColor:function (topic) {
return this._getStyles(topic).backgroundColor;
},
defaultBorderColor:function (topic) {
return this._getStyles(topic).borderColor;
},
getInnerPadding:function (topic) {
return this._getStyles(topic).innerPadding;
},
defaultShapeType:function (topic) {
return this._getStyles(topic).shapeType;
}
}
});
mindplot.TopicStyle.STYLES =
{
CENTRAL_TOPIC:{
borderColor:'rgb(57,113,177)',
backgroundColor:'rgb(80,157,192)',
fontStyle:{
font:"Verdana",
size:10,
style:"normal",
weight:"bold",
color:"#ffffff"
},
msgKey:'CENTRAL_TOPIC',
innerPadding:11,
shapeType:mindplot.model.TopicShape.ROUNDED_RECT
},
MAIN_TOPIC:{
borderColor:'rgb(2,59,185)',
backgroundColor:'rgb(224,229,239)',
fontStyle:{
font:"Arial",
size:8,
style:"normal",
weight:"normal",
color:"rgb(82,92,97)"
},
msgKey:'MAIN_TOPIC',
innerPadding:3,
shapeType:mindplot.model.TopicShape.LINE
},
SUB_TOPIC:{
borderColor:'rgb(2,59,185)',
backgroundColor:'rgb(224,229,239)',
fontStyle:{
font:"Arial",
size:6,
style:"normal",
weight:"normal",
color:"rgb(82,92,97)"
},
msgKey:'SUB_TOPIC',
innerPadding:3,
shapeType:mindplot.model.TopicShape.LINE
},
ISOLATED_TOPIC:{
borderColor:'rgb(2,59,185)',
backgroundColor:'rgb(224,229,239)',
fontStyle:{
font:"Verdana",
size:8,
style:"normal",
weight:"normal",
color:"rgb(82,92,97)"
},
msgKey:'ISOLATED_TOPIC',
innerPadding:4,
shapeType:mindplot.model.TopicShape.LINE
}
};

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -18,7 +18,7 @@
mindplot.commands.AddFeatureToTopicCommand = new Class({
Extends:mindplot.Command,
initialize: function(topicId, featureType, attributes) {
initialize:function (topicId, featureType, attributes) {
$assert($defined(topicId), 'topicId can not be null');
$assert(featureType, 'featureType can not be null');
@@ -28,15 +28,21 @@ mindplot.commands.AddFeatureToTopicCommand = new Class({
this._topicId = topicId;
this._featureType = featureType;
this._attributes = attributes;
this._featureModel = null;
},
execute: function(commandContext) {
execute:function (commandContext) {
var topic = commandContext.findTopics(this._topicId)[0];
var icon = topic.addFeature(this._featureType, this._attributes);
this._featureModel = icon.getModel();
// Feature must be created only one time.
if (!this._featureModel) {
var model = topic.getModel();
this._featureModel = model.createFeature(this._featureType, this._attributes);
}
topic.addFeature(this._featureModel);
},
undoExecute: function(commandContext) {
undoExecute:function (commandContext) {
var topic = commandContext.findTopics(this._topicId)[0];
topic.removeFeature(this._featureModel);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -32,7 +32,7 @@ mindplot.commands.AddTopicCommand = new Class({
this._models.each(function (model, index) {
// Add a new topic ...
var topic = commandContext.createTopic(model, false);
var topic = commandContext.createTopic(model);
// Connect to topic ...
if (this._parentsIds) {
@@ -43,14 +43,14 @@ mindplot.commands.AddTopicCommand = new Class({
}
}
// Finally, focus ...
// Select just created node ...
var designer = commandContext._designer;
var fade = new mindplot.util.FadeEffect([topic, topic.getOutgoingLine()], true);
fade.addEvent('complete', function () {
designer.onObjectFocusEvent(topic);
topic.setOnFocus(true);
});
fade.start();
designer.onObjectFocusEvent(topic);
topic.setOnFocus(true);
// Render node ...
topic.setVisibility(true);
}.bind(this));
},

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -34,9 +34,11 @@ mindplot.commands.DeleteCommand = new Class({
// If a parent has been selected for deletion, the children must be excluded from the delete ...
var topics = this._filterChildren(this._topicIds, commandContext);
if (topics.length > 0) {
topics.each(function (topic) {
// In case that it's editing text node, force close without update ...
topic.closeEditors();
var model = topic.getModel();
// Delete relationships
@@ -76,24 +78,40 @@ mindplot.commands.DeleteCommand = new Class({
undoExecute:function (commandContext) {
var parent = commandContext.findTopics(this._parentTopicIds);
this._deletedTopicModels.each(function (model, index) {
var topic = commandContext.createTopic(model);
// Was the topic connected?
var parentTopic = parent[index];
if (parentTopic != null) {
commandContext.connect(topic, parentTopic);
topic.setOnFocus(true);
}
// Add all the topics ...
this._deletedTopicModels.each(function (model) {
commandContext.createTopic(model);
}, this);
// Do they need to be connected ?
this._deletedTopicModels.each(function (topicModel, index) {
var topics = commandContext.findTopics(topicModel.getId());
var parentId = this._parentTopicIds[index];
if (parentId) {
var parentTopics = commandContext.findTopics(parentId);
commandContext.connect(topics[0], parentTopics[0]);
}
}, this);
// Add rebuild relationships ...
this._deletedRelModel.each(function (model) {
commandContext.addRelationship(model);
}.bind(this));
// Finally display the topics ...
this._deletedTopicModels.each(function (topicModel) {
var topics = commandContext.findTopics(topicModel.getId());
topics[0].setBranchVisibility(true);
}, this);
// Focus on last recovered topic ..
if (this._deletedTopicModels.length > 0) {
var firstTopic = this._deletedTopicModels[0];
var topic = commandContext.findTopics(firstTopic.getId())[0];
topic.setOnFocus(true);
}
this._deletedTopicModels = [];
this._parentTopicIds = [];
this._deletedRelModel = [];
@@ -124,15 +142,13 @@ mindplot.commands.DeleteCommand = new Class({
_collectInDepthRelationships:function (topic) {
var result = [];
result.append(topic.getRelationships());
var children = topic.getChildren();
if (children.length > 0) {
var rels = children.map(function (topic) {
return this._collectInDepthRelationships(topic);
}, this);
result.append(rels.flatten());
} else {
result.append(topic.getRelationships());
}
var rels = children.map(function (topic) {
return this._collectInDepthRelationships(topic);
}, this);
result.append(rels.flatten());
return result;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -18,22 +18,22 @@
mindplot.commands.DragTopicCommand = new Class({
Extends:mindplot.Command,
initialize:function (topicIds, position, order, parentTopic) {
$assert(topicIds, "topicIds must be defined");
initialize:function (topicId, position, order, parentTopic) {
$assert(topicId, "topicId must be defined");
this._topicsIds = topicIds;
this._topicsId = topicId;
if ($defined(parentTopic))
this._parentId = parentTopic.getId();
this.parent();
this._position = position;
this._order = order;
this._id = mindplot.Command._nextUUID();
},
execute:function (commandContext) {
var topic = commandContext.findTopics([this._topicsIds])[0];
var topic = commandContext.findTopics(this._topicsId)[0];
topic.setVisibility(false);
// Save old position ...
var origParentTopic = topic.getOutgoingConnectedTopic();
@@ -60,7 +60,7 @@ mindplot.commands.DragTopicCommand = new Class({
if (origParentTopic != this._parentId) {
if ($defined(this._parentId)) {
var parentTopic = commandContext.findTopics([this._parentId])[0];
var parentTopic = commandContext.findTopics(this._parentId)[0];
commandContext.connect(topic, parentTopic);
}
@@ -70,6 +70,7 @@ mindplot.commands.DragTopicCommand = new Class({
this._parentId = origParentTopic.getId();
}
}
topic.setVisibility(true);
// Store for undo ...
this._order = origOrder;

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -18,35 +18,51 @@
mindplot.commands.GenericFunctionCommand = new Class({
Extends:mindplot.Command,
initialize: function(commandFunc, topicsIds,value) {
initialize:function (commandFunc, topicsIds, value) {
$assert(commandFunc, "commandFunc must be defined");
$assert($defined(topicsIds), "topicsIds must be defined");
this.parent();
this._value = value;
this._topicsIds = topicsIds;
this._topicsId = topicsIds;
this._commandFunc = commandFunc;
this._oldValues = [];
},
execute: function(commandContext) {
execute:function (commandContext) {
if (!this.applied) {
var topics = commandContext.findTopics(this._topicsIds);
topics.each(function(topic) {
var oldValue = this._commandFunc(topic, this._value);
this._oldValues.push(oldValue);
}.bind(this));
var topics = null;
try {
topics = commandContext.findTopics(this._topicsId);
} catch (e) {
if (this._commandFunc.commandType != "changeTextToTopic") {
// Workaround: For some reason, there is a combination of events that involves
// making some modification and firing out of focus event. This is causing
// that a remove node try to be removed. In some other life, I will come with the solution.
// Almost aways occurs with IE9. I could be related with some change of order in sets o something similar.
throw e;
}
}
if (topics != null) {
topics.each(function (topic) {
var oldValue = this._commandFunc(topic, this._value);
this._oldValues.push(oldValue);
}.bind(this));
}
this.applied = true;
} else {
throw "Command can not be applied two times in a row.";
}
},
undoExecute: function(commandContext) {
undoExecute:function (commandContext) {
if (this.applied) {
var topics = commandContext.findTopics(this._topicsIds);
topics.each(function(topic, index) {
var topics = commandContext.findTopics(this._topicsId);
topics.each(function (topic, index) {
this._commandFunc(topic, this._oldValues[index]);
}.bind(this));

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -18,7 +18,7 @@
mindplot.commands.RemoveFeatureFromTopicCommand = new Class({
Extends:mindplot.Command,
initialize: function(topicId, featureId) {
initialize:function (topicId, featureId) {
$assert($defined(topicId), 'topicId can not be null');
$assert(featureId, 'iconModel can not be null');
@@ -28,19 +28,16 @@ mindplot.commands.RemoveFeatureFromTopicCommand = new Class({
this._oldFeature = null;
},
execute: function(commandContext) {
execute:function (commandContext) {
var topic = commandContext.findTopics(this._topicId)[0];
var feature = topic.findFeatureById(this._featureId);
topic.removeFeature(feature);
this._oldFeature = feature;
},
undoExecute: function(commandContext) {
undoExecute:function (commandContext) {
var topic = commandContext.findTopics(this._topicId)[0];
var feature = this._oldFeature;
topic.addFeature(feature.getType(), feature.getAttributes());
topic.addFeature(this._oldFeature);
this._oldFeature = null;
}
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -84,7 +84,7 @@ mindplot.layout.RootedTreeSet = new Class({
}
}
validate = !$defined(validate) ? true : validate;
$assert(validate ? result : true, 'node could not be found id:' + id);
$assert(validate ? result : true, 'node could not be found id:' + id + "\n,RootedTreeSet" + this.dump());
return result;
},

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -17,54 +17,60 @@
*/
mindplot.model.FeatureModel = new Class({
initialize:function(type) {
$assert(type, 'type can not be null');
Static:{
_nextUUID:function () {
if (!$defined(mindplot.model.FeatureModel._uuid)) {
mindplot.model.FeatureModel._uuid = 0;
}
mindplot.model.FeatureModel._uuid = mindplot.model.FeatureModel._uuid + 1;
return mindplot.model.FeatureModel._uuid;
}
},
initialize:function (type) {
$assert(type, 'type can not be null');
this._id = mindplot.model.FeatureModel._nextUUID();
this._type = type;
this._attributes = {};
// Create type method ...
this['is' + type.camelCase() + 'Model'] = function() {
this['is' + type.camelCase() + 'Model'] = function () {
return true;
};
},
getAttributes : function() {
getAttributes:function () {
return Object.clone(this._attributes);
},
setAttributes : function(attributes) {
setAttributes:function (attributes) {
for (key in attributes) {
this["set" + key.capitalize()](attributes[key]);
}
},
setAttribute : function(key, value) {
setAttribute:function (key, value) {
$assert(key, 'key id can not be null');
this._attributes[key] = value;
},
getAttribute : function(key) {
getAttribute:function (key) {
$assert(key, 'key id can not be null');
return this._attributes[key];
},
getId : function() {
getId:function () {
return this._id;
},
getType:function() {
setId:function (id) {
this._id = id;
},
getType:function () {
return this._type;
}
});
mindplot.model.FeatureModel._nextUUID = function() {
if (!$defined(this._uuid)) {
this._uuid = 0;
}
this._uuid = this._uuid + 1;
return this._uuid;
};
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -17,17 +17,17 @@
*/
mindplot.model.IconModel = new Class({
Extends: mindplot.model.FeatureModel,
initialize:function(attributes) {
Extends:mindplot.model.FeatureModel,
initialize:function (attributes) {
this.parent(mindplot.model.IconModel.FEATURE_TYPE);
this.setIconType(attributes.id);
},
getIconType : function() {
getIconType:function () {
return this.getAttribute('id');
},
setIconType : function(iconType) {
setIconType:function (iconType) {
$assert(iconType, 'iconType id can not be null');
this.setAttribute('id', iconType);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -17,33 +17,37 @@
*/
mindplot.model.LinkModel = new Class({
Extends: mindplot.model.FeatureModel,
initialize : function(attributes) {
Extends:mindplot.model.FeatureModel,
initialize:function (attributes) {
this.parent(mindplot.model.LinkModel.FEATURE_TYPE);
this.setUrl(attributes.url);
},
getUrl : function() {
getUrl:function () {
return this.getAttribute('url');
},
setUrl : function(url) {
setUrl:function (url) {
$assert(url, 'url can not be null');
var fixedUrl = this._fixUrl(url);
this.setAttribute('url', fixedUrl);
var type = fixedUrl.contains('mailto:') ? 'mail' : 'url';
this.setAttribute('type', type);
this.setAttribute('urlType', type);
},
_fixUrl : function(url) {
_fixUrl:function (url) {
var result = url;
if (!result.contains('http://') && !result.contains('https://') && !result.contains('mailto://')) {
result = "http://" + result;
}
return result;
},
setUrlType:function (urlType) {
$assert(urlType, 'urlType can not be null');
this.setAttribute('urlType', urlType);
}
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -47,7 +47,12 @@ mindplot.model.NodeModel = new Class({
removeFeature:function (feature) {
$assert(feature, 'feature can not be null');
this._feature.erase(feature);
var size = this._feature.length;
this._feature = this._feature.filter(function (f) {
return feature.getId() != f.getId();
});
$assert(size - 1 == this._feature.length, 'Could not be removed ...');
},
findFeatureByType:function (type) {
@@ -59,9 +64,11 @@ mindplot.model.NodeModel = new Class({
findFeatureById:function (id) {
$assert($defined(id), 'id can not be null');
return this._feature.filter(function (feature) {
var result = this._feature.filter(function (feature) {
return feature.getId() == id;
})[0];
});
$assert(result.length == 1, "Feature could not be found:" + id);
return result[0]
},
getPropertiesKeys:function () {
@@ -142,33 +149,6 @@ mindplot.model.NodeModel = new Class({
this._parent = parent;
},
canBeConnected:function (sourceModel, sourcePosition, targetTopicSize) {
$assert(sourceModel != this, 'The same node can not be parent and child if itself.');
$assert(sourcePosition, 'childPosition can not be null.');
$assert(targetTopicSize, 'targetTopicSize can not be null.');
var result = false;
// Only can be connected if the node is in the left or right.
var targetModel = this;
var targetPosition = targetModel.getPosition();
// Finally, check current node position ...
var yDistance = Math.abs(sourcePosition.y - targetPosition.y);
var gap = 35 + targetTopicSize.height / 2;
if (targetModel.getChildren().length > 0) {
gap += Math.abs(targetPosition.y - targetModel.getChildren()[0].getPosition().y);
}
if (yDistance <= gap) {
// Circular connection ?
var xDistance = (sourcePosition.x - targetPosition.x) * Math.sign(targetPosition.x);
result = xDistance > targetTopicSize.width;
}
return result;
},
_isChildNode:function (node) {
var result = false;
if (node == this) {

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -16,19 +16,37 @@
* limitations under the License.
*/
mindplot.persistence.Beta2PelaMigrator = new Class({
initialize : function(betaSerializer) {
initialize:function (betaSerializer) {
this._betaSerializer = betaSerializer;
this._pelaSerializer = new mindplot.persistence.XMLSerializer_Pela();
},
toXML : function(mindmap) {
toXML:function (mindmap) {
return this._pelaSerializer.toXML(mindmap);
},
loadFromDom : function(dom, mapId) {
loadFromDom:function (dom, mapId) {
$assert($defined(mapId), "mapId can not be null");
var mindmap = this._betaSerializer.loadFromDom(dom, mapId);
mindmap.setVersion(mindplot.persistence.ModelCodeName.PELA);
// Beta does not set position on second level nodes ...
var branches = mindmap.getBranches();
branches.each(function (model) {
this._fixPosition(model);
}.bind(this));
return mindmap;
},
_fixPosition:function (parentModel) {
var parentPos = parentModel.getPosition();
var isRight = parentPos.x > 0;
parentModel.getChildren().each(function (child) {
if (!child.getPosition()) {
child.setPosition(parentPos.x + (50 * isRight ? 1 : -1), parentPos.y);
}
this._fixPosition(child);
}.bind(this));
}
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,4 +1,4 @@
/* Copyright [2011] [wisemapping]
/* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -162,17 +162,19 @@ mindplot.persistence.XMLSerializer_Beta = new Class({
$assert(dom, "Dom can not be null");
$assert(mapId, "mapId can not be null");
var rootElem = dom.documentElement;
// Is a valid object ?
var documentElement = dom.documentElement;
$assert(documentElement.nodeName != "parsererror", "Error while parsing: '" + documentElement.childNodes[0].nodeValue);
// Is a wisemap?.
$assert(rootElem.tagName == mindplot.persistence.XMLSerializer_Beta.MAP_ROOT_NODE, "This seem not to be a map document. Root Tag:" + rootElem.tagName);
$assert(documentElement.tagName == mindplot.persistence.XMLSerializer_Beta.MAP_ROOT_NODE, "This seem not to be a map document. Root Tag: '" + documentElement.tagName);
// Start the loading process ...
var version = rootElem.getAttribute("version");
var version = documentElement.getAttribute("version");
version = !$defined(version) ? mindplot.persistence.ModelCodeName.BETA : version;
var mindmap = new mindplot.model.Mindmap(mapId, version);
var children = rootElem.childNodes;
var children = documentElement.childNodes;
for (var i = 0; i < children.length; i++) {
var child = children[i];
if (child.nodeType == 1) {

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -66,7 +66,7 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
// Set topic attributes...
if (topic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
parentTopic.setAttribute("central", true);
parentTopic.setAttribute('central', 'true');
} else {
var pos = topic.getPosition();
@@ -93,7 +93,7 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
}
if (topic.areChildrenShrunken()) {
parentTopic.setAttribute('shrink', true);
parentTopic.setAttribute('shrink', 'true');
}
// Font properties ...
@@ -255,33 +255,35 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
}
var topic = mindmap.createNode(type, id);
// Set text property is it;s defined...
var text = domElem.getAttribute('text');
if ($defined(text) && text) {
topic.setText(text);
}
var fontStyle = domElem.getAttribute('fontStyle');
if ($defined(fontStyle)) {
var font = fontStyle.split(';');
var fontStyle = domElem.getAttribute('fontStyle');
if ($defined(fontStyle) && fontStyle) {
var font = fontStyle.split(';');
if (font[0]) {
topic.setFontFamily(font[0]);
}
if (font[0]) {
topic.setFontFamily(font[0]);
}
if (font[1]) {
topic.setFontSize(font[1]);
}
if (font[1]) {
topic.setFontSize(font[1]);
}
if (font[2]) {
topic.setFontColor(font[2]);
}
if (font[2]) {
topic.setFontColor(font[2]);
}
if (font[3]) {
topic.setFontWeight(font[3]);
}
if (font[3]) {
topic.setFontWeight(font[3]);
}
if (font[4]) {
topic.setFontStyle(font[4]);
}
if (font[4]) {
topic.setFontStyle(font[4]);
}
}
@@ -430,8 +432,8 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
if ($defined(destCtrlPoint) && destCtrlPoint != "") {
model.setDestCtrlPoint(core.Point.fromString(destCtrlPoint));
}
model.setEndArrow(endArrow == "true");
model.setStartArrow(startArrow == "true");
model.setEndArrow('false');
model.setStartArrow('true');
return model;
}
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -17,37 +17,37 @@
*/
mindplot.widget.FloatingTip = new Class({
Implements: [Options, Events],
Implements:[Options, Events],
options: {
position: 'top',
center: true,
content: 'title',
html: false,
balloon: true,
arrowSize: 6,
arrowOffset: 6,
distance: 7,
motion: 40,
motionOnShow: true,
motionOnHide: true,
showOn: 'mouseenter',
hideOn: 'mouseleave',
showDelay: 500,
hideDelay: 250,
className: 'floating-tip',
offset: {x: 0, y: 0},
preventHideOnOver: true,
fx: { 'duration': 'short' }
options:{
position:'top',
center:true,
content:'title',
html:false,
balloon:true,
arrowSize:6,
arrowOffset:6,
distance:7,
motion:40,
motionOnShow:true,
motionOnHide:true,
showOn:'mouseenter',
hideOn:'mouseleave',
showDelay:500,
hideDelay:250,
className:'floating-tip',
offset:{x:0, y:0},
preventHideOnOver:true,
fx:{ 'duration':'short' }
},
initialize: function(element, options) {
initialize:function (element, options) {
this.setOptions(options);
this.boundShow = function() {
this.boundShow = function () {
this.show(element);
}.bind(this);
this.boundHide = function() {
this.boundHide = function () {
this.hide(element);
}.bind(this);
@@ -56,7 +56,7 @@ mindplot.widget.FloatingTip = new Class({
this.attach(element);
},
attach: function(element) {
attach:function (element) {
if (element.retrieve('hasEvents') !== null) {
return;
}
@@ -65,11 +65,13 @@ mindplot.widget.FloatingTip = new Class({
element.store('hasEvents', true);
},
show: function(element) {
show:function (element) {
var old = element.retrieve('floatingtip');
if (old) if (old.getStyle('opacity') == 1) {
clearTimeout(old.retrieve('timeout'));
return this;
if (old){
if (old.getStyle('opacity') == 1) {
clearTimeout(old.retrieve('timeout'));
return this;
}
}
var tip = this._create(element);
if (tip == null)
@@ -87,7 +89,7 @@ mindplot.widget.FloatingTip = new Class({
return this;
},
hide: function(element) {
hide:function (element) {
var tip = element.retrieve('floatingtip');
if (!tip) {
if (this.options.position == 'inside') {
@@ -96,7 +98,8 @@ mindplot.widget.FloatingTip = new Class({
tip = element.retrieve('floatingtip');
} catch (x) {
}
if (!tip) return this;
if (!tip)
return this;
} else {
return this;
}
@@ -106,7 +109,7 @@ mindplot.widget.FloatingTip = new Class({
return this;
},
_create: function(elem) {
_create:function (elem) {
var o = this.options;
var oc = o.content;
@@ -114,13 +117,14 @@ mindplot.widget.FloatingTip = new Class({
if (oc == 'title') {
oc = 'floatingtitle';
if (!elem.get('floatingtitle')) elem.setProperty('floatingtitle', elem.get('title'));
if (!elem.get('floatingtitle'))
elem.setProperty('floatingtitle', elem.get('title'));
elem.set('title', '');
}
var cnt = (typeof(oc) == 'string' ? elem.get(oc) : oc(elem));
var cwr = new Element('div').addClass(o.className).setStyle('margin', 0);
var tip = new Element('div').addClass(o.className + '-wrapper').setStyles({ 'margin': 0, 'padding': 0, 'z-index': cwr.getStyle('z-index') }).adopt(cwr);
var tip = new Element('div').addClass(o.className + '-wrapper').setStyles({ 'margin':0, 'padding':0, 'z-index':cwr.getStyle('z-index') }).adopt(cwr);
if (cnt) {
if (o.html)
@@ -132,12 +136,12 @@ mindplot.widget.FloatingTip = new Class({
}
var body = document.id(document.body);
tip.setStyles({ 'position': 'absolute', 'opacity': 0, 'top': 0, 'left': 0 }).inject(body);
tip.setStyles({ 'position':'absolute', 'opacity':0, 'top':0, 'left':0 }).inject(body);
if (o.balloon && !Browser.ie6) {
var trg = new Element('div').addClass(o.className + '-triangle').setStyles({ 'margin': 0, 'padding': 0 });
var trgSt = { 'border-color': cwr.getStyle('background-color'), 'border-width': o.arrowSize, 'border-style': 'solid','width': 0, 'height': 0 };
var trg = new Element('div').addClass(o.className + '-triangle').setStyles({ 'margin':0, 'padding':0 });
var trgSt = { 'border-color':cwr.getStyle('background-color'), 'border-width':o.arrowSize, 'border-style':'solid', 'width':0, 'height':0 };
switch (opos) {
case 'inside':
@@ -191,12 +195,12 @@ mindplot.widget.FloatingTip = new Class({
trgC.height = !$defined(trgC.height) ? 0 : trgC.height;
trgC.width = !$defined(trgC.width) ? 0 : trgC.width;
var pos = { x: trgC.left + o.offset.x, y: trgC.top + o.offset.y };
var pos = { x:trgC.left + o.offset.x, y:trgC.top + o.offset.y };
if (opos == 'inside') {
tip.setStyles({ 'width': tip.getStyle('width'), 'height': tip.getStyle('height') });
tip.setStyles({ 'width':tip.getStyle('width'), 'height':tip.getStyle('height') });
elem.setStyle('position', 'relative').adopt(tip);
pos = { x: o.offset.x, y: o.offset.y };
pos = { x:o.offset.x, y:o.offset.y };
} else {
switch (opos) {
case 'top':
@@ -232,19 +236,19 @@ mindplot.widget.FloatingTip = new Class({
}
tip.set('morph', o.fx).store('position', pos);
tip.setStyles({ 'top': pos.y, 'left': pos.x });
tip.setStyles({ 'top':pos.y, 'left':pos.x });
return tip;
},
_animate: function(tip, d) {
_animate:function (tip, d) {
clearTimeout(tip.retrieve('timeout'));
tip.store('timeout', (function(t) {
tip.store('timeout', (function (t) {
var o = this.options, din = (d == 'in');
var m = { 'opacity': din ? 1 : 0 };
var m = { 'opacity':din ? 1 : 0 };
if ((o.motionOnShow && din) || (o.motionOnHide && !din)) {
var pos = t.retrieve('position');
@@ -267,7 +271,7 @@ mindplot.widget.FloatingTip = new Class({
}
t.morph(m);
if (!din) t.get('morph').chain(function() {
if (!din) t.get('morph').chain(function () {
this.dispose();
}.bind(t));

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the

Some files were not shown because too many files have changed in this diff Show More