Skip to content

Commit 3164ed3

Browse files
committed
update to compatible with codemirror
1 parent 59ac67d commit 3164ed3

37 files changed

+1773
-73
lines changed

MANIFEST.in

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
include LICENSE
2+
include README.md
3+
include requirements.txt
4+
recursive-include draceditor/templates *
5+
recursive-include draceditor/static *

README.rst

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# draceditor
2+
3+
.. image:: https://img.shields.io/pypi/v/draceditor.svg?style=flat-square
4+
:target: https://pypi.python.org/pypi/draceditor
5+
6+
.. image:: https://img.shields.io/badge/license-GNUGPLv3-blue.svg?style=flat-square
7+
:target: https://raw.githubusercontent.com/agusmakmun/draceditor/master/LICENSE
8+
9+
.. image:: https://img.shields.io/pypi/pyversions/draceditor.svg?style=flat-square
10+
:target: https://pypi.python.org/pypi/draceditor
11+
12+
.. image:: https://img.shields.io/badge/Django-1.8,%201.9,%201.10-green.svg?style=flat-square
13+
:target: https://www.djangoproject.com
14+
15+
.. image:: https://img.shields.io/pypi/dm/draceditor.svg?style=flat-square
16+
:target: https://pypi.python.org/pypi/draceditor

draceditor/__init__.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
# -*- coding: utf-8 -*-
2+
3+
__VERSION__ = '1.0.0'
4+
__AUTHOR__ = 'Agus Makmun (Summon Agus)'
5+
__AUTHOR_EMAIL__ = '[email protected]'

draceditor/admin.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
from django.contrib import admin
22
from django.db import models
33

4-
from .widgets import AdminMarkdownxWidget
5-
from .models import MarkdownxField
4+
from .widgets import AdminDraceditorWidget
5+
from .models import DraceditorField
66

77

8-
class MarkdownxModelAdmin(admin.ModelAdmin):
8+
class DraceditorModelAdmin(admin.ModelAdmin):
99

1010
formfield_overrides = {
11-
MarkdownxField: {'widget': AdminMarkdownxWidget}
11+
DraceditorField: {'widget': AdminDraceditorWidget}
1212
}

draceditor/api.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import json
22
import base64
33
import requests
4-
from .settings import (IMGUR_CLIENT_ID, IMGUR_API_KEY)
4+
from .settings import (DRACEDITOR_IMGUR_CLIENT_ID, DRACEDITOR_IMGUR_API_KEY)
55

66
requests.packages.urllib3.disable_warnings()
77

@@ -16,12 +16,12 @@ def imgur_uploader(image):
1616
error : {'status': <error_code>, 'erorr': <erorr_message>}
1717
"""
1818
url_api = 'https://api.imgur.com/3/upload.json'
19-
headers = {'Authorization': 'Client-ID ' + IMGUR_CLIENT_ID}
19+
headers = {'Authorization': 'Client-ID ' + DRACEDITOR_IMGUR_CLIENT_ID}
2020
response = requests.post(
2121
url_api,
2222
headers=headers,
2323
data={
24-
'key': IMGUR_API_KEY,
24+
'key': DRACEDITOR_IMGUR_API_KEY,
2525
'image': base64.b64encode(image.read()),
2626
'type': 'base64',
2727
'name': image.name

draceditor/fields.py

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
from django import forms
2+
3+
from .widgets import (
4+
DraceditorWidget,
5+
AdminDraceditorWidget,
6+
)
7+
8+
9+
class DraceditorFormField(forms.CharField):
10+
11+
def __init__(self, *args, **kwargs):
12+
kwargs['label'] = '' # To set without label.
13+
super(DraceditorFormField, self).__init__(*args, **kwargs)
14+
15+
if not issubclass(self.widget.__class__, DraceditorWidget):
16+
self.widget = DraceditorWidget()

draceditor/models.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
from django.db import models
22

3-
from .fields import MarkdownxFormField
3+
from .fields import DraceditorFormField
44

55

6-
class MarkdownxField(models.TextField):
6+
class DraceditorField(models.TextField):
77

88
def formfield(self, **kwargs):
9-
defaults = {'form_class': MarkdownxFormField}
9+
defaults = {'form_class': DraceditorFormField}
1010
defaults.update(kwargs)
11-
return super(MarkdownxField, self).formfield(**defaults)
11+
return super(DraceditorField, self).formfield(**defaults)

draceditor/settings.py

Lines changed: 33 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
11
from django.conf import settings
22

3+
# Imgur API Keys
4+
DRACEDITOR_IMGUR_CLIENT_ID = getattr(
5+
settings, 'DRACEDITOR_IMGUR_CLIENT_ID', ''
6+
)
7+
DRACEDITOR_IMGUR_API_KEY = getattr(
8+
settings, 'DRACEDITOR_IMGUR_API_KEY', ''
9+
)
10+
311
# Safe Mode
4-
DRACEDITOR_MARKDOWN_SAFE_MODE getattr(
12+
DRACEDITOR_MARKDOWN_SAFE_MODE = getattr(
513
settings, 'DRACEDITOR_MARKDOWN_SAFE_MODE', True
614
)
715

@@ -11,7 +19,19 @@
1119
)
1220

1321
# Markdown extensions
14-
DRACEDITOR_MARKDOWN_EXTENSIONS = getattr(settings, 'DRACEDITOR_MARKDOWN_EXTENSIONS', [])
22+
DRACEDITOR_MARKDOWN_EXTENSIONS = getattr(
23+
settings, 'DRACEDITOR_MARKDOWN_EXTENSIONS', [
24+
'markdown.extensions.extra',
25+
'markdown.extensions.nl2br',
26+
'markdown.extensions.smarty',
27+
'markdown.extensions.fenced_code',
28+
29+
# Custom markdown extensions.
30+
'draceditor.utils.extensions.urlize',
31+
'draceditor.utils.extensions.mention',
32+
'draceditor.utils.extensions.emoji',
33+
]
34+
)
1535
DRACEDITOR_MARKDOWN_EXTENSION_CONFIGS = getattr(
1636
settings, 'DRACEDITOR_MARKDOWN_EXTENSION_CONFIGS', {}
1737
)
@@ -34,13 +54,15 @@
3454

3555
# https://getuikit.com/docs/htmleditor.html#javascript-options
3656
DRACEDITOR_EDITOR_OPTIONS = getattr(
37-
settings, 'DRACEDITOR_EDITOR_OPTIONS',
38-
{
39-
'markdown': 'true',
40-
'toolbar': [
41-
'bold', 'italic', 'strike',
42-
'link', 'picture', 'blockquote',
43-
'listUl', 'listOl', 'upload'
44-
]
45-
}
57+
settings, 'DRACEDITOR_EDITOR_OPTIONS', "{markdown:true}"
4658
)
59+
"""
60+
{
61+
'markdown': 'true',
62+
'toolbar': [
63+
'bold', 'italic', 'strike',
64+
'link', 'picture', 'blockquote',
65+
'listUl', 'listOl', 'upload'
66+
]
67+
}
68+
"""
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
form .uk-htmleditor-navbar-nav,
2+
form .aligned ul.uk-htmleditor-navbar-nav {
3+
margin: 0;
4+
padding: 0;
5+
list-style: none;
6+
float: left;
7+
}

draceditor/static/draceditor/js/draceditor.js renamed to draceditor/static/js/draceditor.js

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,13 @@
2525
// Markdown Image Uploader auto insert to textarea.
2626
// with special insert, eg: ![avatar.png](i.imgur.com/DytfpTz.png)
2727
var uploadFile = function(selector) {
28-
$selector.on('change', function(evt) {
28+
selector.on('change', function(evt) {
2929
evt.preventDefault();
3030
var formData = new FormData($('form').get(0));
3131
formData.append("csrfmiddlewaretoken", getCookie('csrftoken'));
3232

3333
$.ajax({
34-
url: dracEditor.data('upload-urls-path'),
34+
url: draceditor.data('upload-urls-path'),
3535
type: 'POST',
3636
data: formData,
3737
async: true,
@@ -62,37 +62,38 @@
6262
}
6363
});
6464
return false;
65-
}
65+
});
6666
}
6767

6868
// Markdown Emoji
6969
// require `atwho/atwho.min.js` and list `emojis` from `atwho/emojis.min.js`
7070
var onEmoji = function() {
7171
$emojis = emojis; // from `atwho/emojis.min.js`
72+
var emojiurl = draceditor.data('base-emoji-url');
7273
var emoji_config = {
7374
at: ":",
7475
data: $.map($emojis, function(value, i) {return {key: value.replace(/:/g , ''), name:value}}),
75-
displayTpl: "<li>${name} <img src='"+dracEditor.data('base-emoji-url')+"'${key}.png' height='20' width='20' /></li>",
76+
displayTpl: "<li>${name} <img src='"+emojiurl+"${key}.png' height='20' width='20' /></li>",
7677
insertTpl: ':${key}:',
7778
delay: 400
7879
}
7980
// Triger process if inserted: https://github.com/ichord/At.js/wiki/Events#insertedatwho
80-
dracEditor.atwho(emoji_config).on('inserted.atwho', function(event, flag, query) {
81+
draceditor.atwho(emoji_config).on('inserted.atwho', function(event, flag, query) {
8182
//$('.markdownx').markdownx();
8283
});
8384
}
8485

8586
// Markdown Mention
8687
var onMention = function() {
87-
dracEditor.atwho({
88+
draceditor.atwho({
8889
at: "@[",
8990
displayTpl: "<li>${name}</li>",
9091
insertTpl: "@[${key}]",
9192
limit: 20,
9293
callbacks: {
9394
remoteFilter: function(query, callback) {
9495
$.ajax({
95-
url: dracEditor.data('search-users-urls-path'),
96+
url: draceditor.data('search-users-urls-path'),
9697
data: {
9798
'username': query,
9899
'csrfmiddlewaretoken': getCookie('csrftoken')
@@ -111,18 +112,31 @@
111112
}//end remoteFilter
112113
}
113114
});
115+
};
116+
117+
var onKeyUpEvent = function(e) {
118+
console.log(e);
119+
onMention();
120+
onEmoji();
114121
}
115122

116123
var draceditor = $(this);
117124
var dracEditor = $(this).find('.draceditor');
118-
draceditor.trigger('draceditor.init');
125+
dracEditor.on('keydown.draceditor', onKeyUpEvent);
126+
127+
dracEditor.trigger('draceditor.init');
128+
129+
var selector_upload = $('.upload-image-file');
130+
selector_upload.click(function(){
131+
uploadFile(selector_upload);
132+
});
119133

120-
uploadFile($('.upload-image-file');
121134
onMention();
122135
onEmoji();
123136
};
124137

125138
$(function() {
126-
$('.draceditor').draceditor();
139+
$.fn.atwho.debug = true;
140+
$('.draceditor').draceditor();
127141
});
128142
})(jQuery);

0 commit comments

Comments
 (0)