first commit
This commit is contained in:
554
pages/video/video.js
Normal file
554
pages/video/video.js
Normal file
@@ -0,0 +1,554 @@
|
||||
var util = require('../../utils/util.js'); // 确保你有这样一个文件
|
||||
var app = getApp(),
|
||||
n = '';
|
||||
Page({
|
||||
data: {
|
||||
dataUrl: '',
|
||||
dataImage: '',
|
||||
preview: '',
|
||||
type: '',
|
||||
wxid: '',
|
||||
alias: '',
|
||||
videoSize: 0, // 初始化视频大小为0
|
||||
totalLength: 0,
|
||||
isExtracting: false,
|
||||
read_count: 0,
|
||||
|
||||
},
|
||||
onLoad: function (options) {
|
||||
console.log(options)
|
||||
this.setData({
|
||||
dataUrl: decodeURIComponent(options.url), // 视频链接
|
||||
dataImage: decodeURIComponent(options.image) || '', // 视频封面
|
||||
preview: decodeURIComponent(options.preview), // 视频标题
|
||||
type: decodeURIComponent(options.type) || '', // 设置type的值
|
||||
wxid: decodeURIComponent(options.wxid) || '', // 设置微信id
|
||||
alias: decodeURIComponent(options.alias) || '', // 设置微信号
|
||||
read_count: decodeURIComponent(options.read_count) || 0, // 设置微信号
|
||||
});
|
||||
wx.showShareMenu({
|
||||
withShareTicket: true,
|
||||
menus: ['shareAppMessage', 'shareTimeline']
|
||||
})
|
||||
|
||||
},
|
||||
onShow: function () {
|
||||
|
||||
app.checkUpdateVersion()
|
||||
// 页面显示前更新数据
|
||||
console.log('执行video.js onShow')
|
||||
app.getPopupConfig()
|
||||
.then(() => {
|
||||
// 从本地缓存读取数据
|
||||
const isEnabled = wx.getStorageSync('popupEnabled');
|
||||
const popupType = wx.getStorageSync('popupType');
|
||||
const popupContent = wx.getStorageSync('popupContent');
|
||||
|
||||
if (isEnabled) {
|
||||
this.setData({
|
||||
showPopup: true,
|
||||
popupType: popupType,
|
||||
popupContent: popupContent
|
||||
});
|
||||
}
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('获取弹窗配置失败:', error);
|
||||
});
|
||||
console.log(this.data.type)
|
||||
app.getUserInfo().then(() => {
|
||||
console.log('获取用户信息开始');
|
||||
console.log(wx.getStorageSync('defaultDailyFreeParseNum'), )
|
||||
// 判断type,并发送提取记录到后端
|
||||
if (this.data.type === 'weixin' & wx.getStorageSync('defaultDailyFreeParseNum') > 0) {
|
||||
console.log('来源微信')
|
||||
this.getVideoSize(decodeURIComponent(this.data.dataUrl))
|
||||
//更新次数
|
||||
} else {
|
||||
this.getVideoSize(app.globalData.downloadPrefix + decodeURIComponent(this.data.dataUrl))
|
||||
}
|
||||
console.log('获取用户信息结束');
|
||||
}).catch(error => {
|
||||
console.error('获取用户信息失败:', error);
|
||||
}).finally(() => {
|
||||
console.log('getUserInfo调用完成');
|
||||
});
|
||||
wx.showToast({
|
||||
title: '提取成功',
|
||||
icon: 'success',
|
||||
duration: 1500,
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
updateExtractingStatus: function (status) {
|
||||
console.log(status)
|
||||
this.setData({
|
||||
isExtracting: status,
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
|
||||
getVideoSize: function (url) {
|
||||
let that = this;
|
||||
wx.request({
|
||||
url: url,
|
||||
method: 'HEAD', // HEAD请求不会下载资源的body,只请求header信息
|
||||
success: function (res) {
|
||||
if (res.statusCode === 200 && res.header['CONTENT-LENGTH'] || res.header['X-Content-Length']) {
|
||||
let size = res.header['CONTENT-LENGTH'] || res.header['X-Content-Length'];
|
||||
let sizeInMb = (size / (1024 * 1024)).toFixed(2); // 将大小转换为MB
|
||||
that.setData({
|
||||
videoSize: sizeInMb, // 更新页面数据,
|
||||
totalLength: size
|
||||
});
|
||||
}
|
||||
},
|
||||
fail: function (err) {
|
||||
console.log('获取视频大小失败', err);
|
||||
}
|
||||
});
|
||||
},
|
||||
//复制
|
||||
copyUrl: async function () {
|
||||
if (this.data.type == 'weixin') {
|
||||
wx.showLoading({
|
||||
title: '正在请求复制...',
|
||||
});
|
||||
if (!await this.CreditLimit()) return
|
||||
}
|
||||
wx.setClipboardData({
|
||||
data: this.data.dataUrl,
|
||||
success: () => {
|
||||
wx.showToast({
|
||||
title: '复制成功',
|
||||
duration: 2200,
|
||||
});
|
||||
},
|
||||
});
|
||||
},
|
||||
|
||||
// 扣除额度
|
||||
CreditLimit() {
|
||||
return new Promise((resolve, reject) => {
|
||||
app.apiRequest({
|
||||
url: '/myapp/increment-download-count/',
|
||||
method: "POST",
|
||||
data: {
|
||||
uuid: wx.getStorageSync("uuid"),
|
||||
openid: wx.getStorageSync("openid")
|
||||
},
|
||||
success: function (e) {
|
||||
console.log(e, !e.data.success)
|
||||
if (e.data.success === false) {
|
||||
wx.hideLoading()
|
||||
wx.showModal({
|
||||
title: "提取视频",
|
||||
content: '哎呀!去开通会员不限次数使用哦',
|
||||
confirmColor: "#00B269",
|
||||
cancelColor: "#858585",
|
||||
success: function (e) {
|
||||
e.confirm ? (console.log("确定"), wx.navigateTo({
|
||||
url: "../vip_recharge/vip_recharge?show=true"
|
||||
})) : e.cancel && console.log("取消");
|
||||
}
|
||||
})
|
||||
resolve(false)
|
||||
}
|
||||
resolve(true)
|
||||
}
|
||||
})
|
||||
})
|
||||
},
|
||||
onAdClick: function() {
|
||||
app.广告();
|
||||
},
|
||||
//提取视频
|
||||
download: async function () {
|
||||
wx.showLoading({
|
||||
title: '正在下载...',
|
||||
});
|
||||
if (this.data.type == 'weixin') {
|
||||
if (!await this.CreditLimit()) return
|
||||
}
|
||||
var t = this,
|
||||
e = t.data.dataUrl;
|
||||
if (t.data.type === 'index') {
|
||||
e = app.globalData.downloadPrefix + t.data.dataUrl; // 通过nginx中转
|
||||
} else {
|
||||
e = t.data.dataUrl;
|
||||
}
|
||||
// 开始实际的下载任务
|
||||
const downloadTask = wx.downloadFile({
|
||||
url: e,
|
||||
success: function (o) {
|
||||
wx.hideLoading();
|
||||
wx.saveVideoToPhotosAlbum({
|
||||
filePath: o.tempFilePath,
|
||||
success: function (o) {
|
||||
t.showToast('保存成功', 'success');
|
||||
setTimeout(function () {
|
||||
wx.setClipboardData({
|
||||
data: '',
|
||||
});
|
||||
t.goBack();
|
||||
}, 1000);
|
||||
},
|
||||
fail: function (o) {
|
||||
t.showToast('保存失败');
|
||||
}
|
||||
});
|
||||
},
|
||||
fail: function (o) {
|
||||
wx.hideLoading();
|
||||
t.showToast('下载失败');
|
||||
}
|
||||
});
|
||||
|
||||
// 监听下载进度并计算百分比
|
||||
downloadTask.onProgressUpdate((o) => {
|
||||
let percent = this.data.totalLength ? (o.totalBytesWritten / this.data.totalLength) * 100 : o.progress;
|
||||
if (percent < 100) {
|
||||
wx.showToast({
|
||||
title: `保存中 ${Math.round(percent)}%`,
|
||||
mask: true, // 添加 mask 参数,保证覆盖式显示
|
||||
icon: 'loading'
|
||||
});
|
||||
} else {
|
||||
wx.hideLoading(); // 下载完成后隐藏加载提示
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// showToast: function (title, icon = 'none') {
|
||||
// wx.showToast({
|
||||
// title: title,
|
||||
// icon: icon,
|
||||
// duration: 2000
|
||||
// });
|
||||
// },
|
||||
|
||||
|
||||
|
||||
// 保存到相册
|
||||
postSave: function () {
|
||||
|
||||
var that = this;
|
||||
wx.getSetting({
|
||||
success(res) {
|
||||
// 检查用户是否已授权小程序写入相册的权限
|
||||
if (res.authSetting['scope.writePhotosAlbum']) {
|
||||
// 用户已授权,下载视频
|
||||
that.download();
|
||||
} else {
|
||||
// 用户未授权,请求相册权限
|
||||
wx.authorize({
|
||||
scope: 'scope.writePhotosAlbum',
|
||||
success() {
|
||||
// 用户授权成功,下载视频
|
||||
that.download();
|
||||
},
|
||||
fail() {
|
||||
// 用户拒绝授权,显示提示对话框引导用户开启权限
|
||||
wx.showModal({
|
||||
title: '提示',
|
||||
content: '保存视频到相册需要您授权',
|
||||
showCancel: false,
|
||||
success(modalRes) {
|
||||
if (modalRes.confirm) {
|
||||
// 引导用户前往设置页面手动开启权限
|
||||
wx.openSetting({
|
||||
success(settingData) {
|
||||
if (settingData.authSetting['scope.writePhotosAlbum']) {
|
||||
// 用户在设置页面授权成功,下载视频
|
||||
that.download();
|
||||
} else {
|
||||
// 用户最终未授权,可能需要展示一些提示信息
|
||||
wx.showToast({
|
||||
title: '授权失败,无法保存视频',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
},
|
||||
|
||||
|
||||
performDownload: function () {
|
||||
// 在这里实现下载视频并保存到相册的逻辑
|
||||
this.download();
|
||||
},
|
||||
|
||||
|
||||
removeTimestampAndMergeLines: function (textWithTimestamp) {
|
||||
let txt = textWithTimestamp.replace(/\[.*\]/g, ""); // 去掉时间前缀
|
||||
console.log(txt);
|
||||
txt = txt.replace(/\s+/g, ""); // 去掉换行、空格字符
|
||||
console.log(txt);
|
||||
return txt; // 删除前后的空白字符并返回
|
||||
},
|
||||
|
||||
// 提取文案功能
|
||||
extractText: function () {
|
||||
// if (this.data.videoSize > 300 || !this.data.videoSize) {
|
||||
// wx.showToast({
|
||||
// title: '视频太大,无法提取',
|
||||
// icon: 'none'
|
||||
// })
|
||||
// return
|
||||
// }
|
||||
let openid = wx.getStorageSync('openid') || '';
|
||||
let uuid = wx.getStorageSync('uuid') || '';
|
||||
let type = this.data.type || '';
|
||||
let wxid = this.data.wxid || '';
|
||||
let alias = this.data.alias || '';
|
||||
let url = this.data.dataUrl;
|
||||
console.log('文案提取:' + url);
|
||||
wx.showLoading({
|
||||
title: '后台处理中',
|
||||
});
|
||||
var that = this;
|
||||
app.apiRequest({
|
||||
url: '/myapp/video_to_text/', // 后端接口URL,根据实际情况调整
|
||||
method: 'POST',
|
||||
header: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
data: {
|
||||
url: url,
|
||||
openid: openid,
|
||||
uuid: uuid,
|
||||
type: type,
|
||||
wxid: wxid,
|
||||
alias: alias,
|
||||
},
|
||||
success(res) {
|
||||
if (res.data.success === false) {
|
||||
wx.showModal({
|
||||
title: "提取视频",
|
||||
content: '哎呀!去开通会员不限次数使用哦',
|
||||
confirmColor: "#00B269",
|
||||
cancelColor: "#858585",
|
||||
success: function (e) {
|
||||
e.confirm ? (console.log("确定"), wx.navigateTo({
|
||||
url: "../vip_recharge/vip_recharge?show=true"
|
||||
})) : e.cancel && console.log("取消");
|
||||
}
|
||||
})
|
||||
wx.hideLoading()
|
||||
return
|
||||
}
|
||||
let data = res.data;
|
||||
let taskId = (data?.Data?.TaskId) || data.task_id;
|
||||
if (data.result) {
|
||||
wx.hideLoading();
|
||||
let text = that.removeTimestampAndMergeLines(data.result);
|
||||
text = encodeURIComponent(text);
|
||||
wx.navigateTo({
|
||||
url: "../extract/extract?text=" + text + "&type=" + type + "&wxid=" + wxid + "&alias=" + alias,
|
||||
});
|
||||
|
||||
} else if (taskId) {
|
||||
that.search_result(taskId, openid, uuid, type, wxid, alias, (result) => {
|
||||
wx.hideLoading();
|
||||
console.log('处理查询结果:', result);
|
||||
if (result != 0) {
|
||||
wx.showToast({
|
||||
title: '提取成功',
|
||||
icon: 'success'
|
||||
});
|
||||
|
||||
let text = that.removeTimestampAndMergeLines(result);
|
||||
text = encodeURIComponent(text);
|
||||
wx.navigateTo({
|
||||
url: "../extract/extract?text=" + text + "&type=" + type + "&wxid=" + wxid + "&alias=" + alias,
|
||||
});
|
||||
} else {
|
||||
wx.showToast({
|
||||
title: '异常',
|
||||
icon: 'error'
|
||||
});
|
||||
}
|
||||
});
|
||||
} else {
|
||||
wx.showToast({
|
||||
title: '发送文件失败',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
},
|
||||
fail(err) {
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: '网络异常',
|
||||
icon: 'none'
|
||||
});
|
||||
}
|
||||
});
|
||||
},
|
||||
|
||||
// 查询任务状态
|
||||
search_result: function (task_id, openid, uuid, type, wxid, alias, handleResult) {
|
||||
console.log('查询任务');
|
||||
const checkResult = (maxRetries) => {
|
||||
const fetchTaskStatus = () => {
|
||||
app.apiRequest({
|
||||
url: '/myapp/query_task/',
|
||||
method: 'POST',
|
||||
header: {
|
||||
'content-type': 'application/json',
|
||||
},
|
||||
data: {
|
||||
task_id: task_id,
|
||||
openid: openid,
|
||||
uuid: uuid,
|
||||
type: type,
|
||||
wxid: wxid,
|
||||
alias: alias,
|
||||
},
|
||||
success: function (res) {
|
||||
const data = res.data;
|
||||
console.log('查询任务:', data)
|
||||
if (data.result) {
|
||||
handleResult(data.result);
|
||||
} else if (maxRetries > 0) {
|
||||
setTimeout(fetchTaskStatus, 3000); // 每3秒查询一次
|
||||
maxRetries--;
|
||||
} else {
|
||||
wx.hideLoading();
|
||||
wx.showToast({
|
||||
title: '请稍重试',
|
||||
icon: 'error'
|
||||
});
|
||||
handleResult(0);
|
||||
console.log('已达到最大重试次数,停止查询。');
|
||||
}
|
||||
},
|
||||
});
|
||||
};
|
||||
fetchTaskStatus(); // 启动任务状态查询
|
||||
};
|
||||
|
||||
const maxRetries = 100;
|
||||
checkResult(maxRetries);
|
||||
},
|
||||
|
||||
// 去掉时间戳并合并行
|
||||
removeTimestampAndMergeLines: function (textWithTimestamp) {
|
||||
let txt = textWithTimestamp.replace(/\[.*\]/g, ""); // 去掉时间前缀
|
||||
console.log(txt);
|
||||
txt = txt.replace(/\s+/g, ""); // 去掉换行、空格字符
|
||||
console.log(txt);
|
||||
return txt; // 删除前后的空白字符并返回
|
||||
},
|
||||
|
||||
// 更新提取状态
|
||||
updateExtractingStatus: function (status) {
|
||||
this.setData({
|
||||
extracting: status
|
||||
});
|
||||
},
|
||||
onUnload: function () {
|
||||
console.log('页面卸载');
|
||||
},
|
||||
goBack: function () {
|
||||
wx.reLaunch({
|
||||
url: '/pages/index/index',
|
||||
});
|
||||
},
|
||||
|
||||
showToast: function (title, icon = 'none', duration = 2000) {
|
||||
wx.showToast({
|
||||
title: title,
|
||||
icon: icon,
|
||||
duration: duration
|
||||
});
|
||||
},
|
||||
|
||||
|
||||
onShareAppMessage: function () {
|
||||
return {
|
||||
title: '推荐一款免费又超好用的视频文案创作工具,分享给大家一起使用',
|
||||
path: '/pages/index/index?uuid=' + wx.getStorageSync('uuid'),
|
||||
imageUrl: '/images/1.png',
|
||||
success: function (e) {
|
||||
wx.showToast({
|
||||
title: "分享成功",
|
||||
icon: "success",
|
||||
duration: 2e3
|
||||
});
|
||||
},
|
||||
fail: function (e) {
|
||||
wx.showToast({
|
||||
title: "分享失败",
|
||||
icon: "none",
|
||||
duration: 2e3
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
onShareTimeline: function () {
|
||||
return {
|
||||
title: '推荐一款免费又超好用的视频文案创作工具,分享给大家一起使用',
|
||||
path: '/pages/index/index?uuid=' + wx.getStorageSync('uuid'),
|
||||
imageUrl: '/images/1.png',
|
||||
success: function (e) {
|
||||
wx.showToast({
|
||||
title: "分享成功",
|
||||
icon: "success",
|
||||
duration: 2e3
|
||||
});
|
||||
},
|
||||
fail: function (e) {
|
||||
wx.showToast({
|
||||
title: "分享失败",
|
||||
icon: "none",
|
||||
duration: 2e3
|
||||
});
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
|
||||
// 发送提取记录到后端的方法
|
||||
sendExtractionRecordToBackend: function (e) {
|
||||
const {
|
||||
dataUrl,
|
||||
dataImage,
|
||||
preview,
|
||||
wxid,
|
||||
alias
|
||||
} = this.data;
|
||||
app.apiRequest({
|
||||
url: '/myapp/record_extraction/', // 后端接口URL
|
||||
method: 'POST',
|
||||
data: {
|
||||
openid: wx.getStorageSync('openid'),
|
||||
uuid: wx.getStorageSync('uuid'),
|
||||
videoUrl: dataUrl,
|
||||
videoTitle: preview,
|
||||
wxid: wxid,
|
||||
wechatAlias: alias,
|
||||
type: e || 'weixin'
|
||||
},
|
||||
success(res) {
|
||||
console.log('提取记录发送成功', res);
|
||||
// 可以在这里处理后端返回的响应
|
||||
},
|
||||
fail(err) {
|
||||
console.error('提取记录发送失败', err);
|
||||
// 错误处理
|
||||
}
|
||||
});
|
||||
},
|
||||
});
|
||||
10
pages/video/video.json
Normal file
10
pages/video/video.json
Normal file
@@ -0,0 +1,10 @@
|
||||
{
|
||||
"navigationBarTitleText": "视频提取浏览",
|
||||
"navigationBarBackgroundColor": "#222238",
|
||||
"navigationBarTextStyle": "white",
|
||||
"component": true,
|
||||
"custom-tab-bar": "/custom-tab-bar/index",
|
||||
"usingComponents": {
|
||||
"popup": "/popup/popup"
|
||||
}
|
||||
}
|
||||
28
pages/video/video.wxml
Normal file
28
pages/video/video.wxml
Normal file
@@ -0,0 +1,28 @@
|
||||
<view class="wrap">
|
||||
<textarea autoHeight class="video-title" value="{{preview}}"></textarea>
|
||||
<video class="video-box" poster="{{dataImage}}" src="{{dataUrl}}" wx:if="{{dataUrl!=''}}"></video>
|
||||
<image class="video-box" src="{{dataImage}}" wx:else></image>
|
||||
<view style="font-size: 10px; text-align: center; color: #a790e2;font-size: 15px;">视频太大的建议复制地址到浏览器自行下载</view>
|
||||
<view style="font-size: 10px; text-align: center;color: #a790e2;font-size: 15px;">保存失败的也复制链接到浏览器下载</view>
|
||||
<view style="width: 100%;"></view>
|
||||
<view class="buttons-row">
|
||||
<button bindgetuserinfo="postSave" class="parsing" openType="getUserInfo">保存到相册</button>
|
||||
<button bindtap="copyUrl" class="parsing copy-url">复制地址</button>
|
||||
</view>
|
||||
<view class="buttons-row">
|
||||
<button bindtap="extractText" class="parsing extract-text" data-url="{{dataUrl}}" disabled="{{isExtracting}}">视频文案提取</button>
|
||||
<button bindtap="goBack" class="parsing go-back">返回首页</button>
|
||||
</view>
|
||||
<view class="center" style="color: #a790e2; margin-top: 10px;font-size: 13px;">版权归视频原作者所有</view>
|
||||
<!-- <view bindtap="onAdClick" class="advertisement">
|
||||
<image src="https://file.guimiaokeji.com/kecheng.png"></image>
|
||||
</view> -->
|
||||
</view>
|
||||
|
||||
<popup
|
||||
wx:if="{{showPopup}}"
|
||||
popupType="{{popupType}}"
|
||||
popupContent="{{popupContent}}"
|
||||
buttonText="查看详情"
|
||||
targetUrl="/pages/details/details"
|
||||
/>
|
||||
89
pages/video/video.wxss
Normal file
89
pages/video/video.wxss
Normal file
@@ -0,0 +1,89 @@
|
||||
page {
|
||||
background-color: #222238;
|
||||
border-top: 1px solid hsla(0,31%,87%,.5);
|
||||
}
|
||||
|
||||
.wrap {
|
||||
align-items: center;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
.buttons-row,.wrap {
|
||||
display: flex;
|
||||
}
|
||||
|
||||
.buttons-row {
|
||||
justify-content: space-around;
|
||||
margin-top: 20rpx;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.video-box {
|
||||
display: block;
|
||||
height: 700rpx;
|
||||
margin: 40rpx auto;
|
||||
width: 560rpx;
|
||||
}
|
||||
|
||||
.video-title {
|
||||
word-wrap: break-word;
|
||||
background-color: #333;
|
||||
color: #a790e2;
|
||||
height: 50px;
|
||||
margin-top: 10px;
|
||||
padding: 8px;
|
||||
user-select: text;
|
||||
white-space: pre-wrap;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.parsing {
|
||||
background: linear-gradient(90deg,#6949bb,#4052ca);
|
||||
box-shadow: 0 14rpx 28rpx rgba(51,122,255,.3);
|
||||
color: #fff;
|
||||
display: inline-block;
|
||||
height: 88rpx;
|
||||
line-height: 88rpx;
|
||||
overflow: hidden;
|
||||
text-align: center;
|
||||
width: 320rpx;
|
||||
}
|
||||
|
||||
.copy-url,.extract-text {
|
||||
background: linear-gradient(90deg,#6949bb,#4d65fd);
|
||||
}
|
||||
|
||||
.go-back {
|
||||
background-color: #f8f8f8;
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
.video-title-textarea {
|
||||
background-color: #f8f8f8;
|
||||
border: 1px solid #ccc;
|
||||
border-radius: 5rpx;
|
||||
color: #333;
|
||||
display: block;
|
||||
font-size: 20rpx;
|
||||
height: 80rpx;
|
||||
line-height: 1.5;
|
||||
margin: 20rpx auto;
|
||||
padding: 15rpx;
|
||||
resize: none;
|
||||
width: 90%;
|
||||
}
|
||||
|
||||
.read_count {
|
||||
color: blue;
|
||||
font-size: 1rem;
|
||||
}
|
||||
|
||||
.advertisement {
|
||||
margin: 5px 0;
|
||||
width: 100%;
|
||||
z-index: 9999;
|
||||
}
|
||||
|
||||
.advertisement image {
|
||||
width: 100%;
|
||||
}
|
||||
Reference in New Issue
Block a user