Yes, and the API docs are never wrong …
If the above does not work,… then try something like this:
EDIT: This does not work either, See below.
(Collapsed as this example will also not work.)
module AuthorTest
@@loaded ||= false
class NiftyDialog < UI::HtmlDialog
def initialize(*args)
super(*args)
@ready ||= {}
@returned_values ||= {}
add_action_callback('returned_value') {|ac,id,value|
@returned_values[id]= value
}
add_action_callback('element_value_ready') {|ac,id|
@ready[id]= true
}
end
def get_element_value( id )
@ready[id]= false
self.execute_script(
"sketchup.returned_value('#{id}',document.getElementById('#{id}').value,
{ onCompleted: function() {
sketchup.element_value_ready('#{id}');
}
});"
)
until @ready[id]
sleep(0.1)
end
@returned_values[id]
end
end # custom HtmlDialog subclass
def self::open
self::reset()
@dlg = NiftyDialog::new(dialog_title: "Test")
@dlg.set_html('
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<div id="DataField">
Testing 1, 2, 3, ...
</div>
</body>
</html>
'
)
@dlg.show
sleep(1.0)
end
def self::test
msg = "Getting the 'DataField' element's value ..."
msg<< " value is: \"#{@dlg.get_element_value('DataField')}\""
puts msg
UI.messagebox(msg,MB_OK)
end
def self::reset
@dlg.close if @dlg && @dlg.visible?
@dlg = nil
end
if !@@loaded
sm = UI.menu("Plugins").add_submenu("Get Element Value Test")
sm.add_item('Open Dialog') { self::open }
sm.add_item('Test') { self::test }
sm.add_item('Reset') { self::reset }
@@loaded = true
end
end
EDIT: For a working example see …