Skip to content

Commit 74acdc4

Browse files
committed
bump WoltLab template
1 parent 59e746c commit 74acdc4

File tree

2 files changed

+246
-0
lines changed

2 files changed

+246
-0
lines changed

acptemplates/codemirror.tpl

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
{if !$codemirrorLoaded|isset}
2+
<script data-relocate="true">window.define.amd = undefined;</script>
3+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/codemirror.js"></script>
4+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/addon/dialog/dialog.js"></script>
5+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/addon/search/searchcursor.js"></script>
6+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/addon/search/search.js"></script>
7+
<script data-relocate="true">window.define.amd = window.__require_define_amd;</script>
8+
{/if}
9+
{if $codemirrorMode|isset}
10+
<script data-relocate="true">window.define.amd = undefined;</script>
11+
{if $codemirrorMode != 'smartymixed'}
12+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/{if $codemirrorMode == 'text/x-less'}css/css{else}{$codemirrorMode}/{$codemirrorMode}{/if}.js"></script>
13+
{/if}
14+
15+
{if $codemirrorMode == 'htmlmixed' || $codemirrorMode == 'smartymixed' || $codemirrorMode == 'php'}
16+
{if $codemirrorMode == 'smartymixed'}
17+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/htmlmixed/htmlmixed.js"></script>
18+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/smarty/smarty.js"></script>
19+
{elseif $codemirrorMode == 'php'}
20+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/htmlmixed/htmlmixed.js"></script>
21+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/clike/clike.js"></script>
22+
{/if}
23+
24+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/css/css.js"></script>
25+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/javascript/javascript.js"></script>
26+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/xml/xml.js"></script>
27+
{/if}
28+
29+
<script data-relocate="true">window.define.amd = window.__require_define_amd;</script>
30+
{/if}
31+
{event name='javascriptIncludes'}
32+
33+
<script data-relocate="true">
34+
{if !$codemirrorLoaded|isset}
35+
['{@$__wcf->getPath()}js/3rdParty/codemirror/codemirror.css', '{@$__wcf->getPath()}js/3rdParty/codemirror/addon/dialog/dialog.css'].forEach(function(href) {
36+
var link = document.createElement('link');
37+
link.rel = 'stylesheet';
38+
link.href = href;
39+
document.head.appendChild(link);
40+
});
41+
{/if}
42+
43+
require(['EventHandler', 'Dom/Traverse', 'Dom/Util'], function(EventHandler, DomTraverse, DomUtil) {
44+
var elements = document.querySelectorAll('{@$codemirrorSelector|encodeJS}');
45+
var config = {
46+
{if $codemirrorMode|isset}
47+
{if $codemirrorMode == 'smartymixed'}
48+
mode: {
49+
name: 'smarty',
50+
baseMode: 'text/html',
51+
version: 3
52+
},
53+
{else}
54+
mode: '{@$codemirrorMode|encodeJS}',
55+
{/if}
56+
{/if}
57+
lineWrapping: true,
58+
indentWithTabs: true,
59+
lineNumbers: true,
60+
indentUnit: 4,
61+
readOnly: {if !$editable|isset || $editable}false{else}true{/if}
62+
};
63+
64+
[].forEach.call(elements, function (element) {
65+
{event name='javascriptInit'}
66+
67+
if (element.codemirror) {
68+
for (var key in config) {
69+
if (config.hasOwnProperty(key)) {
70+
element.codemirror.setOption(key, config[key]);
71+
}
72+
}
73+
}
74+
else {
75+
element.codemirror = CodeMirror.fromTextArea(element, config);
76+
var oldToTextArea = element.codemirror.toTextArea;
77+
element.codemirror.toTextArea = function () {
78+
oldToTextArea();
79+
element.codemirror = null;
80+
};
81+
}
82+
83+
setTimeout(function () {
84+
element.codemirror.refresh();
85+
}, 250);
86+
setTimeout(function () {
87+
element.codemirror.refresh();
88+
}, 1000);
89+
90+
var tab = DomTraverse.parentByClass(element, 'tabMenuContent');
91+
if (tab !== null) {
92+
var name = elData(tab, 'name');
93+
var tabMenu = DomTraverse.parentByClass(tab, 'tabMenuContainer');
94+
var scrollPosition = null;
95+
96+
EventHandler.add('com.woltlab.wcf.simpleTabMenu_' + DomUtil.identify(tabMenu), 'select', function(data) {
97+
if (data.activeName === name) {
98+
element.codemirror.refresh();
99+
if (scrollPosition !== null) element.codemirror.scrollTo(null, scrollPosition);
100+
}
101+
});
102+
103+
EventHandler.add('com.woltlab.wcf.simpleTabMenu_' + DomUtil.identify(tabMenu), 'beforeSelect', function(data) {
104+
if (data.tabName === name) {
105+
scrollPosition = element.codemirror.getScrollInfo().top;
106+
}
107+
});
108+
}
109+
110+
var scrollOffsetStorage = element;
111+
do {
112+
scrollOffsetStorage = scrollOffsetStorage.nextElementSibling;
113+
} while (scrollOffsetStorage && !scrollOffsetStorage.classList.contains('codeMirrorScrollOffset'));
114+
if (scrollOffsetStorage) {
115+
element.codemirror.scrollTo(null, scrollOffsetStorage.value);
116+
element.codemirror.on('scroll', function (cm) {
117+
scrollOffsetStorage.value = cm.getScrollInfo().top;
118+
});
119+
}
120+
});
121+
});
122+
</script>
123+
{assign var='codemirrorLoaded' value=true}

templates/codemirror.tpl

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
{if !$codemirrorLoaded|isset}
2+
<script data-relocate="true">window.define.amd = undefined;</script>
3+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/codemirror.js"></script>
4+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/addon/dialog/dialog.js"></script>
5+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/addon/search/searchcursor.js"></script>
6+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/addon/search/search.js"></script>
7+
<script data-relocate="true">window.define.amd = window.__require_define_amd;</script>
8+
{/if}
9+
{if $codemirrorMode|isset}
10+
<script data-relocate="true">window.define.amd = undefined;</script>
11+
{if $codemirrorMode != 'smartymixed'}
12+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/{if $codemirrorMode == 'text/x-less'}css/css{else}{$codemirrorMode}/{$codemirrorMode}{/if}.js"></script>
13+
{/if}
14+
15+
{if $codemirrorMode == 'htmlmixed' || $codemirrorMode == 'smartymixed' || $codemirrorMode == 'php'}
16+
{if $codemirrorMode == 'smartymixed'}
17+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/htmlmixed/htmlmixed.js"></script>
18+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/smarty/smarty.js"></script>
19+
{elseif $codemirrorMode == 'php'}
20+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/htmlmixed/htmlmixed.js"></script>
21+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/clike/clike.js"></script>
22+
{/if}
23+
24+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/css/css.js"></script>
25+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/javascript/javascript.js"></script>
26+
<script data-relocate="true" src="{@$__wcf->getPath()}js/3rdParty/codemirror/mode/xml/xml.js"></script>
27+
{/if}
28+
29+
<script data-relocate="true">window.define.amd = window.__require_define_amd;</script>
30+
{/if}
31+
{event name='javascriptIncludes'}
32+
33+
<script data-relocate="true">
34+
{if !$codemirrorLoaded|isset}
35+
['{@$__wcf->getPath()}js/3rdParty/codemirror/codemirror.css', '{@$__wcf->getPath()}js/3rdParty/codemirror/addon/dialog/dialog.css'].forEach(function(href) {
36+
var link = document.createElement('link');
37+
link.rel = 'stylesheet';
38+
link.href = href;
39+
document.head.appendChild(link);
40+
});
41+
{/if}
42+
43+
require(['EventHandler', 'Dom/Traverse', 'Dom/Util'], function(EventHandler, DomTraverse, DomUtil) {
44+
var elements = document.querySelectorAll('{@$codemirrorSelector|encodeJS}');
45+
var config = {
46+
{if $codemirrorMode|isset}
47+
{if $codemirrorMode == 'smartymixed'}
48+
mode: {
49+
name: 'smarty',
50+
baseMode: 'text/html',
51+
version: 3
52+
},
53+
{else}
54+
mode: '{@$codemirrorMode|encodeJS}',
55+
{/if}
56+
{/if}
57+
lineWrapping: true,
58+
indentWithTabs: true,
59+
lineNumbers: true,
60+
indentUnit: 4,
61+
readOnly: {if !$editable|isset || $editable}false{else}true{/if}
62+
};
63+
64+
[].forEach.call(elements, function (element) {
65+
{event name='javascriptInit'}
66+
67+
if (element.codemirror) {
68+
for (var key in config) {
69+
if (config.hasOwnProperty(key)) {
70+
element.codemirror.setOption(key, config[key]);
71+
}
72+
}
73+
}
74+
else {
75+
element.codemirror = CodeMirror.fromTextArea(element, config);
76+
var oldToTextArea = element.codemirror.toTextArea;
77+
element.codemirror.toTextArea = function () {
78+
oldToTextArea();
79+
element.codemirror = null;
80+
};
81+
}
82+
83+
setTimeout(function () {
84+
element.codemirror.refresh();
85+
}, 250);
86+
setTimeout(function () {
87+
element.codemirror.refresh();
88+
}, 1000);
89+
90+
var tab = DomTraverse.parentByClass(element, 'tabMenuContent');
91+
if (tab !== null) {
92+
var name = elData(tab, 'name');
93+
var tabMenu = DomTraverse.parentByClass(tab, 'tabMenuContainer');
94+
var scrollPosition = null;
95+
96+
EventHandler.add('com.woltlab.wcf.simpleTabMenu_' + DomUtil.identify(tabMenu), 'select', function(data) {
97+
if (data.activeName === name) {
98+
element.codemirror.refresh();
99+
if (scrollPosition !== null) element.codemirror.scrollTo(null, scrollPosition);
100+
}
101+
});
102+
103+
EventHandler.add('com.woltlab.wcf.simpleTabMenu_' + DomUtil.identify(tabMenu), 'beforeSelect', function(data) {
104+
if (data.tabName === name) {
105+
scrollPosition = element.codemirror.getScrollInfo().top;
106+
}
107+
});
108+
}
109+
110+
var scrollOffsetStorage = element;
111+
do {
112+
scrollOffsetStorage = scrollOffsetStorage.nextElementSibling;
113+
} while (scrollOffsetStorage && !scrollOffsetStorage.classList.contains('codeMirrorScrollOffset'));
114+
if (scrollOffsetStorage) {
115+
element.codemirror.scrollTo(null, scrollOffsetStorage.value);
116+
element.codemirror.on('scroll', function (cm) {
117+
scrollOffsetStorage.value = cm.getScrollInfo().top;
118+
});
119+
}
120+
});
121+
});
122+
</script>
123+
{assign var='codemirrorLoaded' value=true}

0 commit comments

Comments
 (0)