Dudaevskiy
1/23/2020 - 3:27 AM

⭐ CopyCat - Сохранение страницы в файл на JS

// jQuery
var jq = document.createElement('script');
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);
//https://github.com/pid/speakingurl
var jq = document.createElement('script');
jq.src = "https://cdnjs.cloudflare.com/ajax/libs/speakingurl/13.0.0/speakingurl.min.js";
document.getElementsByTagName('head')[0].appendChild(jq);

// Жмем 3 для вставки русского слага
// Жмем 2 для скрола вверх
// Жмем 4 для выделения всего текста
// Жмем Ctrl + 5 для копирования Markdown (CopyCat) 
// Жмем 0 для вставки Markdown из буфера в textarea и сохранения в .txt
// Жмем Enter для сохранения
// Жмем 1 для перехода на следующую ссылку
 
// ===========================================
setTimeout(function(){
  
  jQuery(document).ready(function($){

    //===========================
    // ⭐ Куда вставляем
    // var ForPaste =  $('body .entry-content[itemprop="text"]').first();
    var ForPaste =  $('article').first();

    // GLOBAL VARs
    // https://tini.to/h8t 

    // Куда вставляем
    window.$allForPaste = ForPaste;
    console.log(window.$allForPaste);

    // ⭐ Имя для файла
    var OriginalLink = location.href;
    var parts = OriginalLink.split('/');
//     var LastTextInLink = parts.pop();
//     window.$FileName = parts[parts.length1];
    window.$FileName = parts[4];
    console.log('Имя файла ⭐⭐'+window.$FileName);
    //===========================

    // = = = = = = = 
    // ⭐ Удаляем не нужное
    // = = = = = = = 
    $('.container--custom.news-related, section#disqus').remove();
    //===========================

	// Отменяем перевод для всех блоков кода
	$('pre, code').each(function(){
		$(this).addClass('notranslate');
	});

	// Обработка iFrame Lazy Load	
	$('iframe').each(function(){
		var ThisiFrameSRC = $(this).attr('src');
		// console.log(ThisiFrameSRC);
		$(this).after("<a title=\"ThisYouTubeiFrame\" href=\""+ThisiFrameSRC+"#ThisiFrame\">ThisYouTubeiFrame</a>");
	});

	// <PRE> превращаем в <CODE>
	// Код должен нахоиться в code > code для верного парсинга
// 	$('body').find('pre').each(function(){
// 		var child = $(this).eq(0);
// 		var getCODEtag = child.html().substring(0, 5);//<code

// 		//Заменяем pre на code если в пре есть вложенный code
// 		if (getCODEtag == '<code'){
// 			console.log('Да первый вложенный тег //<code');
// 			child.wrap( "<code></code>" );
// 			$(this).find('code').unwrap();
		
// 		// Заменяем pre на code в code
// 		} else if (getCODEtag !== '<code'){
// 			$(this).eq(0).wrap( "<code class='old-tag-pre'></code>" );
// 		}
// 		$('code.old-tag-pre pre').replaceWith(function(){
// 			return $("<code />").append($(this).contents());
// 		});

// 	})


// Копируем слаг
// Объявляем слаг
var FullLink = location.href;
console.log('FullLink ⭐ '+FullLink);
var Title = $('title').text();
console.log('Title ⭐ '+Title);
var Descriptions = $('[property="og:description"]').attr('content');
console.log('Descriptions ⭐ '+Descriptions);
var Domain = FullLink.split('/')[2];
console.log('Domain ⭐ '+Domain);
var DataPublicate = $('time[datetime]').attr('datetime').split('T')[0];
console.log('DataPublicate ⭐ '+DataPublicate);
var Category = $('.news-subheader__category').text();
console.log('Category ⭐ '+Category);
// Удаляем не нужный текст из тегов
// $('li.tags-single > p > font:nth-child(1)').text('');
// var Tags = $('li.tags-single > p').text();
// console.log('Tags - '+Tags);
// var Slug = FullLink.split('/')[3]+'.md';
// console.log('Slug ⭐ '+Slug);
var PostImage = $('[property="og:image"]').attr('content');
console.log('PostImage ⭐ '+PostImage);
 
 
ForPaste.prepend("<blockquote id=\"SDS-END\" style=\"\"><h6>END</h6></blockquote>");
// И выводим под h1 все что нам нужно
// Изображение записи
ForPaste.prepend("<blockquote id=\"SDS-PostImage\" style=\"\"><h6>SDStudio-PostImage-✅ = <span class=\"content\">"+PostImage+"</span></h6></blockquote>");
// Текущая ссылка
ForPaste.prepend("<blockquote id=\"SDS-NameFile\" style=\"\"><h6>SDStudio-FullLink-✅ = <span class=\"content\">"+FullLink+"</span></h6></blockquote>");
// Текущий домен сайта
ForPaste.prepend("<blockquote id=\"SDS-Domain\" style=\"\"><h6>SDStudio-Domain-✅ = <span class=\"content\">"+Domain+"</span></h6></blockquote>");
// Дата публикации
ForPaste.prepend("<blockquote id=\"SDS-DataPublicate\" style=\"\"><h6>SDStudio-DataPublicate-✅ = <span class=\"content\">"+DataPublicate+"</span></h6></blockquote>");
// Категория записи
ForPaste.prepend("<blockquote id=\"SDS-Category\" style=\"\"><h6>SDStudio-Category-✅ = <span class=\"content\">"+Category+"</span></h6></blockquote>");
// Теги записи
// ForPaste.prepend("<blockquote id=\"SDS-Tags\" style=\"\"><h6>SDStudio-Tags-✅ = <span class=\"content\">"+Tags+"</span></h6></blockquote>");
// Descriptions
ForPaste.prepend("<blockquote id=\"SDS-Descriptions\" style=\"\"><h6>SDStudio-Descriptions-✅ = <span class=\"content\">"+Descriptions+"</span></h6></blockquote>");
// Название
ForPaste.prepend("<blockquote id=\"SDS-Title\" style=\"\"><h6>SDStudio-Title-✅ = <span class=\"content\">"+Title+"</span></h6></blockquote>");
ForPaste.prepend("<br><blockquote id=\"SDS-START\" style=\"\"><h6>START</h6></blockquote>");


 });


}, 2000);

/* ==== START ============
Горячие клавиши
=========================*/
setTimeout(function(){ 
jQuery(document).ready(function($){
 
    document.onkeyup = function(e) {
        if (e.which == 50) {

        // 2️⃣⌨ - Скрол вверх  
        // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
          jQuery("html, body").animate({ scrollTop: 0 }, "slow");

        } else if ( e.which == 49) {

        // 1️⃣⌨ - Переход по следующей ссылке из Google Sheets
        // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
        //https://html-to-markdown.test/PARSING_ALL_LINKS.txt

            // ID of the Google Spreadsheet
            // https://bionicteaching.com/google-sheets-json-with-jquery/
            // ⭐ Укзываем ID именно листа
            var spreadsheetID = "1pEHs3W6mUpA7Tt-EN5g3dZLY9p5f8lpdgV0WpNyHUPM";

            // Make sure it is public or set to Anyone with link can view 
            var url = "https://spreadsheets.google.com/feeds/list/" + spreadsheetID + "/1/public/values?alt=json"; //this is the part that's changed
            // ===========================================

            var ThisURL = window.location.href;
            console.log('1⭐ Текущий линк - '+ThisURL);
            console.log('============================');

            // Объявляем счетчик
            var i = 0;
            // Заготавливаем переменку для следующей ссылки
            var NEXT_LINK_NUM_LINK_IN_FILE = '';
            // Ссылка на следующую страницу
            var NEXT_LINK = '';

            $.getJSON(url, function(data) {
                var entry = data.feed.entry;
                $(entry).each(function(){
                i++;
                // +++++++++++++++++++++++++++++++++++
                    // Получаем номер ячейки для текущей ссылки
                    if (ThisURL === this.title.$t){
                        NEXT_LINK_NUM_LINK_IN_FILE = i+1;
                    }

                    // Получаем ссылку на следующую страницу
                    if (NEXT_LINK_NUM_LINK_IN_FILE == i){
                        NEXT_LINK = this.title.$t;
                    }
                // +++++++++++++++++++++++++++++++++++   
                });

                    if (NEXT_LINK !== ""){
                        console.log('2 ✅ Следующий линк - '+NEXT_LINK);  
                        // И переходим на следующую страницу 😊
                        window.location.href = NEXT_LINK;
                    } else {
                        $( "body" ).empty();
                        $( "body" ).css('background-color','red');
                        console.log('🔴🔴🔴🔴🔴🔴 Весь лист ссылок окончен!!! Очищаем body и красим в красный');    
                    }
            });
    
        } else if ( e.which == 51) {

        //3️⃣⌨ - Добавление RU слага 
        // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
            var TextForNewRU_Slug = jQuery('blockquote#SDS-Title span.content').text();
            var NEW_RU_SLUG = getSlug( TextForNewRU_Slug , {
                     lang: 'ru',
                     custom: {
                                ':': '-'
                            }
                });
            //console.log(NEW_RU_SLUG); // Output: schoener-titel-laesst-gruessen-bel-ete

            jQuery(document).ready(function($){

                //blockquote#SDS-Title
                var ForPaste =  jQuery('blockquote#SDS-Title');

                ForPaste.before("<blockquote id=\"SDS-NEW-RU-SLUG\" style=\"\"><h6>SDStudio-NEW-RU-SLUG-✅✅ = <span class=\"notranslate\"> "+NEW_RU_SLUG+"</span></h6></blockquote>");

                console.log('RU-SLUG ⭐⭐'+NEW_RU_SLUG);
            });
        
        } else if ( e.which == 52) {
            //4 ⌨ - Сохранение в файл через чистый JS  
            // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
            // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
            // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 



            var jq = document.createElement('script');
            jq.src = "https://inform.click/wp-content/plugins/sds-uapa-wpallimp/PARS/Save_to_markdown.js";
            document.getElementsByTagName('head')[0].appendChild(jq);
           


            // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
            // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
            // = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 
        };
};
});
}, 10000);
/*END Горячие клавиши */
     // ===========================================
            // И скрипт выделения всего блока
            // START
//             var SELECT = $("article");
            var SELECT = window.$allForPaste;
 
            SELECT.on('mouseup', function() { 
                var sel, range;
                var el = $(this)[0];
                if (window.getSelection && document.createRange) { //Browser compatibility
                  sel = window.getSelection();
                  if(sel.toString() == ''){ //no text selection
                     window.setTimeout(function(){
                        range = document.createRange(); //range object
                        range.selectNodeContents(el); //sets Range
                        sel.removeAllRanges(); //remove all ranges from selection
                        sel.addRange(range);//add Range to a Selection.
                    },1);
                  }
                } else if (document.selection) { //older ie
                    sel = document.selection.createRange();
                    if(sel.text == ''){ //no text selection
                        range = document.body.createTextRange();//Creates TextRange object
                        range.moveToElementText(el);//sets Range
                        range.select(); //make selection.
                    }
                }
            });
            SELECT.trigger('mouseup');
            // ===========================================
            // END
            // И скрипт выделения всего блока
 
            // ===========================================
            // Жмем Ctrl + 5 для копирования в Markdown
            // START 


setTimeout(function() {

var SELECT = window.$allForPaste;

    $(document).keyup(function(e) {
        if (e.keyCode == 53 && e.ctrlKey) { //CTRL+Q
            console.log("CTRL+5");
            // ===========================================
            // ===========================================
            // ===========================================
            // Сохраняем в файл
            //https://stackoverflow.com/questions/27398074/saving-a-data-from-html-form-to-text-file-with-jquery-javascript
            // Создаем текстовое поле
            SELECT.prepend("<textarea id='SDStudi-SAVE-TEXT' style='width: 100%;'></textarea><br><p><a id='SDStudi-SAVE-TEXT-BUTTON' href='#'>Export</a></p>");
            // Обработчик текстового поля
            var container = document.querySelector('textarea#SDStudi-SAVE-TEXT');
            var anchor = document.querySelector('a#SDStudi-SAVE-TEXT-BUTTON');

            anchor.onclick = function() {
                anchor.href = 'data:text/plain;charset=utf-8,' + encodeURIComponent(container.value);
                anchor.download = window.$FileName+'.md';
            };

            // Вставляем текст
            var TEXTAREA = $("#SDStudi-SAVE-TEXT");

            // Фуункция вставки текста в TEXTAREA
            // ===============
            $.fn.extend({
                insertAtCaret: function(myValue) {
                    this.each(function() {
                        if (document.selection) {
                            this.focus();
                            var sel = document.selection.createRange();
                            sel.text = myValue;
                            this.focus();
                        } else if (this.selectionStart || this.selectionStart == '0') {
                            var startPos = this.selectionStart;
                            var endPos = this.selectionEnd;
                            var scrollTop = this.scrollTop;
                            this.value = this.value.substring(0, startPos) +
                                myValue + this.value.substring(endPos, this.value.length);
                            this.focus();
                            this.selectionStart = startPos + myValue.length;
                            this.selectionEnd = startPos + myValue.length;
                            this.scrollTop = scrollTop;
                        } else {
                            this.value += myValue;
                            this.focus();
                        }
                    });
                    return this;
                }
            });
            //VAR.insertAtCaret('text');
            setTimeout(function() {

                // Вставка и сохранение
                // ===============
                // Проверка разрешения на работу с буфермо обмена
                //https://flaviocopes.com/clipboard-api/
                // И вставляем из буфера ПО ЛЮБОЙ КНОПКЕ
                // Сохранение
                var BUTTON_SAVE_TEXTAREA = $("a#SDStudi-SAVE-TEXT-BUTTON");


                document.addEventListener('keydown', async event => {
                    if (!navigator.clipboard) {
                        // Clipboard API not available
                        return
                    }
                    try {
                        const text = await navigator.clipboard.readText();

                        if (!$('body').hasClass('SDStudio-import-full')) {
                            TEXTAREA.insertAtCaret(text);
                            console.log('fixing');
                            // :) Клик по кнопке сохранения
                            $("body").find(BUTTON_SAVE_TEXTAREA)[0].click();
                            // И добавляем класс 
                            $('body').addClass('SDStudio-import-full');
                            console.log('Сохраняем документ');
                        } else {
                            console.log('Документ уже сохранен )');
                        }

                    } catch (err) {
                        console.error('Failed to copy!', err);
                    }
                })

                // Вставка и сохранение
                // ===============

            }, 2000);

            // ===========================================
            // ===========================================
        }
    });
}, 2000);