Начало / Половинка / Разни картинки / Разни връзки / За мен / About me / RSS емисия
 

 

Записки Разни

 

tinymce paste picture get jpg 

тщ напълно пренаписах paste хендлъра

стария имаше огромен проблем - опитваше се да ме прекара през CORS за изображения които съм копнал от друга страница, минавайки през оригиналното им URL при условие че в клипборда я има самата картинка която искам да пейстна. За картинки които не идват от барузер работи ок, но по-често са от браузера и подобно поведение нервеше.

При Paste tinymce се правят на умни и не ми пускат картинката, ами html formata, който то намира в клипборд, решава, че е по-добре да ползва него и ми засилва него. Това е генерално тъпо, защото тоя html сочи към картинка от друг домейн и естествено КОРС-а не пуска изображението и за да го излъжа се налагаше да отворя ирфана и да пейстна и после да копирам от него за да остане в клипборда само картинката без html кода.

ето как изглежда клипборда при една такава картинка, копната от уебстраница. Има BITMAP и DIB които са едно и също, а също има и HTML Format и URL.

вместо да ми извади DIB TinyMCE ми вади HTML Format и ми го пуска в Paste plugin, при което аз го прехващах при paste_preprocess - там се опитвах да обърна получения <img src=....> до картинка и КОРС-а се намесваше.

сега в setup callbacka на tinymce се закачам on('paste'..) и сам си проверявам какво има в клипбоарда. ако има файл от тип image/png (заб: при копване в клипборда, всяка картинка се обръща до такъв тип) се получи следния пинг-понг, за да получа заветния jpg:

  • вземам го с getAsFile() - получавам блоб от общ тип (text/plain)
  • обръщам му типа до image/png, защото то си е такова, получавам пнг блоб
  • вземам урл до този пнг блоб
  • чрез това урл правя jpg. като резултат получавам url като data, която е base64 encoded (за да стане номера минавам през канвас и гетвам датата с качество на жепега 90%)
  • обръщам този data url до блоб
  • вземам урл на блоба
  • вмъквам картинка в tinymce сочеща към това url на jpg blob.

в основни линии кода е този: 

 

function toJpg(src, callback)
{
  varimg=newImage();
  img.crossOrigin='anonymous';
  img.onerror= (err, status) =>console.log(err, status);
  img.onload=function() {
    var canvas= document.createElement('CANVAS');
    var ctx=canvas.getContext('2d');
    var dataURL;
    canvas.height =this.height;
    canvas.width =this.width;
    ctx.drawImage(this, 0, 0);
    dataURL=canvas.toDataURL('image/jpeg', 0.9);
    callback(dataURL);
  };
  img.src=src;
}
function dataURItoBlob(dataURI)
{
    return fetch(dataURI, {mode: 'cors'})
        .then(res => res.blob());
}
function blobToDataURI(blob)
{
    return URL.createObjectURL(blob);
}
 
.......................
//tinymce init options:
        setup : function(ed) {
         ed.on('paste',function(ev) {
             console.log("onpaste",ev.clipboardData.items);
             for(var i in ev.clipboardData.items)
                if(ev.clipboardData.items[i].type=='image/png')
                {
                    let file = (ev.clipboardData.items[i].getAsFile());
                  let blobpng = file.slice(0, file.size-1, 'image/png'); //change type to png
                    let urlPngBlob = blobToDataURI(blobpng);
                    toJpg(urlPngBlob, dataURL =>
                    {
                        dataURItoBlob(dataURL).then(blob => {
                            var url = URL.createObjectURL(blob);
                            insertImgUrlInTinyMce(url);
                        });
                    });
                    ev.preventDefault();
                }
         });
        },
......................
 
Studley tool chest 
 
/2.6.2017, 14:10/ 

мислех, че веселото знаме с дъгата завинаги е отвлечено от гей движението, но се оказа, че не е съвсем така; гей знамето е незначително различно от нормалната дъга, но все пак е различно.

обикновената дъга се рисува със 7 цвята, а гейската - с 6 цвята.

 
преименуване на git commits 

 

да не забравя:

първи начин

За да преименувам последния гит камит и да се редактира текста му ползвам това:

git commit --amend -c HEAD #предлага за редакция последния камит с текста му

или за да редактирам най-горния камит текст и да се вземе текст от точно определен друг камит:

git commit --amend -c 9e8e019d9ab041d5b35bcdd0987ed63b783d73d0

Важно! при промяната на текста се променя самия камит, тоест се променя неговия хеш.

втори начин - за разбиране на нещата, с използване на git command line

За промяна на предишни текстове на камити процеса става сложен и трябва да се мине през rebase:

git rebase -i HEAD~4 #редактирай последните 4 камита с интерактивен рибейз (-i)

При тази команда гита изкарва редактора (default: vi) и пита какво трябва да ги прави тези камити. Там където трябва да се редактира текста сменяме думата "pick" с думата "reword". след това се записват така заявените команди с ":wq" (за vi)

При :wq vi завършва изпълнението си и предава управлението обратно към гита. Гит вижда, че искаме да reword-нем някои камити. За всеки един от тях гит отново пуска текстовия редактор и вече можем да зададем новите им текстове. (тоест ако сменим всички pick с reword ще видим още 4 пъти редактора, за всеки един камит поотделнo)

Всички тези операции променят хешовете и става еднаа.. Става една такава, че дървото с камилите вече е коренно различно от предното. Ако предното дърво е пушнато към римоута трябва да се форс-пушне отново, като така се затърква предното:

git push --force <бранч_с_преименувания>

Ако римоута вече е бил изтеглян от други хора, които са си правили камити върху него става много гадно. губи се чужда работа и т.н., така че ако е правен пуш... просто не се прави форс-пуш. Не си заслужава усилието.

(любопитна особеност е, че не може да се промени името на първия камит в дървото, защото преди него няма друг, върху който той да се рибейзне.)

по темата

трети начин - практичен и удобен, с помощта на SourceTree

  • сташваме или комитваме, не трябва да има uncommited промени по working tree.
  • проверяваме на кой бранч сме - трябва да сме на същия, на който ще поправяме текста.
  • цъка се с дясното копче на мишката на предшественика на камита, който трябва да се редактира и се избира "rebase children of <hash> interactively...".
    • появява се нов екран, в чиято горна част са изброени камитите, деца на цъкнатия с мишката (внимание, това работи само с камити на текущия бранч).
  • цъка се на желания камит, на който трябва да сменим текста.
  • цъкаме на копчето "Edit Message" и въвеждаме новия текст
  • повтаряме за всички камити, които искаме да редактираме.
  • цъкаме ОК в джама.
  • тадаа... гита свършва същото онова, което е описано в начин 2 по-горе и променя текстове и хешове.
 
/25.5.2017, 14:27/ 

"бащицата" путин може да е безскрупулен агресор, но чак такъв глупак не е. Че кирилицата била дошла от македонската земя - това е добре премерено изказване - той не казва, че идва от Македония, а от македонската земя, която тогава е била в територията на България. Така хем е фактологично прав, хем няма да спомене името "България", защото всяко признаване, че ни дължат нещо ще им развали кулата от карти. И в същото време се заиграва с македонците, които с удоволствие ще клъвнат всяка стръв, която е свързана с легализиране на измислената им история.