o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1355470622.457153:@value"�K{I" class:EFI"ProcessedAsset;�FI"logical_path;�FI" mercury/regions/markdown.js;�FI" pathname;�FI"/Users/brownjohn/.rvm/gems/ruby-1.9.3-p194/gems/mercury-rails-0.8.0/app/assets/javascripts/mercury/regions/markdown.coffee;�FI"content_type;�FI"application/javascript;�FI" mtime;�FI"2012-08-08T16:13:36+08:00;�FI"length;�FiHI"digest;�F"%cd0ee3124460ebf62b07bb368e9f8e63I"source;�FI"H(function() { var __hasProp = {}.hasOwnProperty, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; this.Mercury.Regions.Markdown = (function(_super) { var type; __extends(Markdown, _super); Markdown.supported = document.getElementById; Markdown.supportedText = "Chrome 10+, Firefox 4+, IE 7+, Safari 5+, Opera 8+"; type = 'markdown'; Markdown.prototype.type = function() { return type; }; function Markdown(element, window, options) { this.element = element; this.window = window; this.options = options != null ? options : {}; Markdown.__super__.constructor.apply(this, arguments); this.converter = new Showdown.converter(); } Markdown.prototype.build = function() { var height, value, width; width = '100%'; height = this.element.height(); value = this.element.html().replace(/^\s+|\s+$/g, '').replace('>', '>'); this.textarea = jQuery('<textarea>', this.document).val(value).addClass('mercury-textarea'); this.textarea.css({ border: 0, background: 'transparent', display: 'block', 'overflow-y': 'hidden', width: width, height: height, fontFamily: '"Courier New", Courier, monospace' }); this.element.empty().append(this.textarea); this.previewElement = jQuery('<div>', this.document); this.element.append(this.previewElement); this.container = this.element; this.container.data('region', this); this.element = this.textarea; return this.resize(); }; Markdown.prototype.bindEvents = function() { var _this = this; Mercury.on('mode', function(event, options) { if (options.mode === 'preview') { return _this.togglePreview(); } }); Mercury.on('focus:frame', function() { if (!_this.previewing && Mercury.region === _this) { return _this.focus(); } }); Mercury.on('action', function(event, options) { if (_this.previewing || Mercury.region !== _this) { return; } if (options.action) { return _this.execCommand(options.action, options); } }); Mercury.on('unfocus:regions', function() { if (_this.previewing || Mercury.region !== _this) { return; } _this.element.blur(); _this.container.removeClass('focus'); return Mercury.trigger('region:blurred', { region: _this }); }); this.element.on('dragenter', function(event) { if (_this.previewing) { return; } event.preventDefault(); return event.originalEvent.dataTransfer.dropEffect = 'copy'; }); this.element.on('dragover', function(event) { if (_this.previewing) { return; } event.preventDefault(); return event.originalEvent.dataTransfer.dropEffect = 'copy'; }); this.element.on('drop', function(event) { if (_this.previewing) { return; } if (Mercury.snippet) { event.preventDefault(); _this.focus(); Mercury.Snippet.displayOptionsFor(Mercury.snippet); } if (event.originalEvent.dataTransfer.files.length) { event.preventDefault(); _this.focus(); return Mercury.uploader(event.originalEvent.dataTransfer.files[0]); } }); this.element.on('focus', function() { if (_this.previewing) { return; } Mercury.region = _this; _this.container.addClass('focus'); return Mercury.trigger('region:focused', { region: _this }); }); this.element.on('keydown', function(event) { var end, lineText, number, selection, start, text; if (_this.previewing) { return; } _this.resize(); switch (event.keyCode) { case 90: if (!event.metaKey) { return; } event.preventDefault(); if (event.shiftKey) { _this.execCommand('redo'); } else { _this.execCommand('undo'); } return; case 13: selection = _this.selection(); text = _this.element.val(); start = text.lastIndexOf('\n', selection.start); end = text.indexOf('\n', selection.end); if (end < start) { end = text.length; } if (text[start] === '\n') { start = text.lastIndexOf('\n', selection.start - 1); } if (text[start + 1] === '-') { selection.replace('\n- ', false, true); event.preventDefault(); } if (/\d/.test(text[start + 1])) { lineText = text.substring(start, end); if (/(\d+)\./.test(lineText)) { number = parseInt(RegExp.$1); selection.replace("\n" + (number += 1) + ". ", false, true); event.preventDefault(); } } break; case 9: event.preventDefault(); _this.execCommand('insertHTML', { value: ' ' }); } if (event.metaKey) { switch (event.keyCode) { case 66: _this.execCommand('bold'); event.preventDefault(); break; case 73: _this.execCommand('italic'); event.preventDefault(); break; case 85: _this.execCommand('underline'); event.preventDefault(); } } return _this.pushHistory(event.keyCode); }); this.element.on('keyup', function() { if (_this.previewing) { return; } Mercury.changes = true; _this.resize(); return Mercury.trigger('region:update', { region: _this }); }); this.element.on('mouseup', function() { if (_this.previewing) { return; } _this.focus(); return Mercury.trigger('region:focused', { region: _this }); }); return this.previewElement.on('click', function(event) { if (_this.previewing) { return $(event.target).closest('a').attr('target', '_parent'); } }); }; Markdown.prototype.focus = function() { return this.element.focus(); }; Markdown.prototype.content = function(value, filterSnippets) { if (value == null) { value = null; } if (filterSnippets == null) { filterSnippets = true; } if (value !== null) { if (jQuery.type(value) === 'string') { return this.element.val(value); } else { this.element.val(value.html); return this.selection().select(value.selection.start, value.selection.end); } } else { return this.element.val(); } }; Markdown.prototype.contentAndSelection = function() { return { html: this.content(null, false), selection: this.selection().serialize() }; }; Markdown.prototype.togglePreview = function() { var value; if (this.previewing) { this.previewing = false; this.container.attr(Mercury.config.regions.attribute, type); this.previewElement.hide(); this.element.show(); if (Mercury.region === this) { return this.focus(); } } else { this.previewing = true; this.container.removeAttr(Mercury.config.regions.attribute); value = this.converter.makeHtml(this.element.val()); this.previewElement.html(value); this.previewElement.show(); this.element.hide(); return Mercury.trigger('region:blurred', { region: this }); } }; Markdown.prototype.execCommand = function(action, options) { var handler; if (options == null) { options = {}; } Markdown.__super__.execCommand.apply(this, arguments); if (handler = Mercury.Regions.Markdown.actions[action]) { handler.call(this, this.selection(), options); } return this.resize(); }; Markdown.prototype.pushHistory = function(keyCode) { var keyCodes, knownKeyCode, waitTime, _this = this; keyCodes = [13, 46, 8]; waitTime = 2.5; if (keyCode) { knownKeyCode = keyCodes.indexOf(keyCode); } clearTimeout(this.historyTimeout); if (knownKeyCode >= 0 && knownKeyCode !== this.lastKnownKeyCode) { this.history.push(this.contentAndSelection()); } else if (keyCode) { this.historyTimeout = setTimeout((function() { return _this.history.push(_this.contentAndSelection()); }), waitTime * 1000); } else { this.history.push(this.contentAndSelection()); } return this.lastKnownKeyCode = knownKeyCode; }; Markdown.prototype.selection = function() { return new Mercury.Regions.Markdown.Selection(this.element); }; Markdown.prototype.resize = function() { this.element.css({ height: this.element.get(0).scrollHeight - 100 }); return this.element.css({ height: this.element.get(0).scrollHeight }); }; Markdown.prototype.snippets = function() {}; Markdown.actions = { undo: function() { return this.content(this.history.undo()); }, redo: function() { return this.content(this.history.redo()); }, insertHTML: function(selection, options) { var element; if (options.value.get && (element = options.value.get(0))) { options.value = jQuery('<div>').html(element).html(); } return selection.replace(options.value, false, true); }, insertImage: function(selection, options) { return selection.replace(' + ')', true); }, insertTable: function(selection, options) { return selection.replace(options.value.replace(/<br>|<br\/>/ig, ''), false, true); }, insertLink: function(selection, options) { return selection.replace("[" + options.value.content + "](" + options.value.attrs.href + " 'optional title')", true); }, insertUnorderedList: function(selection) { return selection.addList('unordered'); }, insertOrderedList: function(selection) { return selection.addList('ordered'); }, style: function(selection, options) { return selection.wrap("<span class=\"" + options.value + "\">", '</span>'); }, formatblock: function(selection, options) { var wrapper, wrapperName, wrappers; wrappers = { h1: ['# ', ' #'], h2: ['## ', ' ##'], h3: ['### ', ' ###'], h4: ['#### ', ' ####'], h5: ['##### ', ' #####'], h6: ['###### ', ' ######'], pre: [' ', ''], blockquote: ['> ', ''], p: ['\n', '\n'] }; for (wrapperName in wrappers) { wrapper = wrappers[wrapperName]; selection.unWrapLine("" + wrapper[0], "" + wrapper[1]); } if (options.value === 'blockquote') { Mercury.Regions.Markdown.actions.indent.call(this, selection, options); return; } return selection.wrapLine("" + wrappers[options.value][0], "" + wrappers[options.value][1]); }, bold: function(selection) { return selection.wrap('**', '**'); }, italic: function(selection) { return selection.wrap('_', '_'); }, subscript: function(selection) { return selection.wrap('<sub>', '</sub>'); }, superscript: function(selection) { return selection.wrap('<sup>', '</sup>'); }, indent: function(selection) { return selection.wrapLine('> ', '', false, true); }, outdent: function(selection) { return selection.unWrapLine('> ', '', false, true); }, horizontalRule: function(selection) { return selection.replace('\n- - -\n'); }, insertSnippet: function(selection, options) { var snippet; snippet = options.value; return selection.replace(snippet.getText()); } }; return Markdown; })(Mercury.Region); Mercury.Regions.Markdown.Selection = (function() { function Selection(element) { this.element = element; this.el = this.element.get(0); this.getDetails(); } Selection.prototype.serialize = function() { return { start: this.start, end: this.end }; }; Selection.prototype.getDetails = function() { this.length = this.el.selectionEnd - this.el.selectionStart; this.start = this.el.selectionStart; this.end = this.el.selectionEnd; return this.text = this.element.val().substr(this.start, this.length); }; Selection.prototype.replace = function(text, select, placeCursor) { var changed, savedVal, val; if (select == null) { select = false; } if (placeCursor == null) { placeCursor = false; } this.getDetails(); val = this.element.val(); savedVal = this.element.val(); this.element.val(val.substr(0, this.start) + text + val.substr(this.end, val.length)); changed = this.element.val() !== savedVal; if (select) { this.select(this.start, this.start + text.length); } if (placeCursor) { this.select(this.start + text.length, this.start + text.length); } return changed; }; Selection.prototype.select = function(start, end) { this.start = start; this.end = end; this.element.focus(); this.el.selectionStart = this.start; this.el.selectionEnd = this.end; return this.getDetails(); }; Selection.prototype.wrap = function(left, right) { this.getDetails(); this.deselectNewLines(); this.replace(left + this.text + right, this.text !== ''); if (this.text === '') { return this.select(this.start + left.length, this.start + left.length); } }; Selection.prototype.wrapLine = function(left, right, selectAfter, reselect) { var end, savedSelection, start, text; if (selectAfter == null) { selectAfter = true; } if (reselect == null) { reselect = false; } this.getDetails(); savedSelection = this.serialize(); text = this.element.val(); start = text.lastIndexOf('\n', this.start); end = text.indexOf('\n', this.end); if (end < start) { end = text.length; } if (text[start] === '\n') { start = text.lastIndexOf('\n', this.start - 1); } this.select(start + 1, end); this.replace(left + this.text + right, selectAfter); if (reselect) { return this.select(savedSelection.start + left.length, savedSelection.end + left.length); } }; Selection.prototype.unWrapLine = function(left, right, selectAfter, reselect) { var changed, end, leftRegExp, rightRegExp, savedSelection, start, text; if (selectAfter == null) { selectAfter = true; } if (reselect == null) { reselect = false; } this.getDetails(); savedSelection = this.serialize(); text = this.element.val(); start = text.lastIndexOf('\n', this.start); end = text.indexOf('\n', this.end); if (end < start) { end = text.length; } if (text[start] === '\n') { start = text.lastIndexOf('\n', this.start - 1); } this.select(start + 1, end); window.something = this.text; leftRegExp = new RegExp("^" + (left.regExpEscape())); rightRegExp = new RegExp("" + (right.regExpEscape()) + "$"); changed = this.replace(this.text.replace(leftRegExp, '').replace(rightRegExp, ''), selectAfter); if (reselect && changed) { return this.select(savedSelection.start - left.length, savedSelection.end - left.length); } }; Selection.prototype.addList = function(type) { var end, index, line, lines, start, text; text = this.element.val(); start = text.lastIndexOf('\n', this.start); end = text.indexOf('\n', this.end); if (end < start) { end = text.length; } if (text[start] === '\n') { start = text.lastIndexOf('\n', this.start - 1); } this.select(start + 1, end); lines = this.text.split('\n'); if (type === 'unordered') { return this.replace("- " + lines.join("\n- "), true); } else { return this.replace(((function() { var _i, _len, _results; _results = []; for (index = _i = 0, _len = lines.length; _i < _len; index = ++_i) { line = lines[index]; _results.push("" + (index + 1) + ". " + line); } return _results; })()).join('\n'), true); } }; Selection.prototype.deselectNewLines = function() { var length, text; text = this.text; length = text.replace(/\n+$/g, '').length; return this.select(this.start, this.start + length); }; Selection.prototype.placeMarker = function() { return this.wrap('[mercury-marker]', '[mercury-marker]'); }; Selection.prototype.removeMarker = function() { var end, start, val; val = this.element.val(); start = val.indexOf('[mercury-marker]'); if (!(start > -1)) { return; } end = val.indexOf('[mercury-marker]', start + 1) - '[mercury-marker]'.length; this.element.val(this.element.val().replace(/\[mercury-marker\]/g, '')); return this.select(start, end); }; Selection.prototype.textContent = function() { return this.text; }; return Selection; })(); }).call(this); ;�TI"dependency_digest;�F"%4619d74d04262bb26617e751e43e1d0bI"required_paths;�F[I"/Users/brownjohn/.rvm/gems/ruby-1.9.3-p194/gems/mercury-rails-0.8.0/app/assets/javascripts/mercury/regions/markdown.coffee;�FI"dependency_paths;�F[{I" path;�FI"/Users/brownjohn/.rvm/gems/ruby-1.9.3-p194/gems/mercury-rails-0.8.0/app/assets/javascripts/mercury/regions/markdown.coffee;�FI" mtime;�FI"2012-08-08T16:13:36+08:00;�FI"digest;�F"%f0fade96c9405a9abef87f86e2aea9caI" _version;�F"%9f3b95dd7ea3030dc35985c0a8020862