408 Commits

Author SHA1 Message Date
Paulo Gustavo Veiga
efe562f057 Minor fix. 2013-02-20 14:20:11 -03:00
Paulo Gustavo Veiga
d2b7b640d9 Fix print issue loading cached maps. 2013-02-20 14:16:00 -03:00
Paulo Gustavo Veiga
79f5e51513 Finish LDAP support. 2013-02-20 13:15:31 -03:00
Paulo Gustavo Veiga
0f605d89f0 Enable security configuration from properties. 2013-02-17 23:10:04 -03:00
Paulo Gustavo Veiga
cb6828c08e Minor fixes
Update Spring 3.1.3 fixed.
2013-02-17 21:26:42 -03:00
Paulo Gustavo Veiga
3ff67910c9 Add LDAP support. 2013-02-17 21:00:08 -03:00
Paulo Gustavo Veiga
51f531f6b4 Fix revert on zip format. 2013-02-13 23:13:27 -03:00
Paulo Gustavo Veiga
fc22dd32a2 Compiles. 2013-02-13 23:08:55 -03:00
Paulo Gustavo Veiga
deca7e51b2 Fix npe. 2013-02-13 23:06:18 -03:00
Paulo Gustavo Veiga
28ffead0a0 Fix npe. 2013-02-13 22:51:55 -03:00
Paulo Gustavo Veiga
d1dfb48be5 Add new files. 2013-02-13 22:46:45 -03:00
Paulo Gustavo Veiga
9360a27f15 Show more rows on history. 2013-02-13 21:41:47 -03:00
Paulo Gustavo Veiga
cc8ff94b10 Fix encoding issue on import. 2013-02-11 13:25:07 -03:00
Paulo Gustavo Veiga
f245116e48 Fix deleted object would be re-saved by cascade (remove deleted object from associations): [com.wisemapping.model.Collaboration#114902]; nested exception is org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade (remove deleted object from associations): [com.wisemapping.model.Collaboration#114902] 2013-02-10 16:14:32 -03:00
Paulo Gustavo Veiga
7bd87c50ac - Disable cache ... 2013-02-10 15:24:37 -03:00
Paulo Gustavo Veiga
86d5c98ed7 - Fix security issues when the map is loaded from the rest service. Two URL has been defined for each type of access. 2013-02-07 21:56:36 -03:00
Paulo Gustavo Veiga
5d05f21803 - Fix security issues when the map is loaded from the rest service. Two URL has been defined for each type of access. 2013-02-07 21:44:20 -03:00
Paulo Gustavo Veiga
6e2880c8cc - Review security for print. This is required for enable public sharing of maps. The issue is when the map is not public in the editor. 2013-02-03 17:47:48 -03:00
Paulo Gustavo Veiga
87ce3fc0a9 - Print is not public
- Public maps now are shared using REST
2013-02-03 17:33:19 -03:00
Paulo Gustavo Veiga
92849b02eb Finish moving mindmap loading to rest. 2013-02-03 13:47:31 -03:00
Paulo Gustavo Veiga
829655f253 Add dummy parameter when the service is readOnly. 2013-02-03 13:19:24 -03:00
Paulo Gustavo Veiga
b4bdad796e Use the same PersitenceManager for public maps. 2013-02-03 12:54:46 -03:00
Paulo Gustavo Veiga
d52e2c04a6 Fix encoding on returning maps. 2013-02-03 12:51:12 -03:00
Paulo Gustavo Veiga
edc3351fd8 Fix httpBase servlet request property. 2013-02-03 12:38:04 -03:00
Paulo Gustavo Veiga
73a664ab97 Minor fix. 2013-01-31 22:57:49 -03:00
Paulo Gustavo Veiga
cabca992d1 Map are loaded using Rest service. 2013-01-31 22:50:21 -03:00
Paulo Gustavo Veiga
e734ea350c Add /f secuence scape. 2013-01-31 20:27:17 -03:00
Paulo Gustavo Veiga
ac7af5b8f1 Minor fix. 2013-01-31 20:10:50 -03:00
Paulo Gustavo Veiga
43e9f8fcad Fix firefox issue with \b caracters. 2013-01-31 20:01:15 -03:00
Paulo Gustavo Veiga
7a401b648e Copy and Paste of nodes was not working. Fixed. 2013-01-31 15:44:43 -03:00
Paulo Gustavo Veiga
82ff47220d Disable browser cache. 2013-01-31 14:49:04 -03:00
Paulo Gustavo Veiga
f3d88e91c4 Fix typo 2013-01-26 01:07:29 -03:00
Paulo Gustavo Veiga
37419cba66 Fix delete issue removing in hsql. History is now removed in advance. 2013-01-26 00:52:05 -03:00
Paulo Gustavo Veiga
8b0465bda6 Fix null object reference on editor. 2012-12-02 21:59:21 -03:00
Paulo Gustavo Veiga
765b1fc80e Exported images are now centered. 2012-12-02 16:37:09 -03:00
Paulo Gustavo Veiga
0d8b6b210e - Add metadata descriptor to template page
- Add png export tests.
2012-12-01 19:09:31 -03:00
Paulo Gustavo Veiga
d2c287684f Improve img quality export. 2012-12-01 17:58:01 -03:00
Paulo Gustavo Veiga
bad11bea88 Fix freemind import/export notes. 2012-12-01 17:22:54 -03:00
Paulo Gustavo Veiga
6c1188314b Control attributes order for freemind serialization. 2012-12-01 16:25:37 -03:00
Paulo Gustavo Veiga
f4f97d3112 Add disclamer for tutotial video reproduction. 2012-11-30 22:25:45 -03:00
Paulo Gustavo Veiga
a958fcbd6e Minor typo. 2012-11-30 22:11:30 -03:00
Paulo Gustavo Veiga
02b31e463b Add help icon to the toolbar. 2012-11-30 22:08:51 -03:00
Paulo Gustavo Veiga
6fe53446ce Add link to tutorial video. 2012-11-30 22:03:11 -03:00
Paulo Gustavo Veiga
5d62bf520a Fix collapsed nodes. 2012-11-28 22:14:52 -03:00
Paulo Gustavo Veiga
12448fc6cb Central node never can be collapsed. 2012-11-28 22:09:29 -03:00
Paulo Gustavo Veiga
ebd6f886d5 Try to fix issues with encoding. 2012-11-28 21:45:13 -03:00
Paulo Gustavo Veiga
66e4b0fb19 Update to Spring 3.1.2 2012-11-26 10:43:50 -03:00
Paulo Gustavo Veiga
f34ec25610 Add new icon. 2012-11-24 14:36:18 -03:00
Paulo Gustavo Veiga
46264991b9 Pogress SQL fix. 2012-11-24 14:16:49 -03:00
Paulo Gustavo Veiga
b9748ca23a Add some documentation for password reset. 2012-11-24 12:56:12 -03:00
Paulo Gustavo Veiga
fe99c9a238 Fix zoom issue. 2012-11-22 00:46:24 -03:00
Paulo Gustavo Veiga
9f495f1e76 Fix event error on firefox 1.6. 2012-11-22 00:30:49 -03:00
Paulo Gustavo Veiga
dd1698b5d9 Fix sharing. 2012-11-22 00:22:39 -03:00
Paulo Gustavo Veiga
c5bf91a9fe Disable debug info. 2012-11-22 00:12:12 -03:00
Paulo Gustavo Veiga
ac8309819c Fix Firefox issue with null values. 2012-11-22 00:05:46 -03:00
Paulo Gustavo Veiga
e1e9c9ebeb Minot fix. 2012-11-20 00:17:33 -03:00
Paulo Gustavo Veiga
4062b6771c Fix some issues. 2012-11-20 00:11:06 -03:00
Paulo Gustavo Veiga
0cdabba5eb Fix issue in embedded and public view toolbar. 2012-11-20 00:02:42 -03:00
Paulo Gustavo Veiga
064b8f1071 Change add nodes toolbar action. 2012-11-19 23:31:10 -03:00
Paulo Gustavo Veiga
c3dcd8f3a9 Fix i18n encodding issue. 2012-11-19 22:47:20 -03:00
Paulo Gustavo Veiga
b717a5f910 Remove add from editor. 2012-11-19 21:59:40 -03:00
Paulo Gustavo Veiga
1602421544 Another try. 2012-11-19 21:56:39 -03:00
Paulo Gustavo Veiga
fe44da9b43 Move add to right. 2012-11-19 21:49:56 -03:00
Paulo Gustavo Veiga
2a8ae4c397 Change add location. 2012-11-19 21:19:30 -03:00
Paulo Gustavo Veiga
7f7a67872e Reset all edition actions before delete. 2012-11-18 20:58:23 -03:00
Paulo Gustavo Veiga
322b0ba13e Fix wrong debug transformation. 2012-11-18 20:17:16 -03:00
Paulo Gustavo Veiga
0aa2d67698 Add a small add to test. 2012-11-18 19:29:10 -03:00
Paulo Gustavo Veiga
3c0055b767 Disable ads. 2012-11-18 18:54:56 -03:00
Paulo Gustavo Veiga
2549305621 Add more adds . 2012-11-18 13:38:17 -03:00
Paulo Gustavo Veiga
42564b2759 Fix stared issue. 2012-11-18 13:25:57 -03:00
Paulo Gustavo Veiga
032df5fdf4 Do not update map tiemstamp on map metadata modification. 2012-11-17 21:28:23 -03:00
Paulo Gustavo Veiga
dbbe8901b7 Move add to fixed. 2012-11-17 18:00:55 -03:00
Paulo Gustavo Veiga
91f27c4e10 Fix ads on editor. 2012-11-17 17:47:11 -03:00
Paulo Gustavo Veiga
91aeddee70 Avoid scrolling on drag. 2012-11-17 17:18:40 -03:00
Paulo Gustavo Veiga
fab3c96097 Minor fix for add. 2012-11-17 15:57:02 -03:00
Paulo Gustavo Veiga
b89b08b7b3 Add add to login page and editor page. 2012-11-17 15:43:06 -03:00
Paulo Gustavo Veiga
ed37b20dfc Add debug info. 2012-11-17 14:38:34 -03:00
Paulo Gustavo Veiga
f44e616a4b Minor fix. 2012-11-17 13:57:06 -03:00
Paulo Gustavo Veiga
e70f2726a3 Delete command topic. 2012-11-17 13:54:46 -03:00
Paulo Gustavo Veiga
964505abd4 Filter some useless error for debug. 2012-11-17 13:46:02 -03:00
Paulo Gustavo Veiga
ce932e57e0 Fix issue deleting multiple relationships. 2012-11-17 13:42:46 -03:00
Paulo Gustavo Veiga
2ec9e70245 Relationship source position during drag is not positioned in the center anymore. 2012-11-17 12:23:24 -03:00
Paulo Gustavo Veiga
fc6d91f59e Fix relationship central node positioning problem ... 2012-11-17 12:02:59 -03:00
Paulo Gustavo Veiga
f8a6607de9 Fix equals bug. 2012-11-17 09:59:53 -03:00
Paulo Gustavo Veiga
ca0b5bfcbe Undo of a deleted topic keep into account if the nodes are visible or not. 2012-11-17 00:24:17 -03:00
Paulo Gustavo Veiga
be545d7103 Add german message bundle. 2012-11-16 23:44:23 -03:00
Paulo Gustavo Veiga
3832844ee6 Fix german resource. 2012-11-16 23:36:46 -03:00
Paulo Gustavo Veiga
b3234675cc Fix lazy initialization bug. 2012-11-16 23:29:01 -03:00
Paulo Gustavo Veiga
146c6d8a17 Add more debug ... 2012-11-16 23:17:46 -03:00
Paulo Gustavo Veiga
37e11a5b05 Add more debug... 2012-11-16 23:11:45 -03:00
Paulo Gustavo Veiga
ea5f1afa40 Change file encoding to UTF-8. 2012-11-16 23:02:37 -03:00
Paulo Gustavo Veiga
2e0339492d Add german support. 2012-11-16 22:47:18 -03:00
Paulo Gustavo Veiga
f8d6cdebc4 Merge branch 'master' into db-purge 2012-11-16 22:39:19 -03:00
Paulo Gustavo Veiga
58ed80d763 Avoid additional checks ... 2012-11-16 22:37:29 -03:00
Ralf Mueller
61569bc571 Added german language message files. 2012-11-15 16:15:26 +01:00
Paulo Gustavo Veiga
7ba21f85bf Fix 'element could not be removed:[object Object] fixed. 2012-11-14 23:46:28 -03:00
Paulo Gustavo Veiga
2c5f7139d5 Add new priority icons. 2012-11-14 21:19:56 -03:00
Paulo Gustavo Veiga
0c433352c5 Minor fix. 2012-11-14 20:53:59 -03:00
Paulo Gustavo Veiga
07c8a1d8c7 Update session for the same user. 2012-11-14 20:44:59 -03:00
Paulo Gustavo Veiga
6560973237 Replace all User.equals for Collaborator.identityEquality 2012-11-14 20:35:09 -03:00
Paulo Gustavo Veiga
596aeeebc4 Keep fixing user issues. 2012-11-14 20:33:42 -03:00
Paulo Gustavo Veiga
16e59a0879 Fix collaboration equal issue. 2012-11-14 20:17:55 -03:00
Paulo Gustavo Veiga
2861a7b5f9 Fix user comparator. 2012-11-14 20:00:46 -03:00
Paulo Gustavo Veiga
b1172f16cc Fix more lock issues. 2012-11-13 21:01:04 -03:00
Paulo Gustavo Veiga
71762ff629 Add more debug. 2012-11-13 13:44:33 -03:00
Paulo Gustavo Veiga
00fd168489 Keep fixing session issues. 2012-11-13 13:34:35 -03:00
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
Paulo Gustavo Veiga
1fee2bc349 Disable email notifications. 2012-09-02 14:18:54 -03:00
Paulo Gustavo Veiga
dfb5bb7c3a Change tracking info 2012-09-02 02:58:06 -03:00
Paulo Gustavo Veiga
154a442428 Add support for homepage configuration. 2012-09-01 14:38:19 -03:00
Paulo Gustavo Veiga
8839b8d333 Enable Google Boot to craw the site. 2012-09-01 13:01:28 -03:00
Paulo Gustavo Veiga
6c8d556bdb Add more debug. 2012-09-01 11:35:07 -03:00
Paulo Gustavo Veiga
7dfb044ae4 Bug Uncaught text can not be null fixed. 2012-09-01 11:09:47 -03:00
Paulo Gustavo Veiga
c4f4756e4a Bug message: uncaught exception: text can not be null, line:0, : fixed. 2012-09-01 10:17:15 -03:00
Paulo Gustavo Veiga
00829bfcc4 Remove svgXML on get action. 2012-08-31 22:53:56 -03:00
Paulo Gustavo Veiga
b855da47d0 Add more info to notification email. 2012-08-31 20:56:51 -03:00
Paulo Gustavo Veiga
052494a6a5 Fix export problem when the windows is closed. Some code was moved to the iframeDialog. 2012-08-31 20:51:55 -03:00
Paulo Gustavo Veiga
6dce37d794 Add Italian Languange Support. 2012-08-31 20:21:21 -03:00
Paulo Gustavo Veiga
98e29e0dc4 Complete french translation. 2012-08-31 12:52:30 -03:00
Paulo Gustavo Veiga
a580dceaea Move ads div to the footer. 2012-08-31 01:04:57 -03:00
Paulo Gustavo Veiga
7390025bf4 Fix wrong base exception handlers. 2012-08-31 01:00:30 -03:00
Paulo Gustavo Veiga
d1ce3540ed Fix messages locale display.
Add Google Ads.
2012-08-31 00:46:46 -03:00
Paulo Gustavo Veiga
9be46d6822 Fix minor display issue when the list of items is bigger than 10. 2012-08-30 23:40:53 -03:00
Paulo Gustavo Veiga
3efd3ef172 Add google analitycs to the footer. 2012-08-30 23:26:15 -03:00
Paulo Gustavo Veiga
1cb7a3d3d7 - Fix missing translation for welcome map. 2012-08-30 23:19:11 -03:00
Paulo Gustavo Veiga
1e02650800 Fix type in es. 2012-08-30 23:05:25 -03:00
Paulo Gustavo Veiga
65d5ddb604 Fix adding nodes with insert. 2012-08-30 22:30:12 -03:00
Paulo Gustavo Veiga
b808fcdbb8 Remove try from export. 2012-08-30 21:48:21 -03:00
Paulo Gustavo Veiga
45858f393e Improve report information. 2012-08-30 21:23:10 -03:00
Paulo Gustavo Veiga
df52d57a1d Bug java.lang.NullPointerException
at com.wisemapping.exporter.FreemindExporter.addNote(FreemindExporter.java:170)
fixed.
2012-08-30 20:43:56 -03:00
Paulo Gustavo Veiga
4b76fe42bf Failing export tests with CDATA 2012-08-30 08:35:49 -03:00
Paulo Gustavo Veiga
39a8fc1891 Do not serialize isolated relationships. 2012-08-30 08:21:48 -03:00
Paulo Gustavo Veiga
396ed9a147 Fix NPE during export. 2012-08-29 23:51:33 -03:00
Paulo Gustavo Veiga
592886519e - Read only mode remove actions over topic icons
- Fix other JS Injection issues.
2012-08-29 20:30:50 -03:00
Paulo Gustavo Veiga
96de014d52 Fix Javascript Injection bugs. 2012-08-29 19:42:24 -03:00
Paulo Gustavo Veiga
d54a689ace Bug message: this._container is null, line:4594, :http://app.wisemapping.com/js/mindplot-min2.js 2012-08-29 00:48:27 -03:00
Paulo Gustavo Veiga
7e8745f875 Bug message: Uncaught y must be defined, line:8, :http://app.wisemapping.com/js/core.js
TypeError: Cannot call method 'eval' of null
2012-08-28 20:54:57 -03:00
Paulo Gustavo Veiga
4288ad52dc message: uncaught exception: y must be defined, line:0, :
stackTrace()@http://app.wisemapping.com/js/core.js:14
2012-08-28 20:48:34 -03:00
Paulo Gustavo Veiga
0a655ff802 Fix languange resolution problem default. 2012-08-28 09:35:23 -03:00
Paulo Gustavo Veiga
d85dfcba02 Disable error dialog on editor to avoid unnecesary errors. 2012-08-28 09:07:06 -03:00
Paulo Gustavo Veiga
a442c487e4 Fix iframeWindow.submitDialogForm is not a function, line:4, :http://app.wisemapping.com/c/maps/163/edit
null
2012-08-28 08:41:49 -03:00
Paulo Gustavo Veiga
878a040708 Extends exception info ... 2012-08-28 01:34:15 -03:00
Paulo Gustavo Veiga
1555560415 Reported issue during the edition. The node on focus seems not to be always available. 2012-08-28 01:02:00 -03:00
Paulo Gustavo Veiga
ed71bbc775 Bug Do not fail on empty url. This should not append on modern browsers. 2012-08-28 00:33:27 -03:00
Paulo Gustavo Veiga
80deb4922b Fix export issue on tranformation on SVG maps produced by IE9. 2012-08-28 00:13:50 -03:00
Paulo Gustavo Veiga
8f87359b78 Fix Curved line issue. 2012-08-27 23:14:06 -03:00
Paulo Gustavo Veiga
30c13905c0 Fix NPE retriving history if the editor is null. 2012-08-27 22:24:59 -03:00
Paulo Gustavo Veiga
e42af6a952 Fix concurrency issue. 2012-08-27 21:56:39 -03:00
Paulo Gustavo Veiga
21cae14ddd Fix event bug in windows. 2012-08-27 21:21:47 -03:00
Paulo Gustavo Veiga
f961f7f071 Several try fixes. 2012-08-27 14:13:27 -03:00
Paulo Gustavo Veiga
601cbe6d25 Fix try mode ... 2012-08-27 12:52:24 -03:00
Paulo Gustavo Veiga
ad190b575d Fix href export login. 2012-08-26 22:50:39 -03:00
Paulo Gustavo Veiga
fbed936c45 Minor typo in spanish. 2012-08-26 20:41:31 -03:00
Paulo Gustavo Veiga
1dfe6ab711 Cascade save on map save. 2012-08-26 20:34:01 -03:00
Paulo Gustavo Veiga
666cf329a8 Hack for IE. 2012-08-26 20:03:38 -03:00
Paulo Gustavo Veiga
1265d978e8 Change error reporting subject. 2012-08-26 19:45:12 -03:00
Paulo Gustavo Veiga
81af279e21 Hack for solving loading broken maps... 2012-08-26 17:23:25 -03:00
Paulo Gustavo Veiga
4c93a72072 Do no report errors on security exceptions. 2012-08-26 17:12:25 -03:00
Paulo Gustavo Veiga
183f472f52 Fix exception handing.: 2012-08-26 17:02:24 -03:00
Paulo Gustavo Veiga
c4f3feb92e Several fixes. 2012-08-26 16:53:33 -03:00
Paulo Gustavo Veiga
361beb371f - Several fixes 2012-08-26 15:36:08 -03:00
Paulo Gustavo Veiga
fc299e1fe6 Minor fix. 2012-08-25 11:48:45 -03:00
Paulo Gustavo Veiga
95f409e839 Missing renamme. 2012-08-25 11:33:22 -03:00
Paulo Gustavo Veiga
dfa3a9ca29 Rename profile prod.properties to heroku.properties. 2012-08-25 11:32:23 -03:00
Paulo Gustavo Veiga
d7d269d97c Remove file. 2012-08-24 01:38:46 -03:00
Paulo Gustavo Veiga
4ebf0bad4a Rename file. 2012-08-24 01:38:25 -03:00
Paulo Gustavo Veiga
9354d6ae64 - Remove console.logs
- Add portuguese support.
2012-08-24 00:56:27 -03:00
Paulo Gustavo Veiga
29b4503135 Change mail port. 2012-08-24 00:31:15 -03:00
Paulo Gustavo Veiga
173f5f5f82 Add heroku mail conf. 2012-08-24 00:20:21 -03:00
Paulo Gustavo Veiga
46831e110b Fix locale resolver issue with the languange. 2012-08-23 23:55:26 -03:00
Paulo Gustavo Veiga
e2682108e0 Fix chinese location ids. 2012-08-23 22:46:28 -03:00
Paulo Gustavo Veiga
7fa7d8ca8b Minor issue with locales. 2012-08-23 22:34:07 -03:00
Paulo Gustavo Veiga
c9217265fd Replace ant call by native2ascci maven plugin. 2012-08-23 22:25:15 -03:00
Paulo Gustavo Veiga
dcd15d8fa4 Fix resources generation bug
Add support for try.
2012-08-23 22:07:37 -03:00
Paulo Gustavo Veiga
73056de872 Enable welcome maps for all languages
Fix some spanish typos.
2012-08-23 20:29:07 -03:00
Paulo Gustavo Veiga
c191136de9 Add automatic conversion of UTF-8 properties to ASCII 2012-08-23 00:46:15 -03:00
Paulo Gustavo Veiga
9aba9993e2 Merge branch 'master' of repo.wisemapping.org:wisemapping/wiseorg 2012-08-22 00:43:00 -03:00
Paulo Gustavo Veiga
448c9e55e7 Fix embed map issue. 2012-08-22 00:42:01 -03:00
Paulo Gustavo Veiga
b787abad9b Fix minor redirect issue. 2012-08-22 00:14:29 -03:00
Paulo Gustavo Veiga
3e7f02907c Add in footer contact information. 2012-08-21 23:52:47 -03:00
Gonzalo Bellver
db6a9d90b4 Added French locale 2012-08-21 23:34:28 -03:00
Paulo Gustavo Veiga
4891fbb024 Generate convertor for properties files to js. 2012-08-21 23:05:55 -03:00
Gonzalo Bellver
7afc442824 Fixed commit distances on BalancedSorter 2012-08-20 19:49:19 -03:00
Paulo Gustavo Veiga
0ffe8236e1 Revert heroku pom jetty configuration. 2012-08-20 12:41:16 -03:00
Paulo Gustavo Veiga
be635f550a Heroku email for testing. 2012-08-20 12:37:20 -03:00
Paulo Gustavo Veiga
0879a9427c Merge branch 'master' of heroku.com:wisemapping 2012-08-20 11:58:31 -03:00
Paulo Gustavo Veiga
28bbc4c846 Fix error when press enter over a isolated node
Fix prediction error when the node is a isolated node.
2012-08-20 11:22:19 -03:00
Paulo Gustavo Veiga
da6859313b Refactor connection algorithm. 2012-08-20 11:00:33 -03:00
Paulo Gustavo Veiga
9b2a24c437 Finally connection predict is working. 2012-08-19 11:10:38 -03:00
Paulo Gustavo Veiga
eb709699b7 More fixes on connection predict. 2012-08-18 23:37:32 -03:00
Paulo Gustavo Veiga
04fda82ba0 Keep simplifing connection algorithm. 2012-08-18 23:20:23 -03:00
Paulo Gustavo Veiga
bff79159e1 First clean up of the algorithm. 2012-08-17 20:51:29 -03:00
Gonzalo Bellver
c432bef6b1 SymmetricSorter predict optimization 2012-08-17 17:32:57 -03:00
Gonzalo Bellver
ea75b33553 added jetty runnner to pom 2012-08-17 12:33:37 -03:00
Gonzalo Bellver
81a85aaadf Deployment on heroku 2012-08-17 12:33:36 -03:00
Gonzalo Bellver
b6b0f460de added Mindamp.hbm.xml 2012-08-17 12:33:35 -03:00
Gonzalo Bellver
1883210837 removed MindMap.hbm.xml 2012-08-17 12:33:35 -03:00
Gonzalo Bellver
141d691148 added jetty runnner to pom 2012-08-17 12:27:07 -03:00
Gonzalo Bellver
05301dea6d Deployment on heroku 2012-08-17 12:16:01 -03:00
Paulo Gustavo Veiga
f6953aad9c Default editor colors appear in the pallete.
Remove discard changes button.
2012-08-17 09:47:46 -03:00
Gonzalo Bellver
6a673d187b added Mindamp.hbm.xml 2012-08-16 22:33:38 -03:00
Gonzalo Bellver
03bb887907 removed MindMap.hbm.xml 2012-08-16 22:32:57 -03:00
Gonzalo Bellver
4cd765cfb9 Added Mindmap.java 2012-08-16 21:51:59 -03:00
Gonzalo Bellver
73b72a32da removed MindMap.java 2012-08-16 21:50:09 -03:00
Paulo Gustavo Veiga
2e8b166b8a Fix default language swith ... 2012-08-16 19:42:25 -03:00
Gonzalo Bellver
49727943da branch test pt2 2012-08-16 19:01:37 -03:00
Gonzalo Bellver
4e6fc7722a branch test 2012-08-16 18:46:16 -03:00
Gonzalo Bellver
77766e0a8f editor bug fix 2012-08-16 12:54:21 -03:00
Paulo Gustavo Veiga
731beef4e8 - Fix missing translation for welcome map. 2012-08-16 00:23:50 -03:00
Paulo Gustavo Veiga
5a765b2f2c On editor error, send notification emails. 2012-08-15 21:45:57 -03:00
Paulo Gustavo Veiga
34bd8edd42 Fix javascript error on map view. 2012-08-15 21:45:24 -03:00
Paulo Gustavo Veiga
5f441c2c20 - IE window.open does not support base href tag. Fixed. 2012-08-15 21:37:21 -03:00
Paulo Gustavo Veiga
dde7806b38 - IE window.open does not support base href tag. Fixed. 2012-08-15 21:05:44 -03:00
Paulo Gustavo Veiga
70cebe97fc - Fix IE 9 redirect issue to the editor ... 2012-08-15 00:51:10 -03:00
Paulo Gustavo Veiga
78274fe3f2 - Fix login tabindex order issue... 2012-08-15 00:07:03 -03:00
Paulo Gustavo Veiga
09ed4f68b7 - Improve email notification cases for unexpected exceptions. 2012-08-14 23:55:13 -03:00
Paulo Gustavo Veiga
6d7c12ca60 Workaround for Explorer console support 2012-07-21 09:46:21 -03:00
Paulo Gustavo Veiga
71f0c32943 Add PT support. 2012-07-20 15:40:10 -03:00
Paulo Gustavo Veiga
ed2b9190ba Add I18n map support. 2012-07-19 10:34:10 -03:00
Paulo Gustavo Veiga
f2cdc96a96 - Start working on a I18n tutorial mindmap. 2012-07-17 01:20:47 -03:00
Paulo Gustavo Veiga
98846768fe - Minor fixes. 2012-07-16 23:07:00 -03:00
Paulo Gustavo Veiga
49677411c4 - Fix add tooltop 2012-07-16 00:28:33 -03:00
Paulo Gustavo Veiga
f449eff9ce - Add delete button to remove relationship
- Fix add button in the toolbar.
2012-07-16 00:15:59 -03:00
Paulo Gustavo Veiga
16bbc0a456 - Swap zoom buttons 2012-07-15 23:40:13 -03:00
Paulo Gustavo Veiga
3986a97717 - Fix do and undo buttons disable action 2012-07-15 23:35:45 -03:00
Paulo Gustavo Veiga
8d4b336908 Only send save operation of changes has been perfomed.
Change default SMTP port.
2012-07-15 22:20:21 -03:00
Paulo Gustavo Veiga
d304909a86 Minor licence correction. 2012-07-15 19:27:20 -03:00
Paulo Gustavo Veiga
1cd65e347b Open Term and Conditions in a different page. 2012-07-15 02:56:49 -03:00
Paulo Gustavo Veiga
5d82ccc552 Add Term Of Use missing page. 2012-07-15 02:53:41 -03:00
Paulo Gustavo Veiga
1ac80626b4 Remove username from the mindmap info. 2012-07-15 02:04:53 -03:00
Paulo Gustavo Veiga
9257638da2 Fix error importing freeming mindmaps. 2012-07-15 01:50:47 -03:00
Paulo Gustavo Veiga
0a74e73c80 Remove foreing key from auditory. 2012-07-15 01:38:52 -03:00
Paulo Gustavo Veiga
5c94291b06 Fix SQL on creation. 2012-07-15 01:25:21 -03:00
Paulo Gustavo Veiga
853aa0ad5c Remove username attribute 2012-07-15 01:05:30 -03:00
Paulo Gustavo Veiga
80cafc0c0d Add JSTL to the distribution. This is required by 2012-07-14 15:40:26 -03:00
502 changed files with 39009 additions and 8288 deletions

1
.gitignore vendored
View File

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

1
Procfile Normal file
View File

@@ -0,0 +1 @@
web: java $JAVA_OPTS -Dspring.profiles.active=heroku -jar wise-webapp/target/dependency/jetty-runner.jar --port $PORT wise-webapp/target/*.war

View File

@@ -78,7 +78,7 @@ The following code is an example of how to add attach to the div dragImageNode t
designer.addDraggedNode(event, node);
});
In the example, a new node is created with text "Node Text !!!!" and a note and a link associated to it when the user drop the node. Something to pay attention is the node.setMetadata("{}"), this attributes will be persisted during the serialization. Here you can store all the data you need.
In the example, a new node is created with text "Node Text !!!!" and a note and a link associated to it when the user drop the node. Something to pay attention is the node.setMetadata("{}"), this delegated will be persisted during the serialization. Here you can store all the data you need.
2) Support for dragging Images: Similar to the point 1,drag support is registered to the div dragImageNode.

View File

@@ -6,96 +6,57 @@
obj - object to inspect
*/
$defined = function(obj) {
$defined = function (obj) {
return (obj != undefined);
};
$assert = function(assert, message) {
$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);
}
};
Math.sign = function(value) {
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;
}
// Support for Windows ...
if (!window.console) {
console = {
log:function (e) {
/*
* 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));
}

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.8.v20121106
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

14
java.iml Normal file
View File

@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="UTF-8"?>
<module org.jetbrains.idea.maven.project.MavenProjectsManager.isMavenModule="true" type="JAVA_MODULE" version="4">
<component name="NewModuleRootManager" LANGUAGE_LEVEL="JDK_1_6" inherit-compiler-output="false">
<output url="file://$MODULE_DIR$/target/classes" />
<output-test url="file://$MODULE_DIR$/target/test-classes" />
<exclude-output />
<content url="file://$MODULE_DIR$">
<excludeFolder url="file://$MODULE_DIR$/target" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
</component>
</module>

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

@@ -36,6 +36,48 @@
<build>
<plugins>
<plugin>
<groupId>org.codehaus.gmaven</groupId>
<artifactId>gmaven-plugin</artifactId>
<version>1.4</version>
<executions>
<execution>
<phase>generate-resources</phase>
<goals>
<goal>execute</goal>
</goals>
<configuration>
<source>
def outdir = new File(project.basedir, 'src/main/javascript');
if (project.packaging != 'pom')
{
def dir = new File(project.basedir, 'src/main/resources/');
dir.eachFile { file ->
def matcher = file.name =~ /messages_(.+)\.properties/;
def lang = matcher[0][1];
def outfile = new File(outdir, "MessageBundle_${lang}.js");
println "Converting ${file.name} to ${outfile.name}";
outfile.withWriter('UTF-8') { out ->
out.writeLine "mindplot.Messages.BUNDLES['${lang.toLowerCase()}'] = { ";
file.eachLine('UTF-8') { line ->
if( line.trim()!="" &amp;&amp; line[0]!='#' ) {
matcher = line =~ /(.+)=(.+)/;
out.writeLine("'${matcher[0][1]}' : \"${matcher[0][2]}\",");
}
}
out.writeLine("'DUMMY' : '' ");
out.writeLine "};"
}
}
}
</source>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
@@ -98,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>
@@ -153,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>
@@ -182,6 +226,13 @@
<include>layout/GridSorter.js</include>
<include>layout/OriginalLayout.js</include>
<include>layout/EventBus.js</include>
<include>MessageBundle_en.js</include>
<include>MessageBundle_es.js</include>
<include>MessageBundle_de.js</include>
<include>MessageBundle_fr.js</include>
<include>MessageBundle_pt_BR.js</include>
<include>MessageBundle_zh_CN.js</include>
<include>MessageBundle_zh_TW.js</include>
<include>footer.js</include>
</includes>
</aggregation>
@@ -197,7 +248,6 @@
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.4.2</version>
<configuration>
<skipTests>true</skipTests>
</configuration>

View File

@@ -0,0 +1 @@
MessageBundle_*

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;
@@ -29,16 +29,12 @@ mindplot.ConnectionLine = new Class({
var ctrlPoints = this._getCtrlPoints(sourceNode, targetNode);
if (targetNode.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
line = this._createLine(lineType, mindplot.ConnectionLine.CURVED);
if (line.getType() == "CurvedLine") {
line.setSrcControlPoint(ctrlPoints[0]);
line.setDestControlPoint(ctrlPoints[1]);
}
line.setSrcControlPoint(ctrlPoints[0]);
line.setDestControlPoint(ctrlPoints[1]);
} else {
line = this._createLine(lineType, mindplot.ConnectionLine.SIMPLE_CURVED);
if (line.getType() == "CurvedLine") {
line.setSrcControlPoint(ctrlPoints[0]);
line.setDestControlPoint(ctrlPoints[1]);
}
line.setSrcControlPoint(ctrlPoints[0]);
line.setDestControlPoint(ctrlPoints[1]);
}
// Set line styles ...
var strokeColor = mindplot.ConnectionLine.getStrokeColor();

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) {
@@ -398,8 +440,9 @@ mindplot.Designer = new Class({
}
// Execute event ...
var topic = nodes[0];
this._actionDispatcher.shrinkBranch([topic.getId()], !topic.areChildrenShrunken());
if (topic.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
this._actionDispatcher.shrinkBranch([topic.getId()], !topic.areChildrenShrunken());
}
},
createChildForSelectedNode:function () {
@@ -473,7 +516,7 @@ mindplot.Designer = new Class({
}
var topic = nodes[0];
if (topic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (!topic.getOutgoingConnectedTopic()) { // Central topic and isolated topics ....
// Central topic doesn't have siblings ...
this.createChildForSelectedNode();
@@ -527,13 +570,6 @@ mindplot.Designer = new Class({
this._relPivot.start(nodes[0], pos);
},
needsSave:function () {
//@Todo: Review all this ...
return this._actionDispatcher._actionRunner.hasBeenChanged();
},
getMindmapProperties:function () {
return {zoom:this.getModel().getZoom()};
},
@@ -559,7 +595,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);
@@ -597,7 +633,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) {
@@ -605,16 +641,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;
@@ -665,20 +698,40 @@ mindplot.Designer = new Class({
var targetTopicId = model.getToNode();
var targetTopic = dmodel.findTopicById(targetTopicId);
$assert(targetTopic, "targetTopic could not be found:" + targetTopicId + dmodel.getTopics().map(function (e) {
return e.getId()
}));
// Build relationship line ....
var result = new mindplot.Relationship(sourceTopic, targetTopic, model);
result.addEvent('onfocus', function (event) {
this.onObjectFocusEvent(result, event);
result.addEvent('ontblur', function () {
var topics = this.getModel().filterSelectedTopics();
var rels = this.getModel().filterSelectedRelationships();
if (topics.length == 0 || rels.length == 0) {
this.fireEvent('onblur');
}
}.bind(this));
result.addEvent('ontfocus', function () {
var topics = this.getModel().filterSelectedTopics();
var rels = this.getModel().filterSelectedRelationships();
if (topics.length == 1 || rels.length == 1) {
this.fireEvent('onfocus');
}
}.bind(this));
// Append it to the workspace ...
dmodel.addRelationship(result);
return result;
},
_removeTopic:function (node) {
if (node.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (!node.isCentralTopic()) {
var parent = node._parent;
node.disconnect(this._workspace);
@@ -700,7 +753,16 @@ mindplot.Designer = new Class({
}
},
_resetEdition:function () {
var screenManager = this._workspace.getScreenManager();
screenManager.fireEvent("update");
screenManager.fireEvent("mouseup");
this._relPivot.dispose();
},
deleteSelectedEntities:function () {
// Is there some action in progress ?.
this._resetEdition();
var topics = this.getModel().filterSelectedTopics();
var relation = this.getModel().filterSelectedRelationships();
@@ -708,14 +770,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()
});
@@ -816,13 +878,17 @@ mindplot.Designer = new Class({
addLink:function () {
var model = this.getModel();
var topic = model.selectedTopic();
topic.showLinkEditor();
if (topic) {
topic.showLinkEditor();
}
},
addNote:function () {
var model = this.getModel();
var topic = model.selectedTopic();
topic.showNoteEditor();
if (topic) {
topic.showNoteEditor();
}
},
goToNode:function (node) {

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,7 +17,7 @@
*/
mindplot.DesignerActionRunner = new Class({
initialize: function(commandContext, notifier) {
initialize:function (commandContext, notifier) {
$assert(commandContext, "commandContext can not be null");
this._undoManager = new mindplot.DesignerUndoManager();
@@ -25,7 +25,7 @@ mindplot.DesignerActionRunner = new Class({
this._notifier = notifier;
},
execute:function(command) {
execute:function (command) {
$assert(command, "command can not be null");
command.execute(this._context);
this._undoManager.enqueue(command);
@@ -34,29 +34,21 @@ mindplot.DesignerActionRunner = new Class({
},
undo: function() {
undo:function () {
this._undoManager.execUndo(this._context);
this.fireChangeEvent();
mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.DoLayout);
},
redo: function() {
redo:function () {
this._undoManager.execRedo(this._context);
this.fireChangeEvent();
mindplot.EventBus.instance.fireEvent(mindplot.EventBus.events.DoLayout);
},
fireChangeEvent : function () {
fireChangeEvent:function () {
var event = this._undoManager.buildEvent();
this._notifier.fireEvent("modelUpdate", event);
},
markAsChangeBase: function() {
return this._undoManager.markAsChangeBase();
},
hasBeenChanged: function() {
return this._undoManager.hasBeenChanged();
}
});

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,15 +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),
'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),
@@ -79,7 +96,7 @@ mindplot.DesignerKeyboard = new Class({
}.bind(this),
'ctrl+z':function () {
'ctrl+z':function (event) {
event.preventDefault(event);
event.stopPropagation();
designer.undo();
@@ -93,7 +110,7 @@ mindplot.DesignerKeyboard = new Class({
}.bind(this),
'ctrl+c':function () {
'ctrl+c':function (event) {
event.preventDefault(event);
event.stopPropagation();
designer.copyToClipboard();
@@ -107,7 +124,7 @@ mindplot.DesignerKeyboard = new Class({
}.bind(this),
'ctrl+v':function () {
'ctrl+v':function (event) {
event.preventDefault(event);
event.stopPropagation();
@@ -221,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 {
@@ -236,15 +282,17 @@ mindplot.DesignerKeyboard = new Class({
}
}
} else {
var centralTopic = designer.getCentralTopic();
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 {
@@ -256,40 +304,51 @@ mindplot.DesignerKeyboard = new Class({
}
}
} else {
var centralTopic = designer.getCentralTopic();
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 = designer.getCentralTopic();
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 = designer.getCentralTopic();
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) {
@@ -331,39 +390,43 @@ mindplot.DesignerKeyboard = new Class({
},
_goToBrother:function (designer, node, direction) {
var brothers = node._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);
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);
},
@@ -394,8 +457,10 @@ mindplot.DesignerKeyboard = new Class({
},
_goToParent:function (designer, node) {
var parent = node._parent;
this._goToNode(designer, parent);
var parent = node.getParent();
if (parent) {
this._goToNode(designer, parent);
}
},
_goToChild:function (designer, node) {

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
@@ -21,8 +21,6 @@ mindplot.DesignerUndoManager = new Class({
this._undoQueue = [];
this._redoQueue = [];
this._baseId = 0;
this._fireChange = fireChange;
},
enqueue:function(command) {
@@ -62,9 +60,9 @@ mindplot.DesignerUndoManager = new Class({
},
markAsChangeBase: function() {
var undoLenght = this._undoQueue.length;
if (undoLenght > 0) {
var command = this._undoQueue[undoLenght - 1];
var undoLength = this._undoQueue.length;
if (undoLength > 0) {
var command = this._undoQueue[undoLength - 1];
this._baseId = command.getId();
} else {
this._baseId = 0;
@@ -73,11 +71,11 @@ mindplot.DesignerUndoManager = new Class({
hasBeenChanged: function() {
var result = true;
var undoLenght = this._undoQueue.length;
if (undoLenght == 0 && this._baseId == 0) {
var undoLength= this._undoQueue.length;
if (undoLength == 0 && this._baseId == 0) {
result = false;
} else if (undoLenght > 0) {
var command = this._undoQueue[undoLenght - 1];
} else if (undoLength > 0) {
var command = this._undoQueue[undoLength - 1];
result = (this._baseId != command.getId());
}
return result;

View File

@@ -1,100 +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 mainTopicToMainTopicConnection = this._lookUpForMainTopicToMainTopicConnection(dragTopic);
var currentConnection = dragTopic.getConnectedToTopic();
if ($defined(currentConnection)) {
// MainTopic->MainTopicConnection.
if (currentConnection.getType() == mindplot.model.INodeModel.MAIN_TOPIC_TYPE) {
if (mainTopicToMainTopicConnection != currentConnection) {
dragTopic.disconnect(this._workspace);
}
}
else if (currentConnection.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
// Distance if greater that the allowed.
var dragXPosition = dragTopic.getPosition().x;
var currentXPosition = currentConnection.getPosition().x;
if ($defined(mainTopicToMainTopicConnection)) {
// I have to change the current connection to a main topic.
dragTopic.disconnect(this._workspace);
} else
if (Math.abs(dragXPosition - currentXPosition) > mindplot.DragConnector.CENTRAL_TO_MAINTOPIC_MAX_HORIZONTAL_DISTANCE) {
dragTopic.disconnect(this._workspace);
}
}
}
// Finally, connect nodes ...
if (!dragTopic.isConnected()) {
var centralTopic = topics[0];
if ($defined(mainTopicToMainTopicConnection)) {
dragTopic.connectTo(mainTopicToMainTopicConnection);
} else if (Math.abs(dragTopic.getPosition().x - centralTopic.getPosition().x) <= mindplot.DragConnector.CENTRAL_TO_MAINTOPIC_MAX_HORIZONTAL_DISTANCE) {
dragTopic.connectTo(centralTopic);
}
}
},
_lookUpForMainTopicToMainTopicConnection : function(dragTopic) {
var topics = this._designerModel.getTopics();
var result = null;
var draggedNode = dragTopic.getDraggedTopic();
var distance = null;
// Check MainTopic->MainTopic connection...
for (var i = 0; i < topics.length; i++) {
var targetTopic = topics[i];
var position = dragTopic.getPosition();
if (targetTopic.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE && targetTopic != draggedNode) {
var canBeConnected = dragTopic.canBeConnectedTo(targetTopic);
if (canBeConnected) {
var targetPosition = targetTopic.getPosition();
var fix = position.y > targetPosition.y;
var gap = 0;
if (targetTopic.getChildren().length > 0) {
gap = Math.abs(targetPosition.y - targetTopic.getChildren()[0].getPosition().y)
}
var yDistance = Math.abs(position.y - fix * gap - targetPosition.y);
if (distance == null || yDistance < distance) {
result = targetTopic;
distance = yDistance;
}
}
}
}
return result;
}
});
mindplot.DragConnector.CENTRAL_TO_MAINTOPIC_MAX_HORIZONTAL_DISTANCE = 400;
/*
* 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
@@ -17,7 +17,7 @@
*/
mindplot.DragTopic = new Class({
initialize:function(dragShape, draggedNode, layoutManger) {
initialize:function (dragShape, draggedNode, layoutManger) {
$assert(dragShape, 'Rect can not be null.');
$assert(draggedNode, 'draggedNode can not be null.');
$assert(layoutManger, 'layoutManger can not be null.');
@@ -31,13 +31,13 @@ mindplot.DragTopic = new Class({
this._isFreeLayoutEnabled = false;
},
setOrder : function(order) {
setOrder:function (order) {
this._order = order;
},
setPosition : function(x, y) {
setPosition:function (x, y) {
// Update drag shadow position ....
var position = {x:x,y:y};
var position = {x:x, y:y};
if (this.isFreeLayoutOn() && this.isConnected()) {
var _layoutManager = this._layoutManager;
var par = this.getConnectedToTopic();
@@ -49,7 +49,7 @@ mindplot.DragTopic = new Class({
// All topic element must be positioned based on the innerShape.
var draggedNode = this._draggedNode;
var size = draggedNode.getSize();
var cx = Math.ceil(position.x - (size.width / 2));
var cx = position.x - (position.x > 0 ? 0 : size.width);
var cy = Math.ceil(position.y - (size.height / 2));
this._elem2d.setPosition(cx, cy);
@@ -66,7 +66,7 @@ mindplot.DragTopic = new Class({
}
},
updateFreeLayout: function(event) {
updateFreeLayout:function (event) {
var isFreeEnabled = (event.meta && Browser.Platform.mac) || (event.control && !Browser.Platform.mac);
if (this.isFreeLayoutOn() != isFreeEnabled) {
var dragPivot = this._getDragPivot();
@@ -75,50 +75,27 @@ mindplot.DragTopic = new Class({
}
},
setVisibility:function(value) {
setVisibility:function (value) {
var dragPivot = this._getDragPivot();
dragPivot.setVisibility(value);
},
isVisible:function() {
isVisible:function () {
var dragPivot = this._getDragPivot();
return dragPivot.isVisible();
},
getInnerShape : function() {
getInnerShape:function () {
return this._elem2d;
},
disconnect : function(workspace) {
disconnect:function (workspace) {
// Clear connection line ...
var dragPivot = this._getDragPivot();
dragPivot.disconnect(workspace);
},
canBeConnectedTo : function(targetTopic) {
$assert(targetTopic, 'parent can not be null');
var result = true;
if (!targetTopic.areChildrenShrunken() && !targetTopic.isCollapsed()) {
// Dragged node can not be connected to himself.
if (targetTopic == this._draggedNode) {
result = false;
} else {
var draggedNode = this.getDraggedTopic();
var topicPosition = this.getPosition();
var targetTopicModel = targetTopic.getModel();
var childTopicModel = draggedNode.getModel();
result = targetTopicModel.canBeConnected(childTopicModel, topicPosition, 18, targetTopic.getSize());
}
} else {
result = false;
}
return result;
},
connectTo : function(parent) {
connectTo:function (parent) {
$assert(parent, 'Parent connection node can not be null.');
// Where it should be connected ?
@@ -133,45 +110,49 @@ mindplot.DragTopic = new Class({
this.setOrder(predict.order);
},
getDraggedTopic : function() {
getDraggedTopic:function () {
return this._draggedNode;
},
removeFromWorkspace : function(workspace) {
// Remove drag shadow.
workspace.removeChild(this._elem2d);
this._isInWorkspace = false;
removeFromWorkspace:function (workspace) {
if (this._isInWorkspace) {
// Remove drag shadow.
workspace.removeChild(this._elem2d);
// Remove pivot shape. To improve performace it will not be removed. Only the visibility will be changed.
var dragPivot = this._getDragPivot();
dragPivot.setVisibility(false);
// Remove pivot shape. To improve performance it will not be removed. Only the visibility will be changed.
var dragPivot = this._getDragPivot();
dragPivot.setVisibility(false);
this._isInWorkspace = false;
}
},
isInWorkspace: function() {
isInWorkspace:function () {
return this._isInWorkspace;
},
addToWorkspace : function(workspace) {
workspace.appendChild(this._elem2d);
var dragPivot = this._getDragPivot();
dragPivot.addToWorkspace(workspace);
this._isInWorkspace = true;
addToWorkspace:function (workspace) {
if (!this._isInWorkspace) {
workspace.appendChild(this._elem2d);
var dragPivot = this._getDragPivot();
dragPivot.addToWorkspace(workspace);
this._isInWorkspace = true;
}
},
_getDragPivot : function() {
_getDragPivot:function () {
return mindplot.DragTopic.__getDragPivot();
},
getPosition:function() {
getPosition:function () {
return this._position;
},
isDragTopic : function() {
isDragTopic:function () {
return true;
},
applyChanges : function(workspace) {
applyChanges:function (workspace) {
$assert(workspace, 'workspace can not be null');
@@ -197,16 +178,16 @@ mindplot.DragTopic = new Class({
}
},
getConnectedToTopic : function() {
getConnectedToTopic:function () {
var dragPivot = this._getDragPivot();
return dragPivot.getTargetTopic();
},
isConnected : function() {
isConnected:function () {
return this.getConnectedToTopic() != null;
},
isFreeLayoutOn: function() {
isFreeLayoutOn:function () {
// return this._isFreeLayoutEnabled;
// Disable free layout ...
return false;
@@ -214,16 +195,16 @@ mindplot.DragTopic = new Class({
});
mindplot.DragTopic.PIVOT_SIZE = {width:50,height:6};
mindplot.DragTopic.PIVOT_SIZE = {width:50, height:6};
mindplot.DragTopic.init = function(workspace) {
mindplot.DragTopic.init = function (workspace) {
$assert(workspace, "workspace can not be null");
var pivot = mindplot.DragTopic.__getDragPivot();
workspace.appendChild(pivot);
};
mindplot.DragTopic.__getDragPivot = function() {
mindplot.DragTopic.__getDragPivot = function () {
var result = mindplot.DragTopic._dragPivot;
if (!$defined(result)) {
result = new mindplot.DragPivot();

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
@@ -17,12 +17,12 @@
*/
mindplot.IconGroup = new Class({
initialize : function(topicId, iconSize) {
initialize:function (topicId, iconSize) {
$assert($defined(topicId), "topicId can not be null");
$assert($defined(iconSize), "iconSize can not be null");
this._icons = [];
this._group = new web2d.Group({width: 0, height:iconSize,x: 0, y:0, coordSizeWidth:0,coordSizeHeight:100});
this._group = new web2d.Group({width:0, height:iconSize, x:0, y:0, coordSizeWidth:0, coordSizeHeight:100});
this._removeTip = new mindplot.IconGroup.RemoveTip(this._group, topicId);
this.seIconSize(iconSize, iconSize);
@@ -30,28 +30,28 @@ mindplot.IconGroup = new Class({
},
setPosition : function(x, y) {
setPosition:function (x, y) {
this._group.setPosition(x, y);
},
getPosition : function() {
getPosition:function () {
return this._group.getPosition();
},
getNativeElement : function() {
getNativeElement:function () {
return this._group;
},
getSize : function() {
getSize:function () {
return this._group.getSize();
},
seIconSize : function(width, height) {
this._iconSize = {width:width,height:height};
seIconSize:function (width, height) {
this._iconSize = {width:width, height:height};
this._resize(this._icons.length);
},
addIcon : function(icon, remove) {
addIcon:function (icon, remove) {
$defined(icon, "icon is not defined");
icon.setGroup(this);
@@ -70,9 +70,9 @@ mindplot.IconGroup = new Class({
}
},
_findIconFromModel : function(iconModel) {
_findIconFromModel:function (iconModel) {
var result = null;
this._icons.each(function(icon) {
this._icons.each(function (icon) {
var elModel = icon.getModel();
if (elModel.getId() == iconModel.getId()) {
result = icon;
@@ -80,20 +80,20 @@ 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;
},
removeIconByModel : function(featureModel) {
removeIconByModel:function (featureModel) {
$assert(featureModel, "featureModel can not be null");
var icon = this._findIconFromModel(featureModel);
this._removeIcon(icon);
},
_removeIcon : function(icon) {
_removeIcon:function (icon) {
$assert(icon, "icon can not be null");
this._removeTip.close(0);
@@ -103,36 +103,36 @@ mindplot.IconGroup = new Class({
this._resize(this._icons.length);
// Add all again ...
this._icons.each(function(elem, i) {
this._icons.each(function (elem, i) {
this._positionIcon(elem, i);
}.bind(this));
},
moveToFront : function() {
moveToFront:function () {
this._group.moveToFront();
},
_registerListeners : function() {
this._group.addEvent('click', function(event) {
_registerListeners:function () {
this._group.addEvent('click', function (event) {
// Avoid node creation ...
event.stopPropagation();
});
this._group.addEvent('dblclick', function(event) {
this._group.addEvent('dblclick', function (event) {
event.stopPropagation();
});
},
_resize : function(iconsLength) {
_resize:function (iconsLength) {
this._group.setSize(iconsLength * this._iconSize.width, this._iconSize.height);
var iconSize = mindplot.Icon.SIZE + (mindplot.IconGroup.ICON_PADDING * 2);
this._group.setCoordSize(iconsLength * iconSize, iconSize);
},
_positionIcon : function(icon, order) {
_positionIcon:function (icon, order) {
var iconSize = mindplot.Icon.SIZE + (mindplot.IconGroup.ICON_PADDING * 2);
icon.getImage().setPosition(iconSize * order + mindplot.IconGroup.ICON_PADDING, mindplot.IconGroup.ICON_PADDING);
@@ -141,13 +141,13 @@ mindplot.IconGroup = new Class({
mindplot.IconGroup.ICON_PADDING = 5;
mindplot.IconGroup.RemoveTip = new Class({
initialize : function(container) {
initialize:function (container) {
$assert(container, "group can not be null");
this._fadeElem = container;
},
show : function(topicId, icon) {
show:function (topicId, icon) {
$assert(icon, 'icon can not be null');
// Nothing to do ...
@@ -162,15 +162,15 @@ mindplot.IconGroup.RemoveTip = new Class({
// Register events ...
var widget = this._buildWeb2d();
widget.addEvent('click', function() {
widget.addEvent('click', function () {
icon.remove();
});
widget.addEvent('mouseover', function() {
widget.addEvent('mouseover', function () {
this.show(topicId, icon);
}.bind(this));
widget.addEvent('mouseout', function() {
widget.addEvent('mouseout', function () {
this.hide();
}.bind(this));
@@ -186,11 +186,11 @@ mindplot.IconGroup.RemoveTip = new Class({
}
},
hide : function() {
hide:function () {
this.close(200);
},
close : function(delay) {
close:function (delay) {
// This is not ok, trying to close the same dialog twice ?
if (this._closeTimeoutId) {
@@ -199,7 +199,7 @@ mindplot.IconGroup.RemoveTip = new Class({
if (this._activeIcon) {
var widget = this._widget;
var close = function() {
var close = function () {
this._activeIcon = null;
this._fadeElem.removeChild(widget);
@@ -218,19 +218,19 @@ mindplot.IconGroup.RemoveTip = new Class({
}
},
_buildWeb2d : function() {
_buildWeb2d:function () {
var result = new web2d.Group({
width: 10,
width:10,
height:10,
x: 0,
x:0,
y:0,
coordSizeWidth:10,
coordSizeHeight:10
});
var outerRect = new web2d.Rect(0, {
x: 0,
y: 0,
x:0,
y:0,
width:10,
height:10,
stroke:'0',
@@ -240,8 +240,8 @@ mindplot.IconGroup.RemoveTip = new Class({
outerRect.setCursor('pointer');
var innerRect = new web2d.Rect(0, {
x: 1,
y: 1,
x:1,
y:1,
width:8,
height:8,
stroke:'1 solid white',
@@ -260,10 +260,10 @@ mindplot.IconGroup.RemoveTip = new Class({
result.appendChild(line2);
// Some events ...
result.addEvent('mouseover', function() {
result.addEvent('mouseover', function () {
innerRect.setFill('#CC0033');
});
result.addEvent('mouseout', function() {
result.addEvent('mouseout', function () {
innerRect.setFill('gray');
});
@@ -271,14 +271,14 @@ mindplot.IconGroup.RemoveTip = new Class({
return result;
},
decorate : function(topicId, icon) {
decorate:function (topicId, icon) {
if (!icon.__remove) {
icon.addEvent('mouseover', function() {
icon.addEvent('mouseover', function () {
this.show(topicId, icon);
}.bind(this));
icon.addEvent('mouseout', function() {
icon.addEvent('mouseout', function () {
this.hide();
}.bind(this));
icon.__remove = true;

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,27 +18,23 @@
mindplot.ImageIcon = new Class({
Extends:mindplot.Icon,
initialize:function(topic, iconModel) {
initialize:function (topic, iconModel, readOnly) {
$assert(iconModel, 'iconModel can not be null');
$assert(topic, 'topic can not be null');
this._topicId = topic.getId();
this._featureModel = iconModel;
// @Todo: Read only must be a property ...
this._readOnly = designer._readOnly;
// Build graph image representation ...
var iconType = iconModel.getIconType();
var imgUrl = this._getImageUrl(iconType);
this.parent(imgUrl);
//Remove
if (!this._readOnly) {
if (!readOnly) {
//Icon
var image = this.getImage();
image.addEvent('click', function() {
image.addEvent('click', function () {
var iconType = iconModel.getIconType();
var newIconType = this._getNextFamilyIconId(iconType);
@@ -52,15 +48,15 @@ mindplot.ImageIcon = new Class({
}
},
_getImageUrl : function(iconId) {
_getImageUrl:function (iconId) {
return "icons/" + iconId + ".png";
},
getModel : function() {
getModel:function () {
return this._featureModel;
},
_getNextFamilyIconId : function(iconId) {
_getNextFamilyIconId:function (iconId) {
var familyIcons = this._getFamilyIcons(iconId);
$assert(familyIcons != null, "Family Icon not found!");
@@ -81,7 +77,7 @@ mindplot.ImageIcon = new Class({
return result;
},
_getFamilyIcons : function(iconId) {
_getFamilyIcons:function (iconId) {
$assert(iconId != null, "id must not be null");
$assert(iconId.indexOf("_") != -1, "Invalid icon id (it must contain '_')");
@@ -98,7 +94,7 @@ mindplot.ImageIcon = new Class({
return result;
},
remove : function() {
remove:function () {
var actionDispatcher = mindplot.ActionDispatcher.getInstance();
var featureId = this._featureModel.getId();
var topicId = this._topicId;
@@ -106,31 +102,31 @@ mindplot.ImageIcon = new Class({
}
});
mindplot.ImageIcon.prototype.ICON_FAMILIES = [
{"id": "face", "icons" : ["face_plain","face_sad","face_crying","face_smile","face_surprise","face_wink"]},
{"id": "funy", "icons" : ["funy_angel","funy_devilish","funy_glasses","funy_grin","funy_kiss","funy_monkey"]},
{"id": "conn", "icons" : ["conn_connect","conn_disconnect"]},
{"id": "sport", "icons" : ["sport_basketball","sport_football","sport_golf","sport_raquet","sport_shuttlecock","sport_soccer","sport_tennis"]},
{"id": "bulb", "icons" : ["bulb_light_on","bulb_light_off"]},
{"id": "thumb", "icons" : ["thumb_thumb_up","thumb_thumb_down"]},
{"id": "tick", "icons" : ["tick_tick","tick_cross"]},
{"id": "onoff", "icons" : ["onoff_clock","onoff_clock_red","onoff_add","onoff_delete","onoff_status_offline","onoff_status_online"]},
{"id": "money", "icons" : ["money_money","money_dollar","money_euro","money_pound","money_yen","money_coins","money_ruby"]},
{"id": "time", "icons" : ["time_calendar","time_clock","time_hourglass"]},
{"id": "chart", "icons" : ["chart_bar","chart_line","chart_curve","chart_pie","chart_organisation"]},
{"id": "sign", "icons" : ["sign_warning","sign_info","sign_stop","sign_help","sign_cancel"]},
{"id": "hard", "icons" : ["hard_cd","hard_computer","hard_controller","hard_driver_disk","hard_ipod","hard_keyboard","hard_mouse","hard_printer"]},
{"id": "soft", "icons" : ["soft_bug","soft_cursor","soft_database_table","soft_database","soft_feed","soft_folder_explore","soft_rss","soft_penguin"]},
{"id": "arrow", "icons" : ["arrow_up","arrow_down","arrow_left","arrow_right"]},
{"id": "arrowc", "icons" : ["arrowc_rotate_anticlockwise","arrowc_rotate_clockwise","arrowc_turn_left","arrowc_turn_right"]},
{"id": "people", "icons" : ["people_group","people_male1","people_male2","people_female1","people_female2"]},
{"id": "mail", "icons" : ["mail_envelop","mail_mailbox","mail_edit","mail_list"]},
{"id": "flag", "icons" : ["flag_blue","flag_green","flag_orange","flag_pink","flag_purple","flag_yellow"]},
{"id": "bullet", "icons" : ["bullet_black","bullet_blue","bullet_green","bullet_orange","bullet_red","bullet_pink","bullet_purple"]},
{"id": "tag", "icons" : ["tag_blue","tag_green","tag_orange","tag_red","tag_pink","tag_yellow"]},
{"id": "object", "icons" : ["object_bell","object_clanbomber","object_key","object_pencil","object_phone","object_magnifier","object_clip","object_music","object_star","object_wizard","object_house","object_cake","object_camera","object_palette","object_rainbow"]},
{"id": "weather", "icons" : ["weather_clear-night","weather_clear","weather_few-clouds-night","weather_few-clouds","weather_overcast","weather_severe-alert","weather_showers-scattered","weather_showers","weather_snow","weather_storm"]}
{"id":"face", "icons":["face_plain", "face_sad", "face_crying", "face_smile", "face_surprise", "face_wink"]},
{"id":"funy", "icons":["funy_angel", "funy_devilish", "funy_glasses", "funy_grin", "funy_kiss", "funy_monkey"]},
{"id":"conn", "icons":["conn_connect", "conn_disconnect"]},
{"id":"sport", "icons":["sport_basketball", "sport_football", "sport_golf", "sport_raquet", "sport_shuttlecock", "sport_soccer", "sport_tennis"]},
{"id":"bulb", "icons":["bulb_light_on", "bulb_light_off"]},
{"id":"thumb", "icons":["thumb_thumb_up", "thumb_thumb_down"]},
{"id":"tick", "icons":["tick_tick", "tick_cross"]},
{"id":"onoff", "icons":["onoff_clock", "onoff_clock_red", "onoff_add", "onoff_delete", "onoff_status_offline", "onoff_status_online"]},
{"id":"money", "icons":["money_money", "money_dollar", "money_euro", "money_pound", "money_yen", "money_coins", "money_ruby"]},
{"id":"time", "icons":["time_calendar", "time_clock", "time_hourglass"]},
{"id":"number", "icons":["number_1", "number_2", "number_3", "number_4", "number_5", "number_6", "number_7", "number_8", "number_9"]},
{"id":"chart", "icons":["chart_bar", "chart_line", "chart_curve", "chart_pie", "chart_organisation"]},
{"id":"sign", "icons":["sign_warning", "sign_info", "sign_stop", "sign_help", "sign_cancel"]},
{"id":"hard", "icons":["hard_cd", "hard_computer", "hard_controller", "hard_driver_disk", "hard_ipod", "hard_keyboard", "hard_mouse", "hard_printer"]},
{"id":"soft", "icons":["soft_bug", "soft_cursor", "soft_database_table", "soft_database", "soft_feed", "soft_folder_explore", "soft_rss", "soft_penguin"]},
{"id":"arrow", "icons":["arrow_up", "arrow_down", "arrow_left", "arrow_right"]},
{"id":"arrowc", "icons":["arrowc_rotate_anticlockwise", "arrowc_rotate_clockwise", "arrowc_turn_left", "arrowc_turn_right"]},
{"id":"people", "icons":["people_group", "people_male1", "people_male2", "people_female1", "people_female2"]},
{"id":"mail", "icons":["mail_envelop", "mail_mailbox", "mail_edit", "mail_list"]},
{"id":"flag", "icons":["flag_blue", "flag_green", "flag_orange", "flag_pink", "flag_purple", "flag_yellow"]},
{"id":"bullet", "icons":["bullet_black", "bullet_blue", "bullet_green", "bullet_orange", "bullet_red", "bullet_pink", "bullet_purple"]},
{"id":"tag", "icons":["tag_blue", "tag_green", "tag_orange", "tag_red", "tag_pink", "tag_yellow"]},
{"id":"object", "icons":["object_bell", "object_clanbomber", "object_key", "object_pencil", "object_phone", "object_magnifier", "object_clip", "object_music", "object_star", "object_wizard", "object_house", "object_cake", "object_camera", "object_palette", "object_rainbow"]},
{"id":"weather", "icons":["weather_clear-night", "weather_clear", "weather_few-clouds-night", "weather_few-clouds", "weather_overcast", "weather_severe-alert", "weather_showers-scattered", "weather_showers", "weather_snow", "weather_storm"]},
{"id":"task", "icons":["task_0", "task_25", "task_50", "task_75", "task_100"]}
];

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,32 +18,34 @@
mindplot.LinkIcon = new Class({
Extends: mindplot.Icon,
initialize : function(topic, linkModel) {
Extends:mindplot.Icon,
initialize:function (topic, linkModel, readOnly) {
$assert(topic, 'topic can not be null');
$assert(linkModel, 'linkModel can not be null');
this.parent(mindplot.LinkIcon.IMAGE_URL);
this._linksModel = linkModel;
this._topic = topic;
this._readOnly = readOnly;
this._registerEvents();
},
_registerEvents : function() {
_registerEvents:function () {
this._image.setCursor('pointer');
// Add on click event to open the editor ...
this.addEvent('click', function(event) {
this._topic.showLinkEditor();
event.stopPropagation();
}.bind(this));
if (!this._readOnly) {
// Add on click event to open the editor ...
this.addEvent('click', function (event) {
this._topic.showLinkEditor();
event.stopPropagation();
}.bind(this));
}
this._tip = new mindplot.widget.LinkIconTooltip(this);
},
getModel : function() {
getModel:function () {
return this._linksModel;
}
});

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,29 @@
mindplot.LocalStorageManager = new Class({
Extends:mindplot.PersistenceManager,
initialize: function() {
initialize:function (documentUrl,forceLoad) {
this.parent();
this.documentUrl = documentUrl;
this.forceLoad = forceLoad;
},
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 ...
if (xml == null || this.forceLoad) {
var xmlRequest = new Request({
url: 'samples/' + mapId + '.xml',
method: 'get',
async: false,
onSuccess: function(responseText) {
url:this.documentUrl.replace("{id}", mapId),
headers:{"Content-Type":"text/plain","Accept":"application/xml"},
method:'get',
async:false,
onSuccess:function (responseText) {
xml = responseText;
}
});
@@ -47,13 +48,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
@@ -17,14 +17,14 @@
*/
mindplot.MainTopic = new Class({
Extends: mindplot.Topic,
initialize : function(model, options) {
Extends:mindplot.Topic,
initialize:function (model, options) {
this.parent(model, options);
},
INNER_RECT_ATTRIBUTES : {stroke:'0.5 solid #009900'},
INNER_RECT_ATTRIBUTES:{stroke:'0.5 solid #009900'},
_buildDragShape : function() {
_buildDragShape:function () {
var innerShape = this._buildShape(this.INNER_RECT_ATTRIBUTES, this.getShapeType());
var size = this.getSize();
innerShape.setSize(size.width, size.height);
@@ -40,7 +40,7 @@ mindplot.MainTopic = new Class({
innerShape.setAttribute("fillColor", bgColor);
// Create group ...
var groupAttributes = {width: 100, height:100,coordSizeWidth:100,coordSizeHeight:100};
var groupAttributes = {width:100, height:100, coordSizeWidth:100, coordSizeHeight:100};
var group = new web2d.Group(groupAttributes);
group.appendChild(innerShape);
@@ -55,16 +55,11 @@ mindplot.MainTopic = new Class({
return group;
},
_defaultShapeType : function() {
return mindplot.model.TopicShape.LINE;
},
updateTopicShape : function(targetTopic, workspace) {
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();
@@ -73,7 +68,7 @@ mindplot.MainTopic = new Class({
}
},
disconnect : function(workspace) {
disconnect:function (workspace) {
this.parent(workspace);
var size = this.getSize();
@@ -88,11 +83,7 @@ mindplot.MainTopic = new Class({
innerShape.setVisibility(true);
},
getTopicType : function() {
return "MainTopic";
},
_updatePositionOnChangeSize : function(oldSize, newSize) {
_updatePositionOnChangeSize:function (oldSize, newSize) {
var xOffset = Math.round((newSize.width - oldSize.width) / 2);
var pos = this.getPosition();
@@ -106,32 +97,11 @@ mindplot.MainTopic = new Class({
}
},
workoutIncomingConnectionPoint : function(sourcePosition) {
$assert(sourcePosition, 'sourcePoint can not be null');
var pos = this.getPosition();
var size = this.getSize();
var isAtRight = mindplot.util.Shape.isAtRight(sourcePosition, pos);
var result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight);
if (this.getShapeType() == mindplot.model.TopicShape.LINE) {
result.y = result.y + (this.getSize().height / 2);
}
// Move a little the position...
var offset = mindplot.Topic.CONNECTOR_WIDTH / 2;
if (this.getPosition().x > 0) {
result.x = result.x + offset;
} else {
result.x = result.x - offset;
}
result.x = Math.ceil(result.x);
result.y = Math.ceil(result.y);
return result;
workoutIncomingConnectionPoint:function (sourcePosition) {
return mindplot.util.Shape.workoutIncomingConnectionPoint(this, sourcePosition);
},
workoutOutgoingConnectionPoint : function(targetPosition) {
workoutOutgoingConnectionPoint:function (targetPosition) {
$assert(targetPosition, 'targetPoint can not be null');
var pos = this.getPosition();
var isAtRight = mindplot.util.Shape.isAtRight(targetPosition, pos);
@@ -167,81 +137,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:"#525c61"
};
} else {
result = {
font:"Arial",
size: 6,
style:"normal",
weight:"normal",
color:"#525c61"
};
}
} else {
result = {
font:"Verdana",
size: 8,
style:"normal",
weight:"normal",
color:"#525c61"
};
}
return result;
},
_defaultBackgroundColor : function() {
return "#E0E5EF";
},
_defaultBorderColor : function() {
return '#023BB9';
}
});

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
@@ -40,206 +40,5 @@ $msg = function (key) {
return msg ? msg : key;
};
mindplot.Messages.BUNDLES = {
'en':{
ZOOM_IN:'Zoom In',
ZOOM_OUT:'Zoom Out',
TOPIC_SHAPE:'Topic Shape',
TOPIC_ADD:'Add Topic',
TOPIC_DELETE:'Delete Topic',
TOPIC_ICON:'Add Icon',
TOPIC_LINK:'Add Link',
TOPIC_RELATIONSHIP:'Relationship',
TOPIC_COLOR:'Topic Color',
TOPIC_BORDER_COLOR:'Topic Border Color',
TOPIC_NOTE:'Add Note',
FONT_FAMILY:'Font Type',
FONT_SIZE:'Text Size',
FONT_BOLD:'Text Bold',
FONT_ITALIC:'Text Italic',
UNDO_EDITION:'Undo Edition',
REDO_EDITION:'Redo Edition',
UNDO:'Undo',
REDO:'Redo',
INSERT:'Insert',
SAVE:'Save',
NOTE:'Note',
ADD_TOPIC:'Add Topic',
LOADING:'Loading ...',
EXPORT:'Export',
PRINT:'Print',
PUBLISH:'Publish',
COLLABORATE:'Share',
HISTORY:'History',
DISCARD_CHANGES:'Discard Changes',
FONT_COLOR:'Text Color',
SAVING:'Saving ...',
SAVE_COMPLETE:'Save Complete',
ZOOM_IN_ERROR:'Zoom too high.',
ZOOM_ERROR:'No more zoom can be applied.',
ONLY_ONE_TOPIC_MUST_BE_SELECTED:'Could not create a topic. Only one topic must be selected.',
ONE_TOPIC_MUST_BE_SELECTED:'Could not create a topic. One topic must be selected.',
SAVE_COULD_NOT_BE_COMPLETED:'Save could not be completed. Try latter.',
UNEXPECTED_ERROR_LOADING:"We're sorry, an unexpected error has occurred. Try again reloading the editor.\nIf the problem persists, contact us to support@wisemapping.com.",
MAIN_TOPIC:'Main Topic',
SUB_TOPIC:'Sub Topic',
ISOLATED_TOPIC:'Isolated Topic',
CENTRAL_TOPIC:'Central Topic',
ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'Children can not be collapsed. One topic must be selected.',
SHORTCUTS:'Keyboard Shortcuts',
ENTITIES_COULD_NOT_BE_DELETED:'Could not delete topic or relation. At least one map entity must be selected.',
CENTRAL_TOPIC_CAN_NOT_BE_DELETED:'Central topic can not be deleted.',
SELECTION_COPIED_TO_CLIPBOARD:'Topics copied to the clipboard',
CLIPBOARD_IS_EMPTY:'Nothing to copy. Clipboard is empty',
AT_LEAST_ONE_TOPIC_MUST_BE_SELECTED:'At least one topic must be selected.',
RELATIONSHIP_COULD_NOT_BE_CREATED:'Relationship could not be created. A parent relationship topic must be selected first.'
},
'es':{
DISCARD_CHANGES:'Descartar Cambios',
SAVE:'Guardar',
INSERT:'Insertar',
ZOOM_IN:'Acercar',
ZOOM_OUT:'Alejar',
TOPIC_BORDER_COLOR:'Color del Borde',
TOPIC_SHAPE:'Forma del Tópico',
TOPIC_ADD:'Agregar Tópico',
TOPIC_DELETE:'Borrar Tópico',
TOPIC_ICON:'Agregar Icono',
TOPIC_LINK:'Agregar Enlace',
TOPIC_NOTE:'Agregar Nota',
TOPIC_COLOR:'Color Tópico',
TOPIC_RELATIONSHIP:'Relación',
FONT_FAMILY:'Tipo de Fuente',
FONT_SIZE:'Tamaño de Texto',
FONT_BOLD:'Negrita',
FONT_ITALIC:'Italica',
FONT_COLOR:'Color de Texto',
UNDO_EDITION:'Undo Edition',
REDO_EDITION:'Redo Edition',
UNDO:'Rehacer',
NOTE:'Nota',
LOADING:'Cargando ...',
PRINT:'Imprimir',
PUBLISH:'Publicar',
REDO:'Deshacer',
ADD_TOPIC:'Agregar Tópico',
COLLABORATE:'Compartir',
EXPORT:'Exportar',
HISTORY:'History',
SAVE_COMPLETE:'Grabado Completo',
SAVING:'Grabando ...',
ONE_TOPIC_MUST_BE_SELECTED:'No ha sido posible crear un nuevo tópico. Al menos un tópico debe ser seleccionado.',
ONLY_ONE_TOPIC_MUST_BE_SELECTED:'No ha sido posible crear un nuevo tópico. Solo un tópico debe ser seleccionado.',
SAVE_COULD_NOT_BE_COMPLETED:'Grabación no pudo ser completada. Intentelo mas tarde.',
UNEXPECTED_ERROR_LOADING:"Lo sentimos, un error inesperado ha ocurrido. Intentelo nuevamente recargando el editor.\n Si el problema persiste, contactenos a support@wisemapping.com.",
ZOOM_ERROR:'No es posible aplicar mas zoom.',
ZOOM_IN_ERROR:'El zoom es muy alto.',
MAIN_TOPIC:'Tópico Principal',
SUB_TOPIC:'Tópico Secundario',
ISOLATED_TOPIC:'Tópico Aislado',
CENTRAL_TOPIC:'Tópico Central',
ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'Tópicos hijos no pueden ser colapsados. Solo un topic debe ser seleccionado.',
SHORTCUTS:'Accesos directos',
ENTITIES_COULD_NOT_BE_DELETED:'El tópico o la relación no pudo ser borrada. Debe selecionar al menos una.',
CENTRAL_TOPIC_CAN_NOT_BE_DELETED:'El tópico central no puede ser borrado.',
SELECTION_COPIED_TO_CLIPBOARD:'Tópicos copiados al clipboard',
CLIPBOARD_IS_EMPTY:'Nada que copiar. Clipboard está vacio.',
AT_LEAST_ONE_TOPIC_MUST_BE_SELECTED:'Al menos un tópico debe ser seleccionado.',
RELATIONSHIP_COULD_NOT_BE_CREATED:'La relación no pudo ser creada. Una relación padre debe ser seleccionada primero.'
},
zh_cn:{
ZOOM_IN:'放大',
ZOOM_OUT:'缩小',
TOPIC_SHAPE:'节点外形',
TOPIC_ADD:'添加节点',
TOPIC_DELETE:'删除节点',
TOPIC_ICON:'加入图标',
TOPIC_LINK:'添加链接',
TOPIC_RELATIONSHIP:'关系',
TOPIC_COLOR:'节点颜色',
TOPIC_BORDER_COLOR:'边框颜色',
TOPIC_NOTE:'添加注释',
FONT_FAMILY:'字体',
FONT_SIZE:'文字大小',
FONT_BOLD:'粗体',
FONT_ITALIC:'斜体',
UNDO:'撤销',
REDO:'重做',
INSERT:'插入',
SAVE:'保存',
NOTE:'注释',
ADD_TOPIC:'添加节点',
LOADING:'载入中……',
EXPORT:'导出',
PRINT:'打印',
PUBLISH:'公开',
COLLABORATE:'共享',
HISTORY:'历史',
DISCARD_CHANGES:'清除改变',
FONT_COLOR:'文本颜色',
SAVING:'保存中……',
SAVE_COMPLETE:'完成保存',
ZOOM_IN_ERROR:'缩放过多。',
ZOOM_ERROR:'不能再缩放。',
ONLY_ONE_TOPIC_MUST_BE_SELECTED:'不能创建节点。仅能选择一个节点。',
ONE_TOPIC_MUST_BE_SELECTED:'不能创建节点。必须选择一个节点。',
ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'子节点不能折叠。必须选择一个节点。',
SAVE_COULD_NOT_BE_COMPLETED:'保存未完成。稍后再试。',
UNEXPECTED_ERROR_LOADING:'抱歉,突遭错误,我们无法处理你的请求。\n尝试重新装载编辑器。如果问题依然存在请联系support@wisemapping.com。',
MAIN_TOPIC:'主节点',
SUB_TOPIC:'子节点',
ISOLATED_TOPIC:'独立节点',
CENTRAL_TOPIC:'中心节点',
SHORTCUTS:'快捷键'
},
zh_tw:{
ZOOM_IN:'放大',
ZOOM_OUT:'縮小',
TOPIC_SHAPE:'節點外形',
TOPIC_ADD:'添加節點',
TOPIC_DELETE:'刪除節點',
TOPIC_ICON:'加入圖示',
TOPIC_LINK:'添加鏈接',
TOPIC_RELATIONSHIP:'關係',
TOPIC_COLOR:'節點顏色',
TOPIC_BORDER_COLOR:'邊框顏色',
TOPIC_NOTE:'添加注釋',
FONT_FAMILY:'字體',
FONT_SIZE:'文字大小',
FONT_BOLD:'粗體',
FONT_ITALIC:'斜體',
UNDO:'撤銷',
REDO:'重做',
INSERT:'插入',
SAVE:'保存',
NOTE:'注釋',
ADD_TOPIC:'添加節點',
LOADING:'載入中……',
EXPORT:'導出',
PRINT:'列印',
PUBLISH:'公開',
COLLABORATE:'共用',
HISTORY:'歷史',
DISCARD_CHANGES:'清除改變',
FONT_COLOR:'文本顏色',
SAVING:'保存中……',
SAVE_COMPLETE:'完成保存',
ZOOM_IN_ERROR:'縮放過多。',
ZOOM_ERROR:'不能再縮放。',
ONLY_ONE_TOPIC_MUST_BE_SELECTED:'不能創建節點。僅能選擇一個節點。',
ONE_TOPIC_MUST_BE_SELECTED:'不能創建節點。必須選擇一個節點。',
ONLY_ONE_TOPIC_MUST_BE_SELECTED_COLLAPSE:'子節點不能折疊。必須選擇一個節點。',
SAVE_COULD_NOT_BE_COMPLETED:'保存未完成。稍後再試。',
UNEXPECTED_ERROR_LOADING:'抱歉,突遭錯誤,我們無法處理你的請求。\n嘗試重新裝載編輯器。如果問題依然存在請聯繫support@wisemapping.com。',
MAIN_TOPIC:'主節點',
SUB_TOPIC:'子節點',
ISOLATED_TOPIC:'獨立節點',
CENTRAL_TOPIC:'中心節點',
SHORTCUTS:'快捷鍵'
}
};
mindplot.Messages.BUNDLES['zh'] = mindplot.Messages.zh_tw;
mindplot.Messages.BUNDLES = {};

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();
var textShape = 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
@@ -17,45 +17,49 @@
*/
mindplot.NoteIcon = new Class({
Extends: mindplot.Icon,
initialize : function(topic, noteModel) {
Extends:mindplot.Icon,
initialize:function (topic, noteModel, readOnly) {
$assert(topic, 'topic can not be null');
this.parent(mindplot.NoteIcon.IMAGE_URL);
this._linksModel = noteModel;
this._topic = topic;
this._readOnly = readOnly;
this._registerEvents();
},
_registerEvents : function() {
_registerEvents:function () {
this._image.setCursor('pointer');
// Add on click event to open the editor ...
this.addEvent('click', function(event) {
this._topic.showNoteEditor();
event.stopPropagation();
}.bind(this));
if (!this._readOnly) {
// Add on click event to open the editor ...
this.addEvent('click', function (event) {
this._topic.showNoteEditor();
event.stopPropagation();
}.bind(this));
}
this._tip = new mindplot.widget.FloatingTip(this.getImage()._peer._native, {
// Content can also be a function of the target element!
content: function() {
content:function () {
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',
'padding-bottom':'5px',
width: '100px'
width:'100px'
});
title.inject(result);
var text = new Element('div', {text:this._linksModel.getText()});
text.setStyles({
'white-space': 'pre-wrap',
'word-wrap': 'break-word'
'white-space':'pre-wrap',
'word-wrap':'break-word'
}
);
text.inject(result);
@@ -63,17 +67,17 @@ mindplot.NoteIcon = new Class({
return result;
}.bind(this),
html: true,
position: 'bottom',
arrowOffset : 10,
center: true,
arrowSize: 15,
offset : {x:10,y:20},
html:true,
position:'bottom',
arrowOffset:10,
center:true,
arrowSize:15,
offset:{x:10, y:20},
className:'notesTip'
});
},
getModel : function() {
getModel:function () {
return this._linksModel;
}
});

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
@@ -21,7 +21,7 @@ mindplot.Relationship = new Class({
getStrokeColor:function () {
return '#9b74e6';
},
type: "Relationship"
type:"Relationship"
},
initialize:function (sourceNode, targetNode, model) {
$assert(sourceNode, "sourceNode can not be null");
@@ -83,14 +83,19 @@ mindplot.Relationship = new Class({
var targetTopic = this._targetTopic;
var targetPosition = targetTopic.getPosition();
if (targetTopic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
targetPosition = mindplot.util.Shape.workoutIncomingConnectionPoint(targetTopic, sourcePosition);
}
var sPos, tPos;
this._line2d.setStroke(2);
var ctrlPoints = this._line2d.getControlPoints();
if (!this._line2d.isDestControlPointCustom() && !this._line2d.isSrcControlPointCustom()) {
var defaultPoints = mindplot.util.Shape.calculateDefaultControlPoints(sourcePosition, targetPosition);
ctrlPoints[0].x = defaultPoints[0].x;
ctrlPoints[0].y = defaultPoints[0].y;
ctrlPoints[1].x = defaultPoints[1].x;
ctrlPoints[1].y = defaultPoints[1].y;
}
@@ -101,6 +106,7 @@ mindplot.Relationship = new Class({
var tpoint = new core.Point();
tpoint.x = parseInt(ctrlPoints[1].x) + parseInt(targetPosition.x);
tpoint.y = parseInt(ctrlPoints[1].y) + parseInt(targetPosition.y);
sPos = mindplot.util.Shape.calculateRelationShipPointCoordinates(sourceTopic, spoint);
tPos = mindplot.util.Shape.calculateRelationShipPointCoordinates(targetTopic, tpoint);
@@ -202,8 +208,7 @@ mindplot.Relationship = new Class({
this._controlPointsController.setVisibility(focus);
this._onFocus = focus;
console.log("foucus:....");
this.fireEvent(focus ? 'ontfocus' : 'ontblur', this);
}
},
@@ -316,5 +321,10 @@ mindplot.Relationship = new Class({
getId:function () {
return this._model.getId();
},
fireEvent:function (type, event) {
var elem = this._line2d;
elem.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
@@ -39,13 +39,25 @@ 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);
var fromPos = this._calculateFromPosition(sourcePos);
this._pivot.setFrom(fromPos.x, fromPos.y);
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 +86,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 +99,20 @@ 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 sourcePosition = this._sourceTopic.getPosition();
var gapDistance = Math.sign(pos.x - sourcePosition.x) * 5;
var sPos = this._calculateFromPosition(pos);
this._pivot.setFrom(sPos.x, sPos.y);
// Update target position ...
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;
},
@@ -97,11 +124,30 @@ mindplot.RelationshipPivot = new Class({
event.stopPropagation();
},
_calculateFromPosition:function (toPosition) {
// Calculate origin position ...
var sourcePosition = this._sourceTopic.getPosition();
if (this._sourceTopic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
sourcePosition = mindplot.util.Shape.workoutIncomingConnectionPoint(this._sourceTopic, toPosition);
}
var controlPoint = mindplot.util.Shape.calculateDefaultControlPoints(sourcePosition, toPosition);
var spoint = new core.Point();
spoint.x = parseInt(controlPoint[0].x) + parseInt(sourcePosition.x);
spoint.y = parseInt(controlPoint[0].y) + parseInt(sourcePosition.y);
return mindplot.util.Shape.calculateRelationShipPointCoordinates(this._sourceTopic, spoint);
},
_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.documentUrl, "documentUrl 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.documentUrl = options.documentUrl;
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,73 @@ 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 + "&timestamp=" + this.timestamp;
query = query + "&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.documentUrl.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);
persistence.onSave = false;
},
headers:{"Content-Type":"application/json", "Accept":"application/json"},
emulation:false,
urlEncoded:false
});
request.put(JSON.encode(data));
}
},
discardChanges:function (mapId) {
@@ -60,7 +116,6 @@ mindplot.RESTPersistenceManager = new Class({
async:false,
method:'post',
onSuccess:function () {
console.log("Revert success ....");
},
onException:function () {
},
@@ -71,8 +126,64 @@ 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};
},
loadMapDom:function (mapId) {
// Let's try to open one from the local directory ...
var xml;
var xmlRequest = new Request({
url:this.documentUrl.replace("{id}", mapId) + "/xml",
method:'get',
async:false,
headers:{"Content-Type":"text/plain","Accept":"application/xml"},
onSuccess:function (responseText) {
xml = responseText;
}
});
xmlRequest.send();
// If I could not load it from a file, hard code one.
if (xml == null) {
throw new Error("Map could not be loaded");
}
var parser = new DOMParser();
return parser.parseFromString(xml, "text/xml");
}
}
);

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
@@ -23,12 +23,6 @@ mindplot.StandaloneActionDispatcher = new Class({
this._actionRunner = new mindplot.DesignerActionRunner(commandContext, this);
},
hasBeenChanged:function () {
// @todo: This don't seems to belong here.
this._actionRunner.hasBeenChanged();
},
addTopics:function (models, parentTopicsId) {
var command = new mindplot.commands.AddTopicCommand(models, parentTopicsId);
this.execute(command);
@@ -89,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);
@@ -248,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 () {
@@ -267,8 +270,13 @@ mindplot.CommandContext = new Class({
return mindmap.createNode(mindplot.NodeModel.MAIN_TOPIC_TYPE);
},
connect:function (childTopic, parentTopic, isVisible) {
childTopic.connectTo(parentTopic, this._designer._workspace, isVisible);
addTopic:function (topic) {
var mindmap = this._designer.getMindmap();
return mindmap.addBranch(topic.getModel());
},
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 ...
@@ -267,25 +267,23 @@ mindplot.Topic = new Class({
var featuresModel = model.getFeatures();
for (var i = 0; i < featuresModel.length; i++) {
var featureModel = featuresModel[i];
var icon = mindplot.TopicFeature.createIcon(this, featureModel);
result.addIcon(icon, featureModel.getType() == "icon"); // @Todo: Remove hack ...
var icon = mindplot.TopicFeature.createIcon(this, featureModel, this.isReadOnly());
result.addIcon(icon, featureModel.getType() == mindplot.TopicFeature.Icon.id && !this.isReadOnly());
}
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);
iconGroup.addIcon(result, type == "icon"); // @Todo: Remove hack ...
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;
},
@@ -604,7 +598,7 @@ mindplot.Topic = new Class({
areChildrenShrunken:function () {
var model = this.getModel();
return model.areChildrenShrunken();
return model.areChildrenShrunken() && !this.isCentralTopic();
},
isCollapsed:function () {
@@ -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);
},
@@ -825,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();
}
@@ -839,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 () {
@@ -876,7 +888,12 @@ mindplot.Topic = new Class({
_setRelationshipLinesVisibility:function (value) {
this._relationships.each(function (relationship) {
relationship.setVisibility(value);
var sourceTopic = relationship.getSourceTopic();
var targetTopic = relationship.getTargetTopic();
var targetParent = targetTopic.getModel().getParent();
var sourceParent = sourceTopic.getModel().getParent();
relationship.setVisibility(value && (targetParent == null || !targetParent.areChildrenShrunken()) && (sourceParent == null || !sourceParent.areChildrenShrunken()));
});
},
@@ -1019,9 +1036,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');
@@ -1036,9 +1053,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);
@@ -1070,7 +1086,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) {
@@ -1107,7 +1122,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());
}
@@ -1150,7 +1165,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();
@@ -1193,12 +1208,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
@@ -17,51 +17,51 @@
*/
mindplot.TopicFeature = {
Icon: {
Icon:{
id:mindplot.model.IconModel.FEATURE_TYPE,
model: mindplot.model.IconModel,
icon : mindplot.ImageIcon
model:mindplot.model.IconModel,
icon:mindplot.ImageIcon
},
Link: {
id: mindplot.model.LinkModel.FEATURE_TYPE,
model: mindplot.model.LinkModel,
icon : mindplot.LinkIcon
Link:{
id:mindplot.model.LinkModel.FEATURE_TYPE,
model:mindplot.model.LinkModel,
icon:mindplot.LinkIcon
},
Note: {
id: mindplot.model.NoteModel.FEATURE_TYPE,
model: mindplot.model.NoteModel,
icon : mindplot.NoteIcon
Note:{
id:mindplot.model.NoteModel.FEATURE_TYPE,
model:mindplot.model.NoteModel,
icon:mindplot.NoteIcon
},
isSupported : function(id) {
return mindplot.TopicFeature._featuresMetadataById.some(function(elem) {
isSupported:function (id) {
return mindplot.TopicFeature._featuresMetadataById.some(function (elem) {
return elem.id == id;
});
},
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;
var model = mindplot.TopicFeature._featuresMetadataById.filter(function (elem) {
return elem.id == type;
})[0].model;
return new model(attributes);
},
createIcon : function(topic, model) {
createIcon:function (topic, model, readOnly) {
$assert(topic, 'topic can not be null');
$assert(model, 'model can not be null');
var icon = mindplot.TopicFeature._featuresMetadataById.filter(function(elem) {
var icon = mindplot.TopicFeature._featuresMetadataById.filter(function (elem) {
return elem.id == model.getType();
})[0].icon;
return new icon(topic, model);
return new icon(topic, model, readOnly);
}
};
mindplot.TopicFeature._featuresMetadataById = [mindplot.TopicFeature.Icon,mindplot.TopicFeature.Link,mindplot.TopicFeature.Note];
mindplot.TopicFeature._featuresMetadataById = [mindplot.TopicFeature.Icon, mindplot.TopicFeature.Link, mindplot.TopicFeature.Note];

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) {
@@ -41,16 +41,18 @@ mindplot.commands.AddTopicCommand = new Class({
var parentTopic = commandContext.findTopics(parentId)[0];
commandContext.connect(topic, parentTopic);
}
}else {
commandContext.addTopic(topic);
}
// 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,14 +142,26 @@ 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());
if (result.length > 0) {
// Filter for unique ...
result = result.sort(function (a, b) {
return a.getModel().getId() - b.getModel().getId();
});
var ret = [result[0]];
for (var i = 1; i < result.length; i++) { // start loop at 1 as element 0 can never be a duplicate
if (result[i - 1] !== result[i]) {
ret.push(result[i]);
}
}
result = ret;
}
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
@@ -70,7 +70,7 @@ mindplot.layout.BalancedSorter = new Class({
// No children?
if (children.length == 0) {
return [order, {x:parent.getPosition().x + direction * (parent.getSize().width + mindplot.layout.BalancedSorter.INTERNODE_HORIZONTAL_PADDING * 2), y:parent.getPosition().y}];
return [order, {x:parent.getPosition().x + direction * (parent.getSize().width / 2 + mindplot.layout.BalancedSorter.INTERNODE_HORIZONTAL_PADDING * 2), y:parent.getPosition().y}];
}
// Try to fit within ...

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
@@ -21,13 +21,26 @@ mindplot.layout.SymmetricSorter = new Class({
},
/**
* Predict the order and position of a dragged node.
*
* @param graph The tree set
* @param parent The parent of the node
* @param node The node
* @param position The position of the drag
* @param free Free drag or not
* @return {*}
*/
predict:function (graph, parent, node, position, free) {
var self = this;
var rootNode = graph.getRootNode(parent);
// If its a free node...
if (free) {
$assert($defined(position), "position cannot be null for predict in free positioning");
$assert($defined(node), "node cannot be null for predict in free positioning");
var rootNode = graph.getRootNode(parent);
var direction = this._getRelativeDirection(rootNode.getPosition(), parent.getPosition());
var limitXPos = parent.getPosition().x + direction * (parent.getSize().width / 2 + node.getSize().width / 2 + mindplot.layout.SymmetricSorter.INTERNODE_HORIZONTAL_PADDING);
@@ -38,61 +51,81 @@ mindplot.layout.SymmetricSorter = new Class({
return [0, {x:xPos, y:position.y}];
}
var rootNode = graph.getRootNode(parent);
// If it is a dragged node...
if (node) {
$assert($defined(position), "position cannot be null for predict in dragging");
var nodeDirection = this._getRelativeDirection(rootNode.getPosition(), node.getPosition());
var positionDirection = this._getRelativeDirection(rootNode.getPosition(), position);
var siblings = graph.getSiblings(node);
var sameParent = parent == graph.getParent(node);
if (siblings.length == 0 && nodeDirection == positionDirection && sameParent) {
return [node.getOrder(), node.getPosition()];
}
}
// Regular node
var direction = parent.getPosition().x > rootNode.getPosition().x ? 1 : -1;
// No children...
var children = graph.getChildren(parent).filter(function (child) {
return child != node;
});
if (children.length == 0) {
position = position || {x:parent.getPosition().x + direction, y:parent.getPosition().y};
var pos = {
x:parent.getPosition().x + direction * (parent.getSize().width + mindplot.layout.SymmetricSorter.INTERNODE_HORIZONTAL_PADDING),
// Its not a dragged node (it is being added)
if (!node) {
var parentDirection = self._getRelativeDirection(rootNode.getPosition(), parent.getPosition());
var position = {
x:parent.getPosition().x + parentDirection * (parent.getSize().width + mindplot.layout.SymmetricSorter.INTERNODE_HORIZONTAL_PADDING),
y:parent.getPosition().y
};
return [0, pos];
return [graph.getChildren(parent).length, position];
}
// Try to fit within ...
var result = null;
var last = children.getLast();
position = position || {x:last.getPosition().x + direction, y:last.getPosition().y + 1};
children.each(function (child, index) {
var cpos = child.getPosition();
if (position.y > cpos.y) {
var yOffset = child == last ?
child.getSize().height + mindplot.layout.SymmetricSorter.INTERNODE_VERTICAL_PADDING * 2 :
(children[index + 1].getPosition().y + children[index + 1].getSize().height / 2 - child.getPosition().y) / 2;
result = [child.getOrder() + 1, {x:cpos.x, y:cpos.y + yOffset}];
// If it is a dragged node...
$assert($defined(position), "position cannot be null for predict in dragging");
var nodeDirection = this._getRelativeDirection(rootNode.getPosition(), node.getPosition());
var positionDirection = this._getRelativeDirection(rootNode.getPosition(), position);
var siblings = graph.getSiblings(node);
// node has no siblings and its trying to reconnect to its own parent
var sameParent = parent == graph.getParent(node);
if (siblings.length == 0 && nodeDirection == positionDirection && sameParent) {
return [node.getOrder(), node.getPosition()];
}
var parentChildren = graph.getChildren(parent);
if (parentChildren.length == 0) {
// Fit as a child of the parent node...
var position = {
x:parent.getPosition().x + positionDirection * (parent.getSize().width + mindplot.layout.SymmetricSorter.INTERNODE_HORIZONTAL_PADDING),
y:parent.getPosition().y
};
return [0, position];
} else {
// Try to fit within ...
var result = null;
var last = parentChildren.getLast();
for (var i = 0; i < parentChildren.length; i++) {
var parentChild = parentChildren[i];
var nodeAfter = (i + 1) == parentChild.length ? null : parentChildren[i + 1];
// Fit at the bottom
if (!nodeAfter && position.y > parentChild.getPosition().y) {
var order = (graph.getParent(node) && graph.getParent(node).getId() == parent.getId()) ?
last.getOrder() : last.getOrder() + 1;
var position = {
x:parentChild.getPosition().x,
y:parentChild.getPosition().y + parentChild.getSize().height + mindplot.layout.SymmetricSorter.INTERNODE_VERTICAL_PADDING * 2
};
return [order, position];
}
// Fit after this node
if (nodeAfter && position.y > parentChild.getPosition().y && position.y < nodeAfter.getPosition().y) {
if (nodeAfter.getId() == node.getId() || parentChild.getId() == node.getId()) {
return [node.getOrder(), node.getPosition()];
} else {
var order = position.y > node.getPosition().y ?
nodeAfter.getOrder() - 1 : parentChild.getOrder() + 1;
var position = {
x:parentChild.getPosition().x,
y:parentChild.getPosition().y + (nodeAfter.getPosition().y - parentChild.getPosition().y) / 2
};
return [order, position];
}
}
}
});
// Position wasn't below any node, so it must be inserted above
if (!result) {
var first = children[0];
result = [0, {
x:first.getPosition().x,
y:first.getPosition().y - first.getSize().height - mindplot.layout.SymmetricSorter.INTERNODE_VERTICAL_PADDING * 2
}];
}
return result;
// Position wasn't below any node, so it must be fitted above the first
var first = parentChildren[0];
var position = {
x:first.getPosition().x,
y:first.getPosition().y - first.getSize().height - mindplot.layout.SymmetricSorter.INTERNODE_VERTICAL_PADDING * 2
};
return [0, position];
},
insert:function (treeSet, parent, child, order) {

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,53 +149,6 @@ mindplot.model.NodeModel = new Class({
this._parent = parent;
},
canBeConnected:function (sourceModel, sourcePosition, targetTopicHeight, targetTopicSize) {
$assert(sourceModel != this, 'The same node can not be parent and child if itself.');
$assert(sourcePosition, 'childPosition can not be null.');
$assert(targetTopicHeight, 'childrenWidth can not be null.');
$assert(targetTopicSize, 'targetTopicSize can not be null.');
// Only can be connected if the node is in the left or rigth.
var targetModel = this;
var mindmap = targetModel.getMindmap();
var targetPosition = targetModel.getPosition();
var result = false;
if (sourceModel.getType() == mindplot.model.INodeModel.MAIN_TOPIC_TYPE) {
// Finally, check current node position ...
var yDistance = Math.abs(sourcePosition.y - targetPosition.y);
var gap = 35 + targetTopicHeight / 2;
if (targetModel.getChildren().length > 0) {
gap += Math.abs(targetPosition.y - targetModel.getChildren()[0].getPosition().y);
}
if (yDistance <= gap) {
// Circular connection ?
if (!sourceModel._isChildNode(this)) {
var toleranceDistance = (targetTopicSize.width / 2) + targetTopicHeight;
var xDistance = sourcePosition.x - targetPosition.x;
var isTargetAtRightFromCentral = targetPosition.x >= 0;
if (isTargetAtRightFromCentral) {
if (xDistance >= -targetTopicSize.width / 2 && xDistance <= mindplot.model.INodeModel.MAIN_TOPIC_TO_MAIN_TOPIC_DISTANCE / 2 + (targetTopicSize.width / 2)) {
result = true;
}
} else {
if (xDistance <= targetTopicSize.width / 2 && Math.abs(xDistance) <= mindplot.model.INodeModel.MAIN_TOPIC_TO_MAIN_TOPIC_DISTANCE / 2 + (targetTopicSize.width / 2)) {
result = true;
}
}
}
}
} else {
throw "No implemented yet";
}
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
@@ -17,17 +17,18 @@
*/
mindplot.model.NoteModel = new Class({
Extends: mindplot.model.FeatureModel,
initialize : function(attributes) {
Extends:mindplot.model.FeatureModel,
initialize:function (attributes) {
this.parent(mindplot.model.NoteModel.FEATURE_TYPE);
this.setText(attributes.text);
var noteText = attributes.text ? attributes.text : " ";
this.setText(noteText);
},
getText:function() {
getText:function () {
return this.getAttribute('text');
},
setText : function(text) {
setText:function (text) {
$assert(text, 'text can not be null');
this.setAttribute('text', text);
}

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
@@ -93,7 +93,7 @@ mindplot.model.RelationshipModel = new Class({
this._startArrow = startArrow;
},
clone:function (model) {
clone:function () {
var result = new mindplot.model.RelationshipModel(this._sourceTargetId, this._targetTopicId);
result._id = this._id;
result._lineType = this._lineType;

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
@@ -16,7 +16,7 @@
*/
mindplot.persistence.XMLSerializer_Beta = new Class({
toXML : function(mindmap) {
toXML:function (mindmap) {
$assert(mindmap, "Can not save a null mindmap");
var document = core.Utils.createDocument();
@@ -40,7 +40,7 @@ mindplot.persistence.XMLSerializer_Beta = new Class({
return document;
},
_topicToXML : function(document, topic) {
_topicToXML:function (document, topic) {
var parentTopic = document.createElement("topic");
// Set topic attributes...
@@ -105,8 +105,9 @@ mindplot.persistence.XMLSerializer_Beta = new Class({
}
//ICONS
var i;
var icons = topic.getIcons();
for (var i = 0; i < icons.length; i++) {
for (i = 0; i < icons.length; i++) {
var icon = icons[i];
var iconDom = this._iconToXML(document, icon);
parentTopic.appendChild(iconDom);
@@ -114,14 +115,14 @@ mindplot.persistence.XMLSerializer_Beta = new Class({
//LINKS
var links = topic.getLinks();
for (var i = 0; i < links.length; i++) {
for (i = 0; i < links.length; i++) {
var link = links[i];
var linkDom = this._linkToXML(document, link);
parentTopic.appendChild(linkDom);
}
var notes = topic.getNotes();
for (var i = 0; i < notes.length; i++) {
for (i = 0; i < notes.length; i++) {
var note = notes[i];
var noteDom = this._noteToXML(document, note);
parentTopic.appendChild(noteDom);
@@ -129,7 +130,7 @@ mindplot.persistence.XMLSerializer_Beta = new Class({
//CHILDREN TOPICS
var childTopics = topic.getChildren();
for (var i = 0; i < childTopics.length; i++) {
for (i = 0; i < childTopics.length; i++) {
var childTopic = childTopics[i];
var childDom = this._topicToXML(document, childTopic);
parentTopic.appendChild(childDom);
@@ -139,39 +140,41 @@ mindplot.persistence.XMLSerializer_Beta = new Class({
return parentTopic;
},
_iconToXML : function(document, icon) {
_iconToXML:function (document, icon) {
var iconDom = document.createElement("icon");
iconDom.setAttribute('id', icon.getIconType());
return iconDom;
},
_linkToXML : function(document, link) {
_linkToXML:function (document, link) {
var linkDom = document.createElement("link");
linkDom.setAttribute('url', link.getUrl());
return linkDom;
},
_noteToXML : function(document, note) {
_noteToXML:function (document, note) {
var noteDom = document.createElement("note");
noteDom.setAttribute('text', note.getText());
return noteDom;
},
loadFromDom : function(dom, mapId) {
loadFromDom:function (dom, mapId) {
$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.");
$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) {
@@ -183,7 +186,7 @@ mindplot.persistence.XMLSerializer_Beta = new Class({
return mindmap;
},
_deserializeNode : function(domElem, mindmap) {
_deserializeNode:function (domElem, mindmap) {
var type = (domElem.getAttribute('central') != null) ? mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE : mindplot.model.INodeModel.MAIN_TOPIC_TYPE;
var topic = mindmap.createNode(type);
@@ -274,19 +277,19 @@ mindplot.persistence.XMLSerializer_Beta = new Class({
return topic;
},
_deserializeIcon : function(domElem, topic) {
_deserializeIcon:function (domElem) {
var icon = domElem.getAttribute("id");
icon = icon.replace("images/", "icons/legacy/");
return mindplot.TopicFeature.createModel(mindplot.TopicFeature.Icon.id, topic, {id:icon});
return mindplot.TopicFeature.createModel(mindplot.TopicFeature.Icon.id, {id:icon});
},
_deserializeLink : function(domElem, topic) {
return mindplot.TopicFeature.createModel(mindplot.TopicFeature.Link.id, topic, {url:domElem.getAttribute("url")});
_deserializeLink:function (domElem) {
return mindplot.TopicFeature.createModel(mindplot.TopicFeature.Link.id, {url:domElem.getAttribute("url")});
},
_deserializeNote : function(domElem, topic) {
_deserializeNote:function (domElem) {
var text = domElem.getAttribute("text");
return mindplot.TopicFeature.createModel(mindplot.TopicFeature.Note.id, topic, {text:text == null ? " " : text});
return mindplot.TopicFeature.createModel(mindplot.TopicFeature.Note.id, {text:text == null ? " " : text});
}});
mindplot.persistence.XMLSerializer_Beta.MAP_ROOT_NODE = 'map';

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,9 +47,14 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
// Create Relationships
var relationships = mindmap.getRelationships();
if (relationships.length > 0) {
for (var j = 0; j < relationships.length; j++) {
var relationDom = this._relationshipToXML(document, relationships[j]);
mapElem.appendChild(relationDom);
var relationship = relationships[j];
if (mindmap.findNodeById(relationship.getFromNode()) !== null && mindmap.findNodeById(relationship.getToNode()) !== null) {
// Isolated relationships are not persisted ....
var relationDom = this._relationshipToXML(document, relationship);
mapElem.appendChild(relationDom);
}
}
}
@@ -61,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();
@@ -87,8 +92,8 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
}
if (topic.areChildrenShrunken()) {
parentTopic.setAttribute('shrink', true);
if (topic.areChildrenShrunken() && topic.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
parentTopic.setAttribute('shrink', 'true');
}
// Font properties ...
@@ -180,6 +185,7 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
result.setAttribute("srcTopicId", relationship.getFromNode());
result.setAttribute("destTopicId", relationship.getToNode());
var lineType = relationship.getLineType();
result.setAttribute("lineType", lineType);
if (lineType == mindplot.ConnectionLine.CURVED || lineType == mindplot.ConnectionLine.SIMPLE_CURVED) {
@@ -249,28 +255,15 @@ 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)) {
if ($defined(text) && text) {
topic.setText(text);
}
var shape = domElem.getAttribute('shape');
if ($defined(shape)) {
topic.setShapeType(shape);
if (shape == mindplot.model.TopicShape.IMAGE) {
var image = domElem.getAttribute('image');
var size = image.substring(0, image.indexOf(':'));
var url = image.substring(image.indexOf(':') + 1, image.length);
topic.setImageUrl(url);
var split = size.split(',');
topic.setImageSize(split[0], split[1]);
}
}
var fontStyle = domElem.getAttribute('fontStyle');
if ($defined(fontStyle)) {
if ($defined(fontStyle) && fontStyle) {
var font = fontStyle.split(';');
if (font[0]) {
@@ -294,6 +287,22 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
}
}
var shape = domElem.getAttribute('shape');
if ($defined(shape)) {
topic.setShapeType(shape);
if (shape == mindplot.model.TopicShape.IMAGE) {
var image = domElem.getAttribute('image');
var size = image.substring(0, image.indexOf(':'));
var url = image.substring(image.indexOf(':') + 1, image.length);
topic.setImageUrl(url);
var split = size.split(',');
topic.setImageSize(split[0], split[1]);
}
}
var bgColor = domElem.getAttribute('bgColor');
if ($defined(bgColor)) {
topic.setBackgroundColor(bgColor);
@@ -305,12 +314,13 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
}
var order = domElem.getAttribute('order');
if ($defined(order)) {
if ($defined(order) && order != "NaN") { // Hack for broken maps ...
topic.setOrder(parseInt(order));
}
var isShrink = domElem.getAttribute('shrink');
if ($defined(isShrink)) {
// Hack: Some production maps has been stored with the central topic collapsed. This is a bug.
if ($defined(isShrink) && type!=mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
topic.setChildrenShrunken(isShrink);
}
@@ -423,8 +433,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

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