// ==UserScript==
// @name Firbase批量创建表单
// @namespace http://tampermonkey.net/
// @version 1.0
// @description 通过创建excel批量上传表单
// @author zjl
// @match https://console.firebase.google.com/project/*
// @icon https://www.gstatic.com/mobilesdk/160503_mobilesdk/logo/favicon.ic
// @require https://cdn.bootcdn.net/ajax/libs/jquery/3.6.4/jquery.js
// @require https://cdn.bootcdn.net/ajax/libs/xlsx/0.18.5/xlsx.core.min.js
// @grant GM_openInTab
// @grant GM_setValue
// @grant GM_getValue
// @grant window.onurlchange
// @grant unsafeWindow
// @license MIT
// ==/UserScript==
(function() {
'use strict';
// Your code here...
var goLink
var result
var count=0
var rate=500
var reloadFalg=true
if (window.onurlchange === null) {
window.addEventListener('urlchange', async (info) => {
reloadFalg=false
var { url } = info
if (/index=(\d+)/.exec(url)){
var index = /index=(\d+)/.exec(url)[1]
var results = await GM.getValue("excel", []);
result=results[index]
}
if (
RegExp(
/https:\/\/console\.firebase\.google\.com\/project\/[\w-]+\/messaging/
).test(url)
) {
checkObj('.filter-chips-row', function (obj) {
const regex = /\/project\/(.+?)\//
const match = url.match(regex)
const projectId = match[1]
goLink = `https://console.firebase.google.com/project/${projectId}/notification/compose`
addExcel()
})
} else if (
RegExp(
/https:\/\/console\.firebase\.google\.com\/project\/[\w-]+\/notification\/compose/
).test(url)
) {
if (/campaignId=(\d+)/.exec(url)){
return
}else{
console.log('enter-do')
//执行函数
checkObj('.banner-content', function (obj) {
Do()
})
}
}
},true)
let timer=setTimeout(()=>{
if (reloadFalg){
window.location.reload()
clearTimeout(timer)
}
},5000)
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
async function checkObj(selection, fn) {
while (true) {
// 每隔一段时间刷新页面
await sleep(200);
let obj = $(selection).eq(0) //声明要查询的对象
if (obj) {
$('.mat-drawer-backdrop.mat-drawer-shown.ng-star-inserted').click()
//判断对象是否存在,存在则开始设置值
fn(obj)
break;
}
}
}
function padding(fn) {
count+=1
var timer = setTimeout(() => {
fn()
clearTimeout(timer)
}, count*rate)
}
function formatDate(serial, format) {
var utc_days = Math.floor(serial - 25569);
var utc_value = utc_days * 86400;
var date_info = new Date(utc_value * 1000);
var fractional_day = serial - Math.floor(serial) + 0.0000001;
var total_seconds = Math.floor(86400 * fractional_day);
var seconds = total_seconds % 60;
total_seconds -= seconds;
var hours = Math.floor(total_seconds / (60 * 60));
var minutes = Math.floor(total_seconds / 60) % 60;
var daytime = new Date(date_info.getFullYear(), date_info.getMonth(), date_info.getDate(), hours, minutes, seconds);
var returnDate = date_info.getFullYear();
returnDate += format + (date_info.getMonth() < 9 ? '0' + (date_info.getMonth() + 1) : (date_info.getMonth() + 1));
returnDate += format + (date_info.getDate() < 10 ? '0' + date_info.getDate() : date_info.getDate());
returnDate += " " + (daytime.getHours() < 10 ? '0' + daytime.getHours() : daytime.getHours());
returnDate += ":" + (daytime.getMinutes() < 10 ? '0' + daytime.getMinutes() : daytime.getMinutes());
return returnDate;
}
function step1() {
return new Promise(resolve => {
padding(() => {
$('.message-title').focus()
document.execCommand('inserttext', false, result['推送标题'])
})
padding(() => {
$('.message-text').focus()
document.execCommand('inserttext', false, result['推送文案'])
})
padding(() => {
if (result['推送资源名称']){
$('.message-label').focus()
document.execCommand('inserttext', false, result['推送资源名称'])
}
})
padding(()=>{
$('.notification-image-input').focus()
document.execCommand('inserttext', false, result['图片链接'])
})
padding(() => {
$('.mat-focus-indicator .mat-stepper-next').eq(0).click()
})
resolve()
});
}
function step2() {
return new Promise(resolve => {
checkObj('.mat-select-trigger', () => {
padding(() => {
$('.mat-select-trigger').eq(0).click()
})
padding(() => {
$(`.mat-option-text:contains(${result["定向应用"]})`).eq(0).click()
})
if (result["用户选择1"]){
padding(() => {
$('.mat-focus-indicator.and-button.mat-button').eq(0).click()
})
padding(()=>{
$('.mat-focus-indicator.mat-menu-trigger.trigger.mat-button.mat-button-base')
.eq(1)
.click()
$(`option-title:contains(${result["用户选择1"]})`).click()
})
padding(() => {
$('.mat-select-min-line').eq(0).click()
$(`.mat-option-text:contains(${result["用户选择2"]})`).click()
})
padding(() => {
$('.mat-select-min-line').eq(1).click()
let clickElement=result["用户选择3"].split('/')
for(let i=0;i<clickElement.length;i++){
$(`enumerated-option:contains(${clickElement[i]})`).click()
}
$('.cdk-overlay-backdrop-showing').eq(0).click()
})
padding(()=>{
$('.cdk-overlay-backdrop-showing').eq(0).click()
})
}
padding(() => {
$('.mat-focus-indicator.mat-stepper-next').eq(1).click()
})
padding(()=>{
$('.cdk-overlay-backdrop-showing').eq(0).click()
})
resolve()
})
});
}
function step3() {
var monthEnglish=new Map()
monthEnglish.set("01","JAN")
monthEnglish.set("02","FEB")
monthEnglish.set("03","MAR")
monthEnglish.set("04","APR")
monthEnglish.set("05","MAY")
monthEnglish.set("06","JUN")
monthEnglish.set("07","JUL")
monthEnglish.set("08","AUG")
monthEnglish.set("09","SEP")
monthEnglish.set("10","OCT")
monthEnglish.set("11","NOV")
monthEnglish.set("12","DEC")
let PushDateTime=formatDate((result['推送日期']-0)+( result['推送时间']-0),'/')
let PushDate=PushDateTime.split(" ")[0]
let PushTime=PushDateTime.split(" ")[1]
console.log(PushTime)
var nowDay=PushDate.split('/')[2]
var nowMonth=PushDate.split('/')[1]
var nowMonthFlag= monthEnglish.get(`${nowMonth+''}`)
return new Promise(resolve => {
padding(() => {
$('.mat-menu-trigger.can-recur').click()
})
padding(() => {
$('.mat-focus-indicator.mat-menu-trigger.mat-menu-item').click()
})
padding(()=>{
for(let i=1;i<=12;i++){
if ($(`tr:contains(${nowMonthFlag})`).length>0){
break
}else{
$('.mat-calendar-next-button').eq(0).click()
}
}
})
padding(() => {
$(`span:contains(${nowDay})`).eq(0).click()
})
padding(()=>{
$('.c5e-input-container.dense.ng-star-inserted').eq(0).children(':first-child').attr('type','text')
$('.c5e-input-container.dense.ng-star-inserted').eq(0).children(':first-child').val('')
$('.c5e-input-container.dense.ng-star-inserted').eq(0).children(':first-child').focus()
document.execCommand('inserttext', false, PushTime+'')
$('.mat-focus-indicator.mat-stepper-next').eq(2).click()
})
resolve()
});
}
function step4(){
return new Promise(resolve=>{
padding(()=>{
$('.c5e-input-element.trigger-btn').eq(0).click()
})
padding(()=>{
$(`button:contains(${result['转化事件']})`).eq(0).click()
$('.mat-focus-indicator.mat-stepper-next').eq(3).click()
})
resolve()
})
}
function step5() {
return new Promise(resolve=>{
padding(()=>{
window.scrollTo(0, document.documentElement.scrollHeight)
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
document.querySelectorAll('.c5e-input-container.gcm-high-density-container.key')[0].childNodes[0].focus()
document.execCommand('inserttext', false, result['自定义1'])
document.querySelectorAll('.c5e-input-container.gcm-high-density-container.value')[0].childNodes[0].focus()
document.execCommand('inserttext', false, result['自定义1-value'])
})
if(result['自定义2']){
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
document.querySelectorAll('.c5e-input-container.gcm-high-density-container.key')[1].childNodes[0].focus()
document.execCommand('inserttext', false, result['自定义2'])
document.querySelectorAll('.c5e-input-container.gcm-high-density-container.value')[1].childNodes[0].focus()
document.execCommand('inserttext', false, result['自定义2-value'])
})
}
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
if ( $('label:contains(Apple badge)').length>0 ){
console.log('eenter')
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
$('.mat-select-min-line').eq(1).click()
$(`.mat-option:contains(${result['声音']})`).eq(0).click()
})
if (result['Apple Badge']){
if (result['Apple Badge']==='Enabled'){
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
$('.mat-select-min-line').eq(2).click()
$(`.mat-option:contains(${result['Apple Badge']})`).eq(0).click()
})
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
document.querySelectorAll('.badge-count-input')[0].value=''
document.querySelectorAll('.badge-count-input')[0].focus()
document.execCommand('inserttext', false, result['Badge Count'])
})
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
let expires_time=result['过期时间1']
$('.mat-select-min-line').eq(3).click()
$(`.mat-option-text:contains(${expires_time})`).eq(0).click()
$('.mat-vertical-stepper-content').eq(4).click()
})
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
let expires_day=result['过期时间2']
$('.mat-select-min-line').eq(4).click()
$(`.mat-option-text:contains(${expires_day})`).eq(0).click()
$('.mat-vertical-stepper-content').eq(4).click()
resolve()
})
}
else{
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
$('.mat-select-min-line').eq(2).click()
})
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
$(`.mat-option:contains(${result['Apple Badge']})`).eq(0).click()
$('.mat-vertical-stepper-content').eq(4).click()
})
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
let expires_time=result['过期时间1']
$('.mat-select-min-line').eq(3).click()
$(`.mat-option-text:contains(${expires_time})`).eq(0).click()
$('.mat-vertical-stepper-content').eq(4).click()
})
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
let expires_day=result['过期时间2']
$('.mat-select-min-line').eq(4).click()
$(`.mat-option-text:contains(${expires_day})`).eq(0).click()
$('.mat-vertical-stepper-content').eq(4).click()
resolve()
})
}
}
}else{
console.log('else')
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
$('.mat-select-min-line').eq(0).click()
$(`.mat-option:contains(${result['声音']})`).eq(0).click()
$('.mat-vertical-stepper-content').eq(4).click()
})
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
let expires_time=result['过期时间1']
$('.mat-select-trigger').eq(2).click()
$('.mat-option-text').filter(`span:contains(${expires_time})`).eq(0).click()
$('.mat-vertical-stepper-content').eq(4).click()
})
padding(()=>{
$('.cdk-overlay-backdrop').remove()
$('.cdk-overlay-connected-position-bounding-box').remove()
let expires_day=result['过期时间2']
$('.mat-select-trigger').eq(3).click()
$('.mat-option-text').filter(`span:contains(${expires_day})`).eq(0).click()
$('.mat-vertical-stepper-content').eq(4).click()
resolve()
})
}
})
})
}
function step6(){
return new Promise(resolve=>{
padding(() => {
$('button:contains(Review)').eq(0).click()
})
padding(() => {
$('button:contains(Publish)').eq(0).click()
})
resolve()
})
}
async function Do() {
await step1()
await step2()
await step3()
await step4()
await step5()
await step6()
}
function getHeaderRow(sheet) {
const headers = []
const range = XLSX.utils.decode_range(sheet['!ref'])
let C
const R = range.s.r
/* start in the first row */
for (C = range.s.c; C <= range.e.c; ++C) {
/* walk every column in the range */
const cell = sheet[XLSX.utils.encode_cell({ c: C, r: R })]
/* find the cell in the first row */
// let hdr = 'UNKNOWN ' + C // <-- replace with your desired default
if (cell && cell.t) {
let hdr = XLSX.utils.format_cell(cell)
headers.push(hdr)
}
}
return headers
}
function openTab(index) {
GM_openInTab(`${goLink}?index=${index}`)
}
function getExcelData(rawFile) {
const reader = new FileReader()
reader.onload = async (e) => {
const data = e.target.result
const workbook = XLSX.read(data, { type: 'array' })
const firstSheetName = workbook.SheetNames[0]
const worksheet = workbook.Sheets[firstSheetName]
const header = getHeaderRow(worksheet)
const results = XLSX.utils.sheet_to_json(worksheet)
console.log(header, results)
await GM.setValue("excel",results);
for (let i = 0; i < results.length; i++) {
openTab(i)
}
}
reader.readAsArrayBuffer(rawFile)
}
function addExcel() {
if ($('#upExcel')) {
$('#upExcel').remove()
$('#upExcelLabel').remove()
}
var button = document.createElement('input')
button.setAttribute('type', 'file')
button.setAttribute('id', 'upExcel')
button.style.display = 'none'
button.textContent = '上传excel'
button.addEventListener('change', (event) => {
getExcelData(event.target.files[0])
})
var label = document.createElement('label')
label.setAttribute('for', 'upExcel')
label.setAttribute('id', 'upExcelLabel')
var conten = document.createElement('div')
conten.setAttribute('id', 'uploadContent')
conten.textContent = '上传Excel'
label.append(conten)
$('.ng-star-inserted').eq(0).prepend(label)
$('.ng-star-inserted').eq(0).prepend(button)
$('#uploadContent').css({
width: '80px',
'background-color': 'orange',
'text-align': 'center',
'font-size': '12px',
'border-radius': '5px',
padding: '5px 10px'
})
}
})();