Server IP : 108.163.255.210 / Your IP : 18.191.14.104 Web Server : Apache System : Linux blossom.urlnameserver.com 3.10.0-1160.80.1.el7.x86_64 #1 SMP Tue Nov 8 15:48:59 UTC 2022 x86_64 User : ( 1172) PHP Version : 7.2.34 Disable Function : eval,escapeshellarg,proc_close,proc_get_status,proc_nice,proc_open,symlink,system,pcntl_exec,getrusage,chown,chgp,closelog,openlog,syslog,define_syslog_variables,php_ini_loaded_file,getservbyname,getservbyport,posix_getgid,posix_getgrgid,proc_terminate,pfsockopen,apache_child_terminate,posix_mkfifo,posix_setpgid,posix_setuid,hypot,pg_host,pos,posix_access,posix_getcwd,posix_getservbyname,myshellexec,getpid,posix_getsid,posix_isatty,posix_kill,posix_mknod,posix_setgid,posix_setsid,posix_setuid,posix_times,posix_uname,ps_fill,posix_getpwuid,global,ini_restore,zip_open,zip_read,rar_open,bzopen,bzread,bzwrite,apache_get_modules,apache_get_version,phpversionphpinfo,php_ini_scanned_files,get_current_user,disk_total_space,diskfreespace,leak,imap_list,hypo,filedump,safe_mode,getmygid,apache_getenv,apache_setenv,bzread,bzwrite,bzopen,phpini,higlight_file,dos_conv,get_cwd,er_log,cmd,e_name,vdir,get_dir,only_read,ftok,ftpexec,posix_getpwnam,mysql_list_dbs,disk_free_space,session_save_path,confirm_phpdoc_compiled,zip_entry_rea,php_u,psockopen,crack_opendict,crack_getlastmessage,crack_closedict,crack_check,fpassthru,posix_get_last_error,posix_getlogin,posix_getgroups,posix_strerror,posix_getrlimit,posix_getpgrp,posix_getgrnam,pos,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /home/unilinki/public_html/indijourneys.com/node_modules/svgo/plugins/ |
Upload File : |
/** * @license * The MIT License * * Copyright © 2012–2016 Kir Belevich * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR * OTHER DEALINGS IN THE SOFTWARE. * * - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - * * Лицензия MIT * * Copyright © 2012–2016 Кир Белевич * * Данная лицензия разрешает лицам, получившим копию * данного * программного обеспечения и сопутствующей * документации * (в дальнейшем именуемыми «Программное Обеспечение»), * безвозмездно * использовать Программное Обеспечение без * ограничений, включая * неограниченное право на использование, копирование, * изменение, * добавление, публикацию, распространение, * сублицензирование * и/или продажу копий Программного Обеспечения, также * как и лицам, * которым предоставляется данное Программное * Обеспечение, * при соблюдении следующих условий: * * Указанное выше уведомление об авторском праве и * данные условия * должны быть включены во все копии или значимые части * данного * Программного Обеспечения. * * ДАННОЕ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ПРЕДОСТАВЛЯЕТСЯ «КАК * ЕСТЬ», * БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ, ЯВНО ВЫРАЖЕННЫХ ИЛИ * ПОДРАЗУМЕВАЕМЫХ, * ВКЛЮЧАЯ, НО НЕ ОГРАНИЧИВАЯСЬ ГАРАНТИЯМИ ТОВАРНОЙ * ПРИГОДНОСТИ, * СООТВЕТСТВИЯ ПО ЕГО КОНКРЕТНОМУ НАЗНАЧЕНИЮ И * ОТСУТСТВИЯ НАРУШЕНИЙ * ПРАВ. НИ В КАКОМ СЛУЧАЕ АВТОРЫ ИЛИ ПРАВООБЛАДАТЕЛИ НЕ * НЕСУТ * ОТВЕТСТВЕННОСТИ ПО ИСКАМ О ВОЗМЕЩЕНИИ УЩЕРБА, УБЫТКОВ * ИЛИ ДРУГИХ * ТРЕБОВАНИЙ ПО ДЕЙСТВУЮЩИМ КОНТРАКТАМ, ДЕЛИКТАМ ИЛИ * ИНОМУ, * ВОЗНИКШИМ ИЗ, ИМЕЮЩИМ ПРИЧИНОЙ ИЛИ СВЯЗАННЫМ С * ПРОГРАММНЫМ * ОБЕСПЕЧЕНИЕМ ИЛИ ИСПОЛЬЗОВАНИЕМ ПРОГРАММНОГО * ОБЕСПЕЧЕНИЯ * ИЛИ ИНЫМИ ДЕЙСТВИЯМИ С ПРОГРАММНЫМ ОБЕСПЕЧЕНИЕМ. */ 'use strict'; var JSAPI = require('../lib/svgo/jsAPI'); exports.type = 'full'; exports.active = false; exports.description = 'Finds <path> elements with the same d, fill, and ' + 'stroke, and converts them to <use> elements ' + 'referencing a single <path> def.'; /** * Finds <path> elements with the same d, fill, and stroke, and converts them to * <use> elements referencing a single <path> def. * * @author Jacob Howcroft */ exports.fn = function(data) { const seen = new Map(); let count = 0; const defs = []; traverse(data, item => { if (!item.isElem('path') || !item.hasAttr('d')) { return; } const d = item.attr('d').value; const fill = (item.hasAttr('fill') && item.attr('fill').value) || ''; const stroke = (item.hasAttr('stroke') && item.attr('stroke').value) || ''; const key = d + ';s:' + stroke + ';f:' + fill; const hasSeen = seen.get(key); if (!hasSeen) { seen.set(key, {elem: item, reused: false}); return; } if (!hasSeen.reused) { hasSeen.reused = true; if (!hasSeen.elem.hasAttr('id')) { hasSeen.elem.addAttr({name: 'id', local: 'id', prefix: '', value: 'reuse-' + (count++)}); } defs.push(hasSeen.elem); } item = convertToUse(item, hasSeen.elem.attr('id').value); }); const defsTag = new JSAPI({ elem: 'defs', prefix: '', local: 'defs', content: [], attrs: []}, data); data.content[0].spliceContent(0, 0, defsTag); for (let def of defs) { // Remove class and style before copying to avoid circular refs in // JSON.stringify. This is fine because we don't actually want class or // style information to be copied. const style = def.style; const defClass = def.class; delete def.style; delete def.class; const defClone = def.clone(); def.style = style; def.class = defClass; defClone.removeAttr('transform'); defsTag.spliceContent(0, 0, defClone); // Convert the original def to a use so the first usage isn't duplicated. def = convertToUse(def, defClone.attr('id').value); def.removeAttr('id'); } return data; }; /** */ function convertToUse(item, href) { item.renameElem('use'); item.removeAttr('d'); item.removeAttr('stroke'); item.removeAttr('fill'); item.addAttr({name: 'xlink:href', local: 'xlink:href', prefix: 'none', value: '#' + href}); delete item.pathJS; return item; } /** */ function traverse(parent, callback) { if (parent.isEmpty()) { return; } for (let child of parent.content) { callback(child); traverse(child, callback); } }