Class: RubyNative::Helper::NavbarBuilder

Inherits:
Object
  • Object
show all
Defined in:
lib/ruby_native/helper.rb

Instance Method Summary collapse

Constructor Details

#initialize(context) ⇒ NavbarBuilder

Returns a new instance of NavbarBuilder.



173
174
175
176
# File 'lib/ruby_native/helper.rb', line 173

def initialize(context)
  @context = context
  @items = []
end

Instance Method Details

#button(title = nil, icon: nil, icons: nil, href: nil, click: nil, position: :trailing, selected: false, &block) ⇒ Object



178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
# File 'lib/ruby_native/helper.rb', line 178

def button(title = nil, icon: nil, icons: nil, href: nil, click: nil, position: :trailing, selected: false, &block)
  resolved = RubyNative::Helper.resolve_icon(icon: icon, icons: icons, platform: @context.try(:native_platform))
  data = { native_button: "" }
  data[:native_title] = title if title
  data[:native_icon] = resolved if resolved
  data[:native_href] = href if href
  data[:native_click] = click if click
  data[:native_position] = position.to_s
  data[:native_selected] = "" if selected

  if block
    menu = NavbarMenuBuilder.new(@context)
    @context.capture(menu, &block)
    add(@context.tag.div(data: data) { menu.to_html })
  else
    add(@context.tag.div(data: data))
  end
end

#segment(title, href: nil, click: nil, selected: false) ⇒ Object

Adds a segment to the nav bar. On iOS the segments render as a centered segmented control (the same control the App Store uses for Apps/Games). Mark the current page's segment selected: true. Tapping a segment navigates to its href (or clicks the click selector), replacing history so the back button doesn't walk back through segment switches.



202
203
204
205
206
207
208
# File 'lib/ruby_native/helper.rb', line 202

def segment(title, href: nil, click: nil, selected: false)
  data = { native_segment: "", native_title: title }
  data[:native_href] = href if href
  data[:native_click] = click if click
  data[:native_selected] = "" if selected
  add(@context.tag.div(data: data))
end

#share_button(url: nil, title: "Share", icon: "square.and.arrow.up", icons: nil, position: :trailing) ⇒ Object

Adds a native share button to the nav bar. Tapping it opens the platform share sheet for url: (defaults to the current page on the web side) so it works even where embedded web views don't support navigator.share. Icons follow the same rules as the other navbar buttons: icon: applies to every platform and icons: ({ ios:, android: }) overrides per platform.



216
217
218
219
220
221
222
223
224
# File 'lib/ruby_native/helper.rb', line 216

def share_button(url: nil, title: "Share", icon: "square.and.arrow.up", icons: nil, position: :trailing)
  resolved = RubyNative::Helper.resolve_icon(icon: icon, icons: icons, platform: @context.try(:native_platform))
  data = { native_button: "", native_share: "" }
  data[:native_title] = title if title
  data[:native_icon] = resolved if resolved
  data[:native_position] = position.to_s
  data[:native_share_url] = url if url
  add(@context.tag.div(data: data))
end

#submit_button(title: "Save", click: "[type='submit']") ⇒ Object



226
227
228
229
230
231
232
# File 'lib/ruby_native/helper.rb', line 226

def submit_button(title: "Save", click: "[type='submit']")
  add(@context.tag.div(data: {
    native_submit_button: "",
    native_title: title,
    native_click: click
  }))
end

#to_htmlObject



234
235
236
# File 'lib/ruby_native/helper.rb', line 234

def to_html
  @context.safe_join(@items)
end