dante-editor 0.1.6 → 0.1.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -20,7 +20,7 @@ class Dante.View.TooltipWidget.Uploader extends Dante.View.TooltipWidget
20
20
  <img src='' data-height='' data-width='' data-image-id='' class='graf-image' data-delayed-src=''>
21
21
  </div>
22
22
  <figcaption contenteditable='true' data-default-value='Type caption for image (optional)' class='imageCaption'>
23
- <span class='defaultValue'>Type caption for image (optional)</span>
23
+ <span class='defaultValue'>#{@current_editor.image_caption_placeholder}</span>
24
24
  <br>
25
25
  </figcaption>
26
26
  </figure>"
data/bower.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name" : "dante",
3
3
  "description": "Just another Medium editor clone.",
4
4
  "homepage": "michelson.github.io/Dante/",
5
- "version" : "0.1.6",
5
+ "version" : "0.1.7",
6
6
  "keywords": [
7
7
  "css",
8
8
  "sass",
@@ -5,10 +5,11 @@
5
5
  PopOver: {},
6
6
  Menu: {}
7
7
  },
8
+ Article: {},
8
9
  defaults: {
9
10
  image_placeholder: '../images/dante/media-loading-placeholder.png'
10
11
  },
11
- version: "0.1.6"
12
+ version: "0.1.7"
12
13
  };
13
14
 
14
15
  }).call(this);
@@ -483,7 +484,7 @@
483
484
  };
484
485
 
485
486
  Editor.prototype.initialize = function(opts) {
486
- var bodyplaceholder, embedplaceholder, extractplaceholder, title, titleplaceholder;
487
+ var bodyplaceholder, embedplaceholder, extractplaceholder, titleplaceholder;
487
488
  if (opts == null) {
488
489
  opts = {};
489
490
  }
@@ -495,9 +496,11 @@
495
496
  this.upload_url = opts.upload_url || "/uploads.json";
496
497
  this.upload_callback = opts.upload_callback;
497
498
  this.image_delete_callback = opts.image_delete_callback;
499
+ this.image_caption_placeholder = opts.image_caption_placeholder || "Type caption for image (optional)";
498
500
  this.oembed_url = opts.oembed_url || ("http://api.embed.ly/1/oembed?key=" + opts.api_key + "&url=");
499
501
  this.extract_url = opts.extract_url || ("http://api.embed.ly/1/extract?key=" + opts.api_key + "&url=");
500
502
  this.default_loading_placeholder = opts.default_loading_placeholder || Dante.defaults.image_placeholder;
503
+ this.embed_caption_placeholder = opts.embed_caption_placeholder || "Type caption for embed (optional)";
501
504
  this.store_url = opts.store_url;
502
505
  this.store_method = opts.store_method || "POST";
503
506
  this.store_success_handler = opts.store_success_handler;
@@ -513,16 +516,17 @@
513
516
  this.suggest_resource_handler = opts.suggest_resource_handler || null;
514
517
  opts.base_widgets || (opts.base_widgets = ["uploader", "embed", "embed_extract"]);
515
518
  opts.base_behaviors || (opts.base_behaviors = ["save", "image", "paste", "list", "suggest"]);
519
+ opts.base_popovers || (opts.base_popovers = ["anchor", "typeahead", "card", "align"]);
516
520
  this.widgets = [];
517
521
  this.behaviors = [];
522
+ this.popovers = [];
518
523
  window.debugMode = opts.debug || false;
519
524
  if (window.debugMode) {
520
525
  $(this.el).addClass("debug");
521
526
  }
522
527
  titleplaceholder = opts.title_placeholder || 'Title';
523
528
  this.title_placeholder = "<span class='defaultValue defaultValue--root'>" + titleplaceholder + "</span><br>";
524
- title = opts.title || '';
525
- this.title = title;
529
+ this.title = opts.title || '';
526
530
  bodyplaceholder = opts.body_placeholder || 'Tell your story…';
527
531
  this.body_placeholder = "<span class='defaultValue defaultValue--root'>" + bodyplaceholder + "</span><br>";
528
532
  embedplaceholder = opts.embed_placeholder || 'Paste a YouTube, Vine, Vimeo, or other video link, and press Enter';
@@ -617,6 +621,49 @@
617
621
  }
618
622
  };
619
623
 
624
+ Editor.prototype.intializePopOvers = function(opts) {
625
+ var base_popovers, self;
626
+ base_popovers = opts.base_popovers;
627
+ self = this;
628
+ if (base_popovers.indexOf("anchor") >= 0) {
629
+ this.pop_over = new Dante.Editor.PopOver({
630
+ editor: this
631
+ });
632
+ this.pop_over.render().hide();
633
+ }
634
+ if (base_popovers.indexOf("typeahead") >= 0) {
635
+ this.pop_over_typeahead = new Dante.Editor.PopOverTypeAhead({
636
+ editor: this
637
+ });
638
+ this.popovers.push(this.pop_over_typeahead);
639
+ }
640
+ if (base_popovers.indexOf("card") >= 0) {
641
+ this.pop_over_card = new Dante.Editor.PopOverCard({
642
+ editor: this
643
+ });
644
+ this.popovers.push(this.pop_over_card);
645
+ }
646
+ if (base_popovers.indexOf("align") >= 0) {
647
+ this.pop_over_align = new Dante.Editor.ImageTooltip({
648
+ editor: this
649
+ });
650
+ this.popovers.push(this.pop_over_align);
651
+ }
652
+ if (opts.extra_popovers) {
653
+ _.each(opts.extra_popovers, (function(_this) {
654
+ return function(w) {
655
+ if (!w.current_editor) {
656
+ w.current_editor = self;
657
+ }
658
+ return _this.popovers.push(w);
659
+ };
660
+ })(this));
661
+ }
662
+ return this.popovers.forEach(function(p) {
663
+ return p.render().hide();
664
+ });
665
+ };
666
+
620
667
  Editor.prototype.getContent = function() {
621
668
  return $(this.el).find(".section-inner").html();
622
669
  };
@@ -643,22 +690,7 @@
643
690
  editor: this,
644
691
  widgets: this.widgets
645
692
  });
646
- this.pop_over = new Dante.Editor.PopOver({
647
- editor: this
648
- });
649
- this.pop_over.render().hide();
650
- this.pop_over_typeahead = new Dante.Editor.PopOverTypeAhead({
651
- editor: this
652
- });
653
- this.pop_over_typeahead.render().hide();
654
- this.pop_over_card = new Dante.Editor.PopOverCard({
655
- editor: this
656
- });
657
- this.pop_over_card.render().hide();
658
- this.pop_over_align = new Dante.Editor.ImageTooltip({
659
- editor: this
660
- });
661
- this.pop_over_align.render().hide();
693
+ this.intializePopOvers(this.editor_options);
662
694
  return this.tooltip_view.render().hide();
663
695
  };
664
696
 
@@ -1051,7 +1083,7 @@
1051
1083
  } else if (!prev) {
1052
1084
  this.setRangeAt(this.$el.find(".section-inner p")[0]);
1053
1085
  }
1054
- return this.displayTooltipAt($(this.el).find(".is-selected"));
1086
+ return this.displayTooltipAt(this.findSelected());
1055
1087
  }
1056
1088
  };
1057
1089
 
@@ -1101,22 +1133,12 @@
1101
1133
  this.markAsSelected(anchor_node);
1102
1134
  }
1103
1135
  utils.log("HANDLING Behavior KEYDOWN");
1104
- _.each(this.behaviors, (function(_this) {
1105
- return function(b) {
1106
- if (b.handleKeyDown) {
1107
- return b.handleKeyDown(e, parent);
1108
- }
1109
- };
1110
- })(this));
1111
- if (!this["continue"]) {
1112
- return false;
1113
- }
1114
1136
  if (e.which === TAB) {
1115
1137
  this.handleTab(anchor_node);
1116
1138
  return false;
1117
1139
  }
1118
1140
  if (e.which === ENTER) {
1119
- $(this.el).find(".is-selected").removeClass("is-selected");
1141
+ this.findSelected().removeClass("is-selected");
1120
1142
  utils.log(this.isLastChar());
1121
1143
  utils.log("HANDLING WIDGET ENTER");
1122
1144
  _.each(this.widgets, (function(_this) {
@@ -1135,8 +1157,8 @@
1135
1157
  if (parent.hasClass("graf--iframe") || parent.hasClass("graf--figure")) {
1136
1158
  if (this.isLastChar()) {
1137
1159
  this.handleLineBreakWith("p", parent);
1138
- this.setRangeAtText($(".is-selected")[0]);
1139
- $(".is-selected").trigger("mouseup");
1160
+ this.setRangeAtText(this.findSelected()[0]);
1161
+ this.findSelected().trigger("mouseup");
1140
1162
  return false;
1141
1163
  } else {
1142
1164
  return false;
@@ -1169,7 +1191,7 @@
1169
1191
  });
1170
1192
  $(node).append("<br>");
1171
1193
  }
1172
- return _this.displayTooltipAt($(_this.el).find(".is-selected"));
1194
+ return _this.displayTooltipAt(_this.findSelected());
1173
1195
  };
1174
1196
  })(this), 2);
1175
1197
  }
@@ -1215,9 +1237,19 @@
1215
1237
  if (anchor_node) {
1216
1238
  if (!_.isEmpty($(anchor_node).text())) {
1217
1239
  this.tooltip_view.hide();
1218
- return $(anchor_node).removeClass("graf--empty");
1240
+ $(anchor_node).removeClass("graf--empty");
1219
1241
  }
1220
1242
  }
1243
+ _.each(this.behaviors, (function(_this) {
1244
+ return function(b) {
1245
+ if (b.handleKeyDown) {
1246
+ return b.handleKeyDown(e, parent);
1247
+ }
1248
+ };
1249
+ })(this));
1250
+ if (!this["continue"]) {
1251
+ return false;
1252
+ }
1221
1253
  };
1222
1254
 
1223
1255
  Editor.prototype.handleKeyUp = function(e, node) {
@@ -1234,17 +1266,6 @@
1234
1266
  anchor_node = this.getNode();
1235
1267
  utils_anchor_node = utils.getNode();
1236
1268
  this.handleTextSelection(anchor_node);
1237
- utils.log("HANDLING Behavior KEYUPS");
1238
- _.each(this.behaviors, (function(_this) {
1239
- return function(b) {
1240
- if (b.handleKeyUp) {
1241
- return b.handleKeyUp(e);
1242
- }
1243
- };
1244
- })(this));
1245
- if (!this["continue"]) {
1246
- return false;
1247
- }
1248
1269
  if (e.which === BACKSPACE) {
1249
1270
  if ($(utils_anchor_node).hasClass("postField--body")) {
1250
1271
  utils.log("ALL GONE from UP");
@@ -1282,7 +1303,18 @@
1282
1303
  }
1283
1304
  }
1284
1305
  if (_.contains([LEFTARROW, UPARROW, RIGHTARROW, DOWNARROW], e.which)) {
1285
- return this.handleArrowForKeyUp(e);
1306
+ this.handleArrowForKeyUp(e);
1307
+ }
1308
+ utils.log("HANDLING Behavior KEYUPS");
1309
+ _.each(this.behaviors, (function(_this) {
1310
+ return function(b) {
1311
+ if (b.handleKeyUp) {
1312
+ return b.handleKeyUp(e);
1313
+ }
1314
+ };
1315
+ })(this));
1316
+ if (!this["continue"]) {
1317
+ return false;
1286
1318
  }
1287
1319
  };
1288
1320
 
@@ -1290,6 +1322,7 @@
1290
1322
  var anchor_node, parent;
1291
1323
  anchor_node = this.getNode();
1292
1324
  parent = $(anchor_node);
1325
+ this.hidePlaceholder(parent);
1293
1326
  utils.log("HANDLING Behavior KEYPRESS");
1294
1327
  return _.each(this.behaviors, (function(_this) {
1295
1328
  return function(b) {
@@ -1341,7 +1374,7 @@
1341
1374
  if (_.isUndefined(element)) {
1342
1375
  return;
1343
1376
  }
1344
- $(this.el).find(".is-selected").removeClass("is-mediaFocused is-selected");
1377
+ this.findSelected().removeClass("is-mediaFocused is-selected");
1345
1378
  $(element).addClass("is-selected");
1346
1379
  if ($(element).hasClass("graf--first")) {
1347
1380
  this.reachedTop = true;
@@ -1623,182 +1656,118 @@
1623
1656
  return $item;
1624
1657
  };
1625
1658
 
1659
+ Editor.prototype.findSelected = function() {
1660
+ return $(this.el).find(".is-selected");
1661
+ };
1662
+
1626
1663
  return Editor;
1627
1664
 
1628
1665
  })(Dante.View);
1629
1666
 
1630
1667
  }).call(this);
1631
1668
  (function() {
1632
- var __hasProp = {}.hasOwnProperty,
1669
+ var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
1670
+ __hasProp = {}.hasOwnProperty,
1633
1671
  __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; };
1634
1672
 
1635
- Dante.View.Behavior = (function(_super) {
1636
- __extends(Behavior, _super);
1673
+ Dante.Article = (function(_super) {
1674
+ __extends(Article, _super);
1637
1675
 
1638
- function Behavior() {
1639
- return Behavior.__super__.constructor.apply(this, arguments);
1676
+ function Article() {
1677
+ this.start = __bind(this.start, this);
1678
+ return Article.__super__.constructor.apply(this, arguments);
1640
1679
  }
1641
1680
 
1642
- return Behavior;
1643
-
1644
- })(Dante.View);
1645
-
1646
- }).call(this);
1647
- (function() {
1648
- var utils,
1649
- __hasProp = {}.hasOwnProperty,
1650
- __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; };
1651
-
1652
- utils = Dante.utils;
1653
-
1654
- Dante.View.Behavior.Suggest = (function(_super) {
1655
- __extends(Suggest, _super);
1681
+ Article.prototype.el = "body";
1656
1682
 
1657
- function Suggest() {
1658
- return Suggest.__super__.constructor.apply(this, arguments);
1659
- }
1683
+ Article.prototype.events = {
1684
+ "mouseover .markup--anchor": "displayPopOver",
1685
+ "mouseout .markup--anchor": "hidePopOver"
1686
+ };
1660
1687
 
1661
- Suggest.prototype.initialize = function(opts) {
1688
+ Article.prototype.initialize = function(opts) {
1662
1689
  if (opts == null) {
1663
1690
  opts = {};
1664
1691
  }
1665
- this.actionEvent = opts.title;
1666
- this.editor = opts.current_editor;
1667
- this._name = null;
1668
- return this.fetch_results = [];
1692
+ this.options = opts;
1693
+ this.popovers = [];
1694
+ return opts.base_popovers || (opts.base_popovers = ["anchor", "card"]);
1669
1695
  };
1670
1696
 
1671
- Suggest.prototype.displayPopOver = function(ev) {
1672
- return this.editor.pop_over_typeahead.displayAt(this.editor.getSelectionStart());
1697
+ Article.prototype.start = function() {
1698
+ this.render();
1699
+ return this.appendMenus();
1673
1700
  };
1674
1701
 
1675
- Suggest.prototype.hidePopOver = function(ev) {
1676
- console.log("display popover from typeahead");
1677
- return this.editor.pop_over_typeahead.displayAt(ev);
1702
+ Article.prototype.appendMenus = function() {
1703
+ this.intializePopOvers(this.options);
1704
+ return this.removeEditables();
1678
1705
  };
1679
1706
 
1680
- Suggest.prototype.desintegratePopOver = function(e) {
1681
- $(this.editor.getSelectionStart()).remove();
1682
- return this.pasteHtmlAtCaret(this.editor.getSelectionStart().textContent, false);
1707
+ Article.prototype.render = function() {};
1708
+
1709
+ Article.prototype.removeEditables = function() {
1710
+ return $(this.el).find("[contenteditable]").removeAttr("contenteditable");
1683
1711
  };
1684
1712
 
1685
- Suggest.prototype.handleKeyPress = function(e) {
1686
- if (!this.insideQuery()) {
1687
- if (e.keyCode === 64) {
1688
- e.preventDefault();
1689
- return this.pasteHtmlAtCaret(this.wrapperTemplate("@"), false);
1690
- }
1691
- } else {
1692
- console.log("ok let's search");
1693
- return this.getResults((function(_this) {
1694
- return function(e) {
1695
- return _this.fetchResults(e);
1713
+ Article.prototype.intializePopOvers = function(opts) {
1714
+ var base_popovers, self;
1715
+ base_popovers = opts.base_popovers;
1716
+ self = this;
1717
+ if (base_popovers.indexOf("anchor") >= 0) {
1718
+ this.pop_over = new Dante.Editor.PopOver({
1719
+ editor: this
1720
+ });
1721
+ this.popovers.push(this.pop_over);
1722
+ }
1723
+ if (base_popovers.indexOf("card") >= 0) {
1724
+ this.pop_over_card = new Dante.Editor.PopOverCard({
1725
+ editor: this
1726
+ });
1727
+ this.popovers.push(this.pop_over_card);
1728
+ }
1729
+ if (opts.extra_popovers) {
1730
+ _.each(opts.extra_popovers, (function(_this) {
1731
+ return function(w) {
1732
+ if (!w.current_editor) {
1733
+ w.current_editor = self;
1734
+ }
1735
+ return _this.popovers.push(w);
1696
1736
  };
1697
1737
  })(this));
1698
1738
  }
1739
+ return this.popovers.forEach(function(p) {
1740
+ return p.render().hide();
1741
+ });
1699
1742
  };
1700
1743
 
1701
- Suggest.prototype.handleKeyUp = function(e) {
1702
- if (this.insideQuery()) {
1703
- return this.fetchResults(e);
1704
- }
1744
+ Article.prototype.displayPopOver = function(ev) {
1745
+ return this.pop_over.displayAt(ev);
1705
1746
  };
1706
1747
 
1707
- Suggest.prototype.fetchResults = function(e) {
1708
- if (this.getResults.length < 1) {
1709
- this.desintegratePopOver(e);
1710
- }
1711
- if (this.json_request) {
1712
- this.json_request.abort();
1713
- }
1714
- return this.getResults((function(_this) {
1715
- return function(e) {
1716
- _this.displayPopOver(e);
1717
- return _this.editor.pop_over_typeahead.appendData(_this.fetch_results);
1718
- };
1719
- })(this));
1748
+ Article.prototype.hidePopOver = function(ev) {
1749
+ return this.pop_over.hide(ev);
1720
1750
  };
1721
1751
 
1722
- Suggest.prototype.getResults = function(cb, e) {
1723
- var q;
1724
- q = this.editor.getSelectionStart().textContent.replace("@", "");
1725
- clearTimeout(this.timeout);
1726
- return this.timeout = setTimeout((function(_this) {
1727
- return function() {
1728
- return _this.json_request = $.ajax({
1729
- url: "" + _this.editor.suggest_url + "?" + _this.editor.suggest_query_param + "=" + q,
1730
- method: "get",
1731
- dataType: "json"
1732
- }).success(function(data) {
1733
- if (_this.editor.suggest_handler) {
1734
- _this.fetch_results = _this.editor.suggest_handler(data);
1735
- } else {
1736
- _this.fetch_results = data;
1737
- }
1738
- if (cb) {
1739
- return cb(e);
1740
- }
1741
- }).error(function(data, err) {
1742
- return console.log("error fetching results");
1743
- });
1744
- };
1745
- })(this), this.editor.suggest_query_timeout);
1746
- };
1752
+ return Article;
1747
1753
 
1748
- Suggest.prototype.insideQuery = function() {
1749
- return $(this.editor.getSelectionStart()).hasClass("markup--query");
1750
- };
1754
+ })(Dante.View);
1751
1755
 
1752
- Suggest.prototype.wrapperTemplate = function(name) {
1753
- return "<span class='markup--query'>" + name + "</span>";
1754
- };
1756
+ }).call(this);
1757
+ (function() {
1758
+ var __hasProp = {}.hasOwnProperty,
1759
+ __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; };
1755
1760
 
1756
- Suggest.prototype.pasteHtmlAtCaret = function(html, selectPastedContent) {
1757
- var el, firstNode, frag, lastNode, node, originalRange, range, sel;
1758
- sel = void 0;
1759
- range = void 0;
1760
- if (window.getSelection) {
1761
- sel = window.getSelection();
1762
- if (sel.getRangeAt && sel.rangeCount) {
1763
- range = sel.getRangeAt(0);
1764
- range.deleteContents();
1765
- el = document.createElement('div');
1766
- el.innerHTML = html;
1767
- frag = document.createDocumentFragment();
1768
- node = void 0;
1769
- lastNode = void 0;
1770
- while (node = el.firstChild) {
1771
- lastNode = frag.appendChild(node);
1772
- }
1773
- firstNode = frag.firstChild;
1774
- range.insertNode(frag);
1775
- if (lastNode) {
1776
- range = range.cloneRange();
1777
- range.setStartAfter(lastNode);
1778
- if (selectPastedContent) {
1779
- range.setStartBefore(firstNode);
1780
- } else {
1781
- range.collapse(true);
1782
- }
1783
- sel.removeAllRanges();
1784
- sel.addRange(range);
1785
- }
1786
- }
1787
- } else if ((sel = document.selection) && sel.type !== 'Control') {
1788
- originalRange = sel.createRange();
1789
- originalRange.collapse(true);
1790
- sel.createRange().pasteHTML(html);
1791
- if (selectPastedContent) {
1792
- range = sel.createRange();
1793
- range.setEndPoint('StartToStart', originalRange);
1794
- range.select();
1795
- }
1796
- }
1797
- };
1761
+ Dante.View.Behavior = (function(_super) {
1762
+ __extends(Behavior, _super);
1798
1763
 
1799
- return Suggest;
1764
+ function Behavior() {
1765
+ return Behavior.__super__.constructor.apply(this, arguments);
1766
+ }
1800
1767
 
1801
- })(Dante.View.Behavior);
1768
+ return Behavior;
1769
+
1770
+ })(Dante.View);
1802
1771
 
1803
1772
  }).call(this);
1804
1773
  (function() {
@@ -1809,94 +1778,15 @@
1809
1778
 
1810
1779
  utils = Dante.utils;
1811
1780
 
1812
- Dante.View.Behavior.Paste = (function(_super) {
1813
- __extends(Paste, _super);
1781
+ Dante.View.Behavior.Image = (function(_super) {
1782
+ var BACKSPACE, DOWNARROW, ENTER, LEFTARROW, RIGHTARROW, SPACEBAR, TAB, UPARROW;
1814
1783
 
1815
- function Paste() {
1816
- this.handlePaste = __bind(this.handlePaste, this);
1817
- return Paste.__super__.constructor.apply(this, arguments);
1818
- }
1819
-
1820
- Paste.prototype.initialize = function(opts) {
1821
- if (opts == null) {
1822
- opts = {};
1823
- }
1824
- return this.editor = opts.current_editor;
1825
- };
1826
-
1827
- Paste.prototype.handlePaste = function(ev, parent) {
1828
- var cbd, nodes, paste_el, pastedText;
1829
- utils.log("pasted!");
1830
- pastedText = void 0;
1831
- if (window.clipboardData && window.clipboardData.getData) {
1832
- pastedText = window.clipboardData.getData('Text');
1833
- } else if (ev.originalEvent.clipboardData && ev.originalEvent.clipboardData.getData) {
1834
- cbd = ev.originalEvent.clipboardData;
1835
- pastedText = _.isEmpty(cbd.getData('text/html')) ? cbd.getData('text/plain') : cbd.getData('text/html');
1836
- }
1837
- utils.log("Process and handle text...");
1838
- utils.log(pastedText);
1839
- if (pastedText.match(/<\/*[a-z][^>]+?>/gi)) {
1840
- utils.log("HTML DETECTED ON PASTE");
1841
- pastedText = pastedText.replace(/<div>([\w\W]*?)<\/div>/gi, '<p>$1</p>');
1842
- document.body.appendChild($("<div id='" + (this.editor.paste_element_id.replace('#', '')) + "' class='dante-paste'></div>")[0]);
1843
- paste_el = $(this.editor.paste_element_id);
1844
- paste_el.html("<span>" + pastedText + "</span>");
1845
- nodes = $(paste_el.html()).insertBefore($(parent));
1846
- this.editor.parseInitialMess();
1847
-
1848
- /*
1849
- @editor.setupElementsClasses $(@editor.paste_element_id), (e)=>
1850
- * e is the target object which is cleaned
1851
- nodes = $(e.html()).insertAfter($(parent))
1852
- *remove paste div since we wont use it until the next paste
1853
- e.remove()
1854
- *set caret on newly created node
1855
- last_node = nodes.last()[0]
1856
- num = last_node.childNodes.length
1857
- @editor.setRangeAt(last_node, num)
1858
-
1859
- *select new node
1860
- new_node = $(@editor.getNode())
1861
- @editor.markAsSelected(new_node)
1862
- @editor.displayTooltipAt($(@editor.el).find(".is-selected"))
1863
-
1864
- * wrap new images
1865
- @editor.handleUnwrappedImages(nodes)
1866
-
1867
- *scroll to element top
1868
- top = new_node.offset().top
1869
- $('html, body').animate
1870
- scrollTop: top
1871
- , 20
1872
- */
1873
- this.editor["continue"] = false;
1874
- return false;
1875
- }
1876
- };
1877
-
1878
- return Paste;
1879
-
1880
- })(Dante.View.Behavior);
1881
-
1882
- }).call(this);
1883
- (function() {
1884
- var utils,
1885
- __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
1886
- __hasProp = {}.hasOwnProperty,
1887
- __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; };
1888
-
1889
- utils = Dante.utils;
1890
-
1891
- Dante.View.Behavior.Image = (function(_super) {
1892
- var BACKSPACE, DOWNARROW, ENTER, LEFTARROW, RIGHTARROW, SPACEBAR, TAB, UPARROW;
1893
-
1894
- __extends(Image, _super);
1895
-
1896
- function Image() {
1897
- this.handleArrowForKeyUp = __bind(this.handleArrowForKeyUp, this);
1898
- this.handleArrowForKeyDown = __bind(this.handleArrowForKeyDown, this);
1899
- return Image.__super__.constructor.apply(this, arguments);
1784
+ __extends(Image, _super);
1785
+
1786
+ function Image() {
1787
+ this.handleArrowForKeyUp = __bind(this.handleArrowForKeyUp, this);
1788
+ this.handleArrowForKeyDown = __bind(this.handleArrowForKeyDown, this);
1789
+ return Image.__super__.constructor.apply(this, arguments);
1900
1790
  }
1901
1791
 
1902
1792
  BACKSPACE = 8;
@@ -1997,11 +1887,11 @@
1997
1887
  if ($(e.target).hasClass("graf--figure")) {
1998
1888
  e.preventDefault();
1999
1889
  if (this.editor.image_delete_callback) {
2000
- this.editor.image_delete_callback($(".is-selected").find("img").data());
1890
+ this.editor.image_delete_callback(this.editor.findSelected().find("img").data());
2001
1891
  }
2002
1892
  utils.log("Replacing selected node");
2003
- this.editor.replaceWith("p", $(".is-selected"));
2004
- this.editor.setRangeAt($(".is-selected")[0]);
1893
+ this.editor.replaceWith("p", this.editor.findSelected());
1894
+ this.editor.setRangeAt(this.editor.findSelected()[0]);
2005
1895
  this.editor.pop_over_align.hide();
2006
1896
  utils.log("Focus on the previous graf");
2007
1897
  this.editor["continue"] = false;
@@ -2036,11 +1926,11 @@
2036
1926
  }
2037
1927
  }
2038
1928
  }
2039
- if (_.isUndefined(parent) || parent.length === 0 && $(".is-selected").hasClass("is-mediaFocused")) {
2040
- node = $(".is-selected").find("figcaption");
1929
+ if (_.isUndefined(parent) || parent.length === 0 && this.editor.findSelected().hasClass("is-mediaFocused")) {
1930
+ node = this.editor.findSelected().find("figcaption");
2041
1931
  node.find(".defaultValue").remove();
2042
1932
  this.editor.setRangeAt(node[0]);
2043
- $(".is-selected").removeClass("is-mediaFocused");
1933
+ this.editor.findSelected().removeClass("is-mediaFocused");
2044
1934
  this.editor.pop_over_align.hide();
2045
1935
  return false;
2046
1936
  }
@@ -2057,8 +1947,8 @@
2057
1947
  case "ArrowDown":
2058
1948
  case "Down":
2059
1949
  if (_.isUndefined(current_node) || !current_node.exists()) {
2060
- if ($(".is-selected").exists()) {
2061
- current_node = $(".is-selected");
1950
+ if (this.editor.findSelected().exists()) {
1951
+ current_node = this.editor.findSelected();
2062
1952
  }
2063
1953
  }
2064
1954
  next_node = current_node.next();
@@ -2156,7 +2046,6 @@
2156
2046
  n = current_node.prev(".graf");
2157
2047
  num = n[0].childNodes.length;
2158
2048
  utils.log("4 up");
2159
- this.editor.skip_keyup = true;
2160
2049
  this.editor.markAsSelected(prev_node);
2161
2050
  return false;
2162
2051
  }
@@ -2268,7 +2157,7 @@
2268
2157
  }
2269
2158
  this.editor.addClassesToElement($list[0]);
2270
2159
  this.editor.replaceWith("li", $paragraph);
2271
- $li = $(".is-selected");
2160
+ $li = this.editor.findSelected();
2272
2161
  this.editor.setElementName($li[0]);
2273
2162
  $li.html(content).wrap($list);
2274
2163
  if ($li.find("br").length === 0) {
@@ -2349,7 +2238,7 @@
2349
2238
  $list.before($li);
2350
2239
  content = $li.html();
2351
2240
  this.editor.replaceWith("p", $li);
2352
- $paragraph = $(".is-selected");
2241
+ $paragraph = this.editor.findSelected();
2353
2242
  $paragraph.removeClass("graf--empty").html(content).attr("name", utils.generateUniqueName());
2354
2243
  if ($list.children().length === 0) {
2355
2244
  $list.remove();
@@ -2362,6 +2251,86 @@
2362
2251
 
2363
2252
  })(Dante.View.Behavior);
2364
2253
 
2254
+ }).call(this);
2255
+ (function() {
2256
+ var utils,
2257
+ __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
2258
+ __hasProp = {}.hasOwnProperty,
2259
+ __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; };
2260
+
2261
+ utils = Dante.utils;
2262
+
2263
+ Dante.View.Behavior.Paste = (function(_super) {
2264
+ __extends(Paste, _super);
2265
+
2266
+ function Paste() {
2267
+ this.handlePaste = __bind(this.handlePaste, this);
2268
+ return Paste.__super__.constructor.apply(this, arguments);
2269
+ }
2270
+
2271
+ Paste.prototype.initialize = function(opts) {
2272
+ if (opts == null) {
2273
+ opts = {};
2274
+ }
2275
+ return this.editor = opts.current_editor;
2276
+ };
2277
+
2278
+ Paste.prototype.handlePaste = function(ev, parent) {
2279
+ var cbd, nodes, paste_el, pastedText;
2280
+ utils.log("pasted!");
2281
+ this.editor.hidePlaceholder($(parent));
2282
+ pastedText = void 0;
2283
+ if (window.clipboardData && window.clipboardData.getData) {
2284
+ pastedText = window.clipboardData.getData('Text');
2285
+ } else if (ev.originalEvent.clipboardData && ev.originalEvent.clipboardData.getData) {
2286
+ cbd = ev.originalEvent.clipboardData;
2287
+ pastedText = _.isEmpty(cbd.getData('text/html')) ? cbd.getData('text/plain') : cbd.getData('text/html');
2288
+ }
2289
+ utils.log("Process and handle text...");
2290
+ utils.log(pastedText);
2291
+ if (pastedText.match(/<\/*[a-z][^>]+?>/gi)) {
2292
+ utils.log("HTML DETECTED ON PASTE");
2293
+ pastedText = pastedText.replace(/<div>([\w\W]*?)<\/div>/gi, '<p>$1</p>');
2294
+ document.body.appendChild($("<div id='" + (this.editor.paste_element_id.replace('#', '')) + "' class='dante-paste'></div>")[0]);
2295
+ paste_el = $(this.editor.paste_element_id);
2296
+ paste_el.html("<span>" + pastedText + "</span>");
2297
+ nodes = $(paste_el.html()).insertBefore($(parent));
2298
+ this.editor.parseInitialMess();
2299
+
2300
+ /*
2301
+ @editor.setupElementsClasses $(@editor.paste_element_id), (e)=>
2302
+ * e is the target object which is cleaned
2303
+ nodes = $(e.html()).insertAfter($(parent))
2304
+ *remove paste div since we wont use it until the next paste
2305
+ e.remove()
2306
+ *set caret on newly created node
2307
+ last_node = nodes.last()[0]
2308
+ num = last_node.childNodes.length
2309
+ @editor.setRangeAt(last_node, num)
2310
+
2311
+ *select new node
2312
+ new_node = $(@editor.getNode())
2313
+ @editor.markAsSelected(new_node)
2314
+ @editor.displayTooltipAt($(@editor.el).find(".is-selected"))
2315
+
2316
+ * wrap new images
2317
+ @editor.handleUnwrappedImages(nodes)
2318
+
2319
+ *scroll to element top
2320
+ top = new_node.offset().top
2321
+ $('html, body').animate
2322
+ scrollTop: top
2323
+ , 20
2324
+ */
2325
+ this.editor["continue"] = false;
2326
+ return false;
2327
+ }
2328
+ };
2329
+
2330
+ return Paste;
2331
+
2332
+ })(Dante.View.Behavior);
2333
+
2365
2334
  }).call(this);
2366
2335
  (function() {
2367
2336
  var utils,
@@ -2438,6 +2407,163 @@
2438
2407
 
2439
2408
  })(Dante.View.Behavior);
2440
2409
 
2410
+ }).call(this);
2411
+ (function() {
2412
+ var utils,
2413
+ __hasProp = {}.hasOwnProperty,
2414
+ __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; };
2415
+
2416
+ utils = Dante.utils;
2417
+
2418
+ Dante.View.Behavior.Suggest = (function(_super) {
2419
+ __extends(Suggest, _super);
2420
+
2421
+ function Suggest() {
2422
+ return Suggest.__super__.constructor.apply(this, arguments);
2423
+ }
2424
+
2425
+ Suggest.prototype.initialize = function(opts) {
2426
+ if (opts == null) {
2427
+ opts = {};
2428
+ }
2429
+ this.actionEvent = opts.title;
2430
+ this.editor = opts.current_editor;
2431
+ this._name = null;
2432
+ return this.fetch_results = [];
2433
+ };
2434
+
2435
+ Suggest.prototype.displayPopOver = function(ev) {
2436
+ return this.editor.pop_over_typeahead.displayAt(this.editor.getSelectionStart());
2437
+ };
2438
+
2439
+ Suggest.prototype.hidePopOver = function(ev) {
2440
+ console.log("display popover from typeahead");
2441
+ return this.editor.pop_over_typeahead.displayAt(ev);
2442
+ };
2443
+
2444
+ Suggest.prototype.desintegratePopOver = function(e) {
2445
+ $(this.editor.getSelectionStart()).remove();
2446
+ return this.pasteHtmlAtCaret(this.editor.getSelectionStart().textContent, false);
2447
+ };
2448
+
2449
+ Suggest.prototype.handleKeyPress = function(e) {
2450
+ if (!this.insideQuery()) {
2451
+ if (e.keyCode === 64) {
2452
+ e.preventDefault();
2453
+ return this.pasteHtmlAtCaret(this.wrapperTemplate("@"), false);
2454
+ }
2455
+ } else {
2456
+ console.log("ok let's search");
2457
+ return this.getResults((function(_this) {
2458
+ return function(e) {
2459
+ return _this.fetchResults(e);
2460
+ };
2461
+ })(this));
2462
+ }
2463
+ };
2464
+
2465
+ Suggest.prototype.handleKeyUp = function(e) {
2466
+ if (this.insideQuery()) {
2467
+ return this.fetchResults(e);
2468
+ }
2469
+ };
2470
+
2471
+ Suggest.prototype.fetchResults = function(e) {
2472
+ if (this.getResults.length < 1) {
2473
+ this.desintegratePopOver(e);
2474
+ }
2475
+ if (this.json_request) {
2476
+ this.json_request.abort();
2477
+ }
2478
+ return this.getResults((function(_this) {
2479
+ return function(e) {
2480
+ _this.displayPopOver(e);
2481
+ return _this.editor.pop_over_typeahead.appendData(_this.fetch_results);
2482
+ };
2483
+ })(this));
2484
+ };
2485
+
2486
+ Suggest.prototype.getResults = function(cb, e) {
2487
+ var q;
2488
+ q = this.editor.getSelectionStart().textContent.replace("@", "");
2489
+ clearTimeout(this.timeout);
2490
+ return this.timeout = setTimeout((function(_this) {
2491
+ return function() {
2492
+ return _this.json_request = $.ajax({
2493
+ url: "" + _this.editor.suggest_url + "?" + _this.editor.suggest_query_param + "=" + q,
2494
+ method: "get",
2495
+ dataType: "json"
2496
+ }).success(function(data) {
2497
+ if (_this.editor.suggest_handler) {
2498
+ _this.fetch_results = _this.editor.suggest_handler(data);
2499
+ } else {
2500
+ _this.fetch_results = data;
2501
+ }
2502
+ if (cb) {
2503
+ return cb(e);
2504
+ }
2505
+ }).error(function(data, err) {
2506
+ return console.log("error fetching results");
2507
+ });
2508
+ };
2509
+ })(this), this.editor.suggest_query_timeout);
2510
+ };
2511
+
2512
+ Suggest.prototype.insideQuery = function() {
2513
+ return $(this.editor.getSelectionStart()).hasClass("markup--query");
2514
+ };
2515
+
2516
+ Suggest.prototype.wrapperTemplate = function(name) {
2517
+ return "<span class='markup--query'>" + name + "</span>";
2518
+ };
2519
+
2520
+ Suggest.prototype.pasteHtmlAtCaret = function(html, selectPastedContent) {
2521
+ var el, firstNode, frag, lastNode, node, originalRange, range, sel;
2522
+ sel = void 0;
2523
+ range = void 0;
2524
+ if (window.getSelection) {
2525
+ sel = window.getSelection();
2526
+ if (sel.getRangeAt && sel.rangeCount) {
2527
+ range = sel.getRangeAt(0);
2528
+ range.deleteContents();
2529
+ el = document.createElement('div');
2530
+ el.innerHTML = html;
2531
+ frag = document.createDocumentFragment();
2532
+ node = void 0;
2533
+ lastNode = void 0;
2534
+ while (node = el.firstChild) {
2535
+ lastNode = frag.appendChild(node);
2536
+ }
2537
+ firstNode = frag.firstChild;
2538
+ range.insertNode(frag);
2539
+ if (lastNode) {
2540
+ range = range.cloneRange();
2541
+ range.setStartAfter(lastNode);
2542
+ if (selectPastedContent) {
2543
+ range.setStartBefore(firstNode);
2544
+ } else {
2545
+ range.collapse(true);
2546
+ }
2547
+ sel.removeAllRanges();
2548
+ sel.addRange(range);
2549
+ }
2550
+ }
2551
+ } else if ((sel = document.selection) && sel.type !== 'Control') {
2552
+ originalRange = sel.createRange();
2553
+ originalRange.collapse(true);
2554
+ sel.createRange().pasteHTML(html);
2555
+ if (selectPastedContent) {
2556
+ range = sel.createRange();
2557
+ range.setEndPoint('StartToStart', originalRange);
2558
+ range.select();
2559
+ }
2560
+ }
2561
+ };
2562
+
2563
+ return Suggest;
2564
+
2565
+ })(Dante.View.Behavior);
2566
+
2441
2567
  }).call(this);
2442
2568
  (function() {
2443
2569
  var __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },
@@ -2505,7 +2631,7 @@
2505
2631
  };
2506
2632
 
2507
2633
  Uploader.prototype.insertTemplate = function() {
2508
- return "<figure contenteditable='false' class='graf graf--figure is-defaultValue' name='" + (utils.generateUniqueName()) + "' tabindex='0'> <div style='' class='aspectRatioPlaceholder is-locked'> <div style='padding-bottom: 100%;' class='aspect-ratio-fill'></div> <img src='' data-height='' data-width='' data-image-id='' class='graf-image' data-delayed-src=''> </div> <figcaption contenteditable='true' data-default-value='Type caption for image (optional)' class='imageCaption'> <span class='defaultValue'>Type caption for image (optional)</span> <br> </figcaption> </figure>";
2634
+ return "<figure contenteditable='false' class='graf graf--figure is-defaultValue' name='" + (utils.generateUniqueName()) + "' tabindex='0'> <div style='' class='aspectRatioPlaceholder is-locked'> <div style='padding-bottom: 100%;' class='aspect-ratio-fill'></div> <img src='' data-height='' data-width='' data-image-id='' class='graf-image' data-delayed-src=''> </div> <figcaption contenteditable='true' data-default-value='Type caption for image (optional)' class='imageCaption'> <span class='defaultValue'>" + this.current_editor.image_caption_placeholder + "</span> <br> </figcaption> </figure>";
2509
2635
  };
2510
2636
 
2511
2637
  Uploader.prototype.uploadExistentImage = function(image_element, opts) {
@@ -2814,7 +2940,7 @@
2814
2940
  };
2815
2941
 
2816
2942
  Embed.prototype.embedTemplate = function() {
2817
- return "<figure contenteditable='false' class='graf--figure graf--iframe graf--first' name='504e' tabindex='0'> <div class='iframeContainer'> <iframe frameborder='0' width='700' height='393' data-media-id='' src='' data-height='480' data-width='854'> </iframe> </div> <figcaption contenteditable='true' data-default-value='Type caption for embed (optional)' class='imageCaption'> <a rel='nofollow' class='markup--anchor markup--figure-anchor' data-href='' href='' target='_blank'> </a> </figcaption> </figure>";
2943
+ return "<figure contenteditable='false' class='graf--figure graf--iframe graf--first' name='504e' tabindex='0'> <div class='iframeContainer'> <iframe frameborder='0' width='700' height='393' data-media-id='' src='' data-height='480' data-width='854'> </iframe> </div> <figcaption contenteditable='true' data-default-value='" + this.current_editor.embed_caption_placeholder + "' class='imageCaption'> <a rel='nofollow' class='markup--anchor markup--figure-anchor' data-href='' href='' target='_blank'> </a> </figcaption> </figure>";
2818
2944
  };
2819
2945
 
2820
2946
  Embed.prototype.displayEmbedPlaceHolder = function() {
@@ -2828,12 +2954,14 @@
2828
2954
  };
2829
2955
 
2830
2956
  Embed.prototype.getEmbedFromNode = function(node) {
2957
+ var url;
2831
2958
  this.node = $(node);
2832
2959
  this.node_name = this.node.attr("name");
2833
2960
  this.node.addClass("spinner");
2834
- return $.getJSON("" + this.current_editor.oembed_url + ($(this.node).text())).success((function(_this) {
2961
+ url = "" + this.current_editor.oembed_url + ($(this.node).text()) + "&scheme=https";
2962
+ return $.getJSON(url).success((function(_this) {
2835
2963
  return function(data) {
2836
- var iframe_src, replaced_node, tmpl, url;
2964
+ var iframe_src, replaced_node, tmpl;
2837
2965
  _this.node = $("[name=" + _this.node_name + "]");
2838
2966
  iframe_src = $(data.html).prop("src");
2839
2967
  tmpl = $(_this.embedTemplate());
@@ -2896,7 +3024,7 @@
2896
3024
  };
2897
3025
 
2898
3026
  EmbedExtract.prototype.extractTemplate = function() {
2899
- return "<div class='graf graf--mixtapeEmbed is-selected' name=''> <a target='_blank' data-media-id='' class='js-mixtapeImage mixtapeImage mixtapeImage--empty u-ignoreBlock' href=''> </a> <a data-tooltip-type='link' data-tooltip-position='bottom' data-tooltip='' title='' class='markup--anchor markup--mixtapeEmbed-anchor' data-href='' href='' target='_blank'> <strong class='markup--strong markup--mixtapeEmbed-strong'></strong> <em class='markup--em markup--mixtapeEmbed-em'></em> </a> </div>";
3027
+ return "<div class='graf graf--mixtapeEmbed is-selected' name=''> <a target='_blank' data-media-id='' class='js-mixtapeImage mixtapeImage mixtapeImage--empty u-ignoreBlock' href=''> </a> <a data-tooltip-type='link' data-tooltip-position='bottom' data-tooltip='' title='' class='markup--anchor markup--mixtapeEmbed-anchor' data-href='' href='' target='_blank'> <strong class='markup--strong markup--mixtapeEmbed-strong'> </strong> <em class='markup--em markup--mixtapeEmbed-em'> </em> </a> </div>";
2900
3028
  };
2901
3029
 
2902
3030
  EmbedExtract.prototype.displayExtractPlaceHolder = function() {
@@ -3077,165 +3205,44 @@
3077
3205
  (function() {
3078
3206
  var utils,
3079
3207
  __hasProp = {}.hasOwnProperty,
3080
- __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; };
3081
-
3082
- utils = Dante.utils;
3083
-
3084
- Dante.Editor.PopOver = (function(_super) {
3085
- __extends(PopOver, _super);
3086
-
3087
- function PopOver() {
3088
- return PopOver.__super__.constructor.apply(this, arguments);
3089
- }
3090
-
3091
- PopOver.prototype.el = "body";
3092
-
3093
- PopOver.prototype.events = {
3094
- "mouseover .popover--tooltip": "cancelHide",
3095
- "mouseout .popover--tooltip": "hide"
3096
- };
3097
-
3098
- PopOver.prototype.initialize = function(opts) {
3099
- if (opts == null) {
3100
- opts = {};
3101
- }
3102
- utils.log("initialized popover");
3103
- this.pop_over_element = ".popover--tooltip";
3104
- this.editor = opts.editor;
3105
- this.hideTimeout;
3106
- return this.settings = {
3107
- timeout: 300
3108
- };
3109
- };
3110
-
3111
- PopOver.prototype.template = function() {
3112
- return "<div class='dante-popover popover--tooltip popover--Linktooltip popover--bottom is-active'> <div class='popover-inner'> <a href='#' target='_blank'> Link </a> </div> <div class='popover-arrow'> </div> </div>";
3113
- };
3114
-
3115
- PopOver.prototype.positionAt = function(ev) {
3116
- var left_value, popover_width, target, target_height, target_offset, target_positions, target_width, top_value, wrapperOffset;
3117
- target = $(ev.currentTarget);
3118
- wrapperOffset = target.closest('article.postArticle').offset();
3119
- target_positions = this.resolveTargetPosition(target);
3120
- target_offset = target.offset();
3121
- target_width = target.outerWidth();
3122
- target_height = target.outerHeight();
3123
- popover_width = this.findElement().outerWidth();
3124
- top_value = target_positions.top + target_height;
3125
- left_value = target_offset.left + (target_width / 2) - (popover_width / 2) - wrapperOffset.left;
3126
- this.findElement().css("top", top_value).css("left", left_value).show();
3127
- return this.handleDirection(target);
3128
- };
3129
-
3130
- PopOver.prototype.displayAt = function(ev) {
3131
- var target;
3132
- this.cancelHide();
3133
- target = $(ev.currentTarget);
3134
- this.findElement().find(".popover-inner a").text(target.attr('href')).attr('href', target.attr("href"));
3135
- this.positionAt(ev);
3136
- this.findElement().css("pointer-events", "auto");
3137
- return $(this.el).show();
3138
- };
3139
-
3140
- PopOver.prototype.cancelHide = function() {
3141
- utils.log("Cancel Hide");
3142
- return clearTimeout(this.hideTimeout);
3143
- };
3144
-
3145
- PopOver.prototype.hide = function(ev) {
3146
- this.cancelHide();
3147
- return this.hideTimeout = setTimeout((function(_this) {
3148
- return function() {
3149
- return _this.findElement().hide();
3150
- };
3151
- })(this), this.settings.timeout);
3152
- };
3153
-
3154
- PopOver.prototype.resolveTargetPosition = function(target) {
3155
- if (target.parents(".graf--mixtapeEmbed").exists()) {
3156
- return target.parents(".graf--mixtapeEmbed").position();
3157
- } else {
3158
- return target.position();
3159
- }
3160
- };
3161
-
3162
- PopOver.prototype.handleDirection = function(target) {
3163
- if (target.parents(".graf--mixtapeEmbed").exists()) {
3164
- return this.findElement().removeClass("popover--bottom").addClass("popover--top");
3165
- } else {
3166
- return this.findElement().removeClass("popover--top").addClass("popover--bottom");
3167
- }
3168
- };
3169
-
3170
- PopOver.prototype.findElement = function() {
3171
- return $(this.el).find(this.pop_over_element);
3172
- };
3173
-
3174
- PopOver.prototype.render = function() {
3175
- return $(this.template()).insertAfter(this.editor.$el);
3176
- };
3177
-
3178
- return PopOver;
3208
+ __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; };
3179
3209
 
3180
- })(Dante.View);
3210
+ utils = Dante.utils;
3181
3211
 
3182
- Dante.Editor.PopOverTypeAhead = (function(_super) {
3183
- __extends(PopOverTypeAhead, _super);
3212
+ Dante.Editor.PopOver = (function(_super) {
3213
+ __extends(PopOver, _super);
3184
3214
 
3185
- function PopOverTypeAhead() {
3186
- return PopOverTypeAhead.__super__.constructor.apply(this, arguments);
3215
+ function PopOver() {
3216
+ return PopOver.__super__.constructor.apply(this, arguments);
3187
3217
  }
3188
3218
 
3189
- PopOverTypeAhead.prototype.el = "body";
3219
+ PopOver.prototype.el = "body";
3190
3220
 
3191
- PopOverTypeAhead.prototype.events = {
3192
- "mouseover .popover--typeahead": "cancelHide",
3193
- "mouseout .popover--typeahead": "hide",
3194
- "click .typeahead-item": "handleOptionSelection"
3221
+ PopOver.prototype.events = {
3222
+ "mouseover .popover--tooltip": "cancelHide",
3223
+ "mouseout .popover--tooltip": "hide"
3195
3224
  };
3196
3225
 
3197
- PopOverTypeAhead.prototype.initialize = function(opts) {
3226
+ PopOver.prototype.initialize = function(opts) {
3198
3227
  if (opts == null) {
3199
3228
  opts = {};
3200
3229
  }
3201
- this.pop_over_element = "popover--typeahead";
3202
3230
  utils.log("initialized popover");
3231
+ this.pop_over_element = ".popover--tooltip";
3203
3232
  this.editor = opts.editor;
3204
3233
  this.hideTimeout;
3205
- this.settings = {
3234
+ return this.settings = {
3206
3235
  timeout: 300
3207
3236
  };
3208
- return this.typeaheadStyles();
3209
- };
3210
-
3211
- PopOverTypeAhead.prototype.template = function() {
3212
- return "<div class='dante-popover popover--typeahead js-popover typeahead typeahead--mention popover--maxWidth360 popover--bottom is-active'> <div class='popover-inner js-popover-inner'> <ul></ul> </div> <div class='popover-arrow' style='left: 297px;'></div> </div>";
3213
- };
3214
-
3215
- PopOverTypeAhead.prototype.popoverItem = function(item) {
3216
- return "<li class='typeahead-item' data-action-value='" + item.text + "' data-action='typeahead-populate' data-id='" + item.id + "' data-type='" + item.type + "' data-href='" + item.href + "'> <div class='dante-avatar'> <img src='" + item.avatar + "' class='avatar-image avatar-image--icon' alt='" + item.text + "'> <span class='avatar-text'>" + item.text + "</span> <em class='avatar-description'>" + item.description + "</em> </div> </li>";
3217
- };
3218
-
3219
- PopOverTypeAhead.prototype.typeaheadStyles = function() {
3220
- return this.classesForCurrent = "typeahead typeahead--mention popover--maxWidth360";
3221
- };
3222
-
3223
- PopOverTypeAhead.prototype.handleOptionSelection = function(ev) {
3224
- var data;
3225
- ev.preventDefault;
3226
- console.log("Select option here!");
3227
- data = $(ev.currentTarget).data();
3228
- $(".markup--query").replaceWith(this.linkTemplate(data));
3229
- return this.hide(0);
3230
3237
  };
3231
3238
 
3232
- PopOverTypeAhead.prototype.linkTemplate = function(data) {
3233
- return "<a href='#' data-type='" + data.type + "' data-href='" + data.href + "' data-id='" + data.id + "' class='markup--user markup--p-user'> " + data.actionValue + " </a>";
3239
+ PopOver.prototype.template = function() {
3240
+ return "<div class='dante-popover popover--tooltip popover--Linktooltip popover--bottom is-active'> <div class='popover-inner'> <a href='#' target='_blank'> Link </a> </div> <div class='popover-arrow'> </div> </div>";
3234
3241
  };
3235
3242
 
3236
- PopOverTypeAhead.prototype.positionAt = function(target) {
3237
- var left_value, popover_width, target_height, target_offset, target_positions, target_width, top_value, wrapperOffset;
3238
- target = $(target);
3243
+ PopOver.prototype.positionAt = function(ev) {
3244
+ var left_value, popover_width, target, target_height, target_offset, target_positions, target_width, top_value, wrapperOffset;
3245
+ target = $(ev.currentTarget);
3239
3246
  wrapperOffset = target.closest('article.postArticle').offset();
3240
3247
  target_positions = this.resolveTargetPosition(target);
3241
3248
  target_offset = target.offset();
@@ -3248,42 +3255,31 @@
3248
3255
  return this.handleDirection(target);
3249
3256
  };
3250
3257
 
3251
- PopOverTypeAhead.prototype.displayAt = function(ev) {
3258
+ PopOver.prototype.displayAt = function(ev) {
3259
+ var target;
3252
3260
  this.cancelHide();
3253
- return this.positionAt(ev);
3261
+ target = $(ev.currentTarget);
3262
+ this.findElement().find(".popover-inner a").text(target.attr('href')).attr('href', target.attr("href"));
3263
+ this.positionAt(ev);
3264
+ this.findElement().css("pointer-events", "auto");
3265
+ return $(this.el).show();
3254
3266
  };
3255
3267
 
3256
- PopOverTypeAhead.prototype.cancelHide = function() {
3268
+ PopOver.prototype.cancelHide = function() {
3257
3269
  utils.log("Cancel Hide");
3258
3270
  return clearTimeout(this.hideTimeout);
3259
3271
  };
3260
3272
 
3261
- PopOverTypeAhead.prototype.findElement = function() {
3262
- return $(this.el).find("." + this.pop_over_element);
3263
- };
3264
-
3265
- PopOverTypeAhead.prototype.hide = function(ev, timeout) {
3266
- if (timeout == null) {
3267
- timeout = this.settings.timeout;
3268
- }
3273
+ PopOver.prototype.hide = function(ev) {
3269
3274
  this.cancelHide();
3270
3275
  return this.hideTimeout = setTimeout((function(_this) {
3271
3276
  return function() {
3272
3277
  return _this.findElement().hide();
3273
3278
  };
3274
- })(this), timeout);
3275
- };
3276
-
3277
- PopOverTypeAhead.prototype.appendData = function(data) {
3278
- this.findElement().find(".popover-inner ul").html("");
3279
- return _.each(data, (function(_this) {
3280
- return function(item) {
3281
- return _this.findElement().find(".popover-inner ul").append(_this.popoverItem(item));
3282
- };
3283
- })(this));
3279
+ })(this), this.settings.timeout);
3284
3280
  };
3285
3281
 
3286
- PopOverTypeAhead.prototype.resolveTargetPosition = function(target) {
3282
+ PopOver.prototype.resolveTargetPosition = function(target) {
3287
3283
  if (target.parents(".graf--mixtapeEmbed").exists()) {
3288
3284
  return target.parents(".graf--mixtapeEmbed").position();
3289
3285
  } else {
@@ -3291,7 +3287,7 @@
3291
3287
  }
3292
3288
  };
3293
3289
 
3294
- PopOverTypeAhead.prototype.handleDirection = function(target) {
3290
+ PopOver.prototype.handleDirection = function(target) {
3295
3291
  if (target.parents(".graf--mixtapeEmbed").exists()) {
3296
3292
  return this.findElement().removeClass("popover--bottom").addClass("popover--top");
3297
3293
  } else {
@@ -3299,13 +3295,25 @@
3299
3295
  }
3300
3296
  };
3301
3297
 
3302
- PopOverTypeAhead.prototype.render = function() {
3298
+ PopOver.prototype.findElement = function() {
3299
+ return $(this.el).find(this.pop_over_element);
3300
+ };
3301
+
3302
+ PopOver.prototype.render = function() {
3303
3303
  return $(this.template()).insertAfter(this.editor.$el);
3304
3304
  };
3305
3305
 
3306
- return PopOverTypeAhead;
3306
+ return PopOver;
3307
3307
 
3308
- })(Dante.Editor.PopOver);
3308
+ })(Dante.View);
3309
+
3310
+ }).call(this);
3311
+ (function() {
3312
+ var utils,
3313
+ __hasProp = {}.hasOwnProperty,
3314
+ __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; };
3315
+
3316
+ utils = Dante.utils;
3309
3317
 
3310
3318
  Dante.Editor.PopOverCard = (function(_super) {
3311
3319
  __extends(PopOverCard, _super);
@@ -3395,6 +3403,14 @@
3395
3403
 
3396
3404
  })(Dante.Editor.PopOver);
3397
3405
 
3406
+ }).call(this);
3407
+ (function() {
3408
+ var utils,
3409
+ __hasProp = {}.hasOwnProperty,
3410
+ __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; };
3411
+
3412
+ utils = Dante.utils;
3413
+
3398
3414
  Dante.Editor.ImageTooltip = (function(_super) {
3399
3415
  __extends(ImageTooltip, _super);
3400
3416
 
@@ -3502,6 +3518,142 @@
3502
3518
 
3503
3519
  })(Dante.Editor.PopOver);
3504
3520
 
3521
+ }).call(this);
3522
+ (function() {
3523
+ var utils,
3524
+ __hasProp = {}.hasOwnProperty,
3525
+ __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; };
3526
+
3527
+ utils = Dante.utils;
3528
+
3529
+ Dante.Editor.PopOverTypeAhead = (function(_super) {
3530
+ __extends(PopOverTypeAhead, _super);
3531
+
3532
+ function PopOverTypeAhead() {
3533
+ return PopOverTypeAhead.__super__.constructor.apply(this, arguments);
3534
+ }
3535
+
3536
+ PopOverTypeAhead.prototype.el = "body";
3537
+
3538
+ PopOverTypeAhead.prototype.events = {
3539
+ "mouseover .popover--typeahead": "cancelHide",
3540
+ "mouseout .popover--typeahead": "hide",
3541
+ "click .typeahead-item": "handleOptionSelection"
3542
+ };
3543
+
3544
+ PopOverTypeAhead.prototype.initialize = function(opts) {
3545
+ if (opts == null) {
3546
+ opts = {};
3547
+ }
3548
+ this.pop_over_element = "popover--typeahead";
3549
+ utils.log("initialized popover");
3550
+ this.editor = opts.editor;
3551
+ this.hideTimeout;
3552
+ this.settings = {
3553
+ timeout: 300
3554
+ };
3555
+ return this.typeaheadStyles();
3556
+ };
3557
+
3558
+ PopOverTypeAhead.prototype.template = function() {
3559
+ return "<div class='dante-popover popover--typeahead js-popover typeahead typeahead--mention popover--maxWidth360 popover--bottom is-active'> <div class='popover-inner js-popover-inner'> <ul></ul> </div> <div class='popover-arrow' style='left: 297px;'></div> </div>";
3560
+ };
3561
+
3562
+ PopOverTypeAhead.prototype.popoverItem = function(item) {
3563
+ return "<li class='typeahead-item' data-action-value='" + item.text + "' data-action='typeahead-populate' data-id='" + item.id + "' data-type='" + item.type + "' data-href='" + item.href + "'> <div class='dante-avatar'> <img src='" + item.avatar + "' class='avatar-image avatar-image--icon' alt='" + item.text + "'> <span class='avatar-text'>" + item.text + "</span> <em class='avatar-description'>" + item.description + "</em> </div> </li>";
3564
+ };
3565
+
3566
+ PopOverTypeAhead.prototype.typeaheadStyles = function() {
3567
+ return this.classesForCurrent = "typeahead typeahead--mention popover--maxWidth360";
3568
+ };
3569
+
3570
+ PopOverTypeAhead.prototype.handleOptionSelection = function(ev) {
3571
+ var data;
3572
+ ev.preventDefault;
3573
+ console.log("Select option here!");
3574
+ data = $(ev.currentTarget).data();
3575
+ $(".markup--query").replaceWith(this.linkTemplate(data));
3576
+ return this.hide(0);
3577
+ };
3578
+
3579
+ PopOverTypeAhead.prototype.linkTemplate = function(data) {
3580
+ return "<a href='#' data-type='" + data.type + "' data-href='" + data.href + "' data-id='" + data.id + "' class='markup--user markup--p-user'> " + data.actionValue + " </a>";
3581
+ };
3582
+
3583
+ PopOverTypeAhead.prototype.positionAt = function(target) {
3584
+ var left_value, popover_width, target_height, target_offset, target_positions, target_width, top_value, wrapperOffset;
3585
+ target = $(target);
3586
+ wrapperOffset = target.closest('article.postArticle').offset();
3587
+ target_positions = this.resolveTargetPosition(target);
3588
+ target_offset = target.offset();
3589
+ target_width = target.outerWidth();
3590
+ target_height = target.outerHeight();
3591
+ popover_width = this.findElement().outerWidth();
3592
+ top_value = target_positions.top + target_height;
3593
+ left_value = target_offset.left + (target_width / 2) - (popover_width / 2) - wrapperOffset.left;
3594
+ this.findElement().css("top", top_value).css("left", left_value).show();
3595
+ return this.handleDirection(target);
3596
+ };
3597
+
3598
+ PopOverTypeAhead.prototype.displayAt = function(ev) {
3599
+ this.cancelHide();
3600
+ return this.positionAt(ev);
3601
+ };
3602
+
3603
+ PopOverTypeAhead.prototype.cancelHide = function() {
3604
+ utils.log("Cancel Hide");
3605
+ return clearTimeout(this.hideTimeout);
3606
+ };
3607
+
3608
+ PopOverTypeAhead.prototype.findElement = function() {
3609
+ return $(this.el).find("." + this.pop_over_element);
3610
+ };
3611
+
3612
+ PopOverTypeAhead.prototype.hide = function(ev, timeout) {
3613
+ if (timeout == null) {
3614
+ timeout = this.settings.timeout;
3615
+ }
3616
+ this.cancelHide();
3617
+ return this.hideTimeout = setTimeout((function(_this) {
3618
+ return function() {
3619
+ return _this.findElement().hide();
3620
+ };
3621
+ })(this), timeout);
3622
+ };
3623
+
3624
+ PopOverTypeAhead.prototype.appendData = function(data) {
3625
+ this.findElement().find(".popover-inner ul").html("");
3626
+ return _.each(data, (function(_this) {
3627
+ return function(item) {
3628
+ return _this.findElement().find(".popover-inner ul").append(_this.popoverItem(item));
3629
+ };
3630
+ })(this));
3631
+ };
3632
+
3633
+ PopOverTypeAhead.prototype.resolveTargetPosition = function(target) {
3634
+ if (target.parents(".graf--mixtapeEmbed").exists()) {
3635
+ return target.parents(".graf--mixtapeEmbed").position();
3636
+ } else {
3637
+ return target.position();
3638
+ }
3639
+ };
3640
+
3641
+ PopOverTypeAhead.prototype.handleDirection = function(target) {
3642
+ if (target.parents(".graf--mixtapeEmbed").exists()) {
3643
+ return this.findElement().removeClass("popover--bottom").addClass("popover--top");
3644
+ } else {
3645
+ return this.findElement().removeClass("popover--top").addClass("popover--bottom");
3646
+ }
3647
+ };
3648
+
3649
+ PopOverTypeAhead.prototype.render = function() {
3650
+ return $(this.template()).insertAfter(this.editor.$el);
3651
+ };
3652
+
3653
+ return PopOverTypeAhead;
3654
+
3655
+ })(Dante.Editor.PopOver);
3656
+
3505
3657
  }).call(this);
3506
3658
  (function() {
3507
3659
  var utils,
@@ -3817,4 +3969,5 @@
3817
3969
 
3818
3970
 
3819
3971
 
3972
+
3820
3973
  ;