view app/assets/javascripts/init.tabs.js @ 208:953d284ec195

Revamp the routing
author Edho Arief <edho@myconan.net>
date Sat, 11 May 2013 22:39:06 +0900
parents c054f01477c4
children
line wrap: on
line source

$(document).ready(function() {
  if ($('#paste-show').length !== 1) {
    return;
  }
  var update_state = function() {
    var paste = $('#paste'),
      mode = paste.data('mode'),
      width = paste.data('width'),
      short_mode = function(mode) {
        if (mode == 'highlight') {
          return 'hl'
        } else if (mode =='markdown') {
          return 'md'
        } else {
          return 'plain'
        }
      },
      qstring = '#!' + short_mode(mode) + '.' + width;
    if (width == 'auto') {
      if (mode == 'plain') {
        qstring = ' ';
      } else {
        qstring = '#!' + short_mode(mode);
      }
    }
    if (history.replaceState) {
      history.replaceState(null, '', qstring);
    } else {
      window.location = qstring;
    }
    return false;
  },
  paste_resize = function(size) {
    var paste = $('#paste'),
      title = $('#paste-resize a.btn');
    title.html(title.html().replace(/(auto|\d+px)/, size));
    if (size == 'auto') {
      paste.css('width', '');
      paste.data('width', size);
    } else {
      paste.css('width', size);
      paste.data('width', size);
    }
    update_state();
  },
  paste_resize_menu_handler = function() {
    paste_resize($(this).data('size'));
    $('.open').removeClass('open');
    return false;
  },
  paste_mode_state_handler = function() {
    $('#paste').data('mode', $(this).prop('href').split('#')[1]);
    update_state();
  },
  init_state = function() {
    mode = window.location.hash.substr(2).split('.');
    if (mode[0] == 'hl' || mode[0] == 'highlight') { $('#paste-mode a:eq(1)').click(); }
    else if (mode[0] == 'md' || mode[0] == 'markdown') { $('#paste-mode a:eq(2)').click(); };
    if (mode[1] && mode[1].match(/^\d+px$/)) { paste_resize(mode[1]); }
  },
  init_tabs_base = function() {
    var raw = $('#plain pre').text(),
      markdown = $('#markdown div');
    markdown.html(marked(raw));
    $('#highlight pre').text(raw);

    markdown.find('pre').addClass('prettyprint');
    markdown.find('a').prop('rel', 'nofollow');
    prettyPrint();
  },
  init_tabs_menu = function() {
    $('#paste-mode a').click(paste_mode_state_handler);
    $('#paste-resize ul a').click(paste_resize_menu_handler);
  };

  init_tabs_base();
  init_tabs_menu();
  init_state();
  update_state();
});