1
0
mirror of https://gitee.com/bitdance-team/chrome-extension synced 2025-01-12 14:48:13 +08:00
Code Issues Projects Releases Wiki Activity GitHub Gitee
chrome-extension/packages/shell-chrome/assets/html/screenshot/js/content.js
2022-02-06 02:42:55 +08:00

133 lines
3.4 KiB
JavaScript
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.

var jcrop, selection
var relativePath = 'assets/html/screenshot'
var overlay = ((active) => (state) => {
active = typeof state === 'boolean' ? state : state === null ? active : !active
$('.jcrop-holder')[active ? 'show' : 'hide']()
chrome.runtime.sendMessage({ message: 'active', senderId: "screenshot", active })
})(false)
var image = (done) => {
var image = new Image()
image.id = 'fake-image'
image.src = chrome.runtime.getURL(relativePath + '/images/pixel.png')
image.onload = () => {
$('body').append(image)
done()
}
}
var init = (done) => {
$('#fake-image').Jcrop({
bgColor: 'none',
onSelect: (e) => {
selection = e
capture()
},
onChange: (e) => {
selection = e
},
onRelease: (e) => {
setTimeout(() => {
selection = null
}, 100)
}
}, function ready() {
jcrop = this
$('.jcrop-hline, .jcrop-vline').css({
backgroundImage: `url(${chrome.runtime.getURL(relativePath + '/images/Jcrop.gif')})`
})
if (selection) {
jcrop.setSelect([
selection.x, selection.y,
selection.x2, selection.y2
])
}
done && done()
})
}
var capture = (force) => {
chrome.storage.sync.get((config) => {
console.log(config)
if (selection && (config.method === 'crop' || (config.method === 'wait' && force))) {
jcrop.release()
setTimeout(() => {
console.log("准备capture")
chrome.runtime.sendMessage({
message: 'capture', senderId: "screenshot", area: selection, dpr: devicePixelRatio
}, (res) => {
console.log("capture回调结果", res)
return // 变通
overlay(false)
selection = null
save(res.image, config.format, config.save)
})
}, 50)
}
else if (config.method === 'view') {
chrome.runtime.sendMessage({
message: 'capture', senderId: "screenshot",
area: { x: 0, y: 0, w: innerWidth, h: innerHeight }, dpr: devicePixelRatio
}, (res) => {
overlay(false)
save(res.image, config.format, config.save)
})
}
})
}
var filename = (format) => {
var pad = (n) => (n = n + '', n.length >= 2 ? n : `0${n}`)
var ext = (format) => format === 'jpeg' ? 'jpg' : format === 'png' ? 'png' : 'png'
var timestamp = (now) =>
[pad(now.getFullYear()), pad(now.getMonth() + 1), pad(now.getDate())].join('-')
+ ' - ' +
[pad(now.getHours()), pad(now.getMinutes()), pad(now.getSeconds())].join('-')
return `Screenshot Capture - ${timestamp(new Date())}.${ext(format)}`
}
var save = (image, format, save) => {
var link = document.createElement('a')
link.download = filename(format)
link.href = image
link.click()
}
window.addEventListener('resize', ((timeout) => () => {
clearTimeout(timeout)
timeout = setTimeout(() => {
jcrop.destroy()
init(() => overlay(null))
}, 100)
})())
chrome.runtime.onMessage.addListener((req, sender, res) => {
console.log(`进入 assets\html\screenshot\js\content.js 中的onMessage Listener`)
if (req.senderId !== "screenshot") {
// 抛给下一个Listener
res();
}
if (req.message === 'init') {
res({}) // prevent re-injecting
if (!jcrop) {
image(() => init(() => {
overlay()
capture()
}))
}
else {
overlay()
capture(true)
}
}
console.log(`离开 assets\html\screenshot\js\content.js 中的onMessage Listener`)
return true
})