Скорее всего эту будем использовать:
Другие библиотеки:
| // ==UserScript== | |
| // @name ozon.ru - для таблицы книжкой полки | |
| // @namespace http://tampermonkey.net/ | |
| // @version 0.1 | |
| // @match https://www.ozon.ru/context/detail/id/* | |
| // @grant GM_setClipboard | |
| // @grant unsafeWindow | |
| // ==/UserScript== | |
| function trim(s) { |
Скорее всего эту будем использовать:
Другие библиотеки:
Можно в их редакторах придумать внешний вид письма и затем скопировать html. А так же и вовсе делать через них большие рассылки.
| var OpenStatParser={_params:{},_parsed:!1,_decode64:function(r){if("function"==typeof window.atob)return atob(r);var t,a,e,n,i,s,o,h,d="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",p=0,f=0,u="",c=[];if(!r)return r;r+="";do n=d.indexOf(r.charAt(p++)),i=d.indexOf(r.charAt(p++)),s=d.indexOf(r.charAt(p++)),o=d.indexOf(r.charAt(p++)),h=n<<18|i<<12|s<<6|o,t=h>>16&255,a=h>>8&255,e=255&h,64==s?c[f++]=String.fromCharCode(t):64==o?c[f++]=String.fromCharCode(t,a):c[f++]=String.fromCharCode(t,a,e);while(p<r.length);return u=c.join("")},_parse:function(){var r=window.location.search.substr(1),t=r.split("&");this._params={};for(var a=0;a<t.length;a++){var e=t[a].split("=");this._params[e[0]]=e[1]}this._parsed=!0},hasMarker:function(){return this._parsed||this._parse(),"undefined"!=typeof this._params._openstat},buildCampaignParams:function(){if(!this.hasMarker())return!1;var r=this._decode64(this._params._openstat),t=r.split(";");return{utmcampaign:t[1],utmsource:t[0],utmcontent:t[2]}}}; | |
| if (OpenStat |
| <IfModule mod_rewrite.c> | |
| RewriteEngine On | |
| # serves a .webp image instead of jpg/png | |
| RewriteCond %{HTTP_ACCEPT} image/webp | |
| RewriteCond %{REQUEST_FILENAME} ^(.+)\.(jpe?g|png)$ | |
| RewriteCond %1\.webp -f | |
| RewriteRule ^(.+)\.(jpe?g|png)$ $1.webp [T=image/webp,E=accept:1] | |
| </IfModule> |
| (function(document) { | |
| 'use strict'; | |
| // replace .no-js with .js | |
| var html = document.documentElement; | |
| html.className = html.className.replace(/(^|\\s)no-js(\\s|$)/, '$1js$2'); | |
| // webp support | |
| var image = new Image(); | |
| image.onload = image.onerror = function() { |
| // Breakpoint viewport sizes and media queries. | |
| // | |
| // Breakpoints are defined as a map of (name: minimum width), order from small to large: | |
| // | |
| // (xs: 0, sm: 576px, md: 768px, lg: 992px, xl: 1200px) | |
| // | |
| // The map defined in the `@grid-breakpoints` global variable is used as the `@breakpoints` argument by default. | |
| // Name of the next breakpoint, or null for the last breakpoint. | |
| // |
| $padding: $global-padding; | |
| .Component-1 { | |
| padding: $padding; | |
| } |
| @glob-text-color: white; | |
| @glob-bg-color: darkblue; | |
| // кастомизация компонентов | |
| .page-settings() { | |
| @txt-color: @glob-text-color; | |
| @bg-color: @glob-bg-color; | |
| } | |
| .page2-settings() { |
| @import (reference) "settings"; // or `@import (multiple) "settings"`? | |
| @color: red; | |
| .hello { | |
| color: @color; | |
| padding: @padding; | |
| } |