123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- _Drop = Drop.createContext classPrefix: 'tether'
- isMobile = $(window).width() < 567
- init = ->
- setupHero()
- setupBrowserDemo()
- setupHero = ->
- $target = $('.tether-target-demo')
- positions = [
- 'top left'
- 'left top'
- 'left middle'
- 'left bottom'
- 'bottom left'
- 'bottom center'
- 'bottom right'
- 'right bottom'
- 'right middle'
- 'right top'
- 'top right'
- 'top center'
- ]
- if isMobile
- positions = [
- 'top left'
- 'bottom left'
- 'bottom right'
- 'top right'
- ]
- window.drops = {}
- for position in positions
- drops[position] = new _Drop
- target: $target[0]
- classes: 'tether-theme-arrows-dark'
- position: position
- constrainToWindow: false
- openOn: ''
- content: '<div style="height: 50px; width: 50px"></div>'
- openIndex = 0
- frames = 0
- frameLengthMS = 10
- openAllDrops = ->
- for position, drop of drops
- drop.open()
- openNextDrop = ->
- for position, drop of drops
- drop.close()
- drops[positions[openIndex]].open()
- drops[positions[(openIndex + 6) % positions.length]].open()
- openIndex = (openIndex + 1) % positions.length
- if frames > 5
- finalDropState()
- return
- frames += 1
- setTimeout openNextDrop, frameLengthMS * frames
- finalDropState = ->
- $(drops['top left'].dropContent).html('Marrying DOM elements for life.')
- $(drops['bottom right'].dropContent).html('<a class="button" href="http://github.com/HubSpot/tether">★ On Github</a>')
- drops['top left'].open()
- drops['bottom right'].open()
- if true or isMobile
- drops['top left'].open()
- drops['top left'].tether.position()
- drops['bottom right'].open()
- drops['bottom right'].tether.position()
- finalDropState()
- else
- openNextDrop()
- setupBrowserDemo = ->
- $browserDemo = $('.browser-demo.showcase')
- $startPoint = $('.browser-demo-start-point')
- $stopPoint = $('.browser-demo-stop-point')
- $iframe = $('.browser-window iframe')
- $browserContents = $('.browser-content .browser-demo-inner')
- $sections = $('.browser-demo-section')
- $('body').append """
- <style>
- table.showcase.browser-demo.fixed-bottom {
- top: #{ $sections.length }00%
- }
- </style>
- """
- $(window).scroll ->
- scrollTop = $(window).scrollTop()
- if $startPoint.position().top < scrollTop and scrollTop + window.innerHeight < $stopPoint.position().top
- $browserDemo.removeClass('fixed-bottom')
- $browserDemo.addClass('fixed')
- $sections.each ->
- $section = $ @
- if $section.position().top < scrollTop < $section.position().top + $section.outerHeight()
- setSection $section.data('section')
- return true
- else
- $browserDemo.removeAttr('data-section')
- $browserDemo.removeClass('fixed')
- if scrollTop + window.innerHeight > $stopPoint.position().top
- $browserDemo.addClass('fixed-bottom')
- else
- $browserDemo.removeClass('fixed-bottom')
- $iframe.load ->
- iframeWindow = $iframe[0].contentWindow
- $items = $iframe.contents().find('.item')
- $items.each (i) ->
- $item = $(@)
- _iframeWindowDrop = iframeWindow.Drop.createContext classPrefix: 'tether'
- drop = new _iframeWindowDrop
- target: $item[0]
- classes: 'tether-theme-arrows-dark'
- position: 'right top'
- constrainToWindow: true
- openOn: 'click'
- content: '''
- <ul>
- <li>Action 1</li>
- <li>Action 2</li>
- <li>Action 3</li>
- </ul>
- '''
- $item.data('drop', drop)
- scrollInterval = undefined
- scrollTop = 0
- scrollTopDirection = 1
- setSection = (section) ->
- $browserDemo.attr('data-section', section)
- $('.section-copy').removeClass('active')
- $(""".section-copy[data-section="#{ section }"]""").addClass('active')
- openExampleItem = ->
- if isMobile
- $iframe.contents().find('.item:first').data().drop.open()
- else
- $iframe.contents().find('.item:eq(2)').data().drop.open()
- closeAllItems = ->
- $iframe.contents().find('.item').each -> $(@).data().drop.close() or true
- scrollLeftSection = ->
- scrollInterval = setInterval ->
- $iframe.contents().find('.left').scrollTop scrollTop
- scrollTop += scrollTopDirection
- if scrollTop > 50
- scrollTopDirection = -1
- if scrollTop < 0
- scrollTopDirection = 1
- , 30
- stopScrollingLeftSection = ->
- clearInterval scrollInterval
- switch section
- when 'what'
- closeAllItems()
- openExampleItem()
- stopScrollingLeftSection()
- when 'how'
- closeAllItems()
- openExampleItem()
- stopScrollingLeftSection()
- scrollLeftSection()
- when 'why'
- closeAllItems()
- openExampleItem()
- stopScrollingLeftSection()
- scrollLeftSection()
- when 'outro'
- closeAllItems()
- openExampleItem()
- stopScrollingLeftSection()
- init()
|