Skip to content
This repository was archived by the owner on Jan 3, 2023. It is now read-only.

Commit 63c0a6a

Browse files
committed
added page controller file edit support
1 parent db5ffa2 commit 63c0a6a

File tree

7 files changed

+110
-33
lines changed

7 files changed

+110
-33
lines changed

src/Controllers/Admin/PagesController.php

+7-1
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,9 @@ public function edit($id)
8181
$menus = $this->cache->tags('sm')->get('menus')->pluck('name', 'id');
8282
$templates = array_unique($this->cache->tags('sm')->get('pages')->pluck('template')->filter()->all());
8383

84-
return view("{$this->adminPath}.pages.edit", compact('roles', 'permissions', 'page', 'menus', 'templates'));
84+
$controllerFile = $page->action ? $this->actionFileContent($page->action, 'get') : null;
85+
86+
return view("{$this->adminPath}.pages.edit", compact('roles', 'permissions', 'page', 'menus', 'templates', 'controllerFile'));
8587
}
8688

8789
/**
@@ -107,6 +109,10 @@ public function update($id, Request $request)
107109
$page->syncPermissions($permissions);
108110
$page->syncMenus($menus);
109111

112+
if (!is_null($request->controllerFile)) {
113+
$this->actionFileContent($request->action, 'update', $request->controllerFile);
114+
}
115+
110116
return back()->with('status', trans('SimpleMenu::messages.model_updated'));
111117
}
112118

src/Controllers/Admin/Traits/PageOps.php

+13-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ protected function sT_uP_Validaiton($request, $id = null)
6868
*/
6969
protected function cleanEmptyTranslations($request)
7070
{
71-
$result = $request->except(['roles', 'permissions', 'menus', 'cover']);
71+
$result = $request->except(['roles', 'permissions', 'menus', 'cover', 'controllerFile']);
7272

7373
foreach ($result as $k => $v) {
7474
if (is_array($v)) {
@@ -82,4 +82,16 @@ protected function cleanEmptyTranslations($request)
8282

8383
return $result;
8484
}
85+
86+
protected function actionFileContent($action, $type, $data = null)
87+
{
88+
$class = substr($action, 0, strpos($action, '@'));
89+
$file = (new \ReflectionClass($class))->getFileName();
90+
91+
if ($type == 'get') {
92+
return file_get_contents($file);
93+
}
94+
95+
return file_put_contents($file, $data);
96+
}
8597
}

src/resources/assets/js/bulma/page-comp.vue

+53-9
Original file line numberDiff line numberDiff line change
@@ -25,17 +25,61 @@ export default {
2525
this.prefix = this.SelectFirst
2626
this.url = this.SelectFirst
2727
28-
tinymce.overrideDefaults({
29-
menubar: false,
30-
branding: false,
31-
browser_spellcheck: true,
32-
contextmenu: false,
33-
height : '120',
34-
plugins: 'lists link image fullscreen media table preview autoresize',
35-
toolbar: 'undo redo | link unlink | media image | styleselect removeformat | outdent indent | numlist bullist table | preview fullscreen'
36-
})
28+
this.initTMC()
29+
this.initAce()
30+
this.initChoice()
3731
},
3832
methods: {
33+
// editors
34+
initTMC() {
35+
tinymce.overrideDefaults({
36+
menubar: false,
37+
branding: false,
38+
browser_spellcheck: true,
39+
contextmenu: false,
40+
height : '120',
41+
plugins: 'lists link image fullscreen media table preview autoresize',
42+
toolbar: 'undo redo | link unlink | media image | styleselect removeformat | outdent indent | numlist bullist table | preview fullscreen'
43+
})
44+
},
45+
initAce() {
46+
let item = document.getElementById('ace-editor')
47+
48+
if (item) {
49+
ace.require('ace/ext/language_tools')
50+
let editor = ace.edit('ace-editor')
51+
item.style.lineHeight = '2'
52+
editor.setOptions({
53+
enableBasicAutocompletion:true,
54+
enableLiveAutocompletion:true,
55+
enableSnippets:true
56+
})
57+
editor.renderer.setOptions({
58+
animatedScroll:true,
59+
showInvisibles:true,
60+
showPrintMargin:false,
61+
fontSize: 14,
62+
theme: 'ace/theme/monokai'
63+
})
64+
editor.session.setOptions({
65+
mode: 'ace/mode/php'
66+
})
67+
68+
editor.getSession().on('change', () => {
69+
this.$refs.controllerFile.value = editor.getSession().getValue()
70+
})
71+
}
72+
},
73+
initChoice() {
74+
new Choices('.select2', {
75+
duplicateItems: false,
76+
removeItemButton: true,
77+
paste: false,
78+
placeholderValue: 'Select an option'
79+
})
80+
},
81+
82+
// toggle
3983
showTitle(code) {
4084
return this.title == code
4185
},

src/resources/assets/sass/style.scss

+6
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ thead th {
120120
color: #a3afb7 !important;
121121
}
122122

123+
// ace
124+
#ace-editor {
125+
width: 100%;
126+
height: 500px;
127+
}
128+
123129
// nest
124130
.menu-item {
125131
margin-bottom: 0.5em !important;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
{{-- choices --}}
2+
<script src="//cdnjs.cloudflare.com/ajax/libs/choices.js/3.0.2/choices.min.js"></script>
3+
{{-- tinymce --}}
4+
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/jquery.tinymce.min.js"></script>
5+
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/tinymce.min.js"></script>
6+
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/autoresize/plugin.min.js"></script>
7+
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/preview/plugin.min.js"></script>
8+
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/fullscreen/plugin.min.js"></script>
9+
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/image/plugin.min.js"></script>
10+
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/link/plugin.min.js"></script>
11+
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/lists/plugin.min.js"></script>
12+
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/media/plugin.min.js"></script>
13+
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/table/plugin.min.js"></script>
14+
{{-- ace --}}
15+
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.0/ace.js"></script>
16+
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.0/ext-language_tools.js"></script>
17+
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.0/ext-spellcheck.js"></script>
18+
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.0/ext-elastic_tabstops_lite.js"></script>
19+
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.0/theme-monokai.js"></script>
20+
<script src="//cdnjs.cloudflare.com/ajax/libs/ace/1.3.0/mode-php.js"></script>

src/resources/views/admin/bulma/pages/edit.blade.php

+6
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,12 @@ class="input toggle-pad"
120120
@endif
121121
</div>
122122

123+
{{-- controller file --}}
124+
@if ($controllerFile)
125+
<div id="ace-editor">{{{ $controllerFile }}}</div>
126+
<input type="hidden" name="controllerFile" ref="controllerFile">
127+
@endif
128+
123129
{{-- template --}}
124130
<div class="field">
125131
{{ Form::label('template', trans('SimpleMenu::messages.template'), ['class' => 'label']) }}

src/resources/views/admin/bulma/shared.blade.php

+5-22
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,8 @@
6363
<ul>
6464
@foreach (app('cache')->tags('sm')->get('menus') as $menu)
6565
<li data-id="menu-{{ $menu->id }}">
66-
<a class="{{ URL::is($crud_prefix.'.menus.edit',['id' => $menu->id]) ? 'is-active' : '' }}"
67-
href="{{ route($crud_prefix.'.menus.edit',[$menu->id]) }}">
66+
<a class="{{ URL::is($crud_prefix.'.menus.edit', ['id' => $menu->id]) ? 'is-active' : '' }}"
67+
href="{{ route($crud_prefix.'.menus.edit', $menu->id) }}">
6868
{{ $menu->name }}
6969
</a>
7070
</li>
@@ -84,25 +84,8 @@
8484
</section>
8585

8686
{{-- Footer --}}
87-
{{-- Scripts --}}
88-
<script src="//cdnjs.cloudflare.com/ajax/libs/choices.js/3.0.2/choices.min.js"></script>
89-
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/jquery.tinymce.min.js"></script>
90-
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/tinymce.min.js"></script>
91-
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/autoresize/plugin.min.js"></script>
92-
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/preview/plugin.min.js"></script>
93-
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/fullscreen/plugin.min.js"></script>
94-
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/image/plugin.min.js"></script>
95-
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/link/plugin.min.js"></script>
96-
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/lists/plugin.min.js"></script>
97-
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/media/plugin.min.js"></script>
98-
<script src="//cdnjs.cloudflare.com/ajax/libs/tinymce/4.7.4/plugins/table/plugin.min.js"></script>
99-
<script>
100-
new Choices('.select2', {
101-
duplicateItems: false,
102-
removeItemButton: true,
103-
paste: false,
104-
placeholderValue: 'Select an option'
105-
})
106-
</script>
87+
@include("SimpleMenu::admin.$css_fw.editors")
88+
{{-- app --}}
89+
<script src="{{ asset("path/to/app.js") }}"></script>
10790
</body>
10891
</html>

0 commit comments

Comments
 (0)