Activity for Luigi Kang

  • Luigi Kang Luigi Kang posted a comment on discussion Help

    After some testing, given a structure of root -parent1 --test --someOtherTestGroup1 ---level3 -parent2 --test --someOtherTestGroup Using, XML Replace, to match entries under children of 'parent1', aka 'test' and 'someOtherTestGroup1', and not grandchildren, aka 'level3': //Group[Name='parent1']/*/Entry/... To match entries under children of 'parent1', and their descendents, including 'level3': //Group[Name='parent1']//*/Entry/... To match entries under children of 'parent1', and their descendents,...

  • Luigi Kang Luigi Kang posted a comment on discussion Help

    Hi, thank you for pointing out how to change nodes under specific subgroups. For nodes under root\test\sub-test //Group[Name='test']/Group[Name='sub-test']/Entry/... does change the nodes, however, as I just tested out, //Group[Name='test']/Entry/... does not (the latter only changes nodes under root\test).

  • Luigi Kang Luigi Kang posted a comment on discussion Help

    Hi, since a group can have subgroups, I'm curious about what to do with selecting groups. Continuing from the above example, if the group structure is like this: parent1 --test --someOtherTestGroup1 parent2 --test --someOtherTestGroup2 Will the above code replace nodes under test of both parent1 and parent2? How can one select nodes to replace all groups under parent1?

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Is the link loading behavior still the same today?

  • Luigi Kang Luigi Kang modified a comment on discussion Help

    Besides "Properties" tab of Edit Entry dialog, any way to copy it via shortcut?

  • Luigi Kang Luigi Kang posted a comment on discussion Help

    I'd like to obtain UUID of an entry without opening up the field reference dialog then filter for it. Thanks in advance.

  • Luigi Kang Luigi Kang modified a comment on discussion Open Discussion

    In KeePass 2, change the length of generated password to 0 and save over the profile (Automatically generated passwords for new entries).

  • Luigi Kang Luigi Kang modified a comment on discussion Open Discussion

    In KeePass 2, change the length of generated password to o0 and save over the profile (Automatically generated passwords for new entries).

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Is such option present in KeePass 2?

  • Luigi Kang Luigi Kang created ticket #2403

    Search in Group Notes (Notes of Group, not Entry)

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Thanks Dimitry!

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    The website is back and running.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Ah, that explains why the cute koala is not displayed when I ran the script from "3 types of image insertion" hehe.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I just did some testing, and after clicking "Filter Selected Nodes", clicking "No Filtering" removes the filter and remembers the previously folded nodes.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    When running the script from branch (Latex in the demo map), the picture is generated however is not placed inside the resulting html; whereas running the script from root node the resulting html displays the picture.

  • Luigi Kang Luigi Kang created ticket #2430

    API setter to toggle and repaint (SHOW_CONNECTORS_PROPERTY)

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    1.6.13 was already available. https://sourceforge.net/projects/freeplane/files/latest/download

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    It has to be a HTML string, see this thread for details. https://sourceforge.net/p/freeplane/discussion/758437/thread/5729a4cc/

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    An answer may be found in this thread. https://sourceforge.net/p/freeplane/discussion/758437/thread/5729a4cc/

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I don't have the latest Freeplane, so I googled and downloaded jlatexmath-1.0.6.jar, moved it to %appdata%\Freeplane\1.6.x\lib, and added %appdata%\Freeplane\1.6.x\lib to classpath, and the commented-in script worked like a charm, with a resulting html containing in-line-rendered image of LaTeX formula. Thanks again, Alexandre.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Hi Alexandre, since you mentioned the ability to use formula, it led me to think about something similar of the same note. Similar to this unanswered [six-year-old question] (https://sourceforge.net/p/freeplane/discussion/758437/thread/5e621f6d/), I was wondering if it's possible to retain the rendered LaTeX upon export, which would be great to display more complex formulas.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    It's a map that started from importing XML database of ICD (https://en.wikipedia.org/wiki/ICD).

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I just tested the latest version of your script, and it worked on a large map (40,000+ nodes), thank you Alexandre.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    This is cute--I'm here to comment about the cat, not the addon. :p

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    There's another bug or rather limitation to the script--it fails to convert map with 20,000 or more number of nodes (on a computer with 4GB of ram), when the HTMLwriter that comes with the program does, albeit lacking features found in your otherwise good script. Perhaps it's due to the script compiles everything into butter and uses FileWriter only once at the end.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Or you can use a script that sets the node width in pixel without using the properties panel. String customWidth = ui.showInputDialog(node.delegate, 'Set node width (pixel)', '') if (customWidth?.isInteger()) { node.style.minNodeWidth = customWidth as int node.style.maxNodeWidth = customWidth as int } else c.statusInfo = 'Please provide an integer.'

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    The formula in my previous post does not check the size of children to be more than 0. Though some map developed using older Freeplane veresion may need the size check, it will not give you an error on Freeplane version 1.6.3, whether there's no child, or no target attribute name e.g. Durée, in the current node. If the formula gives you an error please state your Freeplane version and upload the map where you run into problem. If you want to avoid the theoretical (since the formula above doesn't...

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    =children.sum(0){it["Durée"].num0}+node["Durée"].num0

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Here's a script that also centers the selected node. String percent = ui.showInputDialog(node.delegate, 'Zoom To Magnification (%)', '100') if (percent?.isInteger()) { c.setZoom(percent.toInteger()/100) c.centerOnNode(node) } else c.statusInfo = 'Please provide a valid number.' Cadux, have you checked out the script, MapInsight? It has a connection manager tool that you wanted.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    As far as I know, there's no direct import of a structured document into a node branch. A user may import as a branch manually by copy&paste/type or automatically with Groovy script. If you want bubble or rectangle for styles, you can create a map (File -> New Map) from the template "BigMap.mm" selection. Click here to locate styles manager To freely move a node without moving others, you choose the option "Free positioned node (set/reset)" under Edit file menu or right click on a node.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    The map renderer is limited to at most HTML 3.2, something that was conceived more than two decades ago. So attributes such as title that were introduced in HTML 4 would not work. I do understand and can relate to your problem, for I too longed for the usage of tooltip popup over text. Neither CSS hover nor spacer with alt attribute would work.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Great news; thank you Dimitry.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Menubar --> Format --> Manage Styles --> Edit styles Please refer to attached screenshot for position.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Because I'm unfamilar with JTable, I was wondering, if there's something equivalent to method getSelectedIndices in JList. If so, you can implement a batch editing/removing/etc feature, hypothetically speaking, table.selectedRows.each{ def selectedConnector = getNodeByID(it['sourceID']).connectorsOut[it['associatedIndex']] node.removeConnector(selectedConnector)

  • Luigi Kang Luigi Kang modified a comment on discussion Open Discussion

    I also learn by trial and error, so Google helps a lot. You can search "groovy operator" to learn what I, opps :p, !, means. https://www.freeplane.org/wiki/index.php/Scripting http://freeplane.sourceforge.net/doc/api/org/freeplane/plugin/script/proxy/Proxy.html Above to learn Freeplane specific methods. As a starter tip, knowing the proxy API well can code more efficiently and save you from having to know advanced knowledge of programming, thanks to Dimitry, Volker, and developers of Freeplane. Nonetheless,...

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    On a single node, to retrive the specific connector from a list with index, for example, and use it to be removed can be done with node.removeConnector(node.connectorsOut[index]) So in a global connectors manager, a possible way is to first locate the specific node (which your code already does), and then using the connector's associated index, which can be done by it.connectorsOut.eachWithIndex { it, index -> ...skipping some lines... connectors_data.add([type : 'conn-OUT', associatedIndex: index,...

  • Luigi Kang Luigi Kang modified a comment on discussion Open Discussion

    I also learn by trial and error, so Google helps a lot. You can search "groovy operator" to learn what I, opps :p, !, means. https://www.freeplane.org/wiki/index.php/Scripting http://freeplane.sourceforge.net/doc/api/org/freeplane/plugin/script/proxy/Proxy.html Above to learn Freeplane specific methods. As a starter tip, knowing the proxy API well can code more efficiently and save you from having to know advanced knowledge of programming, thanks to Dimitry, Volker, and developers of Freeplane. Nonetheless,...

  • Luigi Kang Luigi Kang modified a comment on discussion Open Discussion

    I also learn by trial and error, so Google helps a lot. You can search "groovy operator" to learn what I, opps :p, !, means. https://www.freeplane.org/wiki/index.php/Scripting http://freeplane.sourceforge.net/doc/api/org/freeplane/plugin/script/proxy/Proxy.html Above to learn Freeplane specific methods. As a starter tip, knowing the proxy API well can code more efficiently and save you from having to know advanced knowledge of programming, thanks to Dimitry, Volker, and developers of Freeplane. Nonetheless,...

  • Luigi Kang Luigi Kang modified a comment on discussion Open Discussion

    I also learn by trial and error, so Google helps a lot. You can search "groovy operator" to learn what I, opps :p, !, means. https://www.freeplane.org/wiki/index.php/Scripting http://freeplane.sourceforge.net/doc/api/org/freeplane/plugin/script/proxy/Proxy.html Above to learn Freeplane specific methods. As a starter tip, knowing the proxy API well can code more efficiently and save you from having to know advanced knowledge of programming. Nonetheless, you have to learn some groovy: https://learnxinyminutes.com/docs/groovy/...

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I also learn by trial and error, so Google helps a lot. You can search "groovy opeartor" to learn what ! means. https://www.freeplane.org/wiki/index.php/Scripting http://freeplane.sourceforge.net/doc/api/org/freeplane/plugin/script/proxy/Proxy.html Here to learn Freeplane specific methods. http://groovy-lang.org/documentation.html For groovy, articles under Languages Specification are pretty good, though I havnen't gone through with them all.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    As a suggestion, for line 1666 (some later codes need to be modified to go along with the modification, like a hidden column of index) you can utilize's the index of groovy method eachWithIndex, so that you can have desired actions performed on the specific connector, instead of first going through three boolean checks and, if there are duplicates, performed on first found duplicate.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I found some bugs; I'll list the ones with the suggestions I have first, and the ones I can't solve at the end. Line 404: added .parent for notetext and details nodes_data.add([id: nodeparentID, type: 'parent', nodetext: nodeparenttext, label: 'parent', notetext: node.parent.noteText, details: node.parent.detailsText]) Line 421: replaced with souce.id sourceNode = getNodeByID(it.delegate.source.id) Line 436 removed because with .toString() on null leads to a string of null, which won't fit the null...

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    By the way, after the participants filled in all the notes, remove or undo the filter is not necessary for the script to switch the languages. Also I was just re-reading your posts earlier, and understand more what you said before. For groovy script map.filter { !it.note } the equivalent for the script filter is !node.note

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    // @ExecutionModes({ON_SINGLE_NODE}) def nodeWOnote = c.find{!it.note} if (nodeWOnote) { map.filter{ it in nodeWOnote } c.statusInfo = "Found noDes without noTe (=EN-text). Add a note to the filtered nodes first, then remove or undo the filter, and run the script again." } else c.findAll().each { def tmp = it.htmlText it.text = it.note.html it.noteText = tmp } Note, no pun intended hehe, that here in else I use findAll() instead of find{} since every note and text is filled, two checks of booleans...

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Though I could certainly code what you want in the above post, I suspect there's a more efficient way go about coding this. So let me confirm, basically you want to filter the nodes without note, if they exist, before switching languages, correct?

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    When applying filtering condition that leads to empty or 0 result (I'll explain later why in your case), only the root node, aka main node, will be shown. When a node is created, its associated note and details do not exist by default, whereas node core (text) isn't empty, even if you don't type any text in it, it exists, like your filtering condition that test for empty string to an existing node text, which happens to be empty, the result is what you would expect, exists -> as empty. However, a...

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I just tried with the above code, and got a null exception.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    map.filter { !it.note }

  • Luigi Kang Luigi Kang posted a comment on ticket #2530

    I was just browsing where to download version 1.6.x, then stumbled upon this commit page ( https://github.com/freeplane/freeplane/commit/ee058cd5c742e847d8688d32e146d74fcb48fdbe ); great work Dimitry, you made the code more readable, with firstNode and nextNode.

  • Luigi Kang Luigi Kang posted a comment on ticket #2530

    Thank you Dimitry.

  • Luigi Kang Luigi Kang created ticket #2395

    org.freeplane.features.link.LinkController.loadLink to "lazy" or an option to set it to "lazy" parsing

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    After some usage, here's my feature request (already, lol), if you're open to them: Have a button or menu item that "refresh" or reload the data into the variables so that after editing the map while walking, so-to-speak, users can call the refresh function and have the same window open instead of having to close the JFrame and run the script again. With frequent usage, I can imagine it would be quite repetitive to reposition and/or resize. Because Freeplane map can display multi-line label, for...

  • Luigi Kang Luigi Kang modified a comment on discussion Open Discussion

    I just ran the script using Freeplane version 1.5.21 and experienced no error at all. Great work, Allan. Did you know your script fulfills a feature request ( https://sourceforge.net/p/freeplane/featurerequests/2374/ )? Hehe. Edit: to make hyperlink clickable

  • Luigi Kang Luigi Kang modified a comment on discussion Open Discussion

    I just ran the script using Freeplane version 1.5.21 and experienced no error at all. Great work, Allan. Did you know your script fulfills a feature request ( https://sourceforge.net/p/freeplane/featurerequests/2374/ )? Hehe.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I just ran the script using Freeplane version 1.5.21 and experienced no error at all. Great work, Allan. Did you know your script fulfill a feature request (https://sourceforge.net/p/freeplane/featurerequests/2374/)? Hehe.

  • Luigi Kang Luigi Kang posted a comment on ticket #2530

    A suggestion for function select (Collection< Node > toSelect): public void select(final Collection<Node> toSelect) { final IMapSelection selection = Controller.getCurrentController().getSelection(); final Iterator<Node> it = toSelect.iterator(); if (!it.hasNext()) { return; } final NodeModel nodeModel = ((NodeProxy) it.next()).getDelegate(); Controller.getCurrentModeController().getMapController().displayNode(nodeModel); selection.selectAsTheOnlyOneSelected(nodeModel); while (it.hasNext()) { Controller.getCurrentModeController().getMapController().displayNode(nodeModel);...

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Bonjour, comment ca va? Perhaps you can try playing with the options under Tools -> Preferences as shown in the screenshot?

  • Luigi Kang Luigi Kang posted a comment on ticket #2530

    I just ran c.statusInfo = c.find{it.id=="_insert_ID_of_grandchild_here_"}.object.class.simpleName and status line returns ArrayList.

  • Luigi Kang Luigi Kang posted a comment on ticket #2530

    Perhaps find returns a collection? If so perhaps adding the line Controller.getCurrentModeController().getMapController().displayNode(nodeModel); before line 110 and line 113 (under "public void select(final Collection<Node> toSelect)") in ControllerProxy.java would solve the issue?

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Hi Peter, thank you for sharing your script. I was wondering what's the reasoning behind these two lines? Pattern TAGFINDER = Pattern.compile('<[^<>]*>',Pattern.DOTALL) def rawTitle = TAGFINDER.matcher(node.text).replaceAll('').trim() Because the following code, without those two lines, seems to work just as well. def encodedTitle = java.net.URLEncoder.encode(node.text,'UTF-8') java.awt.Desktop d = java.awt.Desktop.getDesktop(); d.browse(new java.net.URI("https://www.bing.com/search?q=${encodedT...

  • Luigi Kang Luigi Kang created ticket #2530

    Proxy.Controller method select(Proxy.Node) doesn't perform "mapController.displayNode()"

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Have you tried going to Tools -> Preference -> Behaviour tab -> And see if Enter Confirms by Default is checked? If not, can you check and see if enter will finish editing instead of creating new line?

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I also get a pretty white page, except a node that says "Undefined" at the upper left corner when I export a map to flash. Sorry I couldn't be of more help.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    So here we give a condition for the switching code to run, when the note exists and the node text (what you see) is not empty. c.find{ it.note && !it.displayedText.empty } .each { def tmp = it.htmlText it.text = it.note.html it.noteText = tmp }

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Thank you Dimitry--you're right, cause the following code works even after saving and opening. c.selecteds.each { def tmp = it.htmlText it.text = it.details.string it.detailsText = tmp } michaelhe, if you're sure you want the script to switch all the nodes all the time, replace the first line with c.findAll().each {

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I tested with the latest map and script but still encounter the same problems, unfortunately. However, michaelhe, if you would still like to proceed with developing your mind map, perhaps you can use the script for sole purpose of presenting, and not saving. For example, make a copy of the map for it to be use with script to show it with an alternate language to a friend or colleague, but make and save changes only to the original map that has not run the script. As for the details used in the script,...

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I just followed bullet points and tested them out, and reproduced the two problems, on map attached (Test DE-EN3) and my own test map: 1. The script works on one or all, but not on two or more selected. 2. After runnning the script twice then save and reopen, all details are gone. 3. I went further, tried running the script once, then save and reopen, the root node's detail is gone. Perhaps these are due to bugs? If so one can open a ticket and report them.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Thanks Felix for pointing using a temporary variable for string. michaelhe, here's the version without tempering node notes with Felix's help. c.selecteds.each { def tmp = it.text it.text = it.details.text it.detailsText = tmp }

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I didn't know about getting user input using buil-in dialog; this could save me one line of import, hehe. Thank you for sharing your script.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Here's a simple script that can switch the texts of node ande node details. There's one caveat though, this script uses the node note as buffer, so I hope your note is already empty. :p c.selecteds.each { it.noteText = it.text it.text = it.details.text it.detailsText = it.note.text it.noteText = '' }

  • Luigi Kang Luigi Kang posted a comment on ticket #2374

    I'd like to share a software that I use on Pocket PC called Pocket Mindmap, where "references" are analogous to Freeplane's "connectors." Despite it being developed more than a decade ago, it also features a reference manager, similar to the relation manager featured in ATLAS.ti mentioned in the original post. Back to the title of this feature request, something like ATLAS.ti's link manager could be something for Freeplane's connector manager to consider. Below are relevant links from Pocket Mindmap:...

  • Luigi Kang Luigi Kang posted a comment on ticket #2374

    I'd like to second this feature request; attached below is just a screenshot portion of my map, not a screencap of upcoming Spiderman movie, zoomed at 75%. As one can imagine, it's very difficult to select a particular line, let alone identify one.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Yes, that's correct inference. If you''d like a input box where you can type in the percentage of your desired zoom level, similar to the one you'd get by pressing ctrl+y when using Adobe Acrobat Reader, you can use the following script. def percent = javax.swing.JOptionPane.&showInputDialog 'Zoom To (%)' toInteger() c.setZoom(percent/100)

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I meant file menu as in menu bar, sorry for my poor choice of words, and I'm glad you found it under Tools -> Scripts -> (script name here).

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    This is the (suspected) one-line script. :p c.setZoom(1) Once the script is loaded and appears in the file menu, you can assign a hotkey to it.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    map.filter { it.style.font.isBold() } Use "Undo filter action" to undo.

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Hi all, I'm trying to use groovy to select all visible nodes with c.select(c.find{it.isVisible()}) However it only selects a few and runs into error. Any suggestion? (I know of the menuUtils.executeMenuItems(['SelectAllAction']) method would do it, but I'm just curious on how to do it with groovy.)

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I just came across this software that has some neat tagging features. Since there's...

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    I think what the topic creator is talking about is a feature/add-on that looks something...

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    SimplyHTML has not declared up to which CSS version, in the program's documentation...

  • Luigi Kang Luigi Kang posted a comment on discussion Open Discussion

    Only issue with multiple-node selection. I tested the script above and it indeed...

1