Skip to content

Commit 87cba2a

Browse files
committed
UPDATE additional SS4 compatability
1 parent c2ac75c commit 87cba2a

8 files changed

Lines changed: 87 additions & 50 deletions

File tree

_config.php

Lines changed: 0 additions & 2 deletions
This file was deleted.

_config/injector.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,4 +3,4 @@ Name: markdowninjector
33
---
44
SilverStripe\Core\Injector\Injector:
55
Markdown:
6-
class: UndefinedOffset\Markdown\Model\FieldTypes\Markdown
6+
class: UndefinedOffset\Markdown\Model\FieldTypes\DBMarkdown

composer.json

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "undefinedoffset/silverstripe-markdown",
33
"description": "Adds a field and a data type that allows for Markdown editing, uses the github api to render the html",
4-
"type": "silverstripe-module",
4+
"type": "silverstripe-vendormodule",
55
"keywords": ["silverstripe", "markdown"],
66
"license": "BSD-3-Clause",
77
"authors": [
@@ -13,17 +13,22 @@
1313
],
1414

1515
"require": {
16-
"silverstripe/framework": "^4.0@dev",
17-
"composer/installers": "*"
16+
"silverstripe/framework": "^4.0",
17+
"michelf/php-markdown": "^1.8",
18+
"ext-json": "*",
19+
"ext-curl": "*"
1820
},
1921
"support": {
2022
"issues": "https://github.com/undefinedoffset/silverstripe-markdown/issues"
2123
},
2224
"extra": {
23-
"installer-name": "markdown",
2425
"branch-alias": {
2526
"dev-ss4-compat": "2.x-dev"
26-
}
27+
},
28+
"expose": [
29+
"css",
30+
"javascript"
31+
]
2732
},
2833
"autoload": {
2934
"psr-4": {

src/Forms/MarkdownEditor.php

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,10 @@
55
use SilverStripe\Forms\TextareaField;
66
use SilverStripe\View\Requirements;
77

8+
/**
9+
* Class MarkdownEditor
10+
* @package UndefinedOffset\Markdown\Forms
11+
*/
812
class MarkdownEditor extends TextareaField
913
{
1014
/**
@@ -19,31 +23,31 @@ class MarkdownEditor extends TextareaField
1923

2024
/**
2125
* Sets the "Wrap Mode" on the ACE editor markdown field.
22-
* @param boolean $mode True if word wrap should be enabled, false if not
26+
* @param boolean $mode True if word wrap should be enabled, false if not
2327
* @return $this
2428
*/
2529
public function setWrapMode($mode = false)
2630
{
2731
$this->wrap_mode = $mode;
32+
2833
return $this;
2934
}
3035

3136
/**
3237
* Returns the field holder used by templates
3338
* @return string HTML to be used
3439
*/
35-
public function FieldHolder($properties = array())
40+
public function FieldHolder($properties = [])
3641
{
3742
$this->extraClasses['stacked'] = 'stacked';
3843

44+
Requirements::css('undefinedoffset/silverstripe-markdown: css/MarkdownEditor.css');
3945

40-
Requirements::css(MARKDOWN_MODULE_BASE . '/css/MarkdownEditor.css');
41-
42-
Requirements::javascript(MARKDOWN_MODULE_BASE . '/javascript/external/ace/ace.js');
43-
Requirements::javascript(MARKDOWN_MODULE_BASE . '/javascript/external/ace/mode-markdown.js');
44-
Requirements::javascript(MARKDOWN_MODULE_BASE . '/javascript/external/ace/theme-textmate.js');
45-
Requirements::javascript(MARKDOWN_MODULE_BASE . '/javascript/external/ace/theme-twilight.js');
46-
Requirements::javascript(MARKDOWN_MODULE_BASE . '/javascript/MarkdownEditor.js');
46+
Requirements::javascript('undefinedoffset/silverstripe-markdown: javascript/external/ace/ace.js');
47+
Requirements::javascript('undefinedoffset/silverstripe-markdown: javascript/external/ace/mode-markdown.js');
48+
Requirements::javascript('undefinedoffset/silverstripe-markdown: javascript/external/ace/theme-textmate.js');
49+
Requirements::javascript('undefinedoffset/silverstripe-markdown: javascript/external/ace/theme-twilight.js');
50+
Requirements::javascript('undefinedoffset/silverstripe-markdown: javascript/MarkdownEditor.js');
4751

4852
return parent::FieldHolder($properties);
4953
}
@@ -56,11 +60,11 @@ public function getAttributes()
5660
{
5761
return array_merge(
5862
parent::getAttributes(),
59-
array(
63+
[
6064
// prevents horizontal scrollbars
6165
'style' => 'width: 97%; max-width: 100%; height: ' . ($this->rows * 16) . 'px; resize: none;',
62-
'wrap-mode' => ($this->wrap_mode) ? 'true' : 'false'
63-
)
66+
'wrap-mode' => ($this->wrap_mode) ? 'true' : 'false',
67+
]
6468
);
6569
}
6670
}
Lines changed: 26 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,33 +2,39 @@
22

33
namespace UndefinedOffset\Markdown\Model\FieldTypes;
44

5-
use SilverStripe\Core\Cache;
5+
use Psr\SimpleCache\CacheInterface;
66
use SilverStripe\Core\ClassInfo;
7+
use SilverStripe\Core\Injector\Injector;
78
use SilverStripe\ORM\FieldType\DBText;
89
use UndefinedOffset\Markdown\Renderer\GithubMarkdownRenderer;
10+
use UndefinedOffset\Markdown\Renderer\IMarkdownRenderer;
911

10-
class Markdown extends DBText
12+
/**
13+
* Class Markdown
14+
* @package UndefinedOffset\Markdown\Model\FieldTypes
15+
*/
16+
class DBMarkdown extends DBText
1117
{
1218
/**
1319
* {@inheritDoc}
1420
*/
15-
public static $casting = array(
21+
private static $casting = [
1622
'AsHTML' => 'HTMLText',
17-
'Markdown' => 'DBText'
18-
);
23+
'Markdown' => 'DBText',
24+
];
1925

2026
/**
2127
* @var string
2228
*/
23-
public static $escape_type = 'xml';
29+
private static $escape_type = 'xml';
2430

2531
/**
2632
* @var string
2733
*/
28-
private static $renderer = 'UndefinedOffset\\Markdown\\Renderer\\GithubMarkdownRenderer';
34+
private static $renderer = GithubMarkdownRenderer::class;
2935

3036
/**
31-
* @var \UndefinedOffset\Markdown\Renderer\IMarkdownRenderer
37+
* @var IMarkdownRenderer
3238
*/
3339
private $renderInst;
3440

@@ -41,7 +47,7 @@ class Markdown extends DBText
4147
/**
4248
* Checks cache to see if the contents of this field have already been loaded from github, if they haven't
4349
* then a request is made to the github api to render the markdown
44-
* @param bool $useGFM Use Github Flavored Markdown or render using plain markdown defaults to false just like
50+
* @param bool $useGFM Use Github Flavored Markdown or render using plain markdown defaults to false just like
4551
* how readme files are rendered on github
4652
* @return string Markdown rendered as HTML
4753
*/
@@ -66,13 +72,14 @@ public function AsHTML($useGFM = false)
6672
}
6773

6874
//Init cache stuff
69-
$cacheKey = $this->getCacheKey();
70-
$cache = Cache::factory('Markdown');
71-
$cachedHTML = $cache->load($cacheKey);
75+
/*$cacheKey = $this->getCacheKey();
76+
$cache = Injector::inst()->get(CacheInterface::class . '.markdown');
77+
$cachedHTML = $cache->load($cacheKey);//*/
7278

7379
//Check cache, if it's good use it instead
74-
if ($cachedHTML !== false) {
80+
if (isset($cachedHTML) && $cachedHTML !== false) {
7581
$this->parsedHTML = $cachedHTML;
82+
7683
return $this->parsedHTML;
7784
}
7885

@@ -88,10 +95,12 @@ public function AsHTML($useGFM = false)
8895
$this->parsedHTML = $response;
8996

9097
//Cache response to file system
91-
$cache->save($this->parsedHTML, $cacheKey);
98+
if (isset($cache) && isset($cacheKey)) {
99+
$cache->save($this->parsedHTML, $cacheKey);
100+
}
92101

93102
//Reset GFM
94-
if ($renderer instanceof GithubMarkdownRenderer) {
103+
if ($renderer instanceof GithubMarkdownRenderer && isset($beforeUseGFM)) {
95104
GithubMarkdownRenderer::setUseGFM($beforeUseGFM);
96105
}
97106

@@ -116,15 +125,15 @@ public function forTemplate()
116125
*/
117126
public static function setRenderer($renderer)
118127
{
119-
if (ClassInfo::classImplements($renderer, 'SilverStripe\\Markdown\\Renderer\\IMarkdownRenderer')) {
128+
if (ClassInfo::classImplements($renderer, IMarkdownRenderer::class)) {
120129
self::$renderer = $renderer;
121130
} else {
122131
user_error('The renderer ' . $renderer . ' does not implement IMarkdownRenderer', E_USER_ERROR);
123132
}
124133
}
125134

126135
/**
127-
* Gets the active mardown renderer
136+
* Gets the active markdown renderer
128137
* @return IMarkdownRenderer An implementation of IMarkdownRenderer
129138
*/
130139
private function getRenderer()

src/Renderer/GithubMarkdownRenderer.php

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,17 @@
22

33
namespace UndefinedOffset\Markdown\Renderer;
44

5+
use SilverStripe\Core\Config\Configurable;
56
use stdClass;
67

8+
/**
9+
* Class GithubMarkdownRenderer
10+
* @package UndefinedOffset\Markdown\Renderer
11+
*/
712
class GithubMarkdownRenderer implements IMarkdownRenderer
813
{
14+
use Configurable;
15+
916
/**
1017
* @var bool
1118
*/
@@ -20,6 +27,10 @@ class GithubMarkdownRenderer implements IMarkdownRenderer
2027
* @var string
2128
*/
2229
private static $username;
30+
31+
/**
32+
* @var
33+
*/
2334
private static $password;
2435

2536
/**
@@ -38,19 +49,19 @@ public function isSupported()
3849

3950
/**
4051
* Returns the supplied Markdown as rendered HTML
41-
* @param string $markdown The markdown to render
52+
* @param string $value The markdown to render
4253
* @return string The rendered HTML
4354
*/
4455
public function getRenderedHTML($value)
4556
{
4657
//Build object to send
4758
$sendObj = new stdClass();
4859
$sendObj->text = $value;
49-
$sendObj->mode = (self::$useGFM ? 'gmf' : 'markdown');
60+
$sendObj->mode = (self::$useGFM ? 'gfm' : 'markdown');
5061
$content = json_encode($sendObj);
5162

5263
//Build headers
53-
$headers = array('Content-type: application/json', 'User-Agent: curl');
64+
$headers = ['Content-type: application/json', 'User-Agent: curl'];
5465
if (self::$useBasicAuth) {
5566
$encoded = base64_encode(self::$username . ':' . self::$password);
5667
$headers[] = "Authorization: Basic $encoded";
@@ -65,14 +76,13 @@ public function getRenderedHTML($value)
6576
curl_setopt($curl, CURLOPT_POSTFIELDS, $content);
6677
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
6778

68-
6979
//Send request and verify response
7080
$response = curl_exec($curl);
7181
$status = curl_getinfo($curl, CURLINFO_HTTP_CODE);
7282
if ($status != 200) {
7383
user_error(
7484
"Error: Call to api.github.com failed with status $status, response $response, curl_error "
75-
. curl_error($curl) . ", curl_errno " . curl_errno($curl),
85+
. curl_error($curl) . ", curl_errno " . curl_errno($curl),
7686
E_USER_WARNING
7787
);
7888
}
@@ -85,7 +95,7 @@ public function getRenderedHTML($value)
8595

8696
/**
8797
* Globally enable or disable github flavored markdown
88-
* @param bool $val Boolean true to enable false otherwise
98+
* @param bool $value Boolean true to enable false otherwise
8999
*/
90100
public static function setUseGFM($value = true)
91101
{
@@ -104,8 +114,8 @@ public static function getUseGFM()
104114
/**
105115
* Sets whether or not to include the Authorization header in GitHub API requests, both parameters are
106116
* required to enable basic auth
107-
* @param string $username Github Username
108-
* @param string $password Github Password
117+
* @param bool|string $username Github Username
118+
* @param bool|string $password Github Password
109119
*/
110120
public function useBasicAuth($username = false, $password = false)
111121
{

src/Renderer/IMarkdownRenderer.php

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,10 @@
22

33
namespace UndefinedOffset\Markdown\Renderer;
44

5+
/**
6+
* Interface IMarkdownRenderer
7+
* @package UndefinedOffset\Markdown\Renderer
8+
*/
59
interface IMarkdownRenderer
610
{
711
/**
@@ -14,7 +18,7 @@ public function isSupported();
1418

1519
/**
1620
* Returns the supplied Markdown as rendered HTML
17-
* @param string $markdown The markdown to render
21+
* @param string $markdown The markdown to render
1822
* @return string The rendered HTML
1923
*/
2024
public function getRenderedHTML($markdown);

src/Renderer/PHPMarkdownMarkdownRenderer.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,29 +2,36 @@
22

33
namespace UndefinedOffset\Markdown\Renderer;
44

5+
use Michelf\Markdown;
6+
7+
/**
8+
* Class PHPMarkdownMarkdownRenderer
9+
* @package UndefinedOffset\Markdown\Renderer
10+
*/
511
class PHPMarkdownMarkdownRenderer implements IMarkdownRenderer
612
{
713
/**
814
* Returns the supplied Markdown as rendered HTML
9-
* @param string $markdown The markdown to render
15+
* @param string $markdown The markdown to render
1016
* @return string The rendered HTML
1117
*/
1218
public function isSupported()
1319
{
14-
$exist s =class_exists("\Michelf\Markdown");
20+
$exists = class_exists(Markdown::class);
1521
if (!$exists) {
1622
return "Unable to find the php-markdown class (\Michelf\Markdown) on the classpath.";
1723
}
24+
1825
return $exists;
1926
}
2027

2128
/**
2229
* Returns the supplied Markdown as rendered HTML
23-
* @param string $markdown The markdown to render
30+
* @param string $markdown The markdown to render
2431
* @return string The rendered HTML
2532
*/
2633
public function getRenderedHTML($markdown)
2734
{
28-
return \Michelf\Markdown::defaultTransform($markdown);
35+
return Markdown::defaultTransform($markdown);
2936
}
3037
}

0 commit comments

Comments
 (0)