Files
17168ERP/web/App_Script/ContentBuilder/ContentBuilder.aspx
2025-08-29 01:27:25 +08:00

293 lines
10 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="ContentBuilder.aspx.cs" Inherits="App_Script_ContentBuilder_ContentBuilder" %>
<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta charset="utf-8">
<title>閃電編輯器 - Bootstrap ContentBuilder</title>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="description" content="">
<link rel="shortcut icon" href="../ckeditor/plugins/ContentBuilder/icons/ContentBuilder.png" type="image/png"/>
<!-- Bootstrap -->
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<script src="../jquery-1.12.4.min.js"></script>
<link href="assets/minimalist-blocks/content.css" rel="stylesheet" type="text/css" />
<link href="contentbuilder/contentbuilder.css" rel="stylesheet" type="text/css" />
<style>
.container {margin: 140px auto; /*max-width: 800px;*/ width:100%; /*padding:0 35px;*/ box-sizing: border-box;}
#button button{
min-width: 135px;
height: 50px;
line-height: 1;
display: inline-block;
box-sizing: border-box;
margin: 0;
padding: 0;
cursor: pointer;
background-color: #f7f7f7;
color: #4a4a4a;
border: 1px solid transparent;
font-family: sans-serif;
letter-spacing: 1px;
font-size: 13px;
font-weight: normal;
text-transform: uppercase;
text-align: center;
position: relative;
border-radius: 0;
transition: all ease 0.3s;
user-select: none;
white-space: normal;
vertical-align: middle;
line-height: 50px;
}
#button button:hover {
background: #EEE;
}
#button button>img{
height:20px;
margin-right: 6px;
}
</style>
<script>
let web_root ='<%=web_root%>';
</script>
<link href="<%=ResolveUrl("~/App_Script/fontawesome/css/all.min.css") %>" rel="stylesheet" />
<script src="<%=ResolveUrl("~/App_Script/sweetalert2-9.10.9/dist/sweetalert2.min.js") %>"></script>
<link href="<%=ResolveUrl("~/App_Script/sweetalert2-9.10.9/dist/sweetalert2.min.css") %>" rel="stylesheet" />
<script>
function msgbox(html, icon = '', url = '') {
Swal.fire({
icon: icon,
html: html,
confirmButtonText: '關閉',
onClose: () => {
if (url != '') {
window.location = url;
}
}
});
}
function msgtop(html, icon = 'success') {
const Toast = Swal.mixin({
toast: true,
position: 'top-end',
showConfirmButton: false,
timer: 3000,
heightAuto: false,
timerProgressBar: true,
onOpen: (toast) => {
toast.addEventListener('mouseenter', Swal.stopTimer)
toast.addEventListener('mouseleave', Swal.resumeTimer)
}
})
Toast.fire({
icon: icon,
html: '<div class="swal2-toast-cus">' + html + '</div>'
})
}
var mctmp = '0';
function msgconfirm(html, btn, icon = 'question') {
if (mctmp == '0') {
Swal.fire({
html: html,
icon: icon,
showCancelButton: true,
confirmButtonText: '<i class="mdi mdi-check"></i> 確定',
cancelButtonText: '<i class="mdi mdi-close"></i> 取消'
}).then((result) => {
if (result.value) {
mctmp = '1';
if ($(btn)[0].hasAttribute('href')) {
var href = $(btn).attr('href');
window.location.href = href;
} else {
$(btn).click();
}
}
})
mctmp = '0';
return false;
} else {
mctmp = '0';
return true;
}
}
</script>
<style>
.swal2-container > div {
width: auto;
min-width: 300px;
max-width: 95%;
}
.swal2-content {
font-size: 14px;
}
.swal2-actions > button {
font-size: 14px !important;
}
.swal2-toast-cus {
font-size: 20px;
margin: 20px;
font-weight: bold;
}
p.form-control-static label{
margin-left:3px;
margin-right:10px;
}
.table-hover td select.form-control{
width:auto;
margin:auto;
}
</style>
</head>
<body>
<form id="form1" runat="server">
<div>
</div>
</form>
<script type="text/javascript">
window.onload = function () {
$('.container')[0].insertAdjacentHTML('beforeend', window.opener.CKEDITOR.instances[new URL(location.href).searchParams.get('editor')].getData());
builder.applyBehavior();
builder.opts.onChange();
builder.opts.onRender();
}
function closeWindow(b) {
if (b) {
if ($('[data-filename]').length > 0) {
var formData = new FormData();
[].slice.call($('[data-filename]')).forEach(function (item, index, array) {
if (item.getAttribute("data-filename") != null) {
let dataUrl = item.src.split(',')
let base64 = dataUrl[1];
var fileName = item.getAttribute("data-filename");
var imgfile = convertBase64UrlToImgFile(base64, fileName, 'image/*');
formData.append('file', imgfile, fileName);
}
});
$.ajax({
asynce: false,
url: "upload.aspx",
type: "POST",
cache: false,
data: formData,
processData: false,
contentType: false,
success: function (data) {
[].slice.call($('[data-filename]')).forEach(function (item, index, array) {
item.src = web_root + "upload/edit/" + item.getAttribute("data-filename");//.split('.')[0] + ".jpg";
item.removeAttribute("data-filename")
});
setTimeout(function () {
window.opener.CKEDITOR.instances[new URL(location.href).searchParams.get('editor')].setData(builder.html());
window.close();
window.opener.focus();
}, 100);
},
error: function (data) {
msgtop('上傳圖片失敗', 'error');
}
});
}
else {
window.opener.CKEDITOR.instances[new URL(location.href).searchParams.get('editor')].setData(builder.html());
window.close();
window.opener.focus();
}
}
else {
window.close();
window.opener.focus();
}
}
function convertBase64UrlToImgFile(urlData,fileName,fileType) {
var bytes = window.atob(urlData); //转换为byte
//处理异常,将ascii码小于0的转换为大于0
var ab = new ArrayBuffer(bytes.length);
var ia = new Int8Array(ab);
var i;
for (i = 0; i < bytes.length; i++) {
ia[i] = bytes.charCodeAt(i);
}
//转换成文件添加文件的typenamelastModifiedDate属性
var blob=new Blob([ab], {type:fileType});
blob.lastModifiedDate = new Date();
blob.name = fileName;
return blob;
}
/**/</script>
<div class="container">
</div>
<div id="button" style="position: fixed; top: 0; left: 0;">
<button type="button" id="btn_ok" onclick="closeWindow(true)" title="確定"><img src="check2.svg" />確定</button>
<button type="button" id="btn_cancel" onclick="closeWindow(false)" title="取消"><img src="cross2.svg" />取消</button>
</div>
<script src="contentbuilder/contentbuilder.js" type="text/javascript"></script>
<script src="assets/minimalist-blocks/content.js" type="text/javascript"></script>
<script src="contentbuilder/lang/zh-tw.js" type="text/javascript"></script>
<script>
var snippetCategories = [
[120, "基本"],
[118, "文章"],
[101, "標題"],
[119, "按鈕"],
[102, "相片"],
[103, "圖文區塊"],
[116, "聯絡資訊"],
[104, "商品"],
[105, "特色"],
[106, "流程"],
[107, "價格"],
[108, "技能"],
[109, "成就"],
[110, "引言"],
[111, "合作伙伴"],
[112, "相關資訊"],
[113, "錯誤畫面"],
[114, "建置中"],
[115, "說明"],
//[999, "送出 Send"]
];
var builder = new ContentBuilder({
container: '.container',
snippetOpen: true,
row: 'row',
cols: ['col-md-1', 'col-md-2', 'col-md-3', 'col-md-4', 'col-md-5', 'col-md-6', 'col-md-7', 'col-md-8', 'col-md-9', 'col-md-10', 'col-md-11', 'col-md-12'],
clearPreferences: true,
snippetCategories: snippetCategories
});
</script>
</body>
</html>
<%--
應修正項目:
----
e.opts.emailSnippetCategories
e.opts.snippetCategories
To get HTML:
var html = builder.html();
--%>