/
MarkdownField.php
100 lines (76 loc) · 3.43 KB
/
MarkdownField.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
<?php
class MarkdownField extends TextareaField {
protected $template = 'MarkdownField';
static $editortheme = 'twilight';
function Field($properties = array()) {
Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
Requirements::javascript('markdown/javascript/markdownField.js');
Requirements::css('markdown/css/md.css');
if($this->disabled) $attributes['disabled'] = 'disabled';
$properties["class"] = "markdown_Input";
$properties["LinkSuggest"] = $this->Link() . '/linksuggest';
$properties["ImageSuggest"] = $this->Link() . '/imagesuggest';
$properties["FindLink"] = $this->Link() . '/getlinktoid';
$properties["Editor"] = $this->Link() . '/getEditor';
$obj = ($properties) ? $this->customise($properties) : $this;
return $obj->renderWith($this->getTemplate());
}
function linksuggest() {
$search = $this->request["search"];
$data = DataList::create('SiteTree')->filter(array("Title:StartsWith" => $search));
$result = array();
foreach($data as $item) {
$result[] = array("Label" => $item->Title, "Breadcrumbs" => $item->Breadcrumbs(20, true, false, false), "ID" => $item->ID);
}
return json_encode($result);
}
function getlinktoid() {
$id = $this->request["ID"];
$data = DataList::create('SiteTree')->byID($id);
return $data->Link();
}
function imagesuggest() {
$search = $this->request["search"];
$data = DataList::create('Image')->filter(array("Title:PartialMatch" => $search));
$result = array();
foreach($data as $item) {
$result[] = array("ImageLink" => $item->CMSThumbnail()->Link(), "Label" => $item->Title, "ID" => $item->ID);
}
return json_encode($result);
}
function getimagelinktoid() {
$id = $this->request["ID"];
$data = DataList::create('File')->byID($id);
return $data->Link();
}
function getconvertedhtml() {
require_once('lib/markdown/markdown.php');
require_once('lib/markdown/markdown_extended.php');
$text = $this->request["text"];
return MarkdownExtended($text);
}
public function getEditor() {
Requirements::clear();
Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js');
Requirements::javascript(THIRDPARTY_DIR . '/jquery-ui/jquery-ui.js');
Requirements::javascript(THIRDPARTY_DIR. '/jquery-entwine/dist/jquery.entwine-dist.js');
Requirements::javascript('sapphire/admin/javascript/ssui.core.js');
Requirements::javascript('sapphire/javascript/HtmlEditorField.js');
Requirements::javascript('markdown/javascript/lib/jquery.ui.autocomplete.html.js');
Requirements::javascript('markdown/javascript/lib/showdown.js');
Requirements::javascript('markdown/javascript/lib/ace/src/ace.js');
Requirements::javascript('markdown/javascript/lib/ace/src/mode-markdown.js');
Requirements::javascript('markdown/javascript/lib/ace/src/theme-' . self::$editortheme . '.js');
Requirements::javascript('markdown/javascript/lib/highlight/src/highlight.pack.js');
Requirements::css('markdown/javascript/lib/highlight/src/styles/github.css');
Requirements::javascript('markdown/javascript/markdownEditor.js');
Requirements::themedCSS('typography');
Requirements::css('markdown/css/md.css');
//Requirements::css(THIRDPARTY_DIR . '/jquery-ui-themes/smoothness/jquery-ui.css');
$properties["LinkSuggest"] = 'linksuggest';
$properties["ImageSuggest"] = 'imagesuggest';
$properties["FindLink"] = 'getlinktoid';
$properties["FindImageLink"] = 'getimagelinktoid';
return $this->customise($properties)->renderWith('MarkdownEditor');
}
}