252 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
463 changed files with 32373 additions and 5683 deletions

1
.gitignore vendored
View File

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

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

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

View File

@@ -1,64 +1,61 @@
/*
* Copyright [2011] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
core.Utils = {
};
core.Utils.innerXML = function(/*Node*/node) {
// summary:
// Implementation of MS's innerXML function.
if ($defined(node.innerXML)) {
return node.innerXML;
// string
} else if ($defined(node.xml)) {
return node.xml;
// string
} else if ($defined(XMLSerializer)) {
return (new XMLSerializer()).serializeToString(node);
// string
}
};
core.Utils.createDocument = function() {
// summary:
// cross-browser implementation of creating an XML document object.
var doc = null;
var _document = window.document;
if ($defined(window.ActiveXObject)) {
var prefixes = [ "MSXML2", "Microsoft", "MSXML", "MSXML3" ];
for (var i = 0; i < prefixes.length; i++) {
try {
doc = new ActiveXObject(prefixes[i] + ".XMLDOM");
} catch(e) { /* squelch */
}
if ($defined(doc)) {
break;
}
}
} else if ((_document.implementation) &&
(_document.implementation.createDocument)) {
doc = _document.implementation.createDocument("", "", null);
}
return doc;
// DOMDocument
/*
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
core.Utils = {
};
core.Utils.innerXML = function (node) {
// summary:
// Implementation of MS's innerXML function.
if ($defined(node.innerXML)) {
return node.innerXML;
// string
} else if ($defined(node.xml)) {
return node.xml;
// string
} else if ($defined(XMLSerializer)) {
return (new XMLSerializer()).serializeToString(node);
// string
}
};
/**
* Cross-browser implementation of creating an XML document object.
*/
core.Utils.createDocument = function () {
var doc = null;
if ($defined(window.ActiveXObject)) {
//http://blogs.msdn.com/b/xmlteam/archive/2006/10/23/using-the-right-version-of-msxml-in-internet-explorer.aspx
var progIDs = [ 'Msxml2.DOMDocument.6.0', 'Msxml2.DOMDocument.3.0'];
for (var i = 0; i < progIDs.length; i++) {
try {
doc = new ActiveXObject(progIDs[i]);
break;
}
catch (ex) {
}
}
} else if (window.document.implementation && window.document.implementation.createDocument) {
doc = window.document.implementation.createDocument("", "", null);
}
$assert(doc, "Parser could not be instantiated");
return doc;
};

View File

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

View File

@@ -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

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

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
@@ -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 () {
@@ -552,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);
@@ -590,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) {
@@ -598,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;
@@ -658,6 +698,9 @@ 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);
@@ -688,7 +731,7 @@ mindplot.Designer = new Class({
},
_removeTopic:function (node) {
if (node.getTopicType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (!node.isCentralTopic()) {
var parent = node._parent;
node.disconnect(this._workspace);
@@ -710,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();
@@ -718,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()
});

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,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
@@ -115,14 +115,16 @@ mindplot.DragTopic = new Class({
},
removeFromWorkspace:function (workspace) {
// Remove drag shadow.
workspace.removeChild(this._elem2d);
this._isInWorkspace = false;
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 () {
@@ -130,10 +132,12 @@ mindplot.DragTopic = new Class({
},
addToWorkspace:function (workspace) {
workspace.appendChild(this._elem2d);
var dragPivot = this._getDragPivot();
dragPivot.addToWorkspace(workspace);
this._isInWorkspace = true;
if (!this._isInWorkspace) {
workspace.appendChild(this._elem2d);
var dragPivot = this._getDragPivot();
dragPivot.addToWorkspace(workspace);
this._isInWorkspace = true;
}
},
_getDragPivot:function () {

View File

@@ -1,3 +1,21 @@
/*
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
mindplot.EditorOptions =
{
LayoutManager:"OriginalLayout",

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -102,7 +102,6 @@ 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"]},
@@ -114,6 +113,7 @@ mindplot.ImageIcon.prototype.ICON_FAMILIES = [
{"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"]},
@@ -126,7 +126,7 @@ mindplot.ImageIcon.prototype.ICON_FAMILIES = [
{"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":"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

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
@@ -55,16 +55,11 @@ mindplot.MainTopic = new Class({
return group;
},
_defaultShapeType:function () {
return mindplot.model.TopicShape.LINE;
},
updateTopicShape:function (targetTopic, workspace) {
// Change figure based on the connected topic ...
var model = this.getModel();
var shapeType = model.getShapeType();
if (targetTopic.getType() != mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
if (!targetTopic.isCentralTopic()) {
if (!$defined(shapeType)) {
// Get the real shape type ...
shapeType = this.getShapeType();
@@ -88,10 +83,6 @@ mindplot.MainTopic = new Class({
innerShape.setVisibility(true);
},
getTopicType:function () {
return "MainTopic";
},
_updatePositionOnChangeSize:function (oldSize, newSize) {
var xOffset = Math.round((newSize.width - oldSize.width) / 2);
@@ -107,28 +98,7 @@ 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;
return mindplot.util.Shape.workoutIncomingConnectionPoint(this, sourcePosition);
},
workoutOutgoingConnectionPoint:function (targetPosition) {
@@ -167,82 +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:"rgb(82,92,97)"
};
} else {
result = {
font:"Arial",
size:6,
style:"normal",
weight:"normal",
color:"rgb(82,92,97)"
};
}
} else {
result = {
font:"Verdana",
size:8,
style:"normal",
weight:"normal",
color:"rgb(82,92,97)"
};
}
return result;
},
_defaultBackgroundColor:function () {
return "rgb(224,229,239)";
},
_defaultBorderColor:function () {
return 'rgb(2,59,185)';
}
});

View File

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

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -17,20 +17,21 @@
*/
mindplot.MultilineTextEditor = new Class({
Extends: Events,
initialize:function() {
Extends:Events,
initialize:function () {
this._topic = null;
this._timeoutId = -1;
},
_buildEditor : function() {
_buildEditor:function () {
var result = new Element('div');
result.setStyles({
position:"absolute",
display: "none",
zIndex: "8",
display:"none",
zIndex:"8",
overflow:"hidden",
border: "0 none"
border:"0 none"
}
);
@@ -42,17 +43,17 @@ mindplot.MultilineTextEditor = new Class({
);
textareaElem.setStyles({
border: "1px gray dashed",
border:"1px gray dashed",
background:"rgba(98, 135, 167, .3)",
outline: '0 none',
resize: 'none',
outline:'0 none',
resize:'none',
overflow:"hidden"
});
textareaElem.inject(result);
return result;
},
_registerEvents : function(containerElem) {
_registerEvents:function (containerElem) {
var textareaElem = this._getTextareaElem();
textareaElem.addEvent('keydown', function (event) {
@@ -63,8 +64,30 @@ mindplot.MultilineTextEditor = new Class({
case 'enter':
if (event.meta || event.control) {
// @todo: Enters must be in any place ...
textareaElem.value = textareaElem.value + "\n";
// Add return ...
var text = textareaElem.value;
var cursorPosition = text.length;
if (textareaElem.selectionStart) {
cursorPosition = textareaElem.selectionStart;
}
var head = text.substring(0, cursorPosition);
var tail = "";
if (cursorPosition < text.length) {
tail = text.substring(cursorPosition, text.length);
}
textareaElem.value = head + "\n" + tail;
// Position cursor ...
if (textareaElem.setSelectionRange) {
textareaElem.focus();
textareaElem.setSelectionRange(cursorPosition + 1, cursorPosition + 1);
} else if (textareaElem.createTextRange) {
var range = textareaElem.createTextRange();
range.moveStart('character', cursorPosition + 1);
range.select();
}
}
else {
this.close(true);
@@ -74,36 +97,36 @@ mindplot.MultilineTextEditor = new Class({
event.stopPropagation();
}.bind(this));
textareaElem.addEvent('keypress', function(event) {
textareaElem.addEvent('keypress', function (event) {
event.stopPropagation();
});
textareaElem.addEvent('keyup', function(event) {
textareaElem.addEvent('keyup', function (event) {
var text = this._getTextareaElem().value;
this.fireEvent('input', [event, text]);
this._adjustEditorSize();
}.bind(this));
// If the user clicks on the input, all event must be ignored ...
containerElem.addEvent('click', function(event) {
containerElem.addEvent('click', function (event) {
event.stopPropagation();
});
containerElem.addEvent('dblclick', function(event) {
containerElem.addEvent('dblclick', function (event) {
event.stopPropagation();
});
containerElem.addEvent('mousedown', function(event) {
containerElem.addEvent('mousedown', function (event) {
event.stopPropagation();
});
},
_adjustEditorSize : function() {
_adjustEditorSize:function () {
if (this.isVisible()) {
var textElem = this._getTextareaElem();
var lines = textElem.value.split('\n');
var maxLineLength = 1;
lines.each(function(line) {
lines.each(function (line) {
if (maxLineLength < line.length)
maxLineLength = line.length;
});
@@ -112,17 +135,17 @@ mindplot.MultilineTextEditor = new Class({
textElem.setAttribute('rows', lines.length);
this._containerElem.setStyles({
width: (maxLineLength + 3) + 'em',
height: textElem.getSize().height
width:(maxLineLength + 3) + 'em',
height:textElem.getSize().height
});
}
},
isVisible : function () {
isVisible:function () {
return $defined(this._containerElem) && this._containerElem.getStyle('display') == 'block';
},
_updateModel : function () {
_updateModel:function () {
if (this._topic.getText() != this._getText()) {
var text = this._getText();
@@ -133,7 +156,11 @@ mindplot.MultilineTextEditor = new Class({
}
},
show : function (topic,text) {
show:function (topic, text) {
// Close a previous node editor if it's opened ...
if (this._topic) {
this.close(false);
}
this._topic = topic;
if (!this.isVisible()) {
@@ -147,7 +174,7 @@ mindplot.MultilineTextEditor = new Class({
}
},
_showEditor : function (defaultText) {
_showEditor:function (defaultText) {
var topic = this._topic;
@@ -162,12 +189,12 @@ mindplot.MultilineTextEditor = new Class({
this._setStyle(font);
// Set editor's initial size
var displayFunc = function() {
var displayFunc = function () {
// Position the editor and set the size...
var textShape = this._topic.getTextShape();
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
@@ -47,7 +47,7 @@ mindplot.NoteIcon = new Class({
var result = new Element('div');
result.setStyles({padding:'5px'});
var title = new Element('div', {text:'Note'});
var title = new Element('div', {text:$msg('NOTE')});
title.setStyles({
'font-weight':'bold',
color:'black',

View File

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

View File

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

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,7 +43,9 @@ mindplot.RelationshipPivot = new Class({
this._pivot = new web2d.CurvedLine();
this._pivot.setStyle(web2d.CurvedLine.SIMPLE_LINE);
this._pivot.setFrom(sourcePos.x, sourcePos.y);
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);
@@ -54,7 +56,6 @@ mindplot.RelationshipPivot = new Class({
this._startArrow.setStrokeWidth(2);
this._startArrow.setFrom(sourcePos.x, sourcePos.y);
this._workspace.appendChild(this._pivot);
this._workspace.appendChild(this._startArrow);
@@ -99,8 +100,13 @@ mindplot.RelationshipPivot = new Class({
var pos = screen.getWorkspaceMousePosition(event);
// Leave the arrow a couple of pixels away from the cursor.
var gapDistance = Math.sign(pos.x - this._sourceTopic.getPosition().x) * 5;
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();
@@ -118,6 +124,21 @@ 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();

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,25 +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) {
var responseText = xhr.responseText;
events.onError(JSON.decode(responseText));
},
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) {
@@ -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
@@ -83,6 +83,7 @@ mindplot.StandaloneActionDispatcher = new Class({
topic.setText(value);
return result;
};
commandFunc.commandType = "changeTextToTopic";
var command = new mindplot.commands.GenericFunctionCommand(commandFunc, topicsIds, text);
this.execute(command);
@@ -242,18 +243,26 @@ mindplot.CommandContext = new Class({
}
var designerTopics = this._designer.getModel().getTopics();
return designerTopics.filter(function (topic) {
var result = designerTopics.filter(function (topic) {
return topicsIds.contains(topic.getId());
});
if (result.length != topicsIds.length) {
var ids = designerTopics.map(function (topic) {
return topic.getId();
});
$assert(result.length == topicsIds.length, "Could not find topic. Result:" + result + ", Filter Criteria:" + topicsIds + ", Current Topics: [" + ids + "]");
}
return result;
},
deleteTopic:function (topic) {
this._designer._removeTopic(topic);
},
createTopic:function (model, isVisible) {
createTopic:function (model) {
$assert(model, "model can not be null");
return this._designer._nodeModelToNodeGraph(model, isVisible);
return this._designer._nodeModelToNodeGraph(model);
},
createModel:function () {
@@ -261,8 +270,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 ...
@@ -274,22 +274,16 @@ mindplot.Topic = new Class({
return result;
},
addFeature:function (type, attributes, featureId) {
addFeature:function (featureModel) {
var iconGroup = this.getOrBuildIconGroup();
this.closeEditors();
var model = this.getModel();
// Update model ...
var feature = model.createFeature(type, attributes);
if ($defined(featureId)) {
feature.setId(featureId);
}
model.addFeature(feature);
var model = this.getModel();
model.addFeature(featureModel);
var result = mindplot.TopicFeature.createIcon(this, feature, this.isReadOnly());
iconGroup.addIcon(result, type == mindplot.TopicFeature.Icon.id && !this.isReadOnly());
var result = mindplot.TopicFeature.createIcon(this, featureModel, this.isReadOnly());
iconGroup.addIcon(result, featureModel.getType() == mindplot.TopicFeature.Icon.id && !this.isReadOnly());
this._adjustShapes();
return result;
@@ -340,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');
@@ -350,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);
@@ -401,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;
@@ -411,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;
@@ -421,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;
@@ -431,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;
@@ -441,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;
@@ -458,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();
@@ -480,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;
},
@@ -508,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;
},
@@ -536,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;
},
@@ -608,7 +598,7 @@ mindplot.Topic = new Class({
areChildrenShrunken:function () {
var model = this.getModel();
return model.areChildrenShrunken();
return model.areChildrenShrunken() && !this.isCentralTopic();
},
isCollapsed:function () {
@@ -637,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);
},
@@ -829,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();
}
@@ -843,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 () {
@@ -880,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()));
});
},
@@ -1023,7 +1036,7 @@ 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, 'Circular connection are not allowed');
$assert(targetTopic, 'Parent Graph can not be null');
@@ -1040,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);
@@ -1074,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) {
@@ -1111,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());
}
@@ -1154,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();
@@ -1197,8 +1208,10 @@ 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;
},
@@ -1216,7 +1229,13 @@ mindplot.Topic = new Class({
}
}
return result;
},
isCentralTopic:function () {
return this.getModel().getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE;
}
});

View File

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

View File

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

View File

@@ -0,0 +1,132 @@
/*
* Copyright [2011] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
mindplot.TopicStyle = new Class({
Static:{
_getStyles:function (topic) {
$assert(topic, "topic can not be null");
var result;
if (topic.isCentralTopic()) {
result = mindplot.TopicStyle.STYLES.CENTRAL_TOPIC;
} else {
var targetTopic = topic.getOutgoingConnectedTopic();
if ($defined(targetTopic)) {
if (targetTopic.isCentralTopic()) {
result = mindplot.TopicStyle.STYLES.MAIN_TOPIC;
} else {
result = mindplot.TopicStyle.STYLES.SUB_TOPIC;
}
} else {
result = mindplot.TopicStyle.STYLES.ISOLATED_TOPIC;
}
}
return result;
},
defaultText:function (topic) {
var msgKey = this._getStyles(topic).msgKey;
return $msg(msgKey);
},
defaultFontStyle:function (topic) {
return this._getStyles(topic).fontStyle;
},
defaultBackgroundColor:function (topic) {
return this._getStyles(topic).backgroundColor;
},
defaultBorderColor:function (topic) {
return this._getStyles(topic).borderColor;
},
getInnerPadding:function (topic) {
return this._getStyles(topic).innerPadding;
},
defaultShapeType:function (topic) {
return this._getStyles(topic).shapeType;
}
}
});
mindplot.TopicStyle.STYLES =
{
CENTRAL_TOPIC:{
borderColor:'rgb(57,113,177)',
backgroundColor:'rgb(80,157,192)',
fontStyle:{
font:"Verdana",
size:10,
style:"normal",
weight:"bold",
color:"#ffffff"
},
msgKey:'CENTRAL_TOPIC',
innerPadding:11,
shapeType:mindplot.model.TopicShape.ROUNDED_RECT
},
MAIN_TOPIC:{
borderColor:'rgb(2,59,185)',
backgroundColor:'rgb(224,229,239)',
fontStyle:{
font:"Arial",
size:8,
style:"normal",
weight:"normal",
color:"rgb(82,92,97)"
},
msgKey:'MAIN_TOPIC',
innerPadding:3,
shapeType:mindplot.model.TopicShape.LINE
},
SUB_TOPIC:{
borderColor:'rgb(2,59,185)',
backgroundColor:'rgb(224,229,239)',
fontStyle:{
font:"Arial",
size:6,
style:"normal",
weight:"normal",
color:"rgb(82,92,97)"
},
msgKey:'SUB_TOPIC',
innerPadding:3,
shapeType:mindplot.model.TopicShape.LINE
},
ISOLATED_TOPIC:{
borderColor:'rgb(2,59,185)',
backgroundColor:'rgb(224,229,239)',
fontStyle:{
font:"Verdana",
size:8,
style:"normal",
weight:"normal",
color:"rgb(82,92,97)"
},
msgKey:'ISOLATED_TOPIC',
innerPadding:4,
shapeType:mindplot.model.TopicShape.LINE
}
};

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -32,7 +32,7 @@ mindplot.commands.AddTopicCommand = new Class({
this._models.each(function (model, index) {
// Add a new topic ...
var topic = commandContext.createTopic(model, false);
var topic = commandContext.createTopic(model);
// Connect to topic ...
if (this._parentsIds) {
@@ -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
@@ -30,7 +30,6 @@ mindplot.commands.RemoveFeatureFromTopicCommand = new Class({
execute:function (commandContext) {
var topic = commandContext.findTopics(this._topicId)[0];
var feature = topic.findFeatureById(this._featureId);
topic.removeFeature(feature);
this._oldFeature = feature;
@@ -38,9 +37,7 @@ mindplot.commands.RemoveFeatureFromTopicCommand = new Class({
undoExecute:function (commandContext) {
var topic = commandContext.findTopics(this._topicId)[0];
var feature = this._oldFeature;
topic.addFeature(feature.getType(), feature.getAttributes(), this._featureId);
topic.addFeature(this._oldFeature);
this._oldFeature = null;
}
});

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -17,58 +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;
},
setId : function(id) {
setId:function (id) {
this._id = id;
},
getType:function() {
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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,5 +1,5 @@
/*
* Copyright [2011] [wisemapping]
* Copyright [2012] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
@@ -66,7 +66,7 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
// Set topic attributes...
if (topic.getType() == mindplot.model.INodeModel.CENTRAL_TOPIC_TYPE) {
parentTopic.setAttribute("central", true);
parentTopic.setAttribute('central', 'true');
} else {
var pos = topic.getPosition();
@@ -92,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 ...
@@ -255,33 +255,35 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
}
var topic = mindmap.createNode(type, id);
// Set text property is it;s defined...
var text = domElem.getAttribute('text');
if ($defined(text) && text) {
topic.setText(text);
}
var fontStyle = domElem.getAttribute('fontStyle');
if ($defined(fontStyle)) {
var font = fontStyle.split(';');
var fontStyle = domElem.getAttribute('fontStyle');
if ($defined(fontStyle) && fontStyle) {
var font = fontStyle.split(';');
if (font[0]) {
topic.setFontFamily(font[0]);
}
if (font[0]) {
topic.setFontFamily(font[0]);
}
if (font[1]) {
topic.setFontSize(font[1]);
}
if (font[1]) {
topic.setFontSize(font[1]);
}
if (font[2]) {
topic.setFontColor(font[2]);
}
if (font[2]) {
topic.setFontColor(font[2]);
}
if (font[3]) {
topic.setFontWeight(font[3]);
}
if (font[3]) {
topic.setFontWeight(font[3]);
}
if (font[4]) {
topic.setFontStyle(font[4]);
}
if (font[4]) {
topic.setFontStyle(font[4]);
}
}
@@ -317,7 +319,8 @@ mindplot.persistence.XMLSerializer_Pela = new Class({
}
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);
}
@@ -430,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

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
@@ -46,15 +46,16 @@ mindplot.util.Shape =
calculateRelationShipPointCoordinates:function (topic, controlPoint) {
var size = topic.getSize();
var position = topic.getPosition();
var div = (position.x - controlPoint.x);
div = (Math.abs(div) > 0.1 ? div : 0.1); // Prevent division by 0.
var m;
var yGap = position.y - controlPoint.y;
var xGap = position.x - controlPoint.x;
var disable = Math.abs(yGap) < 5 || Math.abs(xGap) < 5 || Math.abs(yGap - xGap) < 5;
var m = (position.y - controlPoint.y) / div;
var y, x;
var gap = 5;
if (controlPoint.y > position.y + (size.height / 2)) {
y = position.y + (size.height / 2) + gap;
x = position.x - ((position.y - y) / m);
x = !disable ? position.x - ((position.y - y) / (yGap / xGap)) : position.x;
if (x > position.x + (size.width / 2)) {
x = position.x + (size.width / 2);
} else if (x < position.x - (size.width / 2)) {
@@ -62,7 +63,7 @@ mindplot.util.Shape =
}
} else if (controlPoint.y < position.y - (size.height / 2)) {
y = position.y - (size.height / 2) - gap;
x = position.x - ((position.y - y) / m);
x = !disable ? position.x - ((position.y - y) / (yGap / xGap)) : position.x;
if (x > position.x + (size.width / 2)) {
x = position.x + (size.width / 2);
} else if (x < position.x - (size.width / 2)) {
@@ -70,10 +71,10 @@ mindplot.util.Shape =
}
} else if (controlPoint.x < (position.x - size.width / 2)) {
x = position.x - (size.width / 2) - gap;
y = position.y - (m * (position.x - x));
y = !disable ? position.y - ((yGap / xGap) * (position.x - x)) : position.y;
} else {
x = position.x + (size.width / 2) + gap;
y = position.y - (m * (position.x - x));
y = !disable ? position.y - ((yGap / xGap) * (position.x - x)) : position.y;
}
return new core.Point(x, y);
@@ -97,6 +98,31 @@ mindplot.util.Shape =
var y2 = m * (x2 - tarPos.x) + tarPos.y;
return [new core.Point(-srcPos.x + x1, -srcPos.y + y1), new core.Point(-tarPos.x + x2, -tarPos.y + y2)];
},
workoutIncomingConnectionPoint:function (targetNode, sourcePosition) {
$assert(sourcePosition, 'sourcePoint can not be null');
var pos = targetNode.getPosition();
var size = targetNode.getSize();
var isAtRight = mindplot.util.Shape.isAtRight(sourcePosition, pos);
var result = mindplot.util.Shape.calculateRectConnectionPoint(pos, size, isAtRight);
if (targetNode.getShapeType() == mindplot.model.TopicShape.LINE) {
result.y = result.y + (targetNode.getSize().height / 2);
}
// Move a little the position...
var offset = mindplot.Topic.CONNECTOR_WIDTH / 2;
if (!isAtRight) {
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;
}
};

View File

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

View File

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

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