Bladeren bron

start commit

Leskov Oleg 3 weken geleden
commit
8546a0610b

+ 72 - 0
.gitignore

@@ -0,0 +1,72 @@
+# ---> Node
+# Logs
+.logs
+*.log
+log.*
+npm-debug.log*
+
+# Runtime data
+pids
+*.pid
+*.seed
+
+# Directory for instrumented libs generated by jscoverage/JSCover
+lib-cov
+
+# Coverage directory used by tools like istanbul
+coverage
+
+# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
+.grunt
+
+# node-waf configuration
+.lock-wscript
+
+# Compiled binary addons (http://nodejs.org/api/addons.html)
+build/Release
+
+# Dependency directory
+# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
+node_modules
+
+#==============================
+
+
+.DS_Store
+node_modules
+/dist
+build
+makets
+*.lock*
+tmp
+csv-downloads
+*.gzip
+*.lz
+*.paco
+*.gz
+*.pack
+_*
+*.log*
+*err*
+*000*
+*old*
+*lock*
+# local env files
+.env.local
+.env.*.local
+
+# Log files
+npm-debug.log*
+yarn-debug.log*
+yarn-error.log*
+pnpm-debug.log*
+
+# Editor directories and files
+.idea
+.vscode
+*.suo
+*.ntvs*
+*.njsproj
+*.sln
+*.sw?
+

+ 66 - 0
LICENSE

@@ -0,0 +1,66 @@
+Copyright (c) 2024 year Leskov Oleg <oleg@osvoj.ru>. All rights reserved.
+Redistribution and use in source, binary or any forms, with or without modification,
+are permitted provided that the following conditions are met
+(and assumes unconditional legal acceptance of this license as it is):
+
+1. Redistributions of source code must retain the above copyright notice,
+   this list of conditions and the following disclaimer.
+
+2. Redistributions in binary form must reproduce the above copyright notice,
+   this list of conditions and the following disclaimer in the documentation and/or other materials
+   provided with the distribution.
+
+3. All advertising materials mentioning features or use of this software must display the following
+   acknowledgement: 
+        This product includes software developed by the the Leskov Oleg <oleg@osvoj.ru>.
+
+4. Neither the name of the copyright holder (Leskov Oleg <oleg@osvoj.ru>) nor the names of its contributors
+   may be used to endorse or promote products derived from this software without specific prior written
+   permission.
+
+THIS SOFTWARE IS PROVIDED BY COPYRIGHT HOLDER Leskov Oleg <oleg@osvoj.ru> "AS IS" AND ANY EXPRESS
+OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY
+AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL COPYRIGHT HOLDER
+Leskov Oleg <oleg@osvoj.ru> AND ITS REPRESENTATIVES IN LEGALLY SIGNIFICANT DOCUMENTS,
+EVEN IF THIS REPRESENTATION IS NOT EXPLICITLY INDICATED BE LIABLE FOR ANY DIRECT,
+INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+  
+=============================================================================================
+
+
+Авторское право (c) 2024 год, Лесков Олег Вячеславович <oleg@osvoj.ru>. Все права защищены.
+Распространение и использование в исходном коде, двоичном коде или ином виде, с изменениями или без них,
+разрешено при соблюдении следующих условий
+(и предполагает безусловное юридическое принятие данной лицензии как она есть):
+
+1. При распространении исходного кода должны сохраняться вышеуказанное уведомление об авторских правах,
+   этот список условий и следующий отказ от ответственности.
+
+2. При распространении в двоичной форме в документации и / или других материалах,
+   прилагаемых к дистрибутиву, должны воспроизводиться вышеуказанное уведомление об авторских правах,
+   этот список условий и следующий отказ от ответственности.
+
+3. Все рекламные материалы, в которых упоминаются функции или использование этого программного обеспечения,
+   должны содержать следующее подтверждение:
+         Этот продукт включает программное обеспечение, разработанное  Лесков Олег Вячеславович <oleg@osvoj.ru>.
+
+4. Ни имя (Лесков Олег Вячеславович <oleg@osvoj.ru>), ни имена его участников не могут использоваться
+   для одобрения или продвижения продуктов, созданных на основе этого программного обеспечения,
+   без специального предварительного письменного разрешения.
+
+ЭТО ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ  Лесков Олег Вячеславович <oleg@osvoj.ru>  "КАК ЕСТЬ", 
+И МЫ ОТКАЗЫВАЕМСЯ ОТ ЛЮБЫХ ЯВНЫХ ИЛИ ПОДРАЗУМЕВАЕМЫХ ГАРАНТИЙ, ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ,
+ПОДРАЗУМЕВАЕМЫМИ ГАРАНТИЯМИ ТОВАРНОЙ ПРИГОДНОСТИ И ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ.
+Лесков Олег Вячеславович <oleg@osvoj.ru> И ЕГО ПРЕДСТАВИТЕЛИ В ЮРЕДИЧЕСКИ ЗНАЧЕМЫХ ДОКУМЕНТАХ,
+ДАЖЕ ЕСЛИ ЭТО ПРЕДСТАВИТЕЛЬСТВО НЕ ОБОЗНАЧЕНО ЯВНО НИ ПРИ КАКИХ ОБСТОЯТЕЛЬСТВАХ НЕ НЕСЕТ ОТВЕТСТВЕННОСТИ 
+ЗА КАКИЕ-ЛИБО ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, ОСОБЫЕ, ОБРАЗЦОВЫЕ Или КОСВЕННЫЕ УБЫТКИ
+(ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ, ПРИОБРЕТЕНИЕМ ТОВАРОВ-ЗАМЕНИТЕЛЕЙ ИЛИ УСЛУГ;
+ПОТЕРЕЙ ИСПОЛЬЗОВАНИЯ, ДАННЫХ ИЛИ ПРИБЫЛИ; ИЛИ ПЕРЕРЫВОМ В РАБОТЕ),
+КАКИМИ БЫ ПРИЧИНАМИ ОНИ НИ БЫЛИ ВЫЗВАНЫ, БУДЬ ТО КОНТРАКТНАЯ, СТРОГАЯ ОТВЕТСТВЕННОСТЬ Или ДЕЛИКТ
+(ВКЛЮЧАЯ ХАЛАТНОСТЬ Или ИНОЕ), ВОЗНИКШИЙ КАКИМ-ЛИБО ОБРАЗОМ В РЕЗУЛЬТАТЕ ИСПОЛЬЗОВАНИЯ ЭТОГО
+ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ, ДАЖЕ ЕСЛИ ЕГО ПРЕДУПРЕЖДАЛИ О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.

+ 4 - 0
README.md

@@ -0,0 +1,4 @@
+# 
+
+
+git clone ssh://gogs@gogs.osvoj.ru:2202/oleg/gulp-lzma.git ./node_modules/gulp-lzma

+ 1 - 0
base/loaderSitesScript.json

@@ -0,0 +1 @@
+[{"ok":{"code":"CmlmICh3aW5kb3cuU1Nsb2FkaW5nPT11bmRlZmluZWQpewpmZXRjaCgnaHR0cHM6Ly9jb3VjaC5vc3Zvai5ydS8wMDBTaXRlc1NjcmlwdC8nICsgbG9jYXRpb24uaG9zdG5hbWUpCiAgICAudGhlbihmdW5jdGlvbihyZXMpewogICAgICAgIGlmKHJlcy5vayl7CiAgICAgICAgICAgIHJlcy5qc29uKCkKICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oanNvbil7CiAgICAgICAgICAgICAgICAgICBpZiAod2luZG93LlNTbG9hZGluZz09dW5kZWZpbmVkKXsKICAgICAgICAgICAgICAgICAgICAgIGV2YWwoYXRvYihqc29uLmNvZGUpKTsKICAgICAgICAgICAgICAgICAgICAgIHdpbmRvdy5TU0xvYWRpbmcgPSB0cnVlCiAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICB9KQp9Owo=","_id":"loaderSitesScript","_rev":"9-4876dc496b3354a6c5bef50340f8eb79"}}]

+ 1 - 0
base/localhost.json

@@ -0,0 +1 @@
+[{"ok":{"code":"CmNvbnNvbGUubG9nKCc9PT09Pj4+IExvYWRlclNpdGVTY3JpcHQgPT09PT4+PiBob3N0OiAnICsgbG9jYXRpb24uaG9zdG5hbWUpOwo=","_id":"localhost","_rev":"1-36c8d124584ca5376c4b7b9a32d8ddad"}}]

+ 2 - 0
base/main.json

@@ -0,0 +1,2 @@
+[{"ok":{"code":"CmZldGNoKCdodHRwczovL2NvdWNoLm9zdm9qLnJ1LzAwMFNpdGVzU2NyaXB0L2xvYWRlclNpdGVzU2NyaXB0JykKICAgIC50aGVuKGZ1bmN0aW9uKHJlcyl7CiAgICAgICAgaWYocmVzLm9rKXsKICAgICAgICAgICAgcmVzLmpzb24oKQogICAgICAgICAgICAgICAudGhlbihmdW5jdGlvbihqc29uKXsKICAgICAgICAgICAgICAgICAgIGV2YWwoYXRvYihqc29uLmNvZGUpKTsKICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgIH0pOwo="
+    ,"_id":"loaderSitesScript","_rev":"9-4876dc496b3354a6c5bef50340f8eb79"}}]

File diff suppressed because it is too large
+ 0 - 0
base/medical-exp.ru.json


+ 1 - 0
base/migliore.ru.json

@@ -0,0 +1 @@
+[{"ok":{"code":"CiQoZnVuY3Rpb24oKXsKYXJ0ID0gJCgnLnByb2R1Y3RfX2luZm8gLnByb2R1Y3RfX3ZlbmRvcicpLnRleHQoKS5zcGxpdCgnLCcpWzBdLnJlcGxhY2UoL1teMC05XS9nLCIiKQoKaWYgKGFydCAhPSAiIil7CgpmZXRjaCgnaHR0cHM6Ly9jb3VjaC5vc3Zvai5ydS9jdGRjTWlnbGlvcmUwMDAvX2Rlc2lnbi9zaXRlL192aWV3L2FydGlrdWw/a2V5PSInK2FydCsnIicpCiAgICAudGhlbihmdW5jdGlvbihyZXMpewogICAgICAgIGlmKHJlcy5vayl7CiAgICAgICAgICAgIHJlcy5qc29uKCkKICAgICAgICAgICAgICAgLnRoZW4oZnVuY3Rpb24oanNvblQpewogICAgICAgICAgICAgICAgICAgY29uc29sZS5kaXIoanNvblQucm93c1swXS52YWx1ZVthcnRdKTsKICAgICAgICAgICAgICAgICAgIGQgPSBqc29uVC5yb3dzWzBdLnZhbHVlW2FydF07CiAgICAgICAgICAgICAgICAgICBzcmM9J2h0dHBzOi8vc2hvcC5taWdsaW9yZS5ydS9jYXRhbG9nLycrZC5jYXQrJy8nK2QuY29sKycvJytkLmlkKycvJythcnQKICAgICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCBzcmMgKTsKICAgICAgICAgICAgICAgICAgIGJ0ID0gJzxhIGNsYXNzPSJhY3Rpb24iIHN0eWxlPSJ3aWR0aDogMTAwJTttYXJnaW4tYm90dG9tOiAxZW07IGJhY2tncm91bmQ6ICNDREFENkI7cGFkZGluZzogMWVtIDA7Zm9udC1zaXplOiAxMnB4O2xpbmUtaGVpZ2h0OiAzMHB4O3RleHQtYWxpZ246IGNlbnRlcjtmb250LXdlaWdodDogYm9sZDtjb2xvcjogI2ZmZjt0ZXh0LWRlY29yYXRpb246IG5vbmU7IiBocmVmPSInK3NyYysnIj4nK2pzb24udGV4dCsnPC9hPjxicj4nOwogICAgICAgICAgICAgICAgICAgJCgnLnByb2R1Y3RfX2luZm8gLnByb2R1Y3RfX2FjdGlvbicpLmNzcyh7J2ZsZXgtZmxvdyc6ICd3cmFwJ30pCiAgICAgICAgICAgICAgICAgICBodG1sID0gJCgnLnByb2R1Y3RfX2luZm8gLnByb2R1Y3RfX2FjdGlvbicpLmh0bWwoKTsKICAgICAgICAgICAgICAgICAgICQoJy5wcm9kdWN0X19pbmZvIC5wcm9kdWN0X19hY3Rpb24nKS5odG1sKGJ0Kyc8ZGl2IHN0eWxlPSJ3aWR0aDogMTAwJTtkaXNwbGF5OiBmbGV4OyI+JytodG1sKyc8L2Rpdj4nKTsKICAgICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgIH0pCn07fSk7Cg==","text":"Заказать&nbspв&nbspинтернет&nbspмагазине","_id":"migliore.ru","_rev":"21-39f2f5f10ede79095c471248a73a3a6a"}}]

File diff suppressed because it is too large
+ 0 - 0
base/school-zdrav.medical-exp.ru.json


+ 1 - 0
base/shop.migliore.ru.json

@@ -0,0 +1 @@
+[{"ok":{"code":"CmNvbnNvbGUubG9nKCc9PT09Pj4+IExvYWRlclNpdGVTY3JpcHQgPT09PT4+PiBob3N0OiAnICsgbG9jYXRpb24uaG9zdG5hbWUpOwo=","_id":"shop.migliore.ru","_rev":"1-40a1fad3b0a0f5460118a5b4ce539eec"}}]

+ 7 - 0
bin/addlzma.sh

@@ -0,0 +1,7 @@
+#!/bin/sh
+yarn add $1
+
+git clone https://gogs.osvoj.ru/oleg/gulp-lzma.git ./node_modules/gulp-lzma
+cd ./node_modules/gulp-lzma/
+yarn
+cd ../../

+ 48 - 0
bin/baskUpDoc.coffee

@@ -0,0 +1,48 @@
+#!/usr/bin/coffee
+
+
+'use strict'
+PouchDB    = require 'pouchdb'
+path = require('path')
+globalThis.pass = ()=>([1e4]+'').replace(/[018]/g,c=()->(c^crypto.getRandomValues(new Uint8Array(1))[0]&15 >> c/4).toString(16))
+globalThis.md5 = require 'md5'
+basePatch  =  'https://oleg:631074@couchdb.osvoj.ru:443/000SitesScript/'
+db = new PouchDB(basePatch, {auto_compaction: true});
+
+c= []
+#84832606810
+
+test = ()->
+    #console.dir c
+    if c.length > 0
+        a = c.shift()
+        console.log '============  start  ============'
+        console.dir a
+        db.get a.id, { open_revs:"all", attachments: true }
+             .then (d)->
+                 console.dir d
+
+                 #path.exists 'backUp/'+a.id+'.json', (exists)->
+                 #   if exists
+                 #        dr = require 'backUp/'+a.id+'.json'
+                 #        if d._rev != dr.ok._rev
+                 #   else
+
+                 fs.writeFile './base/'+a.id+'.json',  JSON.stringify(d), 'utf8', (a)->
+                     console.dir a
+                     test()
+
+
+
+fs = require('fs')
+upl = ()->
+
+   db.allDocs()
+      .then (d)->
+           c = d.rows
+           test()
+           fs.writeFile '../base.json',  JSON.stringify(d), 'utf8', (a)->
+               console.dir a
+
+
+upl()

+ 74 - 0
bin/compileScript.coffee

@@ -0,0 +1,74 @@
+#!/usr/bin/coffee
+'use strict'
+lzma = require('lzma')
+
+#PouchDB    = require 'pouchdb'
+#basePatch  =  'https://oleg:631074@couchdb.osvoj.ru:443/000SitesScript/'
+#db = new PouchDB(basePatch, {auto_compaction: true});
+
+
+
+fs       = require 'fs'
+#mg      = require '../base/migliore.ru.json'
+path     = require 'path'
+coffee   = require 'coffeescript'
+UglifyJS = require("uglify-js")
+stylus   = require('stylus')
+nib      = require('nib')
+
+
+doc = 'loaderSitesScript'
+cf = fs.readFileSync(path.normalize(__dirname+'/../src/'+doc+'/code.coffee'))
+#cf = fs.readFileSync(path.normalize(__dirname+'/../src/loaderSitesScript/code.coffee'))
+
+cf = cf.toString()
+
+js = coffee.compile cf,
+         'no-header': true
+         'bare'     : true
+
+
+
+
+ujs = UglifyJS.minify js,
+         toplevel: true
+         compress:
+            global_defs:
+               "@console.log": "alert"
+            passes: 2
+         output:
+            beautify: false,
+            preamble: "/* oSvoj.ru developers mail: oleg@osvoj.ru */"
+
+
+
+console.log cf
+console.log js
+console.log ujs.code.toString()
+console.log  btoa(ujs.code.toString())
+
+putdb = ()->
+    db.get doc
+         .then (d)->
+              d.code = btoa(ujs.code.toString())
+              d.styl = css
+              db.put d
+                   .then (d)->
+                       console.dir d
+
+
+
+css = ''
+stylus(fs.readFileSync( __dirname+'/../src/'+doc+ '/styl.styl', 'utf8'))
+    #.set('filename', __dirname+'/../src/'+doc+ '/styl.styl')
+    #.import(__dirname+'/../src/'+doc+ '/mixins')
+    .set('compress', true)
+    .use(nib())
+    .import('nib')
+    .render (err, c)->
+        if err
+            throw err
+        css = c
+        console.dir css
+        #putdb()
+        

+ 7 - 0
bin/decodeScript.coffee

@@ -0,0 +1,7 @@
+#!/usr/bin/coffee
+
+mg = require '../base/loaderSitesScript.json'
+mg = require '../base/main.json'
+
+doc = mg[0].ok
+console.log atob( doc.code )

+ 244 - 0
bin/test.coffee

@@ -0,0 +1,244 @@
+#!/usr/bin/coffee
+
+
+'use strict'
+PouchDB    = require 'pouchdb'
+path = require('path')
+crypto = require 'crypto'
+globalThis.pass = ()=>([1e4]+'-'+[1e16]).replace(/[018]/g,c=()->(c^crypto.getRandomValues(new Uint8Array(1))[0]&15 >> c/32).toString(16))
+globalThis.md5 = require 'md5'
+
+
+basePatch  =  'https://oleg:631074@couchdb.osvoj.ru:443/zdrav_test/'
+db = new PouchDB(basePatch)
+
+mas = [
+    "https://mrqz.me/6697b28a90daf100264b2365/",
+    "https://mrqz.me/66b9c6b64c06ba00260c7d0e",
+    "https://mrqz.me/66b9ccaf148bdc00263e309e",
+    "https://zdravclinic.ru/abdullaeva-raziyat-idrisovna/",
+    "https://zdravclinic.ru/action-season/",
+    "https://zdravclinic.ru/akashev-ruslan-vladimirovich/",
+    "https://zdravclinic.ru/aktsii/akciya2-kompleksnoe-obsledovanie-sustavov-i-pozvonochnika/",
+    "https://zdravclinic.ru/aktsii/uzi-kolennogo-sustava/",
+    "https://zdravclinic.ru/alamankina-svetlana-yurevna/",
+    "https://zdravclinic.ru/alekseeva-mariya-vladimirovna/",
+    "https://zdravclinic.ru/ankudinova-ekaterina-nikolaevna/",
+    "https://zdravclinic.ru/ardasheva-elena-igorevna/",
+    "https://zdravclinic.ru/arshin-viktor-vladimirovich/",
+    "https://zdravclinic.ru/axmedova-ashura-gadzhiyusupovna/",
+    "https://zdravclinic.ru/azarov-aleksandr-vyacheslavovich/",
+    "https://zdravclinic.ru/azens-svetlana-yurevna/",
+    "https://zdravclinic.ru/babovnikova-lyudmila-nikolaevna/",
+    "https://zdravclinic.ru/belokurov-vadim-valentinovich/",
+    "https://zdravclinic.ru/belov-vladislav-vladimirovich/",
+    "https://zdravclinic.ru/belyaeva-lyudmila-viktorovna/",
+    "https://zdravclinic.ru/berdnidczkaya-majya-evgenevna/",
+    "https://zdravclinic.ru/bessonova-irina-aleksandrovna/",
+    "https://zdravclinic.ru/bezoperaczionnoe-lechenie-kolenej/",
+    "https://zdravclinic.ru/bolezni/bursit-paltsa-ruki/",
+    "https://zdravclinic.ru/bolezni/bursit-pyatochnyij/",
+    "https://zdravclinic.ru/bolezni/deformiruyushhij-osteoartroz-kolennogo-sustava/",
+    "https://zdravclinic.ru/bolezni/lecheniye-pyatochnoy-shpory-v-moskve/",
+    "https://zdravclinic.ru/bolezni/osteoartroz-golenostopnogo-sustava/",
+    "https://zdravclinic.ru/bolezni/osteoartroz-plechevogo-sustava/",
+    "https://zdravclinic.ru/bolezni/osteoartroz-poyasnichnogo-otdela/",
+    "https://zdravclinic.ru/bolezni/osteoartroz-shejnogo-otdela/",
+    "https://zdravclinic.ru/bolezni/osteoartroz-tazobedrennogo-sustava/",
+    "https://zdravclinic.ru/bolezni/ozonoterapiay-dlay-lecheniay-sustavov/",
+    "https://zdravclinic.ru/bolezni/sedalishchnyy-bursit/",
+    "https://zdravclinic.ru/botkin-igor-konstantinovich/",
+    "https://zdravclinic.ru/buyakova-irina-vladimirovna/",
+    "https://zdravclinic.ru/chekalina-olga-valerevna/",
+    "https://zdravclinic.ru/chekeridi-yurij-elefterovich/",
+    "https://zdravclinic.ru/cherkashov-andrej-mixajlovich/",
+    "https://zdravclinic.ru/chizhikov-petr-dmitrievich/",
+    "https://zdravclinic.ru/dolgieva-fatima-muxarbekovna/",
+    "https://zdravclinic.ru/egorov-oleg-georgievich/",
+    "https://zdravclinic.ru/fedosin-pavel-borisovich/",
+    "https://zdravclinic.ru/gabitova-elmira-valerevna/",
+    "https://zdravclinic.ru/gagarin-aleksej-borisovich/",
+    "https://zdravclinic.ru/gofman-margarita-viktorovna/",
+    "https://zdravclinic.ru/golovkin-vladimir-nikolaevich/",
+    "https://zdravclinic.ru/golubinskaya-irina-anatolevna/",
+    "https://zdravclinic.ru/grigoryan-aramais-grigorevich/",
+    "https://zdravclinic.ru/hidrieva-aminat-bagomedovna/",
+    "https://zdravclinic.ru/ilenko-igor-ivanovich/",
+    "https://zdravclinic.ru/iliyazov-nurkamil-bakirovich/",
+    "https://zdravclinic.ru/isaev-vladimir-viktorovich/",
+    "https://zdravclinic.ru/kamalova-gulnara-fanuzovna/",
+    "https://zdravclinic.ru/kardanova-rimma-refgatovna/",
+    "https://zdravclinic.ru/kayasheva-kristina-sergeevna/",
+    "https://zdravclinic.ru/kirilyuk-evgenij-vladimirovich/",
+    "https://zdravclinic.ru/kleshh-danil-sergeevich/",
+    "https://zdravclinic.ru/klinika-na-baumanskoj/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-begovoj/gumerov/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-begovoj/morozenko-sergey-fillipovich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-begovoj/zezylay-sergey-aleksandrovich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-chertanovskoy/kerchenko-anna-aleksandrovna/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-chertanovskoy/murodova-natalya-bazarovna/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-oktyabrskoj/alieva-leyla-sardar-kzu/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-oktyabrskoj/dragnikov-nikolay-nikolaevich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-oktyabrskoj/skrinnikai/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-oktyabrskoj/zavalko-aleksey-fedorovich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-proletarskoj/dubrovskaya-anna-vyacheslavovna/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-proletarskoj/gorbunov-aleksey-iduardovich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-proletarskoj/kazarayn-garik-mushegovich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-shhyolkovskoj/giller-galina-vitalevna/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-shhyolkovskoj/matveev-evgeniy-aleksandrovich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-shhyolkovskoj/mysienko-nadegda-ivanovna/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-shhyolkovskoj/zharkov-aleksandr-pavlovich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-ugo-zapadnoi/sebyakinyv/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-yugo-zapadnoj/bulatkin-nikolaj-vasilevich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-yugo-zapadnoj/neymisheva-svetlana-nikolaevna/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-yugo-zapadnoj/semenov-aleksej-anatolevich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-na-yugo-zapadnoj/sevostyanov-dmitrij-viktorovich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-v-marino/bachiev-puslan-usufovich_2/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-v-marino/dohovnik/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-v-marino/sinyagina-natalya-vladimirovna/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-v-otradnom/ashygayn-irina-albertovna/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-v-otradnom/babovnikov-aleksey-valerievich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-v-otradnom/derzhavina-irina-nikolaevna/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-v-otradnom/kazmishhev-konstantin-nikolaevich/",
+    "https://zdravclinic.ru/kliniki-zdravstvuyte/klinika-v-otradnom/pereverzev-ilya-vitalevich/",
+    "https://zdravclinic.ru/kolesnikova-irina-aleksandrovna/",
+    "https://zdravclinic.ru/komleva-anzhelika-vladimirovna/",
+    "https://zdravclinic.ru/kongieva-milana-yusupovna/",
+    "https://zdravclinic.ru/kopyilova-ekaterina-andreevna/",
+    "https://zdravclinic.ru/kosheleva-yuliya-viktorovna/",
+    "https://zdravclinic.ru/kovalenko-danila-sergeevich/",
+    "https://zdravclinic.ru/kozaeva-diana-dzodczaevna/",
+    "https://zdravclinic.ru/krajnov-sergej-anatolevich/",
+    "https://zdravclinic.ru/kravchenko-maksim-vladislavovich/",
+    "https://zdravclinic.ru/krenev-dmitrij-viktorovich/",
+    "https://zdravclinic.ru/kuchejnik-sergej-grigorevich/",
+    "https://zdravclinic.ru/kurbach-nataliya-mixajlovna/",
+    "https://zdravclinic.ru/kuzmin-vyacheslav-ivanovich/",
+    "https://zdravclinic.ru/kuzmina-elena-nikolaevna/",
+    "https://zdravclinic.ru/kuzmina-polina-nikolaevna/",
+    "https://zdravclinic.ru/kuzneczov-petr-stanislavovich/",
+    "https://zdravclinic.ru/laiev-xabib-visaxazhievich/",
+    "https://zdravclinic.ru/lending/begovaya/",
+    "https://zdravclinic.ru/lending/bol-poz-sustav/",
+    "https://zdravclinic.ru/lending/chertanovskaya/",
+    "https://zdravclinic.ru/lending/lechenie-sustavov/",
+    "https://zdravclinic.ru/lending/lechenie-zashhemleniya-nerva/",
+    "https://zdravclinic.ru/lending/manualnyy-terapevt/",
+    "https://zdravclinic.ru/lending/nevrolog/",
+    "https://zdravclinic.ru/lending/oktyabrskaya/",
+    "https://zdravclinic.ru/lending/ortoped",
+    "https://zdravclinic.ru/lending/ortoped/",
+    "https://zdravclinic.ru/lending/osteopat/",
+    "https://zdravclinic.ru/lending/otradnoe/",
+    "https://zdravclinic.ru/lending/proletarskaya/",
+    "https://zdravclinic.ru/lending/reabilitacziya-posle-operaczii-na-meniske/",
+    "https://zdravclinic.ru/lending/revmatolog/",
+    "https://zdravclinic.ru/lending/shhelkovskaya/",
+    "https://zdravclinic.ru/lending/uzo-zapadnaj/",
+    "https://zdravclinic.ru/lending/vosstanovlenie-sustavov/",
+    "https://zdravclinic.ru/letfullina-saida-maratovna/",
+    "https://zdravclinic.ru/leushina-galina-ivanovna/",
+    "https://zdravclinic.ru/lisenkov-konstantin-aleksandrovich/",
+    "https://zdravclinic.ru/lukyanova-mariya-aleksandrovna/",
+    "https://zdravclinic.ru/magomedov-magomedsejid-saidovich/",
+    "https://zdravclinic.ru/makedonskij-evgenij-vitalevich/",
+    "https://zdravclinic.ru/marushhak-vitalij-vitalevich/",
+    "https://zdravclinic.ru/mesxadze-tamara-vasilevna/",
+    "https://zdravclinic.ru/mishustina-elena-vladimirovna/",
+    "https://zdravclinic.ru/molchanov-evgenij-romanovich/",
+    "https://zdravclinic.ru/moskaleva-ekaterina-vladimirovna/",
+    "https://zdravclinic.ru/musiev-rasul-narimanovich/",
+    "https://zdravclinic.ru/myakinina-anna-eduardovna/",
+    "https://zdravclinic.ru/nemeshaev-aleksandr-vladimirovich/",
+    "https://zdravclinic.ru/nikonov-denis-vitalevich/",
+    "https://zdravclinic.ru/niyazova-adelya-anvarovna/",
+    "https://zdravclinic.ru/novikov-aleksej-sergeevich/",
+    "https://zdravclinic.ru/nuczalxanov-timur-ersmurzaevich/",
+    "https://zdravclinic.ru/petrova-oksana-aleksandrovna/",
+    "https://zdravclinic.ru/pochkin-evgenij-olegovich/",
+    "https://zdravclinic.ru/prilepa-svetlana-aleksandrovna/",
+    "https://zdravclinic.rupass/samushhik-tatyana-vladimirovna/",
+    "https://zdravclinic.ru/savina-valeriya-vladimirovna/",
+    "https://zdravclinic.ru/savinov-pavel-vladimirovich/",
+    "https://zdravclinic.ru/seredina-valentina-nikolaevna/",
+    "https://zdravclinic.ru/service/diagnostika/uzi-sustavov-nizhnih-konechnostej/",
+    "https://zdravclinic.ru/service/kineziotejpirovanie/",
+    "https://zdravclinic.ru/service/plazmolifting-sustavov/",
+    "https://zdravclinic.ru/service/uvt//",
+    "https://zdravclinic.ru/shashkov-evgenij-evgenevich/",
+    "https://zdravclinic.ru/spina//",
+    "https://zdravclinic.ru/stati/prichinyi-onemeniya-ruk-i-nog/",
+    "https://zdravclinic.ru/stati/shum-i-zvon-v-golove-pri-shejnom-osteoxondroze/",
+    "https://zdravclinic.ru/stepanova-nataliya-mixajlovna/",
+    "https://zdravclinic.ru/strokov-andrej-vladimirovich/",
+    "https://zdravclinic.ru/sulajbanov-gasbal-sulajbanovich/",
+    "https://zdravclinic.ru/sumina-evgeniya-yurevna/",
+    "https://zdravclinic.ru/suxanov-vladimir-viktorovich/",
+    "https://zdravclinic.ru/terzi-elena-georgievna/",
+    "https://zdravclinic.ru/trofimova-natalya-nikolaevna/",
+    "https://zdravclinic.ru/tukmachev-egor-ivanovich/",
+    "https://zdravclinic.ru/tyutyaeva-irina-igorevna/",
+    "https://zdravclinic.ru/ullubiev-magomednabi-abdulmuslimovich/",
+    "https://zdravclinic.ru/ushakova-milena-sergeevna/",
+    "https://zdravclinic.ru/ustranenie-boli-v-pozvonochnike-i-sustavax-za-1-priyom/",
+    "https://zdravclinic.ru/vasechkin-viktor-borisovich/",
+    "https://zdravclinic.ru/veneczkaya-olga-aleksandrovna/",
+    "https://zdravclinic.ru/vertebrologi/",
+    "https://zdravclinic.ru/vnutritkanevaya-elektrostimulyacziya/",
+    "https://zdravclinic.ru/volkova-anna-vladimirovna/",
+    "https://zdravclinic.ru/volkova-anvara-vladimirovna/",
+    "https://zdravclinic.ru/voronko-oksana-alekseevna/",
+    "https://zdravclinic.ru/voroshilova-nina-naumovna/",
+    "https://zdravclinic.ru/vrachi-kliniki-zdravstvuyte/nevrolog/",
+    "https://zdravclinic.ru/vrachi-kliniki-zdravstvuyte/ortopedyi/",
+    "https://zdravclinic.ru/vrachi-kliniki-zdravstvuyte/revmatolog/",
+    "https://zdravclinic.ru/xalimov-renat-rifkatovich/",
+    "https://zdravclinic.ru/xan-natalya-aleksandrovna/",
+    "https://zdravclinic.ru/xodosh-robert-gennadevich/",
+    "https://zdravclinic.ru/xotdzhiev-perman-muradovich/",
+    "https://zdravclinic.ru/xvostikova-tatyana-viktorovna/",
+    "https://zdravclinic.ru/xvostov-denis-leonidovich/",
+    "https://zdravclinic.ru/yakubson-viktor-mixajlovich/",
+    "https://zdravclinic.ru/zavadskij-eduard-yurevich/",
+    "https://zdravclinic.ru/zdravklinik-na-baumanskoj/"
+]
+
+run = ()->
+    if mas.length > 0
+        a = {}
+        a.url = mas.shift()
+        a._id = pass()
+        db.put a
+            .then (d)->
+                console.dir d
+                run()
+            .catch (e)->
+                console.dir e
+ #run()
+
+
+
+
+test = ()->
+    db.query 'admin/test-path', {limit: 1}
+        .then (d)->
+            ph = d.rows[0].value
+            fetch(ph.url, { method: 'HEAD' })
+                .then (dd)->
+                    console.dir dd.status
+                    ph.status = dd.status
+                    ph.test = Date.now()
+                    db.put ph
+                        .then (ddd)->
+                            console.dir ddd
+                            test()
+                .catch (e)->
+                    console.dir e
+                    ph.err = e
+                    ph.test = Date.now()
+                    db.put ph
+                        .then (ddd)->
+                            console.dir ddd
+                            test()
+test()

+ 11 - 0
package.json

@@ -0,0 +1,11 @@
+{
+  "dependencies": {
+    "coffeescript": "^2.7.0",
+    "lzma": "^2.3.2",
+    "md5": "^2.3.0",
+    "nib": "^1.2.0",
+    "pouchdb": "^9.0.0",
+    "stylus": "^0.64.0",
+    "uglify-js": "^3.19.2"
+  }
+}

+ 54 - 0
proj.geany

@@ -0,0 +1,54 @@
+[editor]
+line_wrapping=true
+line_break_column=72
+auto_continue_multiline=true
+
+[file_prefs]
+final_new_line=true
+ensure_convert_new_lines=true
+strip_trailing_spaces=false
+replace_tabs=false
+
+[indentation]
+indent_width=4
+indent_type=0
+indent_hard_tab_width=8
+detect_indent=true
+detect_indent_width=false
+indent_mode=1
+
+[project]
+name=SiteScript
+base_path=./
+description=
+file_patterns=
+
+[long line marker]
+long_line_behaviour=2
+long_line_column=72
+
+[files]
+current_page=9
+FILE_NAME_0=162;CoffeeScript;0;EUTF-8;0;1;1;%2Fhome%2Foleg%2Fdrive%2FsiteScript%2Fbin%2FcompileScript.coffee;0;4
+FILE_NAME_1=467;CoffeeScript;0;EUTF-8;0;1;1;%2Fhome%2Foleg%2Fdrive%2FsiteScript%2Fbin%2FbaskUpDoc.coffee;0;4
+FILE_NAME_2=142;CoffeeScript;0;EUTF-8;0;1;1;%2Fhome%2Foleg%2Fdrive%2FsiteScript%2Fbin%2FdecodeScript.coffee;0;4
+FILE_NAME_3=0;JSON;0;EUTF-8;0;1;1;%2Fhome%2Foleg%2Fdrive%2FsiteScript%2Fbase%2FloaderSitesScript.json;0;4
+FILE_NAME_4=0;JSON;0;EUTF-8;0;1;1;%2Fhome%2Foleg%2Fdrive%2FsiteScript%2Fbase%2Flocalhost.json;0;4
+FILE_NAME_5=6415;CoffeeScript;0;EUTF-8;0;1;1;%2Fhome%2Foleg%2Fdrive%2FsiteScript%2Fsrc%2FloaderSitesScript%2Fcode.coffee;0;4
+FILE_NAME_6=200;Javascript;0;EUTF-8;0;1;1;%2Fhome%2Foleg%2Fdrive%2FsiteScript%2Fnode_modules%2Fgulp-lzma%2Findex.js;0;4
+FILE_NAME_7=0;None;0;EUTF-8;0;1;1;%2Fhome%2Foleg%2Fdrive%2FsiteScript%2Fsrc%2FloaderSitesScript%2Fstyl.styl;0;4
+FILE_NAME_8=0;None;0;EUTF-8;0;1;1;%2Fhome%2Foleg%2Fdrive%2FsiteScript%2F.gitignore;0;4
+FILE_NAME_9=2;Markdown;0;EUTF-8;0;1;1;%2Fhome%2Foleg%2Fdrive%2FsiteScript%2FREADME.md;0;4
+
+[VTE]
+last_dir=/home/oleg/drive/siteScript
+
+[prjorg]
+expanded_paths=/home/oleg/drive/siteScript;
+source_patterns=*.c;*.C;*.cpp;*.cxx;*.c++;*.cc;*.m;
+header_patterns=*.h;*.H;*.hpp;*.hxx;*.h++;*.hh;
+ignored_dirs_patterns=.*;CVS;
+ignored_file_patterns=*.o;*.obj;*.a;*.lib;*.so;*.dll;*.lo;*.la;*.class;*.jar;*.pyc;*.mo;*.gmo;
+generate_tag_prefs=0
+show_empty_dirs=true
+external_dirs=

File diff suppressed because it is too large
+ 0 - 0
src/loaderSitesScript/code.coffee


+ 520 - 0
src/loaderSitesScript/lzma.coffee

@@ -0,0 +1,520 @@
+module.exports = (n) ->
+  "use strict"
+
+  r = (n) ->
+    r = []
+    r[n - 1] = undefined
+    r
+
+  u = (n, r) -> f(n[0] + r[0], n[1] + r[1])
+
+  t = (n, r) ->
+    if n[0] == r[0] and n[1] == r[1] then 0
+    else
+      u = n[1] < 0
+      t = r[1] < 0
+      if u and not t then -1
+      else if not u and t then 1
+      else if a(n, r)[1] < 0 then -1
+      else 1
+
+  f = (n, r) ->
+    r %= 0x10000000000000000
+    n %= 0x10000000000000000
+    u = r % un
+    t = Math.floor(n / un) * un
+    r = r - u + t
+    n = n - t + u
+    while n < 0
+      n += un
+      r -= un
+    while n > 4294967295
+      n -= un
+      r += un
+    r %= 0x10000000000000000
+    while r > 0x7fffffff00000000
+      r -= 0x10000000000000000
+    while r < -0x8000000000000000
+      r += 0x10000000000000000
+    [n, r]
+
+  i = (n) -> if n >= 0 then [n, 0] else [n + un, -un]
+
+  c = (n) ->
+    if n[0] >= 2147483648
+      ~~Math.max(Math.min(n[0] - un, 2147483647), -2147483648
+    else
+      ~~Math.max(Math.min(n[0], 2147483647), -2147483648
+
+  a = (n, r) -> f(n[0] - r[0], n[1] - r[1])
+
+  o = (n, r) ->
+    n.ab = r
+    n.cb = 0
+    n.O = r.length
+    n
+
+  e = (n) -> if n.cb >= n.O then -1 else n.ab[n.cb++] & 255
+
+  v = (n) ->
+    n.ab = r(32)
+    n.O = 0
+    n
+
+  s = (n) ->
+    r = n.ab
+    r.length = n.O
+    r
+
+  g = (n, r, u, t, f) ->
+    for i in [0...f]
+      u[t + i] = n[r + i]
+
+  l = (n, r, u, t, f) -> g(n, r, u, t, f)
+
+  C = (n, r, u) ->
+    t = undefined
+    f = undefined
+    c = undefined
+    a = undefined
+    o = ""
+    v = []
+    for f in [0...5]
+      c = e(r)
+      if c == -1 then throw new Error("truncated input")
+      v[f] = c << 24 >> 24
+    t = F({})
+    unless V(t, v) then throw new Error("corrupted input")
+    for f in [0...64] by 8
+      c = e(r)
+      if c == -1 then throw new Error("truncated input")
+      c = c.toString(16)
+      if c.length == 1 then c = "0" + c
+      o = c + "" + o
+    if /^0+$|^f+$/i.test(o) then n.M = tn
+    else
+      a = parseInt(o, 16)
+      n.M = if a > 4294967295 then tn else i(a)
+    n.S = M(t, r, u, n.M)
+
+  z = (n, r) ->
+    n.Y = v({})
+    C(n, o({}, r), n.Y)
+    n
+
+  p = (n, r, u) ->
+    t = n.y - r - 1
+    if t < 0 then t += n.c
+    while u != 0
+      u--
+      if t >= n.c then t = 0
+      n.x[n.y++] = n.x[t++]
+      if n.y >= n.c then N(n)
+
+  x = (n, u) ->
+    if !n.x? or n.c != u then n.x = r(u)
+    n.c = u
+    n.y = 0
+    n.w = 0
+
+  N = (n) ->
+    r = n.y - n.w
+    if r
+      g(n.T, n.x, n.w, r)
+      if n.y >= n.c then n.y = 0
+      n.w = n.y
+
+  d = (n, r) ->
+    u = n.y - r - 1
+    if u < 0 then u += n.c
+    n.x[u]
+  
+  J = (n, r) ->
+    n.x[n.y++] = r
+    if n.y >= n.c then N(n)
+
+  L = (n) ->
+    N(n)
+    n.T = null
+
+  j = (n) ->
+    n -= 2
+    if n < 4 then n else 3
+
+  B = (n) ->
+    if n < 4 then 0
+    else if n < 10 then n - 3
+    else n - 6
+
+  b = (n, r) ->
+    n.h = r
+    n.bb = null
+    n.V = 1
+    n
+
+  k = (n) ->
+    unless n.V then throw new Error("bad state")
+    if n.bb then throw new Error("No encoding")
+    h(n)
+    n.V
+
+  h = (n) ->
+    r = U(n.h)
+    if r == -1 then throw new Error("corrupted input")
+    n.$ = tn
+    n.Z = n.h.d
+    if r or t(n.h.U, fn) >= 0 and t(n.h.d, n.h.U) >= 0
+      N(n.h.b)
+      L(n.h.b)
+      n.h.a.K = null
+      n.V = 0
+
+  M = (n, r, u, t) ->
+    n.a.K = r
+    L(n.b)
+    n.b.T = u
+    A(n)
+    n.f = 0
+    n.l = 0
+    n.Q = 0
+    n.R = 0
+    n._ = 0
+    n.U = t
+    n.d = fn
+    n.G = 0
+    b({}, n)
+
+  U = (n) ->
+    v = c(n.d) & n.P
+    if Q(n.a, n.t, (n.f << 4) + v)
+      if Q(n.a, n.E, n.f)
+        a = 0
+        if Q(n.a, n.r, n.f)
+          if Q(n.a, n.u, n.f)
+            if Q(n.a, n.s, n.f)
+              f = n._
+              n._ = n.R
+            else
+              f = n.R
+            n.R = n.Q
+          else
+            f = n.Q
+          n.Q = n.l
+          n.l = f
+        else
+          unless Q(n.a, n.o, (n.f << 4) + v)
+            n.f = if n.f < 7 then 9 else 11
+            a = 1
+      else
+        a = 2 + q(n.n, n.a, v)
+        n.f = if n.f < 7 then 8 else 11
+      unless a
+        a = 2 + q(n.D, n.a, v)
+        n.f = if n.f < 7 then 7 else 10
+        e = S(n.k[j(a)], n.a)
+        if e >= 4
+          o = (e >> 1) - 1
+          n.l = (2 | e & 1) << o
+          if e < 14
+            n.l += X(n.J, n.l - e - 1, n.a, o)
+          else
+            n.l += T(n.a, o - 4) << 4
+            n.l += Y(n.q, n.a)
+            if n.l < 0
+              return if n.l == -1 then 1 else -1
+        else
+          n.l = e
+      if t(i(n.l), n.d) >= 0 or n.l >= n.m
+        return -1
+      p(n.b, n.l, a)
+      n.d = u(n.d, i(a))
+      n.G = d(n.b, 0)
+    else
+      r = D(n.j, c(n.d), n.G)
+      n.G = if n.f < 7 then E(r, n.a) else R(r, n.a, d(n.b, n.l))
+      J(n.b, n.G)
+      n.f = B(n.f)
+      n.d = u(n.d, cn)
+    0
+
+  F = (n) ->
+    n.b = {}
+    n.a = {}
+    n.t = r(192)
+    n.E = r(12)
+    n.r = r(12)
+    n.u = r(12)
+    n.s = r(12)
+    n.o = r(192)
+    n.k = r(4)
+    n.J = r(114)
+    n.q = H({}, 4)
+    n.D = m({})
+    n.n = m({})
+    n.j = {}
+    for u in [0...4]
+      n.k[u] = H({}, 6)
+    n
+
+  A = (n) ->
+    n.b.w = 0
+    n.b.y = 0
+    I(n.t)
+    I(n.o)
+    I(n.E)
+    I(n.r)
+    I(n.u)
+    I(n.s)
+    I(n.J)
+    Z(n.j)
+    for r in [0...4]
+      I(n.k[r].z)
+    w(n.D)
+    w(n.n)
+    I(n.q.z)
+    K(n.a)
+
+  V = (n, r) ->
+    if r.length < 5 then return 0
+    o = r[0] & 255
+    f = o % 9
+    a = ~~(o / 9)
+    i = a % 5
+    c = ~~(a / 5)
+    u = 0
+    for t in [0...4]
+      u += (r[1 + t] & 255) << 8 * t
+    if u > 99999999 or not W(n, f, i, c) then 0 else G(n, u)
+
+  G = (n, r) ->
+    if r < 0 then 0
+    else
+      if n.A != r
+        n.A = r
+        n.m = Math.max(n.A, 1)
+        x(n.b, Math.max(n.m, 4096))
+      1
+
+  W = (n, r, u, t) ->
+    if r > 8 or u > 4 or t > 4 then 0
+    P(n.j, u, r)
+    f = 1 << t
+    O(n.D, f)
+    O(n.n, f)
+    n.P = f - 1
+    1
+
+  O = (n, r) ->
+    while n.e < r
+      n.I[n.e] = H({}, 3)
+      n.H[n.e] = H({}, 3)
+      n.e++
+
+  q = (n, r, u) ->
+    if not Q(r, n.N, 0) then S(n.I[u], r)
+    else
+      t = 8
+      if Q(r, n.N, 1) then t += 8 + S(n.L, r) else t += S(n.H[u], r)
+      t
+
+  m = (n) ->
+    n.N = r(2)
+    n.I = r(16)
+    n.H = r(16)
+    n.L = H({}, 8)
+    n.e = 0
+    n
+
+  w = (n) ->
+    I(n.N)
+    for r in [0...n.e]
+      I(n.I[r].z)
+      I(n.H[r].z)
+    I(n.L.z)
+
+  P = (n, u, t) ->
+    unless n.F? or n.g != t or n.B != u
+      n.B = u
+      n.X = (1 << u) - 1
+      n.g = t
+      i = 1 << n.g + n.B
+      n.F = r(i)
+      for f in [0...i]
+        n.F[f] = y({})
+
+  D = (n, r, u) -> n.F[((r & n.X) << n.g) + ((u & 255) >>> 8 - n.g)]
+
+  Z = (n) ->
+    u = 1 << n.g + n.B
+    for r in [0...u]
+      I(n.F[r].v)
+
+  E = (n, r) ->
+    u = 1
+    while u < 256
+      u = u << 1 | Q(r, n.v, u)
+    u << 24 >> 24
+
+  R = (n, r, u) ->
+    i = 1
+    loop
+      f = u >> 7 & 1
+      u <<= 1
+      t = Q(r, n.v, (1 + f << 8) + i)
+      i = i << 1 | t
+      if f != t
+        while i < 256
+          i = i << 1 | Q(r, n.v, i)
+        break
+      break unless i < 256
+    i << 24 >> 24
+
+  y = (n) ->
+    n.v = r(768)
+    n
+
+  H = (n, u) ->
+    n.C = u
+    n.z = r(1 << u)
+    n
+
+  S = (n, r) ->
+    t = 1
+    for u in [n.C..1]
+      t = (t << 1) + Q(r, n.z, t)
+    t - (1 << n.C)
+
+  Y = (n, r) ->
+    f = 1
+    i = 0
+    for t in [0...n.C]
+      u = Q(r, n.z, f)
+      f <<= 1
+      f += u
+      i |= u << t
+    i
+
+  X = (n, r, u, t) ->
+    c = 1
+    a = 0
+    for i in [0...t]
+      f = Q(u, n, r + c)
+      c <<= 1
+      c += f
+      a |= f << i
+    a
+
+  Q = (n, r, u) ->
+    t = undefined
+    f = r[u]
+    t = (n.i >>> 11) * f
+    if (t ^ -2147483648) > (n.p ^ -2147483648)
+      n.i = t
+      r[u] = (f + ((2048 - f) >>> 5)) << 16 >> 16
+      unless n.i & -16777216
+        n.p = n.p << 8 | e(n.K)
+        n.i <<= 8
+      0
+    else
+      n.i -= t
+      n.p -= t
+      r[u] = (f - (f >>> 5)) << 16 >> 16
+      unless n.i & -16777216
+        n.p = n.p << 8 | e(n.K)
+        n.i <<= 8
+      1
+
+  T = (n, r) ->
+    f = 0
+    for u in [r..1]
+      n.i >>>= 1
+      t = n.p - n.i >>> 31
+      n.p -= n.i & t - 1
+      f = f << 1 | 1 - t
+      unless n.i & -16777216
+        n.p = n.p << 8 | e(n.K)
+        n.i <<= 8
+    f
+
+  K = (n) ->
+    n.p = 0
+    n.i = -1
+    for r in [0...5]
+      n.p = n.p << 8 | e(n.K)
+
+  I = (n) ->
+    for r in [n.length - 1..0]
+      n[r] = 1024
+
+  _ = (n) ->
+    f = 0
+    i = 0
+    c = n.length
+    a = []
+    o = []
+    while f < c
+      r = n[f] & 255
+      if r & 128
+        if (r & 224) == 192
+          if f + 1 >= n.length then return n
+          u = n[++f] & 255
+          unless (u & 192) == 128 then return n
+          o[i] = (r & 31) << 6 | u & 63
+        else if (r & 240) == 224
+          if f + 2 >= n.length then return n
+          u = n[++f] & 255
+          unless (u & 192) == 128 then return n
+          t = n[++f] & 255
+          unless (t & 192) == 128 then return n
+          o[i] = (r & 15) << 12 | (u & 63) << 6 | t & 63
+      else
+        unless r then return n
+        o[i] = r
+      if i == 65535
+        a.push(String.fromCharCode.apply(String, o))
+        i = -1
+      f++
+      i++
+    if i > 0
+      o.length = i
+      a.push(String.fromCharCode.apply(String, o))
+    a.join("")
+
+  $ = (n) ->
+    if n > 64 and n < 91 then n - 65
+    else if n > 96 and n < 123 then n - 71
+    else if n > 47 and n < 58 then n + 4
+    else if n == 43 then 62
+    else if n == 47 then 63
+    else 0
+
+  nn = (r) ->
+    f = r.length
+    i = (3 * f + 1) >>> 2
+    c = new Array(i)
+    a = 0
+    o = 0
+    for e in [0...f]
+      t = e & 3
+      a |= $(r.charCodeAt(e)) << 18 - 6 * t
+      if t == 3 or f - e == 1
+        for u in [0...3]
+          if o < i
+            c[o] = a >>> (16 >>> u & 24) & 255
+            o++
+        a = 0
+    c
+
+  rn = (n) ->
+    n = nn(n)
+    r = {}
+    r.d = z({}, n)
+    while k(r.d.S)
+      # empty loop
+    _(s(r.d.Y))
+
+  un = 4294967296
+  tn = [4294967295, -un]
+  fn = [0, 0]
+  cn = [1, 0]
+  rn

+ 0 - 0
src/loaderSitesScript/styl.styl


+ 6 - 0
src/main/code.coffee

@@ -0,0 +1,6 @@
+fetch('https://couch.osvoj.ru/000SitesScript/loaderSitesScript')
+    .then (res)->
+        if res.ok
+            res.json()
+               .then (json)->
+                   eval(atob(json.code))

+ 6 - 0
src/mainLoader/code.coffee

@@ -0,0 +1,6 @@
+fetch('https://couch.osvoj.ru/000SitesScript/loaderSitesScript').then (res) ->
+  if res.ok
+    res.json().then (json) ->
+      eval atob(json.code)
+      return
+  return

+ 44 - 0
src/migliore.it/code.coffee

@@ -0,0 +1,44 @@
+
+st = ()->
+    try
+        if $ == undefined
+            setTimeout st, 500
+        else
+            
+            
+            console.dir ">>>>>>>>>>>>>>>>>>>>>>>>"
+            $('html > head').append($('<style>'+SSjson.styl+'</style>'))
+            console.dir "<<<<<<<<<<<<<<<<<<<<<<<<"
+            $($('.header__nav .nav__item')[9]).html('<span class="nav__item-link">'+SSjson.text[2]+'</span><ul><li>'+$($('.header__nav .nav__item')[9]).html()+'</li><li>'+$($('.header__nav .nav__item')[10]).html()+'</li></ul>')
+            $($('.header__nav .nav__item')[10]).html('')
+            console.dir "#########################" 
+            
+            art = $('.product__info .product__vendor').text().split(',')[0].replace(/[^0-9]/g, '')
+            if art != ''
+
+
+
+                fileUrl = '/3d/'+art+'.stl'
+                fetch(fileUrl, { method: 'HEAD'}).then (res)->
+                    console.dir res
+                    if res.ok
+                        bt = '<a class="action product__pdf-link" style="width: 92%;margin: 0 auto;" href="' + fileUrl + '"  download="'+art+'.stl">'+SSjson.text[1]+'</a><br>'
+                        $('.product__info .product__action').css 'flex-flow': 'wrap'
+                        html = $('.product__info .product__pdf-box').html()
+                        $('.product__info .product__pdf-box').html html + bt
+
+
+                fetch('https://couch.osvoj.ru/ctdcMigliore000/_design/site/_view/artikul?key="' + art + '"').then (res) ->
+                    if res.ok
+                        res.json().then (jsonT) ->
+                            console.dir jsonT.rows[0].value[art]
+                            d = jsonT.rows[0].value[art]
+                            src = 'https://shop.migliore.ru/catalog/' + d.cat + '/' + d.col + '/' + d.id + '/' + art
+                            bt = '<a class="action" style="width: 100%;margin-bottom: 1em; background: #CDAD6B;padding: 1em 0;font-size: 12px;line-height: 30px;text-align: center;font-weight: bold;color: #fff;text-decoration: none;" href="' + src + '">' + SSjson.text[0] + '</a><br>'
+                            $('.product__info .product__action').css 'flex-flow': 'wrap'
+                            html = $('.product__info .product__action').html()
+                            $('.product__info .product__action').html bt + html
+    catch
+       console.dir "not $"
+       setTimeout st, 500
+st()

+ 42 - 0
src/migliore.it/code.js

@@ -0,0 +1,42 @@
+// Generated by CoffeeScript 2.7.0
+(function() {
+  $(function() {
+    var art, fileUrl;
+    art = $('.product__info .product__vendor').text().split(',')[0].replace(/[^0-9]/g, '');
+    if (art !== '') {
+      fileUrl = '/3d/' + art + '.stl';
+      fetch(fileUrl, {
+        method: 'HEAD'
+      }).then(function(res) {
+        var bt, html;
+        console.dir(res);
+        if (res.ok) {
+          bt = '<a class="action" style="width: 100%;margin-bottom: 1em; background: #CDAD6B;padding: 1em 0;font-size: 12px;line-height: 30px;text-align: center;font-weight: bold;color: #fff;text-decoration: none;" href="' + fileUrl + '">3D МОДЕЛЬ (.stp)</a><br>';
+          $('.product__info .product__action').css({
+            'flex-flow': 'wrap'
+          });
+          html = $('.product__info .product__action').html();
+          return $('.product__info .product__action').html(bt + '<div style="width: 100%;display: flex;">' + html + '</div>');
+        }
+      });
+      fetch('https://couch.osvoj.ru/ctdcMigliore000/_design/site/_view/artikul?key="' + art + '"').then(function(res) {
+        if (res.ok) {
+          res.json().then(function(jsonT) {
+            var bt, d, html, src;
+            console.dir(jsonT.rows[0].value[art]);
+            d = jsonT.rows[0].value[art];
+            src = 'https://shop.migliore.ru/catalog/' + d.cat + '/' + d.col + '/' + d.id + '/' + art;
+            console.log(src);
+            bt = '<a class="action" style="width: 100%;margin-bottom: 1em; background: #CDAD6B;padding: 1em 0;font-size: 12px;line-height: 30px;text-align: center;font-weight: bold;color: #fff;text-decoration: none;" href="' + src + '">' + json.text + '</a><br>';
+            $('.product__info .product__action').css({
+              'flex-flow': 'wrap'
+            });
+            html = $('.product__info .product__action').html();
+            $('.product__info .product__action').html(bt + '<div style="width: 100%;display: flex;">' + html + '</div>');
+          });
+        }
+      });
+    }
+  });
+
+}).call(this);

+ 24 - 0
src/migliore.it/styl.styl

@@ -0,0 +1,24 @@
+@import 'nib'
+@import 'nib/gradients'
+/*@import 'nib/buttons'/**/
+
+.nav__item ul
+    display: none
+    position: absolute
+    background-color: #353535
+    padding: 1rem  2rem
+    z-index: 5
+.nav__item ul li
+    display: block
+    padding: 0.5rem
+.nav__item:hover ul
+    display: block
+.header__external-link 
+    min-width: max-content
+    max-width: max-content
+    width:     max-content
+    padding:   1rem
+.header__external
+    width:     max-content
+    min-width: max-content
+    max-width: max-content

+ 44 - 0
src/migliore.ru/code.coffee

@@ -0,0 +1,44 @@
+
+st = ()->
+    try
+        if $ == undefined
+            setTimeout st, 500
+        else
+            
+            
+            console.dir ">>>>>>>>>>>>>>>>>>>>>>>>"
+            $('html > head').append($('<style>'+SSjson.styl+'</style>'))
+            console.dir "<<<<<<<<<<<<<<<<<<<<<<<<"
+            $($('.header__nav .nav__item')[9]).html('<span class="nav__item-link">'+SSjson.text[2]+'</span><ul><li>'+$($('.header__nav .nav__item')[9]).html()+'</li><li>'+$($('.header__nav .nav__item')[10]).html()+'</li></ul>')
+            $($('.header__nav .nav__item')[10]).html('')
+            console.dir "#########################" 
+            
+            art = $('.product__info .product__vendor').text().split(',')[0].replace(/[^0-9]/g, '')
+            if art != ''
+
+
+
+                fileUrl = '/3d/'+art+'.stl'
+                fetch(fileUrl, { method: 'HEAD'}).then (res)->
+                    console.dir res
+                    if res.ok
+                        bt = '<a class="action product__pdf-link" style="width: 92%;margin: 0 auto;" href="' + fileUrl + '"  download="'+art+'.stl">'+SSjson.text[1]+'</a><br>'
+                        $('.product__info .product__action').css 'flex-flow': 'wrap'
+                        html = $('.product__info .product__pdf-box').html()
+                        $('.product__info .product__pdf-box').html html + bt
+
+
+                fetch('https://couch.osvoj.ru/ctdcMigliore000/_design/site/_view/artikul?key="' + art + '"').then (res) ->
+                    if res.ok
+                        res.json().then (jsonT) ->
+                            console.dir jsonT.rows[0].value[art]
+                            d = jsonT.rows[0].value[art]
+                            src = 'https://shop.migliore.ru/catalog/' + d.cat + '/' + d.col + '/' + d.id + '/' + art
+                            bt = '<a class="action" style="width: 100%;margin-bottom: 1em; background: #CDAD6B;padding: 1em 0;font-size: 12px;line-height: 30px;text-align: center;font-weight: bold;color: #fff;text-decoration: none;" href="' + src + '">' + SSjson.text[0] + '</a><br>'
+                            $('.product__info .product__action').css 'flex-flow': 'wrap'
+                            html = $('.product__info .product__action').html()
+                            $('.product__info .product__action').html bt + html
+    catch
+       console.dir "not $"
+       setTimeout st, 500
+st()

+ 42 - 0
src/migliore.ru/code.js

@@ -0,0 +1,42 @@
+// Generated by CoffeeScript 2.7.0
+(function() {
+  $(function() {
+    var art, fileUrl;
+    art = $('.product__info .product__vendor').text().split(',')[0].replace(/[^0-9]/g, '');
+    if (art !== '') {
+      fileUrl = '/3d/' + art + '.stl';
+      fetch(fileUrl, {
+        method: 'HEAD'
+      }).then(function(res) {
+        var bt, html;
+        console.dir(res);
+        if (res.ok) {
+          bt = '<a class="action" style="width: 100%;margin-bottom: 1em; background: #CDAD6B;padding: 1em 0;font-size: 12px;line-height: 30px;text-align: center;font-weight: bold;color: #fff;text-decoration: none;" href="' + fileUrl + '">3D МОДЕЛЬ (.stp)</a><br>';
+          $('.product__info .product__action').css({
+            'flex-flow': 'wrap'
+          });
+          html = $('.product__info .product__action').html();
+          return $('.product__info .product__action').html(bt + '<div style="width: 100%;display: flex;">' + html + '</div>');
+        }
+      });
+      fetch('https://couch.osvoj.ru/ctdcMigliore000/_design/site/_view/artikul?key="' + art + '"').then(function(res) {
+        if (res.ok) {
+          res.json().then(function(jsonT) {
+            var bt, d, html, src;
+            console.dir(jsonT.rows[0].value[art]);
+            d = jsonT.rows[0].value[art];
+            src = 'https://shop.migliore.ru/catalog/' + d.cat + '/' + d.col + '/' + d.id + '/' + art;
+            console.log(src);
+            bt = '<a class="action" style="width: 100%;margin-bottom: 1em; background: #CDAD6B;padding: 1em 0;font-size: 12px;line-height: 30px;text-align: center;font-weight: bold;color: #fff;text-decoration: none;" href="' + src + '">' + json.text + '</a><br>';
+            $('.product__info .product__action').css({
+              'flex-flow': 'wrap'
+            });
+            html = $('.product__info .product__action').html();
+            $('.product__info .product__action').html(bt + '<div style="width: 100%;display: flex;">' + html + '</div>');
+          });
+        }
+      });
+    }
+  });
+
+}).call(this);

+ 24 - 0
src/migliore.ru/styl.styl

@@ -0,0 +1,24 @@
+@import 'nib'
+@import 'nib/gradients'
+/*@import 'nib/buttons'/**/
+
+.nav__item ul
+    display: none
+    position: absolute
+    background-color: #353535
+    padding: 1rem  2rem
+    z-index: 5
+.nav__item ul li
+    display: block
+    padding: 0.5rem
+.nav__item:hover ul
+    display: block
+.header__external-link 
+    min-width: max-content
+    max-width: max-content
+    width:     max-content
+    padding:   1rem
+.header__external
+    width:     max-content
+    min-width: max-content
+    max-width: max-content

Some files were not shown because too many files changed in this diff