# Left pane (tree) widget # tree_selector = "#tree" tree_column = 3 log = (msg) -> console?.log "** admin/pages:tree: #{msg}" class @PaneTree constructor: (@element) -> @tree_table = new SmartTreeTable @element.find( tree_selector ).first(), column: tree_column on_select: @on_tree_item_selected on_tree_change: @on_tree_changed prefix: branch: expanded: '<i class="prefix-expanded fa fa-caret-down"></i>' collapsed: '<i class="prefix-collapsed fa fa-caret-right"></i>' dragAndDrop: enabled: false dropTarget: overlay: before: '<i class="fa fa-long-arrow-up"></i>' into: '<i class="fa fa-long-arrow-right"></i>' after: '<i class="fa fa-long-arrow-down"></i>' @select null @attached_footer = new AttachedFooter target: $(tree_selector) footer: @bottom_toolbar() observe: $('.pane-tree .content') @pages_reorder_enabled = false $("body").on "click", "A.pages-reorder-link", (e) => e.preventDefault() pages_widget.on_pages_reorder_started() $("body").on "click", ".pages-reorder-save-link", (e) => e.preventDefault() log "** save reordered pages" for row in @ordered_row_list() log "** #{row.id}: parent:#{row.parent_id}" log "initialized" # Updates pane tree widget # update: (state) -> log "** update:" @tree_table.select state.page_node_id, false if !!state.pages_reorder_enabled && !@pages_reorder_enabled @tree_table.enable_drag_and_drop() @pages_reorder_enabled = true log "** pages reorder enabled!" @scroll_to_view state.page_node_id @update_bottom_toolbar state @update_top_toolbar state select: (id) -> @tree_table.select id, false expand: (id) -> @tree_table.expand id scroll_to_view: (id) -> return unless id? row = @tree_table.rows[id] return unless row? el = row.el el_t = el.position().top el_b = el_t + el.height() if el_t < 0 || $('.pane-tree .content').height() < el_b origin_to = @tree_table.table.position().top scroll_to = el.position().top # console?.log "** pane-tree: scrolling to selected: #{scroll_to}: #{origin_to}" @element.find('.content').animate { scrollTop: scroll_to - origin_to } #, 'slow' # Callback to be invoked when page (tree item) is selected # on_tree_item_selected: (id, object, el) => pages_widget.on_page_selected id, object # Callback to be invoked when pages (tree branches/leaves) are reordered # on_tree_changed: () => log "** tree changed!" form = @bottom_toolbar('.pages-reorder-actions form').first() form.find("input.page_nodes").remove() for row in @ordered_row_list() parent_id = if row.parent_id? then row.parent_id else '' form.append("<input type='hidden' name='page_nodes[#{row.id}][parent_id]' value='#{parent_id}' class='page_nodes'/>") log "** #{row.id}: parent:#{row.parent_id}" # Returns row object specified by given +id+ # find_row_by_id: (id) -> @tree_table.rows[id] # Returns ordered list of rows as objects with +id+, +parent_id+ # ordered_row_list: -> { id: row.id, parent_id: row.parent_id } for row in @tree_table.rows_list() # Returns action buttons elements, or elements within buttons specified by +selector+ # bottom_toolbar: (selector = '') -> @element.find(".bottom-toolbar #{selector}") # Updates action buttons state and labels # update_bottom_toolbar: (state) -> unless state.page_node_id? || @pages_reorder_enabled log "** update_bottom_toolbar: disabling" @bottom_toolbar().hide() return object = @find_row_by_id state.page_node_id @bottom_toolbar().show() if @pages_reorder_enabled @bottom_toolbar('.pages-reorder-actions').show() @bottom_toolbar('.page-actions').hide() else @bottom_toolbar('.pages-reorder-actions').hide() if state.page_node_id? @bottom_toolbar('.page-actions').show() @bottom_toolbar('.page-append-link').attr 'href', pages_widget.url_to_action 'append' @bottom_toolbar('.page-insert-link').attr 'href', pages_widget.url_to_action 'insert' @bottom_toolbar('.page-delete-link').attr 'href', pages_widget.url_to_action 'delete' @bottom_toolbar(' .page-name').text object.contents else @bottom_toolbar('.page-actions').hide() @attached_footer.update_footer() # Returns top toolbar element, or elements within buttons specified by +selector+ # top_toolbar: (selector = '') -> @element.find(".top-toolbar #{selector}") # Updates top toolbar buttons and links # update_top_toolbar: (state) -> @top_toolbar('.lang-select-link').each -> lang = $(@).attr 'data-lang-id' $(@).attr 'href', pages_widget.url_to( lang, state.page_node_id ) if @pages_reorder_enabled @top_toolbar('.pages-reorder-link').addClass "disabled" @top_toolbar('.pages-reorder-link .checkmark').show() else @top_toolbar('.pages-reorder-link').removeClass "disabled" @top_toolbar('.pages-reorder-link .checkmark').hide()