class HWidget

Attributes

tag[R]

Public Class Methods

new(tag = nil, innerHTML = "", **args) click to toggle source
# File lib/hwidgets/hwidget.rb, line 65
def initialize(tag = nil, innerHTML = "", **args)
  @tag = tag
  @properties = {}
  @systemProperties = {}
  @placeholders = {}
  @innerHTML = innerHTML
  @parent = nil
  @childs = []
  @styles = {}
  @enablePlaceholder = false # va automaticamente a true con setPlaceholder
  @closeTag = true # se false il tag non viene chiuso - serve ad es. per input
  @slots = {}

  self.set(args)

end
test() click to toggle source
# File lib/hwidgets/hwidget.rb, line 374
def self.test()
  widget = HWidget.new('div', "new_div")
  widget.set(title1: 't1', 
             title2: 't2',
             title3: 't3',
             title4: '')
  widget.set(title2: nil)
  widget.setStyle(color: 'red')
  puts widget.openTag
  puts widget.html
  puts widget.closeTag
end
widgetSpace() click to toggle source
# File lib/hwidgets/hwidget.rb, line 388
def self.widgetSpace()
  
  puts "###########################################################".hight_white
  puts "#                                                         #".hight_white
  puts "#                 Hypersonic Object Space                 #".hight_white
  puts "#                                                         #".hight_white
  puts "###########################################################".hight_white

  objs = []
  ObjectSpace.each_object() {|obj| objs << obj if obj.class <= HWidget }
  objs.each do |obj|
    puts "#{obj.object_id.to_s.hight_purple}: #{obj.class.to_s.yellow} - #{obj.tag.hight_cyan} #{obj.get(:class)}" 
  end
  
  #puth ObjectSpace.count_objects

  return "Total Widgets: #{objs.length}".green

end

Public Instance Methods

<<(widget)
Alias for: appendChild
_addJsSlot(eventName, functionName, overwrite = false, *args) click to toggle source

supporta piu' funzioni per lo stesso evento @slots e' un hash di array di hash

# File lib/hwidgets/hwidget.rb, line 181
def _addJsSlot(eventName, functionName, overwrite = false, *args)      

  @slots.delete(eventName) if overwrite
  @slots[eventName] = Array.new() unless(@slots[eventName])
  @slots[eventName] << {functionName: functionName, args: args}
  return self

end
_set(property, value, overwrite = false) click to toggle source
# File lib/hwidgets/hwidget.rb, line 125
def _set(property, value, overwrite = false)      
  @properties[property] = value if (!@properties.key?(property) || overwrite)
  #@properties.delete(property) unless (value)
  return self
end
_setStyle(property, value) click to toggle source
# File lib/hwidgets/hwidget.rb, line 312
def _setStyle(property, value)
  
  unless (value)
    @styles.delete(property)
    return self
  end
  @styles[property] = value
  return self

end
addJsFunction(eventName, functionName, *args) click to toggle source
# File lib/hwidgets/hwidget.rb, line 156
def addJsFunction(eventName, functionName, *args)      

  function = ""
  if(@properties[eventName])
    function = "#{@properties[eventName]}; "
  end
  
  function = self.buildSignature(function, functionName, *args)
  
  return self.set("#{eventName}": function, overwrite: true) 

end
appendChild(widget) click to toggle source
# File lib/hwidgets/hwidget.rb, line 113
def appendChild(widget)
  return self.appendChilds(widget) if widget.class == Array
  widget.setParent(self)
  @childs << widget
  return self
end
Also aliased as: <<
appendChilds(widgets) click to toggle source
# File lib/hwidgets/hwidget.rb, line 108
def appendChilds(widgets)
  widgets.each { |widget| self.appendChild(widget) }
  return self
end
buildSignature(function, functionName, *args) click to toggle source
# File lib/hwidgets/hwidget.rb, line 141
def buildSignature(function, functionName, *args) 
  
  params = ['this']
  args.each do |arg|
    if(arg.class == Symbol)
      params << arg # se passo un simbolo ad es. event
    else
      params << arg.to_js_format
    end
  end
  return "#{function}#{functionName}(#{params.join(",")})"

end
closeTag() click to toggle source
# File lib/hwidgets/hwidget.rb, line 294
def closeTag()
  return "" unless (@tag)
  return (@closeTag) ? HIO.htmlEcholnCloseBlock("</#{@tag}>") : ""
end
connect(event, receiver, method, attributes: :null, id: " click to toggle source

id deve essere un oid

# File lib/hwidgets/hwidget.rb, line 232
def connect(event, receiver, method, attributes: :null, id: "#id", args: nil, overwrite: false, **options)      
  oid = hm().malloc({receiver: receiver, method: method, args: args}, id).obj.object_id.to_s
  options[:getElem] = "byId" unless options[:getElem]
  options[:mode] = "set" unless options[:mode]

  cks = Digest::SHA256.hexdigest oid + hc.value("secret_token")
  cks += "-" + Time.now.to_i.to_s # serve (forse) in caso di riallocazione dello stesso indirizzo di memoria
  hotLog( "HWidget::connect(id: #{id}, oid: #{oid} - #{options[:hotLog].green}" ) if options[:hotLog]
  return self._addJsSlot(event, :'return hajax.signalManager', overwrite, attributes, options, id, oid, cks)
end
copyConstructor() click to toggle source
# File lib/hwidgets/hwidget.rb, line 82
def copyConstructor
  return Marshal.load(Marshal.dump(self))
end
get(property) click to toggle source
# File lib/hwidgets/hwidget.rb, line 243
def get(property)      
    return @properties[property]
end
getChilds() click to toggle source
# File lib/hwidgets/hwidget.rb, line 41
def getChilds()   
  return @childs
end
getElementBy(property, value, searchType) click to toggle source

searchType 0: serch only among childs searchType 1: search top down starting from childs

# File lib/hwidgets/hwidget.rb, line 97
def getElementBy(property, value, searchType)
 
  result = (self.properties.key?(property) and self.properties[properties] == value) ? [self] : nil
  @childs.each do |child|
    result << child if child.properties.key?(property) and child.properties[property] == value
  end
  @childs.each { |child| result += child.getElementBy(property, value, searchType) } if searchType == 1
  return result

end
getSystemProperty(property) click to toggle source
# File lib/hwidgets/hwidget.rb, line 365
def getSystemProperty(property)      
    return @systemProperties[property]
end
hotLog(str) click to toggle source
# File lib/hwidgets/hwidget.rb, line 258
def hotLog(str)
  HHotLogger.append(str, "log4widgets")
end
html() click to toggle source
# File lib/hwidgets/hwidget.rb, line 304
def html() 
  
  html = @innerHTML
  @childs.each { |child| html += child.html() }
  return self.openTag() + HIO.htmlEcholn(html) + self.closeTag()  

end
openTag() click to toggle source
# File lib/hwidgets/hwidget.rb, line 284
def openTag()
  
  return "" unless (@tag)

  slash = (@closeTag) ? "" : "/"
  result = self.strProperties()
  return HIO.htmlEcholnOpenBlock("<#{@tag} #{result}#{slash}>")

end
replacePlaceholder(str) click to toggle source
# File lib/hwidgets/hwidget.rb, line 247
def replacePlaceholder(str)

  return str unless @enablePlaceholder
  @placeholders.each do |key, value|
    str = str.gsub(key, value.to_s)
  end
   
  return str

end
reset() click to toggle source
# File lib/hwidgets/hwidget.rb, line 299
def reset()
  @parent = nil
  @childs = []
end
set(overwrite: false, **properties) click to toggle source

set property

# File lib/hwidgets/hwidget.rb, line 132
def set(overwrite: false, **properties)
    
  properties.each do |property, value|
    self._set(property, value, overwrite)
  end
  return self

end
setChilds(childs) click to toggle source
# File lib/hwidgets/hwidget.rb, line 36
def setChilds(childs)   
  @childs = childs
  return self
end
setCloseTag(closeTag) click to toggle source
# File lib/hwidgets/hwidget.rb, line 55
def setCloseTag(closeTag)   
  @closeTag = closeTag
  return self
end
setClosedTag(bool=true) click to toggle source
# File lib/hwidgets/hwidget.rb, line 369
def setClosedTag(bool=true)
  @closeTag = bool
  return self
end
setEnablePlaceholder(enablePlaceholder = true) click to toggle source
# File lib/hwidgets/hwidget.rb, line 50
def setEnablePlaceholder(enablePlaceholder = true)   
  @enablePlaceholder = enablePlaceholder
  return self
end
setInnerHTML(innerHTML) click to toggle source
# File lib/hwidgets/hwidget.rb, line 26
def setInnerHTML(innerHTML)   
  @innerHTML = innerHTML
  return self
end
setParent(parent) click to toggle source
# File lib/hwidgets/hwidget.rb, line 31
def setParent(parent)   
  @parent = parent
  return self
end
setPlaceholder(placeholder, value) click to toggle source
# File lib/hwidgets/hwidget.rb, line 344
def setPlaceholder(placeholder, value)

  @enablePlaceholder = true
  unless (value)
    @placeholders.delete(placeholder)
    return self
  end
  @placeholders[placeholder] = value
  return self

end
setPlaceholders(placeholders) click to toggle source
# File lib/hwidgets/hwidget.rb, line 21
def setPlaceholders(placeholders)
  @placeholders = placeholders
  return self
end
setProperties(properties) click to toggle source
# File lib/hwidgets/hwidget.rb, line 11
def setProperties(properties)
  @properties = properties
  return self
end
setSlots(slots) click to toggle source
# File lib/hwidgets/hwidget.rb, line 60
def setSlots(slots)   
  @slots = slots
  return self
end
setStyle(**properties) click to toggle source

set style

# File lib/hwidgets/hwidget.rb, line 324
def setStyle(**properties)
  properties.each do |property, value|
    self._setStyle(property, value)
  end
  return self
end
setStyles(styles) click to toggle source
# File lib/hwidgets/hwidget.rb, line 45
def setStyles(styles)   
  @styles = styles
  return self
end
setSystemProperties(systemProperties) click to toggle source
# File lib/hwidgets/hwidget.rb, line 16
def setSystemProperties(systemProperties)
  @systemProperties = systemProperties
  return self
end
setSystemProperty(property, value) click to toggle source
# File lib/hwidgets/hwidget.rb, line 356
def setSystemProperty(property, value)      
    unless (value)
      @systemProperties.delete(property)
      return self
    end
    @systemProperties[property] = value
    return self
end
setTag(tag) click to toggle source
# File lib/hwidgets/hwidget.rb, line 6
def setTag(tag)
  @tag = tag
  return self
end
storeSlots() click to toggle source
# File lib/hwidgets/hwidget.rb, line 169
def storeSlots  

  @slots.each do |key, elem|
    elem.each do |value|
      self.addJsFunction(key, value[:functionName], *value[:args])
    end
  end

end
storeStyle() click to toggle source
# File lib/hwidgets/hwidget.rb, line 331
def storeStyle() 

  return "" if @styles.empty?

  result = ""
  @styles.each do |key, value| 
    result += "#{key}:#{value}; "
  end

  self.set(style: result)

end
strProperties() click to toggle source
# File lib/hwidgets/hwidget.rb, line 262
def strProperties() 

  propertiesTmp = Marshal.load(Marshal.dump(@properties))
  self.storeSlots()
  self.storeStyle()
  return "" if @properties.empty?

  result = ""
  @properties.each do |key, value| 
    if(value)
      value = self.replacePlaceholder(value)
      result += "#{key}=\"#{value}\" "
    else
      result += "#{key} "
    end
  end

  @properties = propertiesTmp
  return result

end
unset(property) click to toggle source
# File lib/hwidgets/hwidget.rb, line 121
def unset(property)      
    @properties.delete(property)
end