Mercurial Hosting > sceditor
comparison src/plugins/alternative-lists.js @ 4:b7725dab7482
move /development/* to /
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Thu, 04 Aug 2022 17:59:02 -0600 |
parents | src/development/plugins/alternative-lists.js@4c4fc447baea |
children | ea32a44b5a6e |
comparison
equal
deleted
inserted
replaced
3:ec68006a495e | 4:b7725dab7482 |
---|---|
1 /** | |
2 * SCEditor Inline-Code Plugin for BBCode format | |
3 * http://www.sceditor.com/ | |
4 * | |
5 * Copyright (C) 2011-2013, Sam Clarke (samclarke.com) | |
6 * | |
7 * SCEditor is licensed under the MIT license: | |
8 * http://www.opensource.org/licenses/mit-license.php | |
9 * | |
10 * @fileoverview SCEditor alternative lists plugin | |
11 * This plugin implements phpBB style of the lists: | |
12 * [list] | |
13 * [*]item | |
14 * [*]item | |
15 * [/list] | |
16 * @author Alex Betis | |
17 */ | |
18 | |
19 (function (sceditor) { | |
20 'use strict'; | |
21 | |
22 var utils = sceditor.utils; | |
23 | |
24 function isFunction(fn) { | |
25 return typeof fn === 'function'; | |
26 } | |
27 | |
28 sceditor.plugins['alternative-lists'] = function () { | |
29 var base = this; | |
30 | |
31 /** | |
32 * Private functions | |
33 * @private | |
34 */ | |
35 var bulletHandler; | |
36 var orderedHandler; | |
37 var insertListTag; | |
38 | |
39 base.init = function () { | |
40 var opts = this.opts; | |
41 | |
42 // Enable for BBCode only | |
43 if (opts.format && opts.format !== 'bbcode') { | |
44 return; | |
45 } | |
46 | |
47 // Override only txtExec implementation | |
48 sceditor.command.get('orderedlist').txtExec = orderedHandler; | |
49 sceditor.command.get('bulletlist').txtExec = bulletHandler; | |
50 | |
51 // Override current implementation | |
52 sceditor.formats.bbcode.set('list', { | |
53 breakStart: true, | |
54 isInline: false, | |
55 skipLastLineBreak: true, | |
56 html: function (token, attrs, content) { | |
57 var listType = 'disc'; | |
58 var toHtml = null; | |
59 | |
60 if (attrs.defaultattr) { | |
61 listType = attrs.defaultattr; | |
62 } | |
63 | |
64 if (listType === '1') { | |
65 // This listType belongs to orderedList (OL) | |
66 toHtml = sceditor.formats.bbcode.get('ol').html; | |
67 } else { | |
68 // unknown listType, use default bullet list behavior | |
69 toHtml = sceditor.formats.bbcode.get('ul').html; | |
70 } | |
71 | |
72 if (isFunction(toHtml)) { | |
73 return toHtml.call(this, token, attrs, content); | |
74 } else { | |
75 token.attrs['0'] = content; | |
76 return sceditor.formats.bbcode.formatBBCodeString( | |
77 toHtml, token.attrs); | |
78 } | |
79 } | |
80 }); | |
81 | |
82 sceditor.formats.bbcode.set('ul', { | |
83 tags: { | |
84 ul: null | |
85 }, | |
86 breakStart: true, | |
87 isInline: false, | |
88 skipLastLineBreak: true, | |
89 format: '[list]{0}[/list]', | |
90 html: '<ul>{0}</ul>' | |
91 }); | |
92 | |
93 sceditor.formats.bbcode.set('ol', { | |
94 tags: { | |
95 ol: null | |
96 }, | |
97 breakStart: true, | |
98 isInline: false, | |
99 skipLastLineBreak: true, | |
100 format: '[list=1]{0}[/list]', | |
101 html: '<ol>{0}</ol>' | |
102 }); | |
103 | |
104 sceditor.formats.bbcode.set('li', { | |
105 tags: { | |
106 li: null | |
107 }, | |
108 isInline: false, | |
109 closedBy: ['/ul', '/ol', '/list', '*', 'li'], | |
110 format: '[*]{0}', | |
111 html: '<li>{0}</li>' | |
112 }); | |
113 | |
114 sceditor.formats.bbcode.set('*', { | |
115 isInline: false, | |
116 excludeClosing: true, | |
117 closedBy: ['/ul', '/ol', '/list', '*', 'li'], | |
118 html: '<li>{0}</li>' | |
119 }); | |
120 }; | |
121 | |
122 insertListTag = function (editor, listType, selected) { | |
123 var content = ''; | |
124 | |
125 utils.each(selected.split(/\r?\n/), function (item) { | |
126 content += (content ? '\n' : '') + | |
127 '[*]' + item; | |
128 }); | |
129 | |
130 if (listType === '') { | |
131 editor.insertText('[list]\n' + content + '\n[/list]'); | |
132 } else { | |
133 editor.insertText('[list=' + listType + ']\n' + content + | |
134 '\n[/list]'); | |
135 } | |
136 }; | |
137 | |
138 /** | |
139 * Function for the txtExec and exec properties | |
140 * | |
141 * @param {node} caller | |
142 * @private | |
143 */ | |
144 orderedHandler = function (caller, selected) { | |
145 var editor = this; | |
146 | |
147 insertListTag(editor, '1', selected); | |
148 }; | |
149 | |
150 bulletHandler = function (caller, selected) { | |
151 var editor = this; | |
152 | |
153 insertListTag(editor, '', selected); | |
154 }; | |
155 | |
156 }; | |
157 })(sceditor); |