agusibrahim / BLRepost2

// ==UserScript==
// @name BLRepost2
// @namespace Script Runner Pro2
// @match https://m.bukalapak.com/c/*
// @match https://m.bukalapak.com/u/*
// @match https://seller.bukalapak.com/product/new*
// @version 1.0.8
// @date 2020-08-08
// @description Repost BL
// @homepage https://github.com/agusibrahim
// @author agusibrahim
// @grant none
// @license MIT
// ==/UserScript==
// Script by agusibrahim
// https://github.com/agusibrahim

var MARKUP_HARGA=1000;
var REDUCE_STOCK=1; // 50 persen

var Bind=function e(n){"use strict";function t(e){return(e+"").replace(/[<>]/g,function(e){return{">":"&gt;","<":"&lt;"}[e]})}function r(e,n){for(var t=e.length,r=0;t>r;r++)n(e[r],r,e)}function i(e,n){var t="pop push reverse shift sort splice unshift".split(" ");r(t,function(t){this[t]=function(){this.__dirty=!0;var r=a({},l[t].apply(this,arguments));return delete this.__dirty,e&&n.ready&&e(this),r}.bind(this)}.bind(this));var i=this.length;return Object.defineProperty(this,"length",{configurable:!1,enumerable:!0,set:function(e){if(this.__dirty)return void(i=e);var n=1*e;return i!==n&&(n>i?this.push.apply(this,new Array(n-i)):this.splice(n),i=n),e},get:function(){return i}}),this}function c(l,d,p,y){if(y||(y=[]),p.ready&&d.__callback)return l;if(d instanceof e)return d;var v;try{var b=p.context||document;v=b.querySelectorAll.bind(b)}catch(g){}return r(Object.getOwnPropertyNames(d),function(e){if("__callback"!==e){var b,g=d[e],k=[].slice.call(y),_=function(e){return t(e)},m=f;k.push(e);var O=p.mapping[k.join(".")];o&&console.log("key: %s / %s",e,k.join("."),O),O&&"[object Object]"===O.toString()&&(O.callback&&(b=O.callback),O.transform&&(_=h(O.transform.bind({safe:t}))),O.parse&&(m=h(O.parse)),O=O.dom);var j;if("string"==typeof O?j=v(O||"☺"):n.Element&&O instanceof n.Element&&(j=[O]),"function"==typeof O)b=O;else if(j){0===j.length&&console.warn('No elements found against "'+O+'" selector');var A=["OPTION","INPUT","PROGRESS","TEXTAREA"];(null===g||void 0===g)&&(g=m(-1!==A.indexOf(j[0].nodeName)?j[0].hasOwnProperty("checked")?"on"===j[0].value?j[0].checked:j[0].value:j[0].value:j[0].innerHTML));var E=b;b=function(e){j=v(O||"☺"),j&&r(j,function(n){if(!n.__dirty)if(-1!==A.indexOf(n.nodeName)){var t=_(e,l);if("checkbox"===n.type)if(e instanceof Array){var i=e.filter(function(e){return e===n.value?(n.checked=n.value===e,!0):void 0});0===i.length&&(n.checked=!1)}else"boolean"==typeof e&&(n.checked=e);else if("radio"===n.type)n.checked=n.value===t;else if("number"==typeof n.value)try{n.value=1*t}catch(c){console.error(c.message)}else n.value=t}else{e instanceof Array||(e=[e]);var a=[];r(e,function(e){a.push(_(e,l))}),"object"==typeof a[0]?(n.innerHTML="",a.forEach(function(e){n.appendChild(e)})):n.innerHTML=a.join("")}}),E&&E.apply(l,arguments)},r(j,function(n){if("INPUT"===n.nodeName||"SELECT"===n.nodeName||"TEXTAREA"===n.nodeName){var t=function(){this.__dirty=!0;var t;if("checkbox"===n.type){var i=(n.form||document).querySelectorAll('input[name="'+n.name+'"][type="checkbox"]');if(l[e]instanceof Array){var c=[];r(i,function(e){e.checked&&c.push(m("on"===e.value?e.checked:e.value))}),t=c}else t=m("on"===this.value?this.checked:this.value)}else"radio"===n.type&&(t=m("on"===this.value?this.checked:this.value)),t=m("number"==typeof l[e]?1*this.value:this.value);void 0===t&&(t=this.value),l[e]=t,this.__dirty=!1},i={checkbox:"change",radio:"change"}[n.type];n.addEventListener(i||"input",t)}})}b&&k.reduce(function(e,n,t,r){return e[n]||(e[n]={}),t===r.length-1&&(e[n].__callback=b),e[n]},p.callbacks);var N=function(n){var t=[],r=[],i=p.instance,c=!1,l=!1;o&&console.log("> finding callback for %s",e,k),k.reduce(function(e,o,s){if(e&&e[o]&&o){if(i=i[o],null===i||void 0===i)return e[o]||{};if("function"==typeof e[o].__callback){var u=s===k.length-1?n:i;i.__dirty&&(c=!0),s===k.length-1&&e[o].__callback&&(l={path:k.join("."),callback:e[o].__callback,instance:u}),c||(r.push(a(u instanceof Array?[]:{},u)),t.push(e[o].__callback))}return e[o]||{}}},p.callbacks),c||(r.reverse(),t.reverse().forEach(function(e,n){e.call(p.instance,r[n])})),c&&l&&(i=l.instance,l.callback.call(p.instance,a(i instanceof Array?[]:{},i)))},P={configurable:!0,enumerable:!0,set:function(n){var t=g!==n?g:void 0;g=!p.ready||typeof n!==u||null===n||s(n)||n.__callback?s(n)?c(new i(N,p),n,p,k):n:c(l[e]?a({},l[e]):{},n,p,k),o&&console.log("set: key(%s): %s -> %s",e,JSON.stringify(t),JSON.stringify(n)),p.ready?N(g):"undefined"!=typeof p.mapping[k.join(".")]&&p.deferred.push(N.bind(l,g,t))},get:function(){return g}};try{Object.defineProperty(l,e,P)}catch(x){o&&console.log("failed on Object.defineProperty",x.toString(),x.stack)}typeof g!==u||null===g||s(g)?s(g)?l[e]=c(new i(N,p),g,p,k):l instanceof i||(l[e]=g):l[e]=c(l[e]||{},g,p,k)}}),l instanceof i&&l.push.apply(l,d),l}function a(n,t){return t instanceof Object?(r(Object.getOwnPropertyNames(t),function(r){var i=t[r];e.prototype[r]||"__callback"===r||(typeof i===u&&null!==i&&i instanceof Array?n[r]=[].map.call(i,function(e){return e instanceof Object?a(n[r]||{},e):e}):typeof i!==u||null===i||s(i)||"[Object object]"!==i.toString?n[r]=i:n[r]=a(n[r]||{},i))}),n):t}function e(t,i,a){if(!this||this===n)return new e(t,i);var o={context:a||n.document,mapping:i||{},callbacks:{},deferred:[],ready:!1,instance:this};return c(this,t,o),o.ready=!0,o.deferred.length&&r(o.deferred,function(e){e()}),this}if(!Function.bind||!Object.defineProperty)throw new Error("Prerequisite APIs not available.");var o=!1,l=[],s=Array.isArray,u="object",f=function(e){return e},h=function(e){return function(){try{return e.apply(this,arguments)}catch(n){console.error(n.stack?n.stack:n)}}};return i.prototype=[],e.prototype.__export=function(){return a({},this)},e}(this);"undefined"!=typeof exports&&(module.exports=Bind);
var my_awesome_script = document.createElement('script');
my_awesome_script.setAttribute('src','https://cdn.jsdelivr.net/npm/sweetalert2@9');
document.head.appendChild(my_awesome_script);

var style = document.createElement('style');
style.type = 'text/css';
style.innerHTML = '.titleredd { filter: sepia(6%) brightness(29%) saturate(0%); -webkit-filter: sepia(6%) brightness(29%) saturate(0%); -moz-filter: sepia(6%) brightness(29%) saturate(0%); }';
document.getElementsByTagName('head')[0].appendChild(style);

var btn = document.createElement('button');
btn.classList.add('c-header__action__btn');
btn.innerText="All"
btn.id="selectall"
btn.style.cssText="display: none;"

var btnd = document.createElement('button');
btnd.classList.add('c-header__action__btn');
btnd.innerHTML='<span class="c-icon c-icon--reply c-icon--with-bubble"><i class="c-icon__bubble c-icon__bubble--counter">0</i></span>'
btnd.id="dwnld"
btnd.style.cssText="display: none;"
btnd.addEventListener("click",async (c)=>{
  //alert("ok")
  var tt=document.getElementsByClassName("titleredd");
  if((await Swal.fire({
    title: 'Posting Produk',
    text: "Yakin ingin memposting "+tt.length+" produk ini ke lapak Anda?",
    showCancelButton: true,
    confirmButtonColor: '#d71149',
    cancelButtonColor: '#ccc',imageUrl: 'https://static-jengririz.bukalapak.com/images/illustrations/upgrade-super-seller.png',imageWidth: 200,
  imageHeight: 200,
    confirmButtonText: 'Ya'
  })).isConfirmed){
    PostBegin()
  }
},false);



let observer = new MutationObserver((mutations) => {
  mutations.forEach((mutation) => {
    if (!mutation.addedNodes) return

    for (let i = 0; i < mutation.addedNodes.length; i++) {
      // do things to your newly added nodes here
      let node = mutation.addedNodes[i]
      //console.log(node)
      try{
        var pl=node.getElementsByClassName("c-product-card").length
        if(pl>1) {
          document.getElementsByClassName("c-header__action--right")[0].children[2].remove()
          hijackProduct()
        }
      }catch(cv){}
      try{
        var pl=node.getElementsByClassName("bl-flex-item").length
        if(pl>1) {
          //hijackProduct(false)
        }
      }catch(cv){}
      try{
        var pl=node.querySelectorAll("input[name='condition_filter']").length
        if(pl>0 && node.classList.contains("c-input-wrapper")) {
          appendCtrlPanel(node)
        }
      }catch(c){}
    }
  })
})

observer.observe(document.body, {
    childList: true
  , subtree: true
  , attributes: false
  , characterData: false
})


function appendCtrlPanel(node){
  if(node.querySelector("#blrpanel")) return;
  var pl=document.querySelector(".c-overlay-scr__content__inner__sidebar ul").children[0];
  pl.style.fontWeight="bold"
  pl.innerText="🛠 Repost Panel"
  var e = document.createElement('div');
  e.id="blrpanel"
  e.innerHTML = "<div style=\"padding-left: 15px;padding-right:15px;padding-top:15px\"><label>Title Template<\/label> <div class=\"c-input-grp-table u-mrgn-top--3\"> <input id=\"tmp_title\" type=\"text\" class=\"c-input-text\" value=\"%s\"><\/div><\/div><div style=\"padding-left: 15px;padding-right:15px;padding-top:15px\"><label>Desc. Template<\/label> <div class=\"c-input-grp-table u-mrgn-top--3\"> <textarea id=\"tmp_desc\" type=\"text\" class=\"c-input-text\" style=\"height: 100px;\">%s\r\n<\/textarea><\/div><\/div><div style=\"padding-left: 15px;padding-right:15px;padding-top:15px\"><label>Desc. Trim<\/label> <div class=\"c-input-grp-table u-mrgn-top--3\"> <input id=\"desc_trim\" type=\"text\" class=\"c-input-text\"><\/div><\/div><div style=\"padding: 15px\"><label>Markup<\/label> <div class=\"c-input-grp-table u-mrgn-top--3\"> <input id=\"price_markup\" type=\"number\"  max=\"100\" min=\"0\" class=\"c-input-text\"><div class=\"c-input__ctx\">%<\/div><\/div><\/div>\r\n<div style=\"padding-left: 15px;padding-right:15px;padding-bottom:15px\"> <label>Conditional Markup</label><div id=\"cond_markup\" class=\"u-mrgn-top--2\"></div><div class=\"c-input-grp-table\" style=\"margin-left: 5px\"> <label id=\"cond_act_add\" onclick=\"actcond_Add()\" style=\"color: #d71448;font-size: 10px;font-weight: bold\">Add</label><label id=\"cond_act_rem\" onclick=\"actcond_Rem()\" style=\"color: #d71448;font-size: 10px;font-weight: bold;margin-left:10px\">Remove</label></div></div>\r\n<div style=\"padding-left: 15px;padding-right:15px\"><label>Watermark Text<\/label> <div class=\"c-input-grp-table u-mrgn-top--3\"> <input id=\"photo_wm_txt\" type=\"text\" placeholder=\"\" class=\"c-input-text\"><\/div><\/div><div style=\"padding-left: 15px;padding-right:15px;padding-top:15px\"><label>Watermark Img (URL)<\/label> <div class=\"c-input-grp-table u-mrgn-top--3\"> <input id=\"photo_wm_url\" type=\"text\" placeholder=\"https:\/\/sss.com\/ccc\/img.png\" class=\"c-input-text\"><\/div><\/div><div style=\"padding-left: 15px;padding-right:15px;padding-top:15px\"><label>Closing Photo (ID)<\/label> <div class=\"c-input-grp-table u-mrgn-top--3\"> <input id=\"photo_closing\" type=\"text\" placeholder=\"12345678\" class=\"c-input-text\"><\/div><p style=\"color: #aaa;font-size:10px;margin-top:5px\">Isi menggunakan ID Photo. Caranya <a target=\"_blank\" href='https://seller.bukalapak.com/product/new'>UPLOAD FOTO DISINI</a> trus catat ID Photo yang muncul<\/p><\/div><div style=\"padding-left: 15px;padding-right:15px\"><label>Stock Reducer (percent)<\/label> <div class=\"c-input-grp-table u-mrgn-top--3\"> <input id=\"stock_red\" type=\"number\" placeholder=\"30\" max=\"100\" min=\"0\" class=\"c-input-text\"><div class=\"c-input__ctx\">%<\/div><\/div><p style=\"color: #aaa;font-size:10px;margin-top:5px\">Pengurangan stok dari toko asli, hitungan persen<\/p><\/div><button class=\"c-btn c-btn--block c-btn--red c-btn--large\" id=\"blrsave\" onclick=\"saveBlrPanel()\">Simpan</button><div style=\"margin-top:100px;\">..<\/div>";
  node.append(e)

}
function getallconditionalmarkupvalue(allowzero=true){
  var cl=document.getElementsByClassName("cond_input")
  var vv=[]
  for(var i in cl){
    var d=cl[i]
    if(!d.children) continue
    var key=Number(d.children[0].value)
    var val=Number(d.children[2].value)
    if(allowzero||(key>0&&val>0)) vv.push([key,val])
  }
  return vv
}
window.saveBlrPanel= function(){
  document.getElementsByClassName("c-icon--close")[2].parentElement.click()
  
  var dd=JSON.parse(JSON.stringify(window.settingsdata))
  dd.price_markup_cond=getallconditionalmarkupvalue(false)
  //console.log(JSON.stringify(window.settingsdata))
  //console.log(JSON.stringify(getallconditionalmarkupvalue()))
  localStorage.setItem("blrset",JSON.stringify(dd));
}
window.actcond_Rem=function(){
  window.settingsdata.price_markup_cond=getallconditionalmarkupvalue()
  if(window.settingsdata.price_markup_cond.length>1) window.settingsdata.price_markup_cond.splice(-1,1)
  window.settingsdata.action_cond_rem=window.settingsdata.price_markup_cond.length>1;
}
window.actcond_Add=function(){
  /*price_markup_cond:["100:20","300:35"],
    action_cond_add: true,
    action_cond_rem: false*/
  window.settingsdata.price_markup_cond=getallconditionalmarkupvalue()
  window.settingsdata.price_markup_cond.push(":")
  window.settingsdata.action_cond_rem=window.settingsdata.price_markup_cond.length>1;
  
}

async function PostBegin(){
  var isfromcat=window.location.href.match(/bukalapak\.com\/c/)
  var tt=document.getElementsByClassName("titleredd");
  for(var i=0;i<tt.length;i++){
    var link=null;
    if(isfromcat) link=tt[i].parentElement.parentElement.getAttribute("href").replace("m.bukalapak.com","www.bukalapak.com")
    else link=tt[i].parentElement.parentElement.parentElement.getAttribute("href").replace("m.bukalapak.com","www.bukalapak.com").split("\?")[0]
    var stat=null;
    if(isfromcat)  stat=tt[i].parentElement.parentElement.getElementsByClassName("c-product-card__meta")[1]
    else  stat=tt[i].parentElement.parentElement.parentElement.parentElement.parentElement.getElementsByClassName("c-product-rating__count")[0]
    console.log(tt[i].parentElement.parentElement.parentElement.parentElement.parentElement.parentElement)
    stat.style.color="#ff0000"
    stat.innerText="waiting..."
    for(var d=0;d<window.dataproduk.length;d++){
      if(window.dataproduk[d].url==link){
        var prod=window.dataproduk[d]
        for(var m=0;m<prod.images.large_urls.length;m++){
          //console.log(await MarkPlease(prod.images.large_urls[m], "Agus Sulkhi Store"));
          var img=prod.images.large_urls[m]
          //console.log(img)
          //uploadimg(img)
        }
        doPostProduk(prod,stat)
        //dummyprocess(stat)
      }
    }
  }
}
async function dummyprocess(stat){
  stat.innerText="upload img..."
  await delay(3000);
  stat.innerText="posting..."
  await delay(2000);
  stat.innerText="DONE"
  stat.style.color="#00dd00"
}
function delay(t, v) {
   return new Promise(function(resolve) { 
       setTimeout(resolve.bind(null, v), t)
   });
}
async function doPostProduk(prod,stat){
  if(!stat.innerText.startsWith("wait")) return;
  console.log("---- upload multi...")
  var imu=await uploadimgs(prod.images.large_urls,stat)
  console.log("---- POST PRODUK")
  stat.innerText="⏳ POSTING..."
  var r=await postProduk(prod, imu,stat)
  var statdata=stat.getAttribute("data")
  if(statdata){
    stat.setAttribute("data", JSON.stringify(r))
  }else{
    stat.setAttribute("data", JSON.stringify(r))
    stat.addEventListener("click",(v)=>{v.preventDefault();v.stopPropagation();showstatus(JSON.parse(stat.getAttribute("data")))})
  }
  
  //stat.innerText="✅ DONE"
  console.log("---- OK OK")
}

async function postProduk(data,imgs,stat){
  return new Promise(async (oke,not)=>{
    var payload={
      "id": 0,
      "new": true,
      "name": null,
      "price": null,
      "description_bb": null,
      "description": null,
      "weight": null,
      "stock": null,
      "category_id": null,
      "category_id_edit": 0,
      "image_ids": imgs,
      "imported": false,
      "save_as_draft": false,
      "force_insurance": false,
      "video_url": "",
      "min_quantity": 1,
      "max_quantity": null,
      "free_shipping": [],
      "sku_name": "",
      "tag_page_ids": [],
      "specification": [
        {
          "name": "brand",
          "value": [
            ""
          ]
        }
      ],
      "attributes": [
        {
          "name": "brand",
          "value": [
            ""
          ]
        }
      ],
      "wholesales": [],
      "label_ids": [],
      "sla": {
        "type": null,
        "value": null
      },
      "primary_image_id": imgs[0],
      "couriers": [],
      "insta_flag": false,
      "page_from": "",
      "clone_product": false,
      "crop_flag": false,
      "socmed_message": "",
      "share_to_facebook": false,
      "share_to_twitter": false,
      "product_skus": [],
      "with_variant": false,
      "flexible_variant": false,
      "dimensions": {
        "length": null,
        "width": null,
        "height": null
      },
      "international_shipping": false,
      "catalog_id": ""
    };
    var res={}
    for (var key in payload){
      if(payload[key]==null)
        res[key]=data[key]
      else res[key]=payload[key]
      res["description_bb"]=data.description_bb
      res["description"]=data.description_bb
      res["category_id"]=data.category.id

    }
    var outprice=data.price
    var haschange=false
    for(var f in window.settingsdata.price_markup_cond){
        var pr=window.settingsdata.price_markup_cond[f][0]
        var mup=window.settingsdata.price_markup_cond[f][1]
        if(pr<1) continue
        if(data.price<=pr){
            outprice=(data.price*mup)/100
            haschange=true
            break
        }
    }
    if(!haschange && window.settingsdata.price_markup>0) outprice=(data.price*window.settingsdata.price_markup)/100
    if(window.settingsdata.template_title) res.name=window.settingsdata.template_title.replace("%s", res.name)
    var tmpdes=window.settingsdata.template_desc.replace("%s", data.description)
    if(window.settingsdata.trim_desc) tmpdes=tmpdes.replace(new RegExp(window.settingsdata.trim_desc, "g"),"")
    if(window.settingsdata.template_desc){
      res.description=tmpdes
      res.description_bb=tmpdes
    }
    res["price"]=outprice
    if(window.settingsdata.stock_red) res.stock=Number((data.stock*window.settingsdata.stock_red)/100).toFixed()
    if(res.stock<1) res.stock=1
    var closingp=Number(window.settingsdata.img_closing)
    if(closingp && res.image_ids.length<5)res.image_ids.push(closingp)
    //res["stock"]=0
    /*await delay(2000)
    stat.innerText="✅ DONE"
    console.log(JSON.stringify(res))
    if(true) return;*/
    console.log(JSON.stringify(res))
    var pp=fetch('https://api.bukalapak.com/products?access_token='+window.bltoken, {
      method: 'POST',
      headers: {
          'authority': 'api.bukalapak.com',
          'accept': 'application/json',
          'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 OPR/69.0.3686.77',
          'content-type': 'application/json',
          'origin': 'https://seller.bukalapak.com',
          'sec-fetch-site': 'same-site',
          'sec-fetch-mode': 'cors',
          'sec-fetch-dest': 'empty',
          'referer': 'https://seller.bukalapak.com/product/new',
          'accept-language': 'en-US,en;q=0.9',
          'Content-Type': 'application/json; charset=UTF-8'
      },
      body: JSON.stringify(res)
    });
    var result=null;
    pp.then((response) => {
      result= response.json();
      if (response.ok) {
        stat.innerText="✅ DONE"
      } else {
        stat.innerText="❌ ERR."
      }
      oke(result)
    })
    .then((responseJson) => {
      result= responseJson
      oke(result)
    })
    .catch((error) => {
      result=error
      stat.innerText="❌ ERR."
      oke(result)
    });
  });
  
  //console.log(await pp.json())
  //console.log(await pp.json())
  
}
function showstatus(data){
  alert(JSON.stringify(data))
}

function watermarkedDataURL(canvas,text){
  var tempCanvas=document.createElement('canvas');
  var tempCtx=tempCanvas.getContext('2d');
  var cw,ch;
  cw=tempCanvas.width=canvas.width;
  ch=tempCanvas.height=canvas.height;
  tempCtx.drawImage(canvas,0,0);
  tempCtx.font="24px verdana";
  var textWidth=tempCtx.measureText(text).width;
  tempCtx.globalAlpha=.50;
  tempCtx.fillStyle='white'
  tempCtx.fillText(text,cw-textWidth-10,ch-20);
  tempCtx.fillStyle='black'
  tempCtx.fillText(text,cw-textWidth-10+2,ch-20+2);
  // just testing by adding tempCanvas to document
  document.body.appendChild(tempCanvas);
  return(tempCanvas.toDataURL());
}
window.MarkPlease =function(xurl, ttx){
  return new Promise((resolve, reject) => {
    var canvas=document.createElement('canvas');
    var ctx=canvas.getContext("2d");
    var cw=canvas.width;
    var ch=canvas.height;

    var img=new Image();
    img.crossOrigin='anonymous';
    img.onload=start;
    img.src=xurl;
    async function start(){
      canvas.width=img.width;
      canvas.height=img.height;
      ctx.drawImage(img,0,0);
      if(window.settingsdata.wm_img){
        var imgf=await markingimg(window.settingsdata.wm_img)
        ctx.drawImage(imgf,0,img.height-imgf.height);
      }else if(window.settingsdata.wm_text){
        resolve( watermarkedDataURL(canvas,window.settingsdata.wm_text) );
        return;
      }
      //non watermark: resolve(canvas.toDataURL())
      //resolve( watermarkedDataURL(canvas,ttx) );
      resolve(canvas.toDataURL())
    }
  });
}
function markingimg(imgurl){
    return new Promise((oke,not)=>{
      var imgf=new Image();
      imgf.crossOrigin='anonymous';
      imgf.onload=()=>{
        oke(imgf);
      }
      imgf.src=imgurl;
    })
    
  }
async function uploadimgs(urls,stat){
  var s=[];
  for(var i=0;i<urls.length;i++){
    try{
      stat.innerText="📷 PHOTO "+(i+1)
      var uu=await uploadimg(urls[i])
      s.push(uu.data.id)
    }catch(err){}
  }
  return s;
}
async function uploadimg(url){
  var imgdata=await MarkPlease(url, "c")
  var rr=await fetch('https://api.bukalapak.com/images?access_token='+window.bltoken, {
    method: 'POST',
    headers: {
        'authority': 'api.bukalapak.com',
        'accept': 'application/json',
        'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.116 Safari/537.36 OPR/69.0.3686.77',
        'content-type': 'application/json',
        'origin': 'https://seller.bukalapak.com',
        'sec-fetch-site': 'same-site',
        'sec-fetch-mode': 'cors',
        'sec-fetch-dest': 'empty',
        'referer': 'https://seller.bukalapak.com/product/new',
        'accept-language': 'en-US,en;q=0.9',
        'Content-Type': 'application/json; charset=UTF-8'
    },
    body: JSON.stringify({"image":imgdata})
  });
  return await rr.json()
}

function hijackProduct(cat=true) {
  if(document.querySelectorAll("input[name='condition_filter']").length>1){
    var node=document.querySelector("input[name='condition_filter']").parentElement.parentElement.parentElement.parentElement
    node.children[0].style.display="none"
    appendCtrlPanel(node)
  }
  var sett={
    template_title: "%s",
    template_desc: "%s",
    trim_desc:"",
    price_markup:10,
    wm_text:"",
    wm_img:"",
    img_closing:"",
    stock_red:0,
    price_markup_cond:[],
    action_cond_add: true,
    action_cond_rem: false
  }

  if(localStorage.getItem("blrset")===null){
    localStorage.setItem("blrset",JSON.stringify(sett))
  }else{
    sett=JSON.parse(localStorage.getItem("blrset"))
  }
  sett.action_cond_rem=sett.price_markup_cond.length>0;
  if(sett.price_markup_cond.length<1) sett.price_markup_cond.push([0,0])
  window.settingsdata = Bind(sett, {
    template_title: "#tmp_title",
    template_desc: "#tmp_desc",
    trim_desc:"#desc_trim",
    price_markup:"#price_markup",
    wm_text:"#photo_wm_txt",
    wm_img:"#photo_wm_url",
    img_closing:"#photo_closing",
    stock_red:"#stock_red",
    price_markup_cond: {
      dom: "#cond_markup",
      transform: (v)=>{
        return "<div class=\"c-input-grp-table u-mrgn-top--1 cond_input\"> <input min=\"0\" value="+v[0]+" class=\"c-input-text\" placeholder=\"Rp\" type=\"number\"><div class=\"c-input__ctx\">≤</div> <input max=\"100\" min=\"0\" style=\"width:70px\" value="+v[1]+" class=\"c-input-text\" placeholder=\"%\" type=\"number\"></div>";
      }
    },
    action_cond_add: {
      dom: "#cond_act_add",
      transform: (v)=>{
        return v?"Add":"";
      }
    },
    action_cond_rem: {
      dom: "#cond_act_rem",
      transform: (v)=>{
        return v?"Remove":"";
      }
    }
  });
  

  document.getElementsByClassName("c-header__action--right")[0].appendChild(btn)
  document.getElementsByClassName("c-header__action--right")[0].appendChild(btnd)
  if(cat)var tt = document.getElementsByClassName("c-product-image")
  else tt = document.getElementsByClassName("ratio-container")
  for (var x = 0; x < tt.length; x++) {
      if(tt[x].classList.contains("hijackprod")) continue
      tt[x].addEventListener("click", (x) => {
          x.preventDefault();
          x.stopPropagation();

//            console.log(x.target.parentElement.parentElement.parentElement)
          var link=null;
          if(!cat)
            link=x.target.parentElement.parentElement.parentElement.getAttribute("href")
          else link=x.target.parentElement.parentElement.getAttribute("href")
          if(!link) return;
          link=link.replace("m.bukalapak.com","www.bukalapak.com")
          x.target.classList.toggle("titleredd")
          //document.getElementById("selectall").style.display=document.getElementsByClassName("titleredd").length>0?"inline":"none";
          document.getElementById("dwnld").style.display=document.getElementsByClassName("titleredd").length>0?"inline":"none";
          document.getElementById("dwnld").children[0].children[0].innerText=document.getElementsByClassName("titleredd").length+"";
          //document.getElementsByClassName("titleredd").length
      }, false);
      tt[x].classList.add("hijackprod")
  }
}

var proxied = window.XMLHttpRequest.prototype.send;
    window.XMLHttpRequest.prototype.send = function() {
        //console.log( arguments );
        //Here is where you can add any code to process the request. 
        //If you want to pass the Ajax request object, pass the 'pointer' below
        var pointer = this
        var intervalId = window.setInterval(function(){
                if(pointer.readyState != 4){
                        return;
                }
                //console.log( pointer.responseURL );
                if(pointer.responseURL.toString().match(/com\/images\?/)&&window.location.href.match(/.*com\/product\/new.*/)){
                  var idp=JSON.parse(pointer.responseText).data.id
                  document.getElementsByClassName("c-upload-image__outline")[0].innerHTML="<strong style='color:red'>ID Photo: "+idp+"</strong>"
                  
                }
                if(pointer.responseURL.toString().match(/.*\/carts\?identity=.*/)){
                  if(document.getElementsByClassName("hijackprod").length != document.getElementsByClassName("c-product-image").length){
                    //document.getElementsByClassName("c-header__action--right")[0].children[2].remove()
                    //hijackProduct()
                  }
                }
                if(pointer.responseURL.toString().match(/\?category_id=/)){
                  //alert("ok "+pointer.responseURL)
                  window.bltoken=pointer.responseURL.split("access_token=")[1].split("&")[0]
                  if(window.dataproduk==null){
                    window.dataproduk=JSON.parse(pointer.responseText).data
                    //console.log("1: "+JSON.stringify( window.dataproduk.data))
                  }else{
                    //console.log("2: "+JSON.stringify(JSON.parse(pointer.responseText).data))
                    window.dataproduk=window.dataproduk.concat(JSON.parse(pointer.responseText).data)
                  }
                }
                if(pointer.responseURL.toString().match(/.*\/products\?.*/) ){
                  //console.log(pointer.responseURL+" OK data: "+pointer.responseText)
                  window.bltoken=pointer.responseURL.split("access_token=")[1].split("&")[0]
                  var son=JSON.parse(pointer.responseText);
                  if(window.dataproduk==null){
                    window.dataproduk=son.data
                  }else{
                    window.dataproduk=window.dataproduk.concat(son.data)
                  }
                  hijackProduct(false)
                }
                if(pointer.responseURL.toString().match(/.*\/product-highlights.*/) ){
                  var son=JSON.parse(pointer.responseText);
                  if(window.dataproduk==null){
                    window.dataproduk=[]
                  }
                  for(var d in son.data){
                    console.log(son.data[d].products)
//                    window.dataproduk.concat(son.data[d].products)
                    for(var f in son.data[d].products){
                      window.dataproduk.push(son.data[d].products[f])
                    }
                  }
                }
                //Here is where you can add any code to process the response.
                //If you want to pass the Ajax request object, pass the 'pointer' below
                clearInterval(intervalId);

        }, 1);//I found a delay of 1 to be sufficient, modify it as you need.
        return proxied.apply(this, [].slice.call(arguments));
    };