Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
P
Platform
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Platform
Commits
e34427b9
Unverified
Commit
e34427b9
authored
Sep 28, 2017
by
Nicolas Widart
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Publishing module assets
parent
9f044885
Changes
20
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
1127 additions
and
121 deletions
+1127
-121
CkEditor.vue
public/modules/core/js/components/CkEditor.vue
+6
-4
DeleteComponent.vue
public/modules/core/js/components/DeleteComponent.vue
+6
-8
ActiveEditor.js
public/modules/core/js/mixins/ActiveEditor.js
+14
-0
ShortcutHelper.js
public/modules/core/js/mixins/ShortcutHelper.js
+7
-0
StringHelpers.vue
public/modules/core/js/mixins/StringHelpers.vue
+15
-0
TranslationHelper.js
public/modules/core/js/mixins/TranslationHelper.js
+16
-0
MediaRoutes.js
public/modules/media/js/MediaRoutes.js
+27
-0
MediaForm.vue
public/modules/media/js/components/MediaForm.vue
+165
-0
MediaList.vue
public/modules/media/js/components/MediaList.vue
+299
-0
MediaManager.vue
public/modules/media/js/components/MediaManager.vue
+15
-0
NewFolder.vue
public/modules/media/js/components/NewFolder.vue
+79
-0
RenameFolder.vue
public/modules/media/js/components/RenameFolder.vue
+75
-0
SingleMedia.vue
public/modules/media/js/components/SingleMedia.vue
+110
-0
UploadButton.vue
public/modules/media/js/components/UploadButton.vue
+81
-0
UploadZone.vue
public/modules/media/js/components/UploadZone.vue
+63
-0
SingleFileSelector.js
public/modules/media/js/mixins/SingleFileSelector.js
+9
-0
PageRoutes.js
public/modules/page/js/PageRoutes.js
+1
-7
PageForm.vue
public/modules/page/js/components/PageForm.vue
+42
-32
PageTable.vue
public/modules/page/js/components/PageTable.vue
+2
-4
PageTableServerSide.vue
public/modules/page/js/components/PageTableServerSide.vue
+95
-66
No files found.
public/modules/core/js/components/CkEditor.vue
View file @
e34427b9
...
@@ -12,7 +12,7 @@
...
@@ -12,7 +12,7 @@
<
script
>
<
script
>
// Source: https://github.com/dangvanthanh/vue-ckeditor2
// Source: https://github.com/dangvanthanh/vue-ckeditor2
let
inc
=
0
let
inc
=
new
Date
().
getTime
();
export
default
{
export
default
{
name
:
'
vue-ckeditor
'
,
name
:
'
vue-ckeditor
'
,
props
:
{
props
:
{
...
@@ -46,9 +46,11 @@
...
@@ -46,9 +46,11 @@
},
},
watch
:
{
watch
:
{
value
(
val
)
{
value
(
val
)
{
let
html
=
this
.
instance
.
getData
();
if
(
this
.
instance
)
{
if
(
val
!==
html
)
{
let
html
=
this
.
instance
.
getData
();
this
.
instance
.
setData
(
val
);
if
(
val
!==
html
)
{
this
.
instance
.
setData
(
val
);
}
}
}
}
}
},
},
...
...
public/modules/core/js/components/DeleteComponent.vue
View file @
e34427b9
...
@@ -3,9 +3,7 @@
...
@@ -3,9 +3,7 @@
</
template
>
</
template
>
<
script
>
<
script
>
import
Translate
from
'
../../../../Core/Assets/js/mixins/Translate
'
export
default
{
export
default
{
mixins
:
[
Translate
],
props
:
{
props
:
{
rows
:
{
default
:
null
},
rows
:
{
default
:
null
},
scope
:
{
default
:
null
},
scope
:
{
default
:
null
},
...
@@ -19,8 +17,8 @@
...
@@ -19,8 +17,8 @@
methods
:
{
methods
:
{
deleteRow
(
event
)
{
deleteRow
(
event
)
{
this
.
$confirm
(
this
.
deleteMessage
,
this
.
deleteTitle
,
{
this
.
$confirm
(
this
.
deleteMessage
,
this
.
deleteTitle
,
{
confirmButtonText
:
this
.
trans
late
(
'
core
'
,
'
button.delete
'
),
confirmButtonText
:
this
.
trans
(
'
core.
button.delete
'
),
cancelButtonText
:
this
.
trans
late
(
'
core
'
,
'
button.cancel
'
),
cancelButtonText
:
this
.
trans
(
'
core.
button.cancel
'
),
type
:
'
warning
'
type
:
'
warning
'
}).
then
(()
=>
{
}).
then
(()
=>
{
let
vm
=
this
;
let
vm
=
this
;
...
@@ -38,20 +36,20 @@
...
@@ -38,20 +36,20 @@
.
catch
(
error
=>
{
.
catch
(
error
=>
{
vm
.
$message
({
vm
.
$message
({
type
:
'
error
'
,
type
:
'
error
'
,
message
:
response
.
data
.
message
message
:
error
.
data
.
message
});
});
});
});
}).
catch
(()
=>
{
}).
catch
(()
=>
{
this
.
$message
({
this
.
$message
({
type
:
'
info
'
,
type
:
'
info
'
,
message
:
this
.
trans
late
(
'
core
'
,
'
delete cancelled
'
)
message
:
this
.
trans
(
'
core.
delete cancelled
'
)
});
});
});
});
}
}
},
},
mounted
()
{
mounted
()
{
this
.
deleteMessage
=
this
.
trans
late
(
'
core
'
,
'
modal.confirmation-message
'
);
this
.
deleteMessage
=
this
.
trans
(
'
core.
modal.confirmation-message
'
);
this
.
deleteTitle
=
this
.
trans
late
(
'
core
'
,
'
modal.title
'
);
this
.
deleteTitle
=
this
.
trans
(
'
core.
modal.title
'
);
}
}
}
}
</
script
>
</
script
>
public/modules/core/js/mixins/ActiveEditor.js
0 → 100644
View file @
e34427b9
export
default
{
methods
:
{
getCurrentEditor
()
{
const
configuredEditor
=
window
.
AsgardCMS
.
editor
;
if
(
configuredEditor
===
'
simplemde
'
)
{
return
'
markdown-editor
'
;
}
if
(
configuredEditor
===
'
ckeditor
'
)
{
return
'
ckeditor
'
;
}
return
'
ckeditor
'
},
}
}
public/modules/core/js/mixins/ShortcutHelper.js
0 → 100644
View file @
e34427b9
export
default
{
methods
:
{
pushRoute
(
route
)
{
this
.
$router
.
push
(
route
);
}
}
}
public/modules/core/js/mixins/StringHelpers.vue
0 → 100644
View file @
e34427b9
<
template
>
</
template
>
<
script
>
export
default
{
methods
:
{
ucfirst
(
string
)
{
return
string
[
0
].
toUpperCase
()
+
string
.
substr
(
1
);
},
ucwords
(
string
)
{
return
string
.
replace
(
/
\w\S
*/g
,
function
(
txt
){
return
txt
.
charAt
(
0
).
toUpperCase
()
+
txt
.
substr
(
1
).
toLowerCase
();});
}
},
}
</
script
>
public/modules/core/js/mixins/TranslationHelper.js
0 → 100644
View file @
e34427b9
export
default
{
methods
:
{
trans
(
string
)
{
// Makes a string: core.button.cancel | core.button.created at
// to: core["button.cancel"] | core["button.created at"]
let
array
=
string
.
split
(
'
.
'
);
if
(
array
.
length
<
2
)
{
return
this
.
$t
(
string
)
}
let
first
=
array
.
splice
(
0
,
1
);
let
key
=
array
.
join
(
'
.
'
);
return
this
.
$t
(
`
${
first
}
['
${
key
}
']`
);
},
}
}
public/modules/media/js/MediaRoutes.js
0 → 100644
View file @
e34427b9
import
MediaManager
from
'
./components/MediaManager.vue
'
;
import
MediaList
from
'
./components/MediaList.vue
'
;
import
MediaForm
from
'
./components/MediaForm.vue
'
;
const
locales
=
window
.
AsgardCMS
.
locales
;
export
default
[
{
path
:
'
/media/media
'
,
component
:
MediaManager
,
children
:
[
{
path
:
''
,
component
:
MediaList
,
name
:
'
admin.media.media.index
'
},
{
path
:
'
:mediaId/edit
'
,
component
:
MediaForm
,
name
:
'
admin.media.media.edit
'
,
props
:
{
locales
,
}
},
]
}
];
public/modules/media/js/components/MediaForm.vue
0 → 100644
View file @
e34427b9
<
style
>
.el-select
{
display
:
block
;
}
</
style
>
<
template
>
<div>
<div
class=
"content-header"
>
<h1>
{{
trans
(
'
media.title.edit media
'
)
}}
</h1>
<el-breadcrumb
separator=
"/"
>
<el-breadcrumb-item>
<a
href=
"/backend"
>
Home
</a>
</el-breadcrumb-item>
<el-breadcrumb-item
:to=
"
{name: 'admin.media.media.index', query: {folder_id: media.folder_id}}">
{{
trans
(
'
media.breadcrumb.media
'
)
}}
</el-breadcrumb-item>
<el-breadcrumb-item
:to=
"
{name: 'admin.media.media.edit'}">
{{
trans
(
'
media.title.edit media
'
)
}}
</el-breadcrumb-item>
</el-breadcrumb>
</div>
<el-form
ref=
"form"
:model=
"media"
label-width=
"120px"
label-position=
"top"
v-loading
.
body=
"loading"
@
keydown=
"form.errors.clear($event.target.name);"
>
<div
class=
"row"
>
<div
class=
"col-md-8"
>
<div
class=
"box box-primary"
>
<div
class=
"box-body"
>
<el-tabs
type=
"card"
v-model=
"activeTab"
>
<el-tab-pane
:label=
"localeArray.name"
v-for=
"(localeArray, locale) in locales"
:key=
"localeArray.name"
:name=
"locale"
>
<el-form-item
:label=
"trans('media.form.alt_attribute')"
:class=
"
{'el-form-item is-error': form.errors.has(locale + '.alt_attribute') }">
<el-input
v-model=
"media[locale].alt_attribute"
></el-input>
<div
class=
"el-form-item__error"
v-if=
"form.errors.has(locale + '.alt_attribute')"
v-text=
"form.errors.first(locale + '.alt_attribute')"
></div>
</el-form-item>
<el-form-item
:label=
"trans('media.form.description')"
:class=
"
{'el-form-item is-error': form.errors.has(locale + '.description') }">
<el-input
type=
"textarea"
v-model=
"media[locale].description"
></el-input>
<div
class=
"el-form-item__error"
v-if=
"form.errors.has(locale + '.description')"
v-text=
"form.errors.first(locale + '.description')"
></div>
</el-form-item>
<el-form-item
:label=
"trans('media.form.keywords')"
:class=
"
{'el-form-item is-error': form.errors.has(locale + '.keywords') }">
<el-input
v-model=
"media[locale].keywords"
></el-input>
<div
class=
"el-form-item__error"
v-if=
"form.errors.has(locale + '.keywords')"
v-text=
"form.errors.first(locale + '.keywords')"
></div>
</el-form-item>
<hr>
<tags-input
namespace=
"asgardcms/media"
v-model=
"tags"
:value=
"tags"
:current-tags=
"tags"
></tags-input>
<el-form-item>
<el-button
type=
"primary"
@
click=
"onSubmit()"
:loading=
"loading"
>
{{
trans
(
'
core.save
'
)
}}
</el-button>
<el-button
@
click=
"onCancel()"
>
{{
trans
(
'
core.button.cancel
'
)
}}
</el-button>
</el-form-item>
</el-tab-pane>
</el-tabs>
</div>
</div>
</div>
<div
class=
"col-md-4"
>
<img
:src=
"media.path"
alt=
""
v-if=
"media.is_image"
style=
"width: 100%;"
/>
<i
class=
"fa fa-file"
style=
"font-size: 50px;"
v-else=
""
></i>
</div>
</div>
</el-form>
<div
class=
"row"
>
<div
class=
"col-md-12"
>
<h3>
Thumbnails
</h3>
<ul
class=
"list-unstyled"
>
<li
v-for=
"thumbnail in media.thumbnails"
:key=
"thumbnail.name"
style=
"float:left; margin-right: 10px"
>
<img
:src=
"thumbnail.path"
alt=
""
/>
<p
class=
"text-muted"
style=
"text-align: center"
>
{{
thumbnail
.
name
}}
(
{{
thumbnail
.
size
}}
)
</p>
</li>
</ul>
</div>
</div>
</div>
</
template
>
<
script
>
import
Form
from
'
form-backend-validation
'
import
axios
from
'
axios
'
export
default
{
props
:
{
locales
:
{
default
:
null
},
},
data
()
{
return
{
media
:
_
(
this
.
locales
)
.
keys
()
.
map
(
locale
=>
[
locale
,
{
description
:
''
,
alt_attribute
:
''
,
keywords
:
''
,
}])
.
fromPairs
()
//.merge({template: 'default', is_home: 0, medias_single: []})
.
value
(),
form
:
new
Form
(),
loading
:
false
,
tags
:
{},
activeTab
:
window
.
AsgardCMS
.
currentLocale
||
'
en
'
,
}
},
methods
:
{
fetchMedia
()
{
this
.
loading
=
true
;
axios
.
get
(
route
(
'
api.media.media.find
'
,
{
media
:
this
.
$route
.
params
.
mediaId
}))
.
then
(
response
=>
{
this
.
loading
=
false
;
this
.
media
=
response
.
data
.
data
;
this
.
tags
=
response
.
data
.
data
.
tags
;
})
.
catch
(
error
=>
{
})
},
onSubmit
()
{
this
.
form
=
new
Form
(
_
.
merge
(
this
.
media
,
{
tags
:
this
.
tags
}));
this
.
loading
=
true
;
this
.
form
.
put
(
route
(
'
api.media.media.update
'
,
{
file
:
this
.
media
.
id
}))
.
then
(
response
=>
{
this
.
loading
=
false
;
this
.
$message
({
type
:
'
success
'
,
message
:
response
.
message
});
this
.
$router
.
push
({
name
:
'
admin.media.media.index
'
,
query
:
{
folder_id
:
this
.
media
.
folder_id
}})
})
.
catch
(
error
=>
{
console
.
log
(
error
);
this
.
loading
=
false
;
this
.
$notify
.
error
({
title
:
'
Error
'
,
message
:
'
There are some errors in the form.
'
});
});
},
onCancel
()
{
if
(
this
.
media
.
folder_id
==
0
)
{
this
.
$router
.
push
({
name
:
'
admin.media.media.index
'
,
query
:
{}});
return
;
}
this
.
$router
.
push
({
name
:
'
admin.media.media.index
'
,
query
:
{
folder_id
:
this
.
media
.
folder_id
}})
},
},
mounted
()
{
if
(
this
.
$route
.
params
.
mediaId
!==
undefined
)
{
this
.
fetchMedia
();
}
}
}
</
script
>
public/modules/media/js/components/MediaList.vue
0 → 100644
View file @
e34427b9
This diff is collapsed.
Click to expand it.
public/modules/media/js/components/MediaManager.vue
0 → 100644
View file @
e34427b9
<
template
>
<div>
<router-view></router-view>
</div>
</
template
>
<
script
>
export
default
{
data
()
{
return
{}
},
methods
:
{},
mounted
()
{}
}
</
script
>
public/modules/media/js/components/NewFolder.vue
0 → 100644
View file @
e34427b9
<
style
>
.new-folder
{
float
:
left
;
margin-right
:
10px
;
}
</
style
>
<
template
>
<div>
<el-button
type=
"success"
class=
"new-folder"
@
click=
"dialogFormVisible = true"
>
<i
class=
"el-icon-fa-plus"
></i>
New Folder
</el-button>
<el-dialog
title=
"New Folder"
:visible
.
sync=
"dialogFormVisible"
size=
"tiny"
>
<el-form
:model=
"folder"
v-loading
.
body=
"loading"
@
submit
.
native
.
prevent=
"onSubmit()"
>
<el-form-item
label=
"Folder name"
:class=
"
{'el-form-item is-error': form.errors.has('name') }">
<el-input
v-model=
"folder.name"
auto-complete=
"off"
autofocus
></el-input>
<div
class=
"el-form-item__error"
v-if=
"form.errors.has('name')"
v-text=
"form.errors.first('name')"
></div>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"closeDialog"
>
Cancel
</el-button>
<el-button
type=
"primary"
@
click=
"onSubmit()"
>
Confirm
</el-button>
</span>
</el-dialog>
</div>
</
template
>
<
script
>
import
Form
from
'
form-backend-validation
'
export
default
{
props
:
{
parentId
:
{
type
:
Number
}
},
data
()
{
return
{
dialogFormVisible
:
false
,
folder
:
{
name
:
''
,
},
form
:
new
Form
(),
loading
:
false
,
}
},
methods
:
{
onSubmit
()
{
this
.
form
=
new
Form
(
_
.
merge
(
this
.
folder
,
{
parent_id
:
this
.
parentId
}));
this
.
loading
=
true
;
this
.
form
.
post
(
route
(
'
api.media.folders.store
'
))
.
then
(
response
=>
{
this
.
loading
=
false
;
this
.
$message
({
type
:
'
success
'
,
message
:
response
.
message
});
this
.
dialogFormVisible
=
false
;
this
.
folder
.
name
=
''
;
this
.
$events
.
emit
(
'
folderWasCreated
'
,
response
);
})
.
catch
(
error
=>
{
console
.
log
(
error
);
this
.
loading
=
false
;
this
.
$notify
.
error
({
title
:
'
Error
'
,
message
:
'
There are some errors in the form.
'
});
});
},
closeDialog
()
{
this
.
form
.
clear
();
this
.
dialogFormVisible
=
false
;
},
},
mounted
()
{
}
}
</
script
>
public/modules/media/js/components/RenameFolder.vue
0 → 100644
View file @
e34427b9
<
template
>
<div>
<el-dialog
title=
"Rename Folder"
:visible
.
sync=
"dialogFormVisible"
size=
"tiny"
>
<el-form
:model=
"folder"
v-loading
.
body=
"loading"
@
submit
.
native
.
prevent=
"onSubmit()"
>
<el-form-item
label=
"Folder name"
:class=
"
{'el-form-item is-error': form.errors.has('name') }">
<el-input
v-model=
"folder.name"
auto-complete=
"off"
autofocus
></el-input>
<div
class=
"el-form-item__error"
v-if=
"form.errors.has('name')"
v-text=
"form.errors.first('name')"
></div>
</el-form-item>
</el-form>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"closeDialog"
>
Cancel
</el-button>
<el-button
type=
"primary"
@
click=
"onSubmit()"
>
Confirm
</el-button>
</span>
</el-dialog>
</div>
</
template
>
<
script
>
import
Form
from
'
form-backend-validation
'
export
default
{
// props: {
// currentFolder: {type: Object}
// },
data
()
{
return
{
dialogFormVisible
:
false
,
folder
:
{
name
:
''
,
id
:
''
,
parent_id
:
''
,
},
form
:
new
Form
(),
loading
:
false
,
}
},
methods
:
{
onSubmit
()
{
this
.
form
=
new
Form
(
this
.
folder
);
this
.
loading
=
true
;
this
.
form
.
post
(
route
(
'
api.media.folders.update
'
,
{
folder
:
this
.
folder
.
id
}))
.
then
(
response
=>
{
this
.
loading
=
false
;
this
.
$message
({
type
:
'
success
'
,
message
:
response
.
message
});
this
.
dialogFormVisible
=
false
;
this
.
$events
.
emit
(
'
folderWasUpdated
'
,
response
);
})
.
catch
(
error
=>
{
console
.
log
(
error
);
this
.
loading
=
false
;
this
.
$notify
.
error
({
title
:
'
Error
'
,
message
:
'
There are some errors in the form.
'
});
});
},
closeDialog
()
{
this
.
form
.
clear
();
this
.
dialogFormVisible
=
false
;
},
},
mounted
()
{
this
.
$events
.
listen
(
'
editFolderWasClicked
'
,
eventData
=>
{
this
.
folder
.
name
=
eventData
.
filename
;
this
.
folder
.
id
=
eventData
.
id
;
this
.
folder
.
parent_id
=
eventData
.
folder_id
;
this
.
dialogFormVisible
=
true
;
});
}
}
</
script
>
public/modules/media/js/components/SingleMedia.vue
0 → 100644
View file @
e34427b9
<
template
>
<div>
<label
class=
"el-form-item__label"
>
{{
getFieldLabel
()
}}
</label>
<div
class=
"jsThumbnailImageWrapper jsSingleThumbnailWrapper"
v-if=
"hasSelectedMedia"
>
<figure>
<img
:src=
"this.selectedMedia.medium_thumb"
alt=
""
v-if=
"this.selectedMedia.is_image"
/>
<i
:class=
"`fa $
{this.selectedMedia.fa_icon}`" style="font-size: 60px;" v-if="! this.selectedMedia.is_image">
</i>
<span
v-if=
"! this.selectedMedia.is_image"
style=
"display:block;"
>
{{
this
.
selectedMedia
.
filename
}}
</span>
</figure>
<div
class=
"clearfix"
></div>
<el-button
type=
"button"
@
click=
"unSelectMedia"
>
{{
trans
(
'
media.remove media
'
)
}}
</el-button>
</div>
<div
class=
""
v-else
>
<el-button
type=
"button"
@
click=
"dialogVisible = true"
>
{{
trans
(
'
media.Browse
'
)
}}
</el-button>
</div>
<el-dialog
:visible
.
sync=
"dialogVisible"
size=
"full"
:before-close=
"handleClose"
>
<media-list
single-modal
:event-name=
"this.eventName"
></media-list>
<span
slot=
"footer"
class=
"dialog-footer"
>
<el-button
@
click=
"dialogVisible = false"
>
{{
trans
(
'
core.button.cancel
'
)
}}
</el-button>
</span>
</el-dialog>
</div>
</
template
>
<
script
>
import
UploadZone
from
'
./UploadZone.vue
'
;
import
MediaList
from
'
./MediaList.vue
'
;
import
StringHelpers
from
'
../../../../Core/Assets/js/mixins/StringHelpers
'
import
axios
from
'
axios
'
export
default
{
mixins
:
[
StringHelpers
],
props
:
{
zone
:
{
type
:
String
,
required
:
true
},
entity
:
{
type
:
String
,
required
:
true
},
entityId
:
{
type
:
Number
},
label
:
{
type
:
String
},
},
components
:
{
'
upload-zone
'
:
UploadZone
,
'
media-list
'
:
MediaList
,
},
watch
:
{
entityId
()
{
if
(
this
.
entityId
)
{
this
.
fetchMedia
();
}
},
},
data
()
{
return
{
dialogVisible
:
false
,
selectedMedia
:
{},
eventName
:
''
,
}
},
computed
:
{
hasSelectedMedia
()
{
return
!
_
.
isEmpty
(
this
.
selectedMedia
);
},
},
methods
:
{
handleClose
(
done
)
{
done
();
},
unSelectMedia
()
{
this
.
selectedMedia
=
{};
this
.
$emit
(
'
singleFileSelected
'
,
_
.
merge
({
id
:
null
},
{
zone
:
this
.
zone
}));
},
fetchMedia
()
{
axios
.
get
(
route
(
'
api.media.find-first-by-zone-and-entity
'
,
{
zone
:
this
.
zone
,
entity
:
this
.
entity
,
entity_id
:
this
.
entityId
,
}))
.
then
(
response
=>
{
this
.
$emit
(
'
singleFileSelected
'
,
_
.
merge
(
response
.
data
.
data
,
{
zone
:
this
.
zone
}));
this
.
selectedMedia
=
response
.
data
.
data
;
})
},
getFieldLabel
()
{
return
this
.
label
||
this
.
ucwords
(
this
.
zone
.
replace
(
'
_
'
,
'
'
));
},
makeId
()
{
let
text
=
""
;
let
possible
=
"
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789
"
;
for
(
let
i
=
0
;
i
<
5
;
i
++
)
text
+=
possible
.
charAt
(
Math
.
floor
(
Math
.
random
()
*
possible
.
length
));
return
text
;
},
},
mounted
()
{
this
.
eventName
=
'
fileWasSelected
'
+
this
.
makeId
()
+
Math
.
floor
(
Math
.
random
()
*
999999
);
this
.
$events
.
listen
(
this
.
eventName
,
mediaData
=>
{
this
.
dialogVisible
=
false
;
this
.
selectedMedia
=
mediaData
;
this
.
$emit
(
'
singleFileSelected
'
,
_
.
merge
(
mediaData
,
{
zone
:
this
.
zone
}));
});
}
}
</
script
>
public/modules/media/js/components/UploadButton.vue
0 → 100644
View file @
e34427b9
<
style
>
.el-upload__input
{
display
:
none
!important
;
}
.el-upload--text
{
display
:
block
;
}
.el-upload-dragger
{
width
:
100%
;
}
.media-upload
{
margin-bottom
:
10px
;
}
</
style
>
<
template
>
<el-upload
class=
"upload-demo"
:action=
"uploadUrl"
:on-remove=
"handleRemove"
:on-success=
"handleSuccess"
:show-file-list=
"false"
:http-request=
"uploadFile"
:multiple=
"true"
style=
"display: inline-block; margin-right: 10px;"
>
<el-button
size=
"small"
type=
"primary"
style=
"padding: 11px 9px;"
:loading=
"fileIsUploading"
>
{{
trans
(
'
media.upload file
'
)
}}
</el-button>
</el-upload>
</
template
>
<
script
>
import
axios
from
'
axios
'
export
default
{
props
:
{
parentId
:
{
type
:
Number
}
},
data
()
{
return
{
fileIsUploading
:
false
,
}
},
computed
:
{
uploadUrl
()
{
return
route
(
'
api.media.store
'
).
domain
+
route
(
'
api.media.store
'
).
url
;
},
requestHeaders
()
{
let
userApiToken
=
document
.
head
.
querySelector
(
'
meta[name="user-api-token"]
'
);
return
{
'
Authorization
'
:
'
Bearer
'
+
userApiToken
.
content
};
},
},
methods
:
{
handleSuccess
(
response
,
file
,
fileList
)
{
this
.
$events
.
emit
(
'
fileWasUploaded
'
,
response
);
},
uploadFile
(
event
)
{
this
.
fileIsUploading
=
true
;
let
data
=
new
FormData
();
data
.
append
(
'
parent_id
'
,
this
.
parentId
);
data
.
append
(
'
file
'
,
event
.
file
);
axios
.
post
(
route
(
'
api.media.store
'
),
data
)
.
then
(
response
=>
{
this
.
$events
.
emit
(
'
fileWasUploaded
'
,
response
);
this
.
fileIsUploading
=
false
;
})
.
catch
(
error
=>
{
console
.
log
(
error
.
response
.
data
);
this
.
fileIsUploading
=
false
;
this
.
$notify
.
error
({
title
:
'
Error
'
,
message
:
error
.
response
.
data
.
errors
.
file
[
0
]
});
});
},
handleRemove
()
{},
},
mounted
()
{
}
}
</
script
>
public/modules/media/js/components/UploadZone.vue
0 → 100644
View file @
e34427b9
<
style
>
.el-upload__input
{
display
:
none
!important
;
}
.el-upload--text
{
display
:
block
;
}
.el-upload-dragger
{
width
:
100%
;
}
.media-upload
{
margin-bottom
:
10px
;
}
</
style
>
<
template
>
<div
class=
"row"
>
<div
class=
"col-xs-12"
>
<el-upload
class=
"media-upload"
drag
:action=
"uploadUrl"
:on-preview=
"handlePreview"
:on-remove=
"handleRemove"
:on-success=
"handleSuccess"
:file-list=
"fileList"
:headers=
"requestHeaders"
multiple
>
<i
class=
"el-icon-upload"
></i>
<div
class=
"el-upload__text"
>
Drop file here or
<em>
click to upload
</em></div>
</el-upload>
</div>
</div>
</
template
>
<
script
>
export
default
{
data
()
{
return
{
fileList
:
[],
}
},
computed
:
{
uploadUrl
()
{
return
route
(
'
api.media.store
'
).
domain
+
route
(
'
api.media.store
'
).
url
;
},
requestHeaders
()
{
let
userApiToken
=
document
.
head
.
querySelector
(
'
meta[name="user-api-token"]
'
);
return
{
'
Authorization
'
:
'
Bearer
'
+
userApiToken
.
content
};
},
},
methods
:
{
handleSuccess
(
response
,
file
,
fileList
)
{
this
.
$events
.
emit
(
'
fileWasUploaded
'
,
response
);
this
.
fileList
=
[];
},
handlePreview
()
{},
handleRemove
()
{},
},
mounted
()
{}
}
</
script
>
public/modules/media/js/mixins/SingleFileSelector.js
0 → 100644
View file @
e34427b9
export
default
{
methods
:
{
selectSingleFile
(
event
,
model
)
{
this
[
model
].
medias_single
=
_
.
merge
(
this
[
model
].
medias_single
,
{
[
event
.
zone
]:
event
.
id
,
});
},
}
}
public/modules/page/js/PageRoutes.js
View file @
e34427b9
...
@@ -2,24 +2,19 @@ import PageTable from './components/PageTable.vue'
...
@@ -2,24 +2,19 @@ import PageTable from './components/PageTable.vue'
import
PageTableServerSide
from
'
./components/PageTableServerSide.vue
'
import
PageTableServerSide
from
'
./components/PageTableServerSide.vue
'
import
PageForm
from
'
./components/PageForm.vue
'
import
PageForm
from
'
./components/PageForm.vue
'
const
translations
=
window
.
translations
;
const
locales
=
window
.
AsgardCMS
.
locales
;
const
locales
=
window
.
locales
;
export
default
[
export
default
[
{
{
path
:
'
/page/pages
'
,
path
:
'
/page/pages
'
,
name
:
'
admin.page.page.index
'
,
name
:
'
admin.page.page.index
'
,
component
:
PageTableServerSide
,
component
:
PageTableServerSide
,
props
:
{
translations
,
}
},
},
{
{
path
:
'
/page/pages/create
'
,
path
:
'
/page/pages/create
'
,
name
:
'
admin.page.page.create
'
,
name
:
'
admin.page.page.create
'
,
component
:
PageForm
,
component
:
PageForm
,
props
:
{
props
:
{
translations
,
locales
,
locales
,
pageTitle
:
'
create page
'
,
pageTitle
:
'
create page
'
,
}
}
...
@@ -29,7 +24,6 @@ export default [
...
@@ -29,7 +24,6 @@ export default [
name
:
'
admin.page.page.edit
'
,
name
:
'
admin.page.page.edit
'
,
component
:
PageForm
,
component
:
PageForm
,
props
:
{
props
:
{
translations
,
locales
,
locales
,
pageTitle
:
'
edit page
'
,
pageTitle
:
'
edit page
'
,
}
}
...
...
public/modules/page/js/components/PageForm.vue
View file @
e34427b9
This diff is collapsed.
Click to expand it.
public/modules/page/js/components/PageTable.vue
View file @
e34427b9
...
@@ -6,7 +6,7 @@
...
@@ -6,7 +6,7 @@
<data-tables
:data=
"data"
:actions-def=
"actionsDef"
>
<data-tables
:data=
"data"
:actions-def=
"actionsDef"
>
<el-table-column
prop=
"id"
label=
"Id"
width=
"100"
>
<el-table-column
prop=
"id"
label=
"Id"
width=
"100"
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"title"
:label=
"trans
late('page', '
title')"
>
<el-table-column
prop=
"title"
:label=
"trans
('page.
title')"
>
</el-table-column>
</el-table-column>
<el-table-column
prop=
"slug"
label=
"Slug"
>
<el-table-column
prop=
"slug"
label=
"Slug"
>
</el-table-column>
</el-table-column>
...
@@ -30,12 +30,10 @@
...
@@ -30,12 +30,10 @@
<
script
>
<
script
>
import
axios
from
'
axios
'
import
axios
from
'
axios
'
import
Translate
from
'
../../../../Core/Assets/js/mixins/Translate
'
let
data
;
let
data
;
export
default
{
export
default
{
mixins
:
[
Translate
],
data
()
{
data
()
{
return
{
return
{
data
,
data
,
...
@@ -44,7 +42,7 @@
...
@@ -44,7 +42,7 @@
links
:
{},
links
:
{},
actionsDef
:
{
actionsDef
:
{
def
:
[{
def
:
[{
name
:
this
.
trans
late
(
'
page
'
,
'
create
page
'
),
name
:
this
.
trans
(
'
page.create-
page
'
),
icon
:
'
edit
'
,
icon
:
'
edit
'
,
handler
:
()
=>
{
handler
:
()
=>
{
this
.
$router
.
push
({
name
:
'
admin.page.page.create
'
})
this
.
$router
.
push
({
name
:
'
admin.page.page.create
'
})
...
...
public/modules/page/js/components/PageTableServerSide.vue
View file @
e34427b9
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment