Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Реалистичный симулятор игры бильярд. Играйте в Бильярд 3D: Русский бильярд, как в настоящей бильярдной!

Бильярд 3D: Русский бильярд

Симуляторы, Спорт, Настольные

Играть

Топ прошлой недели

  • Oskanov Oskanov 8 постов
  • alekseyJHL alekseyJHL 6 постов
  • XpyMy XpyMy 1 пост
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Новости Пикабу Помощь Кодекс Пикабу Реклама О компании
Команда Пикабу Награды Контакты О проекте Зал славы
Промокоды Скидки Работа Курсы Блоги
Купоны Biggeek Купоны AliExpress Купоны М.Видео Купоны YandexTravel Купоны Lamoda
Мобильное приложение

Svg

32 поста сначала свежее
13
aturbidflow
aturbidflow
1 месяц назад

DeepSeek умеет рисовать⁠⁠

Правда на уровне трёхлетки, но в этом есть свой шарм.

DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост

Вчера открыл для себя прелести генерации SVG в дипсике (без R1). Развлекаюсь второй день. (Для удобства вставил чисто картинки без кода)

DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост
DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост
DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост
DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост

Как оказалось, лошадей он не очень любит

DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост
DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост

Еще немного разных запросов (почему-то к концу животные стали страдать от ожирения)

DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост
DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост
DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост
DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост
DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост
DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост

А тут он внезапно сделал анимацию

DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост

P.S. R1, кстати, не спасает

DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост
DeepSeek умеет рисовать DeepSeek, Арты нейросетей, Абсурд, Искусственный интеллект, Нейронные сети, Svg, Смешные животные, Видео, Без звука, Короткие видео, Длиннопост
Показать полностью 16 1
DeepSeek Арты нейросетей Абсурд Искусственный интеллект Нейронные сети Svg Смешные животные Видео Без звука Короткие видео Длиннопост
16
8
barster
barster
4 месяца назад

Интересно⁠⁠

А Тюменский Илон Маск кинет круче?

[моё] Svg Зига Короткопост Текст
7
1
Proglib
Proglib
10 месяцев назад
Серия Итоги недели в мире фронтенда и обзоры сервисов

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга⁠⁠

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга Программирование, Разработка, Рендер, Frontend, CSS, HTML, IT, Javascript, Markdown, Nodejs, Svg, Видео, Длиннопост, YouTube, YouTube (ссылка)

☕ 5 способов создания DOM-элементов из HTML-строк методами JavaScript

Создание DOM-элементов из строк обеспечивает:

  • Динамическое создание контента – можно добавлять новые элементы на страницу без перезагрузки.

  • Гибкость – можно легко генерировать HTML на основе данных, полученных от пользователя или с сервера.

  • Шаблонизацию – поскольку упрощает создание повторяющихся структур HTML.

  • Управление интерфейсом – помогает создавать интерактивные элементы, которые реагируют на действия пользователя.

Почти все современные JavaScript-фреймворки и библиотеки предоставляют удобные инструменты для создания DOM-элементов из HTML-строк – это одна из основных задач, которую они решают. Если же нужно обойтись возможностями ванильного JavaScript, то это можно сделать несколькими разными способами.

innerHTML

Это самый известный метод: он позволяет вставить строку HTML внутрь атрибута innerHTML контейнера и затем получить доступ к созданному узлу DOM. Однако он может обрабатывать только допустимые узлы HTML – к примеру, попытка вставить элемент <tr> в <div> приведет к тому, что узел не будет создан. Кроме того, этот метод не выполняет скрипты в HTML-строках, что делает его безопасным при работе с непроверенным содержимым.

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга Программирование, Разработка, Рендер, Frontend, CSS, HTML, IT, Javascript, Markdown, Nodejs, Svg, Видео, Длиннопост, YouTube, YouTube (ссылка)

innerHTML + template

Использование тега <template> снимает ограничения на содержимое – он может содержать любую HTML-структуру, включая элементы, связанные с таблицами – <tr> и <td>.

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга Программирование, Разработка, Рендер, Frontend, CSS, HTML, IT, Javascript, Markdown, Nodejs, Svg, Видео, Длиннопост, YouTube, YouTube (ссылка)

insertAdjacentHTML

Как и innerHTML, этот метод обрабатывает только допустимые HTML-узлы и не выполняет скрипты.

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга Программирование, Разработка, Рендер, Frontend, CSS, HTML, IT, Javascript, Markdown, Nodejs, Svg, Видео, Длиннопост, YouTube, YouTube (ссылка)

DOMParser

Этот метод работает медленнее остальных, поскольку он разбирает строку, создавая полный HTML-документ, и только потом извлекает узел из документа. Он также может обрабатывать только допустимые узлы HTML и не выполняет скрипты.

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга Программирование, Разработка, Рендер, Frontend, CSS, HTML, IT, Javascript, Markdown, Nodejs, Svg, Видео, Длиннопост, YouTube, YouTube (ссылка)

Range.createContextualFragment

Самый простой, но не безопасный метод – выполняет скрипты. Поэтому при его использовании необходимо очищать данные для защиты от XSS – например, с помощью DOMPurify.

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга Программирование, Разработка, Рендер, Frontend, CSS, HTML, IT, Javascript, Markdown, Nodejs, Svg, Видео, Длиннопост, YouTube, YouTube (ссылка)

🎓☕ Подтянуть свои знания по Java вы можете на нашем телеграм-канале «Библиотека Java для собеса»

🦮 Интерактивные гайды

Гайд по SVG

SVG-графика предоставляет нам стандартизированный способ создания изображений и иконок, которые можно отображать в любом размере без потери качества изображения. Но разобраться в методах SVG не так-то просто. На помощь придет интерактивный справочник SSSVG.

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга Программирование, Разработка, Рендер, Frontend, CSS, HTML, IT, Javascript, Markdown, Nodejs, Svg, Видео, Длиннопост, YouTube, YouTube (ссылка)

SSSVG поможет быстро понять принцип работы всех основных атрибутов

К слову, возможности SVG простираются за пределы создания векторных картинок и лого: энтузиасты умудрились сделать «Тетрис» в виде одного SVG-файла.

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга Программирование, Разработка, Рендер, Frontend, CSS, HTML, IT, Javascript, Markdown, Nodejs, Svg, Видео, Длиннопост, YouTube, YouTube (ссылка)

Этот «Тетрис» сделан полностью на SVG

Гайд по :has() в CSS

Псевдокласс :has() открывает новые возможности для творческих экспериментов в CSS, позволяя создавать сложные и интерактивные дизайны без использования JavaScript. Это первый родительский селектор, позволяющий стилизовать элемент в зависимости от его содержимого. Все невероятные возможности :has() продемонстрированы в интерактивном гайде CSS :has() Interactive Guide.

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга Программирование, Разработка, Рендер, Frontend, CSS, HTML, IT, Javascript, Markdown, Nodejs, Svg, Видео, Длиннопост, YouTube, YouTube (ссылка)

В гайде подробно разобраны десятки примеров использования :has()

🐘🧩 Интересные задачи по PHP для практики можно найти на нашем телеграм-канале «Библиотека задач по PHP»

🪚 Инструменты

Plasmic – опенсорсный визуальный конструктор для создания сайтов и веб-приложений на React со множеством функций:

  • Можно интегрировать с существующими React-проектами.

  • Можно использовать как CMS.

  • Позволяет подключать разные источники данных и бэкенд-сервисы.

  • Совместим с Next.js и Gatsby.

  • Поддерживает оптимизацию производительности, включая статическую генерацию сайтов и оптимизацию изображений.

article-extractor – эта библиотека Node.js извлекает текст статей, метаданные и ссылки на изображения по URL.

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга Программирование, Разработка, Рендер, Frontend, CSS, HTML, IT, Javascript, Markdown, Nodejs, Svg, Видео, Длиннопост, YouTube, YouTube (ссылка)

Протестировать article-extractor можно на демо-сайте

Turndown – Node.js-библиотека для конвертирования HTML в Markdown. Отлично работает в связке с предыдущим инструментом.

Итоги недели в мире фронтенда и обзоры новых сервисов: Как выбрать стратегию рендеринга Программирование, Разработка, Рендер, Frontend, CSS, HTML, IT, Javascript, Markdown, Nodejs, Svg, Видео, Длиннопост, YouTube, YouTube (ссылка)

article-extractor + turndown подготовят контент для LLM

15 полезных расширений VS Code для фронтендера

  • Auto Rename Tag – при переименовании HTML-тега автоматически обновляет парный тег.

  • Code Spell Checker – находит опечатки в именах переменных и других идентификаторах.

  • DotEnv – добавляет цветовое оформление и улучшает читаемость файлов с переменными окружения.

  • Docker – добавляет вкладку для удобной работы с контейнерами, если вы используете Docker.

  • ESLint – выявляет проблемы в коде (нарушения форматирования или потенциальные ошибки) на лету.

  • Figma – позволяет встраивать и просматривать файлы дизайна Figma прямо в VS Code.

  • GitHub Copilot – предлагает AI-генерируемые подсказки во время набора кода.

  • Copilot Chat – предоставляет окно чата в стиле ChatGPT прямо в редакторе.

  • GraphQL – набор расширений, упрощающих работу с GraphQL.

  • Import Cost – показывает размер импортируемых пакетов, помогая выявить потенциальное раздувание кода.

  • Live Server – запускает локальный сервер с автоматической перезагрузкой, что удобно для предварительного просмотра изменений.

  • Live Share – позволяет программировать в команде с другими разработчиками, работая в одном редакторе в реальном времени.

  • Markdown Preview Enhanced – предоставляет живой предпросмотр Markdown-файлов во время редактирования.

  • Notes – удобный блокнот для хранения заметок по проекту, инструкций по настройке и т. д.

  • Hinty – предоставляет динамические подсказки в реальном времени. Помогает избегать повторения распространенных ошибок и соблюдать стандарты написания кода в команде.

🐍🎓 Подтянуть свои знания по Python вы можете на нашем телеграм-канале «Библиотека Python для собеса»

⚛️ Как выбрать оптимальную стратегию рендеринга

Рендеринг – это процесс превращения кода в контент. За годы развития интернета эта технология прошла долгий путь – от формирования простейших HTML-страниц на стороне сервера до динамического обновления интерактивных приложений без перезагрузки. Сейчас в ходу несколько методов рендеринга:

  • Генерация статических сайтов (предварительно генерирует HTML-страницы во время сборки приложения).

  • Генерация на стороне сервера (генерирует полный HTML для страницы при каждом запросе).

  • Генерация на стороне клиента (использует JavaScript для рендеринга контента в браузере пользователя).

  • Инкрементальная статическая регенерация (позволяет обновлять отдельные страницы после сборки сайта).

  • Частичный пререндеринг (экспериментальный подход, который стремится автоматически оптимизировать стратегии рендеринга).

Эти методы по-разному подходят к оптимизации работы приложения, SEO и пользовательского опыта. Их можно комбинировать – это позволяет по максимуму использовать сильные стороны, нивелировать недостатки и обеспечить оптимальный баланс производительности, свежести данных и интерактивности. Разработчики Vercel (эта компания создала Next.js) написали подробную статью о преимуществах и недостатках каждого подхода и о том, как их лучше комбинировать.

Генератор статических сайтов (SSG)

Идеально подходит для страниц с редко меняющимся контентом, макетов сайтов, документации и лендингов, для которых важна максимальная скорость загрузки.

Преимущества:

  • Самая быстрая загрузка страниц.

  • Отличные показатели SEO.

  • Самая низкая нагрузка на сервер.

  • Низкие затраты на инфраструктуру.

Недостатки:

  • Увеличенное время сборки для сайтов с большим количеством страниц.

  • Обновление контента требует новой сборки и развертывания.

Рендеринг на стороне сервера (SSR)

Идеально подходит для персонализированных дашбордов, лент соцсетей и визуализации данных в реальном времени.

Преимущества:

  • Всегда отдает свежий, актуальный контент.

  • Показатели SEO и времени загрузки данных лучше, чем при рендеринге на стороне клиента.

Недостатки:

  • Загрузка происходит медленнее, чем при использовании SSG или ISR.

  • Показатель времени до первого байта (TTFB) может быть неудовлетворительным.

  • Потребляет больше серверных ресурсов.

Инкрементальная статическая регенерация (ISR)

Подходит для случаев, когда сборка с SSG занимает слишком много времени. Используется для страниц продуктов в e-commerce, новостных порталов и крупных контентных сайтов.

Преимущества:

  • Сохраняет быструю загрузку страниц, как у SSG.

  • Позволяет обновлять контент по требованию без полной пересборки.

  • Эффективно масштабируется на большое количество страниц.

  • Может быть экономичнее, чем SSR, в некоторых случаях.

Недостаток:

  • Требует тщательного управления стратегиями инвалидации кэша.

Рендеринг на стороне клиента (CSR)

Подходит для интерактивных элементов страницы, требующих немедленной обратной связи, админ-панелей с данными в реальном времени и приложений типа Notion, которые непрерывно синхронизируют вводимые пользователем данные с сервером.

Преимущества:

  • Самый интерактивный пользовательский опыт.

  • Плавные переходы между состояниями приложения.

  • Взаимодействие с внешними данными в реальном времени.

Недостатки:

  • Начальная загрузка может быть медленнее из-за необходимости загрузки JavaScript-бандла.

  • Оптимизация Core Web Vitals может быть сложной.

  • Требует тщательного управления состоянием на клиенте.

Частичный пререндеринг (PPR)

PPR призван объединить преимущества других стратегий рендеринга и потенциально может стать стандартным подходом для веб-приложений в будущем.

Преимущества:

  • Мгновенная загрузка страницы (как у SSG).

  • Плавная потоковая передача динамического контента.

  • Улучшенная производительность с меньшими затратами на разработку.

Недостатки:

  • Все еще находится в стадии исследований и разработки.

  • Может потребовать рефакторинга кода для включения в существующий проект.

Выбор стратегии рендеринга

При выборе стратегии рендеринга нужно учитывать следующие факторы.

Как часто обновляется контент?

  • Статический контент лучше всего обрабатывать генератором статических сайтов.

  • Для вывода периодически обновляемого контента отлично подходит инкрементальная статическая регенерация.

  • Обновление контента в реальном времени требует серверного или клиентского рендеринга.

Для повышения производительности нужно стремиться к максимальному использованию SSG и ISR, прибегая к SSR только в случае необходимости получения абсолютно свежих данных.

Насколько важно продвижение страницы в поисковых системах?

  • Хотя Google может рендерить JavaScript на стороне клиента, ключевые показатели Core Web Vitals все еще сильно влияют на ранжирование.

  • Высоких показателей CWV легче добиться на статических и серверных страницах, чем на страницах с клиентской загрузкой внешних данных.

Насколько активно пользователь будет взаимодействовать со страницей?

  • Если страница в основном статическая с минимальным взаимодействием, используйте SSG или ISR с небольшим количеством клиентского JavaScript.

  • В противном случае может потребоваться SSR (с гидратацией на стороне клиента).

Каковы требования к скорости загрузки?

  • Для максимально быстрой начальной загрузки используйте SSG или ISR с редкой инвалидацией.

  • Чтобы сбалансировать свежесть данных и скорость, используйте ISR или SSR (для актуальных данных).

  • CSR может обеспечить данные в реальном времени, но часто за счет начальной загрузки.

Нужно ли персонализировать контент?

  • Если вам нужен персонализированный контент, скорее всего, потребуется SSR или CSR.

  • ISR может работать в случаях, когда можно кэшировать персонализированный контент, например, настройки веб-приложения.

  • SSG не позволяет персонализировать контент.

🔤 Больше полезных материалов вы найдете на нашем телеграм-канале «Азбука айтишника»

Автор рассылки: Наталья Кайда

Показать полностью 10 1
Программирование Разработка Рендер Frontend CSS HTML IT Javascript Markdown Nodejs Svg Видео Длиннопост YouTube YouTube (ссылка)
0
tablepedia
10 месяцев назад

Обсуждение внезапно прерванных дружб и поздно сбывшихся мечтаний в статьях про закрытый гештальт (06.07.2024-10.07.2024)⁠⁠

Спойлер: визуализация находится по адресу http://tablepedia.com/dataviz-2024_07_22.htm

9 июля 2024 года пользователем GutalinMySadness была опубликована статья «Гештальт закрыт» по адресу https://pikabu.ru/story/geshtalt_zakryit_11583484

Она собрала за 12 дней свыше полуторамиллионов просмотров, а ответные 8 статей собрали от 124 тыс. до 646 тыс. просмотров.

Примечательно, что во всех этих статьях присутствует хэштег https://pikabu.ru/tag/Гештальт

Теперь показываю визуализацию данных о о просмотре статей на тему «Обсуждение внезапно прерванных дружб и поздно сбывшихся мечтаний в статьях про закрытый гештальт (06.07.2024-10.07.2024)» по адресу http://tablepedia.com/dataviz-2024_07_22.htm

Если перейдёте на данную страницу, то там есть ссылки на вышеупомянутые статьи.

Для запуска этой страницы (если вы её скачали) на компьютере необходимы библиотеки (то есть файлы) jquery-3.7.1.js и raphael.min.js.

Можно скачать архив с этой страницей и нужными библиотеками по адресу:

http://www.tablepedia.com/dataviz-2024_07_22.zip

Обсуждение внезапно прерванных дружб и поздно сбывшихся мечтаний в статьях про закрытый гештальт (06.07.2024-10.07.2024) Гештальт, Дружба, Мечта, Визуализация, Javascript, Jquery, Svg, Программирование, IT, Скрипт

Визуализация данных по адресу http://tablepedia.com/dataviz-2024_07_22.htm

Гештальт Дружба Мечта Визуализация Javascript Jquery Svg Программирование IT Скрипт
0
3
tablepedia
10 месяцев назад

Визуализация данных о просмотре статей на тему «Работая в подборе кадров, все хуже понимаю молодёжь» (16.07.2024-21.07.2024)⁠⁠

Спойлер: визуализация находится по адресу http://tablepedia.com/dataviz-2024_07_21.htm

16 июля 2024 года пользователем Aplos была опубликована статья «Работая в подборе кадров, все хуже понимаю молодёжь» по адресу Работая в подборе кадров, все хуже понимаю молодёжь

Она собрала за 5 дней свыше 100 тысяч просмотров, а ответные 9 статей собрали от 160 тыс. до 851 тыс. просмотров.

Примечательно, что во всех этих статьях присутствует хэштег https://pikabu.ru/tag/Отдел кадров

Теперь показываю визуализацию данных о о просмотре статей на тему «Работая в подборе кадров, все хуже понимаю молодёжь» (16.07.2024-21.07.2024) по адресу http://tablepedia.com/dataviz-2024_07_21.htm

Если перейдёте на данную страницу, то там есть ссылки на вышеупомянутые статьи.

Для запуска этой страницы (если вы её скачали) на компьютере необходимы библиотеки (то есть файлы) jquery-3.7.1.js и raphael.min.js.

Можно скачать архив с этой страницей и нужными библиотеками по адресу:

http://www.tablepedia.com/dataviz-2024_07_21.zip

Визуализация данных о просмотре статей на тему «Работая в подборе кадров, все хуже понимаю молодёжь» (16.07.2024-21.07.2024) Сайт, Javascript, HTML, Svg, Jquery, Рафаэль tmnt, Работа HR, Отдел кадров, Собеседование, Визуализация, Вакансии

Визуализация данных по адресу http://tablepedia.com/dataviz-2024_07_21.htm

[моё] Сайт Javascript HTML Svg Jquery Рафаэль tmnt Работа HR Отдел кадров Собеседование Визуализация Вакансии
4
tablepedia
10 месяцев назад

Динамика населения 10 стран мира с 1980 года (графики) на языке JavaScript⁠⁠

Посмотрите, пожалуйста, как я визуализировал динамику населения 10 стран мира (с 1980 года) на странице

http://tablepedia.com/junior3.html

Вся эта страница занимает 8 килобайт, язык программирования - JavaScript, языки разметки - SVG и HTML.

Ниже - ВЕСЬ код страницы:

<html>

<head>

<title>Visualization of user data #tablepedia #csv2svg #covidplot #virusplot http://tablepedia.com/junior3.html</title>

</head>

<body onload="PLOTbuild();">

<h1>Top 10 countries by population since 1980 (single HTML page with JS in 8 KB)</h1>

<script>

var h1 = 20; var h2 = 580; var v1 = 360; var v2 = 10;

var OXaxis=h1; var OYaxis=v1;

var fsize = "12"; var plotColor="red"

var elements = ['', '']; var sTemp="";

var ymin=[0, 981, 697, 227, 138, 147, 121, 81, 78, 73, 70];

var ymax=[0, 1412, 1375, 331, 149, 273, 212, 164, 210, 205, 128];

var x1=1980; var x2=2020;

var y1=60; var y2=210;

function PLOTbuild()

{

var targ = document.getElementById('target').value;

var tableStringsT = targ.split("\n"); var SIMPLEpoly = ''; var nTemp=0;

var ycol = document.getElementById("SM01").options.selectedIndex;

var ft1=fitRange1(ymin[ycol], ymax[ycol], 10);

var ft2=NUMBERseries(ft1);

var FromToX = "1980;1990;2000;2010;2020";

var OXscale = TEXTscale(FromToX, h1, h2);

var OYscale = TEXTscale(ft2, v1, v2);

var stringsOX = OXscale.split("\n"); var stringsOY = OYscale.split("\n");

for (var i = 1; i < tableStringsT.length-1; i = i + 1)

{

elements = tableStringsT[i].split("\t");

sTemp = elements[0] + ';' + elements[ycol];

SIMPLEpoly = SIMPLEpoly + convert2ValuesTo2Coordinates(sTemp, x1, x2, y1, y2, h1, h2, v1, v2) + '\n';

}

SIMPLEpoly = SIMPLEpoly.replace(/;/g, ',');

var sSVG = "<polyline fill='none' stroke='" + plotColor + "' stroke-width='1' points='";

sSVG = sSVG + SIMPLEpoly + "' />";

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='";

sSVG = sSVG + h1 + "," + OYaxis + " " + h2 + "," + OYaxis + "' />";

for (var i = 0; i < stringsOX.length; i++)

{

elements = stringsOX[i].split("\t");

var OXshift1 = OYaxis + 10; var OYshift1 = h1 + 20;

var nOXsh2 = parseFloat(elements[1]) - 4; var nOYsh3 = OYaxis + 18;

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='";

sSVG = sSVG + elements[1] + "," + OYaxis + " " + elements[1] + "," + OXshift1 + "' />";

sSVG = sSVG + "\n" + "<text x='" + nOXsh2 + "' y='" + nOYsh3 +

"' fill='black' font-family='Arial' font-size='" + fsize + "'>" + elements[2] + "</text>";

}

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='" + OXaxis + ",";

sSVG = sSVG + v1 + " " + OXaxis + "," + v2 + "' />";

for (var i = 0; i < stringsOY.length; i++)

{

elements = stringsOY[i].split("\t");

sTemp=elements[2];

if (i == (stringsOY.length-1)) sTemp=document.getElementById("SM01").options[ycol].text;

OXshift1 = v1 + 10; OYshift1 = OXaxis + 10;

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='" + OXaxis + ",";

sSVG = sSVG + elements[1] + " " + OYshift1 + "," + elements[1] + "' />";

sSVG = sSVG + "\n" + "<text x='" + OYshift1 + "' y='" + elements[1] + "' fill='" + plotColor +

"' font-family='Arial' font-size='" + fsize + "'>" + sTemp + "</text>";

}

document.getElementById('boldStuff').innerHTML = "<svg version='1.1' width='" + '700' + "' height='" + '400' + "' xmlns='http://www.w3.org/2000/svg'

xmlns:xlink='http://www.w3.org/1999/xlink'>" + sSVG + "\n" + "</svg>";

}

function TEXTscale(x1xN, min4, max4)

{

var pieces = x1xN.split(";");

var qx = pieces.length-1;

var sm3 = ""; var xAmong=0;

for (var i = 0; i < qx; i = i + 1)

{

xAmong = parseFloat(pieces[i]);

xx1=parseFloat(pieces[0]);

xx2=parseFloat(pieces[qx]);

part = (xAmong - xx1) / (xx2 - xx1); smart2=(max4 - min4) * part + min4;

smart2 = NUMBERfloat(smart2, 0.001);

sm3 = sm3 + xAmong + "\t" + smart2 + "\t" + xAmong + "\n";

}

coo = NUMBERfloat(max4, 0.0001);

sm3 = sm3 + xx2+"\t"+coo+"\t"+xx2;

return sm3;

}

function convert2ValuesTo2Coordinates(xy, x1, x2, y1, y2, xa41, xa42, ya41, ya42)

{

var srav = xy.split(";");

var gett = convert1ValueTo1Coordinate(x1, x2, xa41, xa42, srav[0]) + ";" + convert1ValueTo1Coordinate(y1, y2, ya41, ya42, srav[1]); return gett;

}

function convert1ValueTo1Coordinate(zx1, zx2, a1, a2, xVECTOR1)

{

return (a2-a1) * (xVECTOR1 - zx1) / (zx2 - zx1) + a1;

}

function NUMBERfloat(xbig, xsmall)

{

vmax = Math.floor(xbig / xsmall + 0.99) * xsmall; vmax = vmax.toFixed(10);

vmax = vmax * 1; return vmax;

}

function fitRange1(a, b, nLines)

{

var xr = Math.abs(b - a) / nLines;

var mimi = Math.abs(a / xr) / nLines * 5;

if (mimi < 1)

{

a = 0;

xr = Math.abs(b - a) / nLines;

}

var loga = Math.log10(xr);

var inta = Math.floor(loga);

var deca = Math.pow(10, inta);

var mi1 = Math.floor(a / deca);

var ma1 = Math.ceil(b / deca);

var iFlag = 0;

if ((ma1 - mi1) > (nLines * 2))

{

deca = deca * 5;

mi1 = Math.floor(a / deca);

ma1 = Math.ceil(b / deca);

iFlag = iFlag + 1;

}

if ((ma1 - mi1) > (nLines))

{

deca = deca * 2;

mi1 = Math.floor(a / deca);

ma1 = Math.ceil(b / deca);

iFlag = iFlag - 1;

}

var mi2 = mi1 * deca;

var ma2 = ma1 * deca;

var s4 = mi2.toString() + ";" + ma2.toString() + ";" + deca.toString();

return s4;

}

function NUMBERseries(fts)

{

var FromToStep = fts.split(";");

var sFrom = FromToStep[0]; y1 = parseFloat(sFrom);

var sTo = FromToStep[1]; y2 = parseFloat(sTo);

var sStep = FromToStep[2]; var vStep = parseFloat(sStep);

var rr = "";

for (var x = y1; x < y2; x = x + vStep)

{

rr = rr + NUMBERfloat(x, vStep)+ ";";

}

rr=rr+y2;

return rr;

}

</script>

<SELECT name="SM01" id="SM01" onchange="PLOTbuild()">

<OPTION SELECTED VALUE="0">SELECT COUNTRY</OPTION>

<OPTION VALUE="1">China</OPTION>

<OPTION VALUE="2">India</OPTION>

<OPTION VALUE="3">USA</OPTION>

<OPTION VALUE="4">Russia</OPTION>

<OPTION VALUE="5">Indonesia</OPTION>

<OPTION VALUE="6">Brazil</OPTION>

<OPTION VALUE="7">Bangladesh</OPTION>

<OPTION VALUE="8">Pakistan</OPTION>

<OPTION VALUE="9">Nigeria</OPTION>

<OPTION VALUE="10">Mexico</OPTION>

</SELECT>

<br>

<textarea class="input_type" id="target" name="target" cols="28" rows="28" wrap="off">

Year China India USA Russia Indonesia Brazil Bangladesh Pakistan Nigeria Mexico

2020 1412 1375 331 147 273 212 164 210 205 128

2018 1397 1351 327 147 266 210 161 201 196 124

2016 1379 1324 323 147 261 208 159 193 186 122

2014 1364 1294 319 146 254 205 157 186 178 120

2012 1351 1263 314 143 248 201 155 179 168 118

2010 1338 1231 309 143 242 197 152 171 159 116

2008 1325 1197 304 143 236 193 149 163 151 114

2006 1311 1162 299 143 230 189 145 157 143 112

2004 1296 1126 293 144 224 185 140 150 136 109

2002 1280 1089 288 145 218 181 135 143 129 106

2000 1263 1054 282 147 212 175 129 137 122 103

1998 1242 1018 276 148 206 171 125 132 115 100

1996 1218 983 269 148 200 165 120 126 109 97

1994 1192 946 263 148 194 159 117 120 101 93

1992 1165 910 257 149 188 155 112 114 93 89

1990 1135 874 250 148 182 150 106 108 88 86

1988 1102 838 244 147 176 144 101 101 86 82

1986 1067 802 240 144 170 139 95 95 84 79

1984 1037 767 236 142 163 133 90 89 81 76

1982 1009 733 232 140 155 127 86 83 77 73

1980 981 697 227 138 147 121 81 78 73 70

</textarea>

<b id="boldStuff" style="color:transparent;">SVG</b>

</body>

</html>

Показать полностью
Javascript HTML Svg Программирование Программист Население Страны Скрипт Тестирование Текст Длиннопост
4
tablepedia
10 месяцев назад

Визуализация графиков функций на языке JavaScript⁠⁠

Посмотрите, пожалуйста, как я визуализировал графики функций на странице

http://tablepedia.com/junior2.html

Вся эта страница занимает 8 килобайт, а язык программирования - JavaScript, также используются языки разметки SVG и HTML.

Ниже - ВЕСЬ код страницы:

<html>

<body onload="CARE(); PLOTbuild();">

<br>

<h2>Graphing calc</h2>

<br>

Xmin= <input id="xMin" value="0" type="text" size="10">

Xmax= <input id="xMax" value="10" type="text" size="10">

Xstep= <input id="xStep" value="1" type="text" size="10">

<br>

f(x)= <input id="tCare" value="x^2; sin(x); exp(x); log(x)" type="text" size="40">

<script>

var h1 = 20; var h2 = 580; var v1 = 360; var v2 = 10; var x1=0; var x2=0; var x3=0; var x4=0;

var y1=0; var y2=0; var y3=0; var OXaxis=0; var OYaxis=0;

var xcol=0; var ycol=1; var fsize = "12"; var plotColor="red"

var elements = ['', '']; var sTemp=""; var OXscale=""; var OYscale="";

function PLOTbuild()

{

OXaxis=0; OYaxis=0;

var FromToX = NUMBERseries(x1, x2, x3); OXscale = TEXTscale(FromToX, h1, h2);

var FromToY = NUMBERseries(y1, y2, y3); OYscale = TEXTscale(FromToY, v1, v2);

var targ = document.getElementById('target').value;

var stringsOX = OXscale.split("\n"); var stringsOY = OYscale.split("\n");

var tableStringsT = targ.split("\n"); var SIMPLEpoly = '';

for (var i = 1; i < tableStringsT.length-1; i = i + 1)

{

elements = tableStringsT[i].split("\t");

sTemp = elements[xcol] + ';' + elements[ycol];

SIMPLEpoly = SIMPLEpoly + convert2ValuesTo2Coordinates(sTemp, x1, x2, y1, y2, h1, h2, v1, v2) + '\n';

}

SIMPLEpoly = SIMPLEpoly.replace(/;/g, ',');

var sSVG = "<polyline fill='none' stroke='" + plotColor + "' stroke-width='1' points='";

sSVG = sSVG + SIMPLEpoly + "' />";

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='";

sSVG = sSVG + h1 + "," + OYaxis + " " + h2 + "," + OYaxis + "' />";

for (var i = 0; i < stringsOX.length; i++)

{

elements = stringsOX[i].split("\t");

var OXshift1 = OYaxis + 10; var OYshift1 = h1 + 20;

var nOXsh2 = parseFloat(elements[1]) - 4; var nOYsh3 = OYaxis + 18;

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='";

sSVG = sSVG + elements[1] + "," + OYaxis + " " + elements[1] + "," + OXshift1 + "' />";

sSVG = sSVG + "\n" + "<text x='" + nOXsh2 + "' y='" + nOYsh3 +

"' fill='black' font-family='Arial' font-size='" + fsize + "'>" + elements[2] + "</text>";

}

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='" + OXaxis + ",";

sSVG = sSVG + v1 + " " + OXaxis + "," + v2 + "' />";

for (var i = 0; i < stringsOY.length; i++)

{

elements = stringsOY[i].split("\t");

sTemp=elements[2];

if (i == (stringsOY.length-1)) sTemp=document.getElementById("SM01").options[ycol].text;

OXshift1 = v1 + 10; OYshift1 = OXaxis + 10;

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='" + OXaxis + ",";

sSVG = sSVG + elements[1] + " " + OYshift1 + "," + elements[1] + "' />";

sSVG = sSVG + "\n" + "<text x='" + OYshift1 + "' y='" + elements[1] + "' fill='" + plotColor +

"' font-family='Arial' font-size='" + fsize + "'>" + sTemp + "</text>";

}

document.getElementById('boldStuff').innerHTML = "<svg version='1.1' width='" + '700' + "' height='" + '400' + "' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>" + sSVG + "\n" + "</svg>";

}

function TEXTscale(x1xN, min4, max4)

{

var pieces = x1xN.split(";");

var qx = pieces.length-1;

var sm3 = ""; var smpp=0;

for (var i = 0; i < qx; i = i + 1)

{

smpp = parseFloat(pieces[i]); sm3 = sm3 + smpp; sm3 = sm3 + "\t";

xx1=parseFloat(pieces[0]);

xx2=parseFloat(pieces[qx]);

xAmong=smpp;

part = (xAmong - xx1) / (xx2 - xx1); smart2=(max4 - min4) * part + min4;

smart2 = NUMBERfloat(smart2, 0.001);

sm3 = sm3 + smart2;

sm3 = sm3 + "\t" + smpp + "\n";

if (smpp == 0)

{

if (OXaxis == 0) {OXaxis=smart2;} else {OYaxis=smart2;}

}

}

coo = NUMBERfloat(max4, 0.0001);

sm3 = sm3 + x2+"\t"+coo+"\t"+x2;

return sm3;

}

function convert2ValuesTo2Coordinates(xy, x1, x2, y1, y2, xa41, xa42, ya41, ya42)

{

var srav = xy.split(";");

var gett = convert1ValueTo1Coordinate(x1, x2, xa41, xa42, srav[0]) + ";" + convert1ValueTo1Coordinate(y1, y2, ya41, ya42, srav[1]); return gett;

}

function convert1ValueTo1Coordinate(zx1, zx2, a1, a2, xVECTOR1)

{

return (a2-a1) * (xVECTOR1 - zx1) / (zx2 - zx1) + a1;

}

function NUMBERfloat(xbig, xsmall)

{

vmax = Math.floor(xbig / xsmall + 0.99) * xsmall; vmax = vmax.toFixed(10);

vmax = vmax * 1; return vmax;

}

function NUMBERseries(f, t, vStep)

{

var s = "";

for (var x = f; x < t; x = x + vStep)

{

s = s + NUMBERfloat(x, vStep) + ";"

}

s=s+t; return s;

}

function CARE()

{

ycol = document.getElementById("SM01").options.selectedIndex;

var s = document.getElementById("target").value;

var arrayOfTableStrings = s.split("\n");

var midC = 0;

var minC = 0;

var maxC = 0;

for (var i = 1; i < arrayOfTableStrings.length - 1; i++)

{

STRINGelements = arrayOfTableStrings[i].split("\t");

midC = parseFloat(STRINGelements[ycol]);

if (maxC < midC)

maxC = midC;

if (minC > midC)

minC = midC;

}

a = NUMBERfloat(minC, 0.001);

b = NUMBERfloat(maxC, 0.001);

var xr = Math.abs(b - a) / 10;

var mimi = Math.abs(a / xr) / 10 * 5;

if (mimi < 1)

{

a = 0;

xr = Math.abs(b - a) / 10;

}

var loga = Math.log10(xr);

var inta = Math.floor(loga);

var deca = Math.pow(10, inta);

var mi1 = Math.floor(a / deca);

var ma1 = Math.ceil(b / deca);

var xMIN=document.getElementById('xMin').value;

x1=parseFloat(xMIN);

var xMAX=document.getElementById('xMax').value;

x2=parseFloat(xMAX);

var xStep=document.getElementById('xStep').value;

x3=parseFloat(xStep); if (x3 == 0) x3=x2-x1;

x4=x3/10;

y1 = NUMBERfloat(mi1 * deca, 0.001);

y2 = NUMBERfloat(ma1 * deca, 0.001);

y3=(y2-y1)/10;

var xtemp=0;

var textToSave = document.getElementById("tCare").value;

textToSave=textToSave.replace('log', 'Math.log');

textToSave=textToSave.replace('exp', 'Math.exp');

textToSave=textToSave.replace('sin', 'Math.sin');

textToSave=textToSave.replace('cos', 'Math.cos');

var tts= textToSave.split(";");

var s='';

var i=0;

var j=0;

for(i=x1; i<x2;i=i+x4){

s=s+NUMBERfloat(i, 0.001);

for(j=0; j<tts.length;j++){

xtemp=eval('x='+i+'; '+caretReplace(tts[j]))

s=s+'\t'+NUMBERfloat(xtemp, 0.001);

}

s=s+'\n';

if (i>=parseFloat(xMax))break;

}

document.getElementById("target").value = s;

}

var caretReplace = function(_s) {

if (_s.indexOf("^") > -1) {

var tab = [];

var powfunc="Math.pow";

var joker = "___joker___";

while (_s.indexOf("(") > -1) {

_s = _s.replace(/(\([^\(\)]*\))/g, function(m, t) {

tab.push(t);

return (joker + (tab.length - 1));

});

}

tab.push(_s);

_s = joker + (tab.length - 1);

while (_s.indexOf(joker) > -1) {

_s = _s.replace(new RegExp(joker + "(\\d+)", "g"), function(m, d) {

return tab[d].replace(/(\w*)\^(\w*)/g, powfunc+"($1,$2)");

});

}

}

return _s;

};

</script>

<SELECT name="SM01" id="SM01" onchange="CARE(); PLOTbuild()">

<OPTION SELECTED VALUE="0">SELECT YOUR FUNCTION</OPTION>

<OPTION VALUE="1">x^2</OPTION>

<OPTION VALUE="2">sin(x)</OPTION>

<OPTION VALUE="3">exp(x)</OPTION>

<OPTION VALUE="4">log(x)</OPTION>

</SELECT>

<br>

<textarea class="input_type" id="target" name="target" cols="28" rows="28" wrap="off"></textarea>

<b id="boldStuff" style="color:transparent;">SVG</b>

</body>

</html>

Показать полностью
[моё] Javascript HTML Svg Программирование Языки программирования IT Программист График Визуализация Визуализация данных Текст Длиннопост
5
tablepedia
10 месяцев назад

Визуализация таблицы на языке JavaScript⁠⁠

Посмотрите, пожалуйста, как я визуализировал таблицу в виде графика на странице

http://tablepedia.com/junior.html

Причём, вся эта страница занимает 8 килобайт, а языки программирования - JavaScript и SVG, а также HTML.

Ниже - ВЕСЬ код страницы:

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">

<title>Visualization of user data #tablepedia #csv2svg #covidplot #virusplot tablepedia.com</title>

</head>

<body onload="PLOTbuild()">

<h1>Visualization of user data (single HTML page with JS in 8 KB)</h1>

Xmin= <input id="xMin" value="0" type="text" size="10">

Xmax= <input id="xMax" value="160" type="text" size="10">

Xstep= <input id="xStep" value="10" type="text" size="10">

<input type="button" value=" PLOT USER DATA " onclick="PLOTbuild()">

<br>

Ymin= <input id="yMin" value="0" type="text" size="10">

Ymax= <input id="yMax" value="1600" type="text" size="10">

Ystep= <input id="yStep" value="200" type="text" size="10">

<script>

var horizontalRange = '20;580'; var verticalRange = '360;10';

var xcol=0; var ycol=1; var fsize = "12"; var plotColor="red"

var STRINGelements = ['', '']; var sTemp=0; var OXscale=""; var OYscale="";

function PLOTbuild()

{

var s0 = "<svg version='1.1' width='" + '700' + "' height='" + '400' + "' xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'>";

document.getElementById('boldStuff').innerHTML = s0 + SVGgenerate() + "\n" + "</svg>";

}

function SVGgenerate()

{

var xMIN=document.getElementById('xMin').value;

var x1=parseFloat(xMIN);

var xMAX=document.getElementById('xMax').value;

var x2=parseFloat(xMAX);

var xMM=xMIN+";"+xMAX;

var xStep=document.getElementById('xStep').value;

var x3=parseFloat(xStep); if (x3 == 0) x3=x2-x1;

var yMIN=document.getElementById('yMin').value;

var y1=parseFloat(yMIN);

var yMAX=document.getElementById('yMax').value;

var y2=parseFloat(yMAX);

var yMM=yMIN+";"+yMAX;

var yStep=document.getElementById('yStep').value;

var y3=parseFloat(yStep); if (y3 == 0) y3=y2-y1;

var FromToX = NUMBERseries(x1, x2, x3); OXscale = TEXTscale(FromToX, horizontalRange);

var FromToY = NUMBERseries(y1, y2, y3); OYscale = TEXTscale(FromToY, verticalRange);

var rangeXA4 = horizontalRange.split(";"); var axisOnOX = rangeXA4[0];

var rangeYA4 = verticalRange.split(";"); var axisOnOY = rangeYA4[0];

var targ = document.getElementById('target').value;

var tableStringsOX = OXscale.split("\n"); var tableStringsOY = OYscale.split("\n");

var tableStringsT = targ.split("\n"); var SIMPLEpoly = '';

for (var i = 1; i < tableStringsT.length-1; i = i + 1)

{

STRINGelements = tableStringsT[i].split("\t");

sTemp = STRINGelements[xcol] + ';' + STRINGelements[ycol];

SIMPLEpoly = SIMPLEpoly + convert2ValuesTo2Coordinates(sTemp, xMM, yMM, horizontalRange, verticalRange) + '\n';

}

SIMPLEpoly = SIMPLEpoly.replace(/;/g, ',');

var sSVG = "<polyline fill='none' stroke='" + plotColor + "' stroke-width='1' points='";

sSVG = sSVG + SIMPLEpoly + "' />";

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='";

sSVG = sSVG + rangeXA4[0] + "," + axisOnOY + " " + rangeXA4[1] + "," + axisOnOY + "' />";

for (var i = 0; i < tableStringsOX.length; i++)

{

STRINGelements = tableStringsOX[i].split("\t");

var OXshift1 = parseFloat(axisOnOY) + 10; var OXsh1 = OXshift1.toString();

var OYshift1 = parseFloat(axisOnOX) + 20; var nOYsh2 = parseFloat(axisOnOX) - 5; var OYsh1 = OYshift1.toString();

var nOXsh2 = parseFloat(STRINGelements[1]) - 4; var OXsh2 = nOXsh2.toString();

var nOYsh3 = parseFloat(OXsh1) + 8; var OYsh3 = nOYsh3.toString();

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='";

sSVG = sSVG + STRINGelements[1] + "," + axisOnOY + " " + STRINGelements[1] + "," + OXsh1 + "' />";

sSVG = sSVG + "\n" + "<text x='" + OXsh2 + "' y='" + OYsh3 +

"' fill='black' font-family='Arial' font-size='" + fsize + "'>" + STRINGelements[2] + "</text>";

}

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='" + axisOnOX + ",";

sSVG = sSVG + rangeYA4[0] + " " + axisOnOX + "," + rangeYA4[1] + "' />";

for (var i = 0; i < tableStringsOY.length; i++)

{

STRINGelements = tableStringsOY[i].split("\t");

OXshift1 = parseFloat(axisOnOY) + 10; OXsh1 = OXshift1.toString(); OYshift1 = parseFloat(axisOnOX) + 10;

OYsh1 = OYshift1.toString();

sSVG = sSVG + "\n" + "<polyline fill='none' stroke='#000000' stroke-width='0.5' points='" + axisOnOX + ",";

sSVG = sSVG + STRINGelements[1] + " " + OYsh1 + "," + STRINGelements[1] + "' />";

sSVG = sSVG + "\n" + "<text x='" + OYsh1 + "' y='" + STRINGelements[1] + "' fill='" + plotColor +

"' font-family='Arial' font-size='" + fsize + "'>" + STRINGelements[2] + "</text>";

}

return sSVG;

}

function TEXTscale(x1xN, min4max4)

{

var pieces = x1xN.split(";");

var pieces2 = min4max4.split(";");

var qx = pieces.length-1;

var sm3 = ""; var smpp=0;

for (var i = 0; i < qx; i = i + 1)

{

smpp = parseFloat(pieces[i]); sm3 = sm3 + smpp; sm3 = sm3 + "\t";

smart2 = findProportion(parseFloat(pieces[0]), parseFloat(pieces[qx]), smpp, parseFloat(pieces2[0]), parseFloat(pieces2[1]));

smart2 = NUMBERround(smart2, 3);

sm3 = sm3 + smart2;

sm3 = sm3 + "\t" + smpp + "\n";

}

coo = parseFloat(pieces2[1]);

coo = NUMBERround(coo, 4);

coo2 = parseFloat(pieces[qx]);

sm3 = sm3 + coo2+"\t"+coo+"\t"+coo2;

return sm3;

}

function convert2ValuesTo2Coordinates(xy, x, y, xa4, ya4)

{

var srav = xy.split(";");

var d0 = convert1ValueTo1Coordinate(x, xa4, srav[0]); var h0 = convert1ValueTo1Coordinate(y, ya4, srav[1]);

var gett = d0 + ";" + h0; return gett;

}

function convert1ValueTo1Coordinate(VECTOR1, VECTOR2, xVECTOR1)

{

var pieces = VECTOR1.split(";"); var pieces2 = VECTOR2.split(";");

var smart2 = findProportion(parseFloat(pieces[0]), parseFloat(pieces[1]), xVECTOR1, parseFloat(pieces2[0]), parseFloat(pieces2[1]));

return smart2;

}

function findProportion(x1, x2, xAmong, min4, max4)

{

var part = (xAmong - x1) / (x2 - x1); return (max4 - min4) * part + min4;

}

function NUMBERround(x, n)

{

if (isNaN(x) || isNaN(n)) return 0; var m = Math.pow(10, n); return Math.round(x * m) / m;

}

function NUMBERfloat(xbig, xsmall)

{

vmax = Math.floor(xbig / xsmall + 0.99) * xsmall; vmax = vmax.toFixed(10);

vmax = vmax * 1; smax = vmax.toString(); return smax;

}

function NUMBERseries(f, t, vStep)

{

var s = "";

for (var x = f; x < t; x = x + vStep)

{

s = s + NUMBERfloat(x, vStep) + ";"

}

s=s+t; return s;

}

</script>

<br>

<br>

USER DATA:

<br>

<textarea class="input_type" id="target" name="target" cols="28" rows="28" wrap="off">

X Y

159 1956

158 1934

157 1905

156 1883

155 1861

154 1839

153 1818

152 1797

151 1774

150 1749

149 1726

148 1707

147 1688

146 1671

145 1657

144 1634

143 1608

142 1581

141 1558

140 1537

139 1516

138 1497

137 1473

136 1441

135 1414

134 1393

133 1373

132 1356

131 1333

130 1307

129 1279

128 1250

127 1225

126 1200

125 1158

124 1133

123 1104

122 1070

121 1040

120 1013

119 988

118 966

117 939

116 891

115 869

114 843

113 825

112 788

111 760

110 735

109 702

108 671

107 640

106 610

105 583

104 558

103 530

102 502

101 466

100 432

99 399

98 368

97 338

96 312

95 278

94 246

93 217

92 190

91 165

90 143

89 125

88 105

87 86

86 69

85 55

84 46

83 35

82 27

81 20

80 14

79 9

78 6

77 5

0 0

</textarea>

<b id="boldStuff" style="color:transparent;">SVG</b>

</body>

</html>

Показать полностью
[моё] Javascript HTML Svg Визуализация Программирование Скрипт График Таблица Программист Текст Длиннопост
5
Посты не найдены
О Нас
О Пикабу
Контакты
Реклама
Сообщить об ошибке
Сообщить о нарушении законодательства
Отзывы и предложения
Новости Пикабу
RSS
Информация
Помощь
Кодекс Пикабу
Награды
Команда Пикабу
Бан-лист
Конфиденциальность
Правила соцсети
О рекомендациях
Наши проекты
Блоги
Работа
Промокоды
Игры
Скидки
Курсы
Зал славы
Mobile
Мобильное приложение
Партнёры
Промокоды Biggeek
Промокоды Маркет Деливери
Промокоды Яндекс Путешествия
Промокоды М.Видео
Промокоды в Ленте Онлайн
Промокоды Тефаль
Промокоды Сбермаркет
Промокоды Спортмастер
Постила
Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии