// ==UserScript==
// @name Automaticly Check Promotion Details
// @namespace http://tampermonkey.net/
// @version 1.5
// @description Automaticly check promotion details according to title contents
// @author Tiger
// @match http://tool-bcg.bwe.io/editor/*
// @grant none
// ==/UserScript==
//测试更新345
(function() {
class AutoCheck
{
constructor(scope,title,checkBoxes,originalCurrency)
{
this.scope = scope;
this.title = title;
this.matchRes = '';
this.checkBoxes = checkBoxes;
this.len = checkBoxes.length;
this.originalCurrency = originalCurrency;
this.sitewide = false;//辅助clearance
this.sitewideChecked = this.percentChecked = this.moneyChecked = this.clearanceChecked = this.fsChecked = this.rebateChecked =this.rewardChecked = this.ftChecked = this.fdChecked =this.fgChecked= this.fsamChecked = this.bngnChecked = this.fromChecked = false;
this.lastCurrency = '';
this.lastNumber = '';
this.initScopeCheck();
this.initPromoCheck();
}
initScopeCheck()
{
this.scope[2].checked = true;
this.sitewideCheck();
}
sitewideCheck()
{
let s = this.title.value;
if(!s)return;
//|\d+%?\s(\w+\s)+\D+\s?\d+\+?(\s(?!on)|$|,)
this.matchRes = s.match(/ on \D+\s?\d+\+?|sitewide|site wide|(whole|entire) site|(all|every|each|any|your|all of your|entire) (order|orders|purchase|purchases|product|products|merchandise|item|items)|(((when (spend|spending|you spend)|with (order|purchase|orders|purchases) of) \D+\s?\d+\+?)|with \D+\d+\+?(\s(order|purchase|orders|purchases))+)($|\s(?!on))/gi);
if(this.matchRes===null)
{
this.sitewideChecked = false;
this.scope[0].checked = false;
this.scope[2].checked = true;
}
else
{
if(!this.sitewideChecked)
{
this.sitewideChecked = true;
this.scope[0].checked = true;
}
}
}
promoDetailCheck(index,regRule,flag,FnSuccess=function(){},FnFail=function(){},specialCheck=false)
{
let s = this.title.value;
if(!s)return;
this.matchRes = s.match(regRule);
switch(specialCheck)
{
case 1:
if(this.matchRes===null)
{
this.checkBoxes[index].checked = false;
FnFail();
}
else
{
FnSuccess();
}
break;
default:
if(this.matchRes===null)
{
flag = false;
this.checkBoxes[index].checked = false;
FnFail();
}
else
{
if(!flag)
{
flag = true;
this.checkBoxes[index].checked = true;
FnSuccess();
}
}
break;
}
}
fsCheck()
{
let regRule = /((free|complimentary)+(.*)?(shipp|shipment|fs|s&h|delivery|postage|p&p|click)|((\$|€|£|Rs|RS\.|¥|₦|CHF|USD|CAD|GBP|POUND|RMB|AUD|INR|EUR|US$|CA$|AU$)\s?0 ship))/gi;
this.promoDetailCheck(0,regRule,this.fsChecked);
}
getCurrency(currency)
{
switch(currency)
{
case '$':
case 'usd':
case 'cad':
case 'aud':
case 'us$':
case 'ca$':
case 'au$':
currency = 'dollar';
break;
case '£':
case 'gbp':
case 'pound':
currency = 'pound';
break;
case '€':
case 'eur':
currency = 'euro';
break;
case 'rmb':
case '¥':
case 'cny':
currency = 'rmb';
break;
case 'rs':
case 'inr':
case 'rs.':
currency = 'rupee';
break;
case '₦':
currency = 'naira';
break;
case 'chf':
currency = 'chf';
break;
}
return currency;
}
moneyCheck()
{
let regRule = /(free|save|get|enjoy)?((\$|€|£|Rs|RS\.|¥|₦|CHF|USD|CAD|GBP|POUND|RMB|AUD|INR|EUR|US$|CA$|AU$)\s?)?(\d+)\s?(\$|€|£|Rs|RS\.|¥|₦|CHF|USD|CAD|GBP|POUND|RMB|AUD|INR|EUR|US$|CA$|AU$)?\s(for|on|off|discount|discounts|saving|savings|(\w+\s)+(gift card|gift certificate|voucher|gift voucher))\s?/gi;
this.promoDetailCheck(1,regRule,this.moneyChecked,()=>{
let currency = (RegExp.$3||RegExp.$5).toLowerCase();
this.checkBoxes[1].parentElement.nextElementSibling.value = this.getCurrency(currency);
this.checkBoxes[1].parentElement.nextElementSibling.nextElementSibling.value = RegExp.$4;
},()=>{
this.checkBoxes[1].parentElement.nextElementSibling.value = this.originalCurrency;
this.checkBoxes[1].parentElement.nextElementSibling.nextElementSibling.value ='';
});
}
percentCheck()
{
let regRule = /((save|get|enjoy)\s)?(\d+\.?\d+)%\s(off|discount|discounts|saving|savings|on|for)\s?/gi;
this.promoDetailCheck(2,regRule,this.percentChecked,()=>{
this.checkBoxes[2].parentElement.nextElementSibling.value = RegExp.$3;
},()=>{
this.checkBoxes[2].parentElement.nextElementSibling.value = '';
});
}
clearanceCheck()
{
this.sitewide = document.querySelector('input[value=SITE_WIDE]').checked;
if(this.sitewide)return;
let regRule = /\s?(clearan|closeout|sale)\s?/gi;
this.promoDetailCheck(3,regRule,this.clearanceChecked);
}
bngnCheck()
{
let regRule = /bogof|bogo fr|(^\d+|\s\d+) for \d+|(^\d+|\s\d+) for the price of \d+|buy \d+\s?,? get \d+ fr/gi;
this.promoDetailCheck(4,regRule,this.bngnChecked);
}
fgCheck()
{
let regRule = /\s?free\s(gift|gifts)?(?!shipping|ship|shipment|delivery|click|download|trial|(\w+\s)*sample|\D+\s?\d+\+?\s(\w+\s)+(gift card|gift certificate|voucher|gift voucher))/gi;
this.promoDetailCheck(5,regRule,this.fgChecked,()=>{
this.checkBoxes[5].checked = true;
},function(){},true);
}
fsamCheck()
{
let regRule = /\s?free\s(\w+\s)*sample/gi;
this.promoDetailCheck(6,regRule,this.fgChecked,()=>{
this.checkBoxes[6].checked = true;
},function(){},true);
}
fdCheck()
{
let regRule = /(free)+(.*)?\sdownload/gi;
this.promoDetailCheck(7,regRule,this.fdChecked);
}
ftCheck()
{
let regRule = /(free)+(.*)?\strial/gi;
this.promoDetailCheck(8,regRule,this.ftChecked);
}
rebateCheck()
{
let regRule = /\srebate(\s|$)/gi;
this.promoDetailCheck(9,regRule,this.rebateChecked);
}
rewardCheck()
{
let regRule = /\s(reward|rewards|bonus|cashback|cash back)(\s|$)/gi;
this.promoDetailCheck(10,regRule,this.rewardChecked);
}
otherCheck()
{
let s = this.title.value;
if(!s)
{
this.checkBoxes[11].checked = false;
return;
}
let isAnyoneChecked = false;
for(let i=0; i<this.len; i++)
{
if(i===11)continue;
if(this.checkBoxes[i].checked)
{
isAnyoneChecked = true;
this.checkBoxes[11].checked = false;
break;
}
}
if(!isAnyoneChecked)
{
this.checkBoxes[11].checked = true;
}
}
fromCheck()
{
let regRule = /\s*(from|(start|starting|starts)\s(from|at)|as low as|low to)\s(([^0-9\s]+)\s?(\d+)(\s|$)|(\d+)\s?([^0-9\s]+)(\s|$))/gi;
this.promoDetailCheck(12,regRule,this.fromChecked,()=>{
let currentCurrency = (RegExp.$5||RegExp.$9).toLowerCase();
let currentNumber = RegExp.$6||RegExp.$8;
this.checkBoxes[12].checked = true;
this.checkBoxes[12].parentElement.nextElementSibling.value = this.getCurrency(currentCurrency);
this.checkBoxes[12].parentElement.nextElementSibling.nextElementSibling.value = currentNumber;
},()=>{
this.checkBoxes[12].parentElement.nextElementSibling.value = this.originalCurrency;
this.checkBoxes[12].parentElement.nextElementSibling.nextElementSibling.value = '';
},true);
}
initPromoCheck()
{
this.percentCheck();
this.moneyCheck();
this.clearanceCheck();
this.bngnCheck();
this.fgCheck();
this.fsamCheck();
this.fsCheck();
this.fdCheck();
this.ftCheck();
this.rebateCheck();
this.rewardCheck();
this.fromCheck();
this.otherCheck();
this.sitewideCheck();
}
bindEvent()
{
this.title.addEventListener('input',(e)=>{
this.initPromoCheck();
},false);
}
exec()
{
this.bindEvent();
}
}
let oAutoCheck = new AutoCheck(document.querySelectorAll("input[name='scope_apply']"),document.querySelector('#title'),document.querySelectorAll('#PromotionDetail > div > p > span > input[type=checkbox]'),document.querySelector("[name='money_type[money]']").value);
oAutoCheck.exec();
})();