Updated Sanitizer for HTML5
Sanitizer should recognize HTML elements and attributes. New Allowed Elements: article aside audio canvas command details dialog figcaption figure footer header hgroup mark meter nav progress rp rt ruby section source summary time video war (OK, audio and video were already there) New Allowed Attributes: autocomplete contenteditable contextmenu draggable formaction icon low max min open optimum pattern placeholder preload pubdate required reversed spellcheck step wrap Attributes removed: abbr charset loopcount loopend loopstart noshade nowrap rev rules Maruku supports @start and @reversed on ordered lists. It doesn't seem to support IALs on li elements, so you still can't attach @value to an li.
This commit is contained in:
parent
d9d353a350
commit
2781890832
|
@ -10,12 +10,14 @@ module Sanitizer
|
||||||
require 'stringsupport'
|
require 'stringsupport'
|
||||||
require 'set'
|
require 'set'
|
||||||
|
|
||||||
acceptable_elements = Set.new %w[a abbr acronym address area audio b big blockquote br
|
acceptable_elements = Set.new %w[a abbr acronym address area article aside
|
||||||
button caption center cite code col colgroup dd del dfn dir div dl dt
|
audio b big blockquote br button canvas caption center cite code
|
||||||
em fieldset font form h1 h2 h3 h4 h5 h6 hr i img input ins kbd label
|
col colgroup command dd del details dfn dialog dir div dl dt
|
||||||
legend li map menu ol optgroup option p pre q s samp select small span
|
em fieldset figcaption figure font footer form h1 h2 h3 h4 h5 h6 header
|
||||||
strike strong sub sup table tbody td textarea tfoot th thead tr tt u
|
hgroup hr i img input ins kbd label legend li map mark menu meter nav
|
||||||
ul var video]
|
ol optgroup option p pre progress q rp rt ruby s samp section select small
|
||||||
|
source span strike strong sub summary sup table tbody td textarea tfoot
|
||||||
|
th thead time tr tt u ul var video wbr]
|
||||||
|
|
||||||
mathml_elements = Set.new %w[annotation annotation-xml maction math merror mfrac
|
mathml_elements = Set.new %w[annotation annotation-xml maction math merror mfrac
|
||||||
mfenced mi mmultiscripts mn mo mover mpadded mphantom mprescripts mroot
|
mfenced mi mmultiscripts mn mo mover mpadded mphantom mprescripts mroot
|
||||||
|
@ -28,15 +30,15 @@ module Sanitizer
|
||||||
line marker mask metadata missing-glyph mpath path pattern polygon
|
line marker mask metadata missing-glyph mpath path pattern polygon
|
||||||
polyline radialGradient rect set stop svg switch text textPath title tspan use]
|
polyline radialGradient rect set stop svg switch text textPath title tspan use]
|
||||||
|
|
||||||
acceptable_attributes = Set.new %w[abbr accept accept-charset accesskey action
|
acceptable_attributes = Set.new %w[accept accept-charset accesskey action
|
||||||
align alt axis border cellpadding cellspacing char charoff charset
|
align alt autocomplete axis border cellpadding cellspacing char charoff
|
||||||
checked cite class clear cols colspan color compact controls coords datetime
|
checked cite class clear cols colspan color compact contenteditable contextmenu
|
||||||
dir disabled enctype for frame headers height href hreflang hspace id
|
controls coords datetime dir disabled draggable enctype for formaction frame
|
||||||
ismap label lang longdesc loop loopcount loopend loopstart
|
headers height href hreflang hspace icon id ismap label lang longdesc loop low
|
||||||
maxlength media method multiple name nohref
|
max maxlength media method min multiple name nohref open optimum pattern placeholder
|
||||||
noshade nowrap poster prompt readonly rel rev rows rowspan rules scope
|
poster preload pubdate readonly rel required reversed rows rowspan spellcheck scope
|
||||||
selected shape size span src start style summary tabindex target title
|
selected shape size span src start step style summary tabindex target title
|
||||||
type usemap valign value vspace width xml:lang]
|
type usemap valign value vspace width wrap xml:lang]
|
||||||
|
|
||||||
mathml_attributes = Set.new %w[actiontype align close
|
mathml_attributes = Set.new %w[actiontype align close
|
||||||
columnalign columnlines columnspacing columnspan depth display
|
columnalign columnlines columnspacing columnspan depth display
|
||||||
|
@ -73,7 +75,7 @@ module Sanitizer
|
||||||
xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type
|
xlink:arcrole xlink:href xlink:role xlink:show xlink:title xlink:type
|
||||||
xml:base xml:lang xml:space xmlns xmlns:xlink xmlns:se y y1 y2 zoomAndPan]
|
xml:base xml:lang xml:space xmlns xmlns:xlink xmlns:se y y1 y2 zoomAndPan]
|
||||||
|
|
||||||
attr_val_is_uri = Set.new %w[href src cite action longdesc xlink:href xml:base]
|
attr_val_is_uri = Set.new %w[href src cite action formaction longdesc xlink:href xml:base]
|
||||||
|
|
||||||
svg_attr_val_allows_ref = Set.new %w[clip-path color-profile cursor fill
|
svg_attr_val_allows_ref = Set.new %w[clip-path color-profile cursor fill
|
||||||
filter marker marker-start marker-mid marker-end mask stroke]
|
filter marker marker-start marker-mid marker-end mask stroke]
|
||||||
|
|
BIN
public/svg-edit/editor/images/node_clone.png
Executable file
BIN
public/svg-edit/editor/images/node_clone.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 571 B |
BIN
public/svg-edit/editor/images/node_delete.png
Executable file
BIN
public/svg-edit/editor/images/node_delete.png
Executable file
Binary file not shown.
After Width: | Height: | Size: 589 B |
|
@ -946,6 +946,30 @@
|
||||||
</svg>
|
</svg>
|
||||||
</g>
|
</g>
|
||||||
|
|
||||||
|
<g id="node_delete">
|
||||||
|
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path stroke-width="2" id="svg_102" d="m4.1953,19.42128c15.49391,-15.53349 -0.21065,0.1581 15.61084,-15.57944" stroke="#8dd35f" fill="none"/>
|
||||||
|
<circle stroke-width="0.5" id="svg_121" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="4" cx="19.75"/>
|
||||||
|
<circle id="svg_123" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="19.40299" cx="4.0653"/>
|
||||||
|
<circle id="svg_7" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="11.625" cx="11.9375"/>
|
||||||
|
<g transform="rotate(-45.291072845458984 9.81157112121582,9.244086265563965) " id="svg_6">
|
||||||
|
<line stroke-linecap="round" id="svg_4" y2="9.45264" x2="15.14996" y1="9.3943" x1="4.47318" stroke-dasharray="null" stroke-width="2" stroke="#ff0000" fill="none"/>
|
||||||
|
<line stroke-linecap="round" id="svg_5" y2="14.46579" x2="9.66571" y1="4.02238" x1="9.7824" stroke-dasharray="null" stroke-width="2" stroke="#ff0000" fill="none"/>
|
||||||
|
</g>
|
||||||
|
</svg>
|
||||||
|
</g>
|
||||||
|
|
||||||
|
<g id="node_clone">
|
||||||
|
<svg width="24" height="24" xmlns="http://www.w3.org/2000/svg">
|
||||||
|
<path stroke-width="2" id="svg_102" d="m4.1953,19.42128c15.49391,-15.53349 -0.21065,0.1581 15.61084,-15.57944" stroke="#8dd35f" fill="none"/>
|
||||||
|
<circle stroke-width="0.5" id="svg_121" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="4" cx="19.75"/>
|
||||||
|
<circle id="svg_123" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="19.40299" cx="4.0653"/>
|
||||||
|
<circle id="svg_7" stroke-width="0.5" stroke="#0000ff" fill="#00ffff" r="2.26172" cy="11.625" cx="11.9375"/>
|
||||||
|
<line stroke-linecap="round" id="svg_5" y2="14.46579" x2="9.66571" y1="4.02238" x1="9.7824" stroke-dasharray="null" stroke-width="2" stroke="#0000ff" fill="#0000ff"/>
|
||||||
|
<line stroke-linecap="round" id="svg_4" y2="9.45264" x2="15.14996" y1="9.3943" x1="4.47318" stroke-dasharray="null" stroke-width="2" stroke="#0000ff" fill="#0000ff"/>
|
||||||
|
</svg>
|
||||||
|
</g>
|
||||||
|
|
||||||
<g id="svg_eof"/>
|
<g id="svg_eof"/>
|
||||||
|
|
||||||
</svg>
|
</svg>
|
|
@ -4,7 +4,7 @@
|
||||||
{"id": "circle_cx", "title": "Changer la position horizontale cx du cercle"},
|
{"id": "circle_cx", "title": "Changer la position horizontale cx du cercle"},
|
||||||
{"id": "circle_cy", "title": "Changer la position verticale cy du cercle"},
|
{"id": "circle_cy", "title": "Changer la position verticale cy du cercle"},
|
||||||
{"id": "circle_r", "title": "Changer le rayon du cercle"},
|
{"id": "circle_r", "title": "Changer le rayon du cercle"},
|
||||||
{"id": "connector_no_arrow", "textContent": "No arrow"},
|
{"id": "connector_no_arrow", "textContent": "Sans flèches"},
|
||||||
{"id": "copyrightLabel", "textContent": "Powered by"},
|
{"id": "copyrightLabel", "textContent": "Powered by"},
|
||||||
{"id": "cornerRadiusLabel", "title": "Changer le rayon des coins du rectangle"},
|
{"id": "cornerRadiusLabel", "title": "Changer le rayon des coins du rectangle"},
|
||||||
{"id": "curve_segments", "textContent": "Courbe"},
|
{"id": "curve_segments", "textContent": "Courbe"},
|
||||||
|
@ -23,6 +23,7 @@
|
||||||
{"id": "icon_medium", "textContent": "Moyenne"},
|
{"id": "icon_medium", "textContent": "Moyenne"},
|
||||||
{"id": "icon_small", "textContent": "Petite"},
|
{"id": "icon_small", "textContent": "Petite"},
|
||||||
{"id": "icon_xlarge", "textContent": "Super-Grande"},
|
{"id": "icon_xlarge", "textContent": "Super-Grande"},
|
||||||
|
{"id": "idLabel", "title": "Identifier l'élément"},
|
||||||
{"id": "image_height", "title": "Changer la hauteur de l'image"},
|
{"id": "image_height", "title": "Changer la hauteur de l'image"},
|
||||||
{"id": "image_opt_embed", "textContent": "Incorporer les images en tant que données (fichiers locaux)"},
|
{"id": "image_opt_embed", "textContent": "Incorporer les images en tant que données (fichiers locaux)"},
|
||||||
{"id": "image_opt_ref", "textContent": "Utiliser la référence des images "},
|
{"id": "image_opt_ref", "textContent": "Utiliser la référence des images "},
|
||||||
|
@ -40,14 +41,14 @@
|
||||||
{"id": "line_x2", "title": "Changer la position horizontale x de fin de la ligne"},
|
{"id": "line_x2", "title": "Changer la position horizontale x de fin de la ligne"},
|
||||||
{"id": "line_y1", "title": "Changer la position verticale y de début de la ligne"},
|
{"id": "line_y1", "title": "Changer la position verticale y de début de la ligne"},
|
||||||
{"id": "line_y2", "title": "Changer la position verticale y de fin de la ligne"},
|
{"id": "line_y2", "title": "Changer la position verticale y de fin de la ligne"},
|
||||||
{"id": "linecap_butt", "title": "Linecap: Butt"},
|
{"id": "linecap_butt", "title": "Terminaison : Sur le nœud"},
|
||||||
{"id": "linecap_round", "title": "Linecap: Round"},
|
{"id": "linecap_round", "title": "Terminaison : Arrondie"},
|
||||||
{"id": "linecap_square", "title": "Linecap: Square"},
|
{"id": "linecap_square", "title": "Terminaison : Carrée"},
|
||||||
{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
|
{"id": "linejoin_bevel", "title": "Raccord : Biseauté"},
|
||||||
{"id": "linejoin_miter", "title": "Linejoin: Miter"},
|
{"id": "linejoin_miter", "title": "Raccord : Droit"},
|
||||||
{"id": "linejoin_round", "title": "Linejoin: Round"},
|
{"id": "linejoin_round", "title": "Raccord : Arrondi"},
|
||||||
{"id": "main_icon", "title": "Main Menu"},
|
{"id": "main_icon", "title": "Menu principal"},
|
||||||
{"id": "mode_connect", "title": "Connect two objects"},
|
{"id": "mode_connect", "title": "Connecter deux objets"},
|
||||||
{"id": "page", "textContent": "Page"},
|
{"id": "page", "textContent": "Page"},
|
||||||
{"id": "palette", "title": "Cliquer pour changer la couleur de remplissage, Shift-Clic pour changer la couleur de contour"},
|
{"id": "palette", "title": "Cliquer pour changer la couleur de remplissage, Shift-Clic pour changer la couleur de contour"},
|
||||||
{"id": "path_node_x", "title": "Changer la positon horizontale x du nœud"},
|
{"id": "path_node_x", "title": "Changer la positon horizontale x du nœud"},
|
||||||
|
@ -66,7 +67,7 @@
|
||||||
{"id": "straight_segments", "textContent": "Droit"},
|
{"id": "straight_segments", "textContent": "Droit"},
|
||||||
{"id": "stroke_color", "title": "Changer la couleur du contour"},
|
{"id": "stroke_color", "title": "Changer la couleur du contour"},
|
||||||
{"id": "stroke_style", "title": "Changer le style du contour"},
|
{"id": "stroke_style", "title": "Changer le style du contour"},
|
||||||
{"id": "stroke_width", "title": "Changer la largeur du contour"},
|
{"id": "stroke_width", "title": "Changer la largeur du contour de 1, Shift-Click pour changer la largeur de 0.1"},
|
||||||
{"id": "svginfo_bg_note", "textContent": "Note: La toile de fond n'est pas sauvegardée avec l'image."},
|
{"id": "svginfo_bg_note", "textContent": "Note: La toile de fond n'est pas sauvegardée avec l'image."},
|
||||||
{"id": "svginfo_change_background", "textContent": "Toile de fond de l'Éditeur"},
|
{"id": "svginfo_change_background", "textContent": "Toile de fond de l'Éditeur"},
|
||||||
{"id": "svginfo_dim", "textContent": "Dimensions du canevas"},
|
{"id": "svginfo_dim", "textContent": "Dimensions du canevas"},
|
||||||
|
@ -78,8 +79,8 @@
|
||||||
{"id": "svginfo_title", "textContent": "Titre"},
|
{"id": "svginfo_title", "textContent": "Titre"},
|
||||||
{"id": "svginfo_width", "textContent": "Largeur:"},
|
{"id": "svginfo_width", "textContent": "Largeur:"},
|
||||||
{"id": "text", "title": "Changer le contenu du texte"},
|
{"id": "text", "title": "Changer le contenu du texte"},
|
||||||
{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
|
{"id": "toggle_stroke_tools", "title": "Montrer/Cacher plus d'outils de Contour"},
|
||||||
{"id": "tool_add_subpath", "title": "Add sub-path"},
|
{"id": "tool_add_subpath", "title": "Ajouter un sous-chemin"},
|
||||||
{"id": "tool_alignbottom", "title": "Aligner le bas des objets"},
|
{"id": "tool_alignbottom", "title": "Aligner le bas des objets"},
|
||||||
{"id": "tool_aligncenter", "title": "Centrer verticalement"},
|
{"id": "tool_aligncenter", "title": "Centrer verticalement"},
|
||||||
{"id": "tool_alignleft", "title": "Aligner les côtés gauches"},
|
{"id": "tool_alignleft", "title": "Aligner les côtés gauches"},
|
||||||
|
@ -87,7 +88,7 @@
|
||||||
{"id": "tool_alignright", "title": "Aligner les côtés droits"},
|
{"id": "tool_alignright", "title": "Aligner les côtés droits"},
|
||||||
{"id": "tool_aligntop", "title": "Aligner le haut des objets"},
|
{"id": "tool_aligntop", "title": "Aligner le haut des objets"},
|
||||||
{"id": "tool_angle", "title": "Changer l'angle de rotation"},
|
{"id": "tool_angle", "title": "Changer l'angle de rotation"},
|
||||||
{"id": "tool_blur", "title": "Change gaussian blur value"},
|
{"id": "tool_blur", "title": "Changer la valeur du flou gaussien"},
|
||||||
{"id": "tool_bold", "title": "Texte en gras"},
|
{"id": "tool_bold", "title": "Texte en gras"},
|
||||||
{"id": "tool_circle", "title": "Cercle"},
|
{"id": "tool_circle", "title": "Cercle"},
|
||||||
{"id": "tool_clear", "textContent": "Nouvelle image"},
|
{"id": "tool_clear", "textContent": "Nouvelle image"},
|
||||||
|
@ -99,15 +100,15 @@
|
||||||
{"id": "tool_docprops_cancel", "textContent": "Annuler"},
|
{"id": "tool_docprops_cancel", "textContent": "Annuler"},
|
||||||
{"id": "tool_docprops_save", "textContent": "OK"},
|
{"id": "tool_docprops_save", "textContent": "OK"},
|
||||||
{"id": "tool_ellipse", "title": "Ellipse"},
|
{"id": "tool_ellipse", "title": "Ellipse"},
|
||||||
{"id": "tool_export", "textContent": "Export as PNG"},
|
{"id": "tool_export", "textContent": "Exporter au format PNG"},
|
||||||
{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
|
{"id": "tool_eyedropper", "title": "Outil Pipette"},
|
||||||
{"id": "tool_fhellipse", "title": "Ellipse main levée"},
|
{"id": "tool_fhellipse", "title": "Ellipse main levée"},
|
||||||
{"id": "tool_fhpath", "title": "Crayon à main levée"},
|
{"id": "tool_fhpath", "title": "Crayon à main levée"},
|
||||||
{"id": "tool_fhrect", "title": "Rectangle main levée"},
|
{"id": "tool_fhrect", "title": "Rectangle main levée"},
|
||||||
{"id": "tool_font_size", "title": "Taille de la police"},
|
{"id": "tool_font_size", "title": "Changer la taille de la police"},
|
||||||
{"id": "tool_group", "title": "Grouper les éléments"},
|
{"id": "tool_group", "title": "Grouper les éléments"},
|
||||||
{"id": "tool_image", "title": "Outil Image"},
|
{"id": "tool_image", "title": "Outil Image"},
|
||||||
{"id": "tool_import", "textContent": "Import SVG"},
|
{"id": "tool_import", "textContent": "Importer un objet SVG"},
|
||||||
{"id": "tool_italic", "title": "Texte en italique"},
|
{"id": "tool_italic", "title": "Texte en italique"},
|
||||||
{"id": "tool_line", "title": "Tracer des lignes"},
|
{"id": "tool_line", "title": "Tracer des lignes"},
|
||||||
{"id": "tool_move_bottom", "title": "Déplacer vers le bas"},
|
{"id": "tool_move_bottom", "title": "Déplacer vers le bas"},
|
||||||
|
@ -115,9 +116,11 @@
|
||||||
{"id": "tool_node_clone", "title": "Cloner le nœud"},
|
{"id": "tool_node_clone", "title": "Cloner le nœud"},
|
||||||
{"id": "tool_node_delete", "title": "Supprimer le nœud"},
|
{"id": "tool_node_delete", "title": "Supprimer le nœud"},
|
||||||
{"id": "tool_node_link", "title": "Rendre les points de contrôle solidaires"},
|
{"id": "tool_node_link", "title": "Rendre les points de contrôle solidaires"},
|
||||||
{"id": "tool_opacity", "title": "Changer l'opacité de l'élément"},
|
{"id": "tool_opacity", "title": "Changer l'opacité de l'élément sélectionné"},
|
||||||
{"id": "tool_open", "textContent": "Ouvrir une image"},
|
{"id": "tool_open", "textContent": "Ouvrir une image"},
|
||||||
|
{"id": "tool_openclose_path", "title": "Ouvrir/Fermer sous-chemin"},
|
||||||
{"id": "tool_path", "title": "Outil Chemin"},
|
{"id": "tool_path", "title": "Outil Chemin"},
|
||||||
|
{"id": "tool_position", "title": "Aligner l'élément relativement à la Page"},
|
||||||
{"id": "tool_rect", "title": "Rectangle"},
|
{"id": "tool_rect", "title": "Rectangle"},
|
||||||
{"id": "tool_redo", "title": "Refaire l'action"},
|
{"id": "tool_redo", "title": "Refaire l'action"},
|
||||||
{"id": "tool_reorient", "title": "Réorienter le chemin"},
|
{"id": "tool_reorient", "title": "Réorienter le chemin"},
|
||||||
|
@ -133,7 +136,7 @@
|
||||||
{"id": "tool_ungroup", "title": "Dégrouper les éléments"},
|
{"id": "tool_ungroup", "title": "Dégrouper les éléments"},
|
||||||
{"id": "tool_wireframe", "title": "Mode Fil de Fer"},
|
{"id": "tool_wireframe", "title": "Mode Fil de Fer"},
|
||||||
{"id": "tool_zoom", "title": "Zoom"},
|
{"id": "tool_zoom", "title": "Zoom"},
|
||||||
{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
|
{"id": "url_notice", "title": "NOTE: Cette image ne peut être incorporée en tant que données. Le contenu affiché sera celui de l'image située à cette adresse"},
|
||||||
{"id": "zoom_panel", "title": "Changer le niveau de zoom"},
|
{"id": "zoom_panel", "title": "Changer le niveau de zoom"},
|
||||||
{"id": "sidepanel_handle", "textContent": "C A L Q U E S", "title": "Tirer vers la gauche/droite pour redimensionner le panneau"},
|
{"id": "sidepanel_handle", "textContent": "C A L Q U E S", "title": "Tirer vers la gauche/droite pour redimensionner le panneau"},
|
||||||
{
|
{
|
||||||
|
@ -143,16 +146,16 @@
|
||||||
"QmoveElemsToLayer": "Déplacer les éléments sélectionnés vers le calque '%s' ?",
|
"QmoveElemsToLayer": "Déplacer les éléments sélectionnés vers le calque '%s' ?",
|
||||||
"QwantToClear": "Voulez-vous effacer le dessin ?\nL'historique de vos actions sera également effacé !",
|
"QwantToClear": "Voulez-vous effacer le dessin ?\nL'historique de vos actions sera également effacé !",
|
||||||
"cancel": "Annuler",
|
"cancel": "Annuler",
|
||||||
"defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
|
"defsFailOnSave": "NOTE : À cause d'un bug de votre navigateur, cette image peut être affichée de façon incorrecte (dégradés ou éléments manquants). Cependant, une fois enregistrée, elle sera correcte.",
|
||||||
"dupeLayerName": "Il existe déjà un calque de ce nom !",
|
"dupeLayerName": "Il existe déjà un calque de ce nom !",
|
||||||
"enterNewImgURL": "Entrer la nouvelle URL de l'image",
|
"enterNewImgURL": "Entrer la nouvelle URL de l'image",
|
||||||
"enterNewLayerName": "Veuillez entrer le nouveau nom du calque",
|
"enterNewLayerName": "Veuillez entrer le nouveau nom du calque",
|
||||||
"enterUniqueLayerName": "Veuillez entrer un nom (unique) pour le calque",
|
"enterUniqueLayerName": "Veuillez entrer un nom (unique) pour le calque",
|
||||||
"exportNoBlur": "Blurred elements will appear as un-blurred",
|
"exportNoBlur": "Les éléments ayant du flou gaussien seront affichés sans flou",
|
||||||
"exportNoDashArray": "Strokes will appear filled",
|
"exportNoDashArray": "Les contours seront affichés remplis",
|
||||||
"exportNoImage": "Image elements will not appear",
|
"exportNoImage": "Les éléments Image ne seront pas affichés",
|
||||||
"exportNoText": "Text may not appear as expected",
|
"exportNoText": "Le texte peut être affiché de façon incorrecte",
|
||||||
"exportNoforeignObject": "foreignObject elements will not appear",
|
"exportNoforeignObject": "Les éléments foreignObject se seront pas affichés",
|
||||||
"featNotSupported": "Fonction non supportée",
|
"featNotSupported": "Fonction non supportée",
|
||||||
"invalidAttrValGiven": "Valeur fournie invalide",
|
"invalidAttrValGiven": "Valeur fournie invalide",
|
||||||
"key_backspace": "Suppr.",
|
"key_backspace": "Suppr.",
|
||||||
|
@ -161,13 +164,13 @@
|
||||||
"key_up": "Haut",
|
"key_up": "Haut",
|
||||||
"layer": "Calque",
|
"layer": "Calque",
|
||||||
"layerHasThatName": "Le calque porte déjà ce nom",
|
"layerHasThatName": "Le calque porte déjà ce nom",
|
||||||
"loadingImage": "Loading image, please wait...",
|
"loadingImage": "Chargement de l'image, veuillez patienter...",
|
||||||
"noContentToFitTo": "Il n'y a pas de contenu auquel ajuster",
|
"noContentToFitTo": "Il n'y a pas de contenu auquel ajuster",
|
||||||
"noteTheseIssues": "Also note the following issues: ",
|
"noteTheseIssues": "Notez également les problèmes suivants : ",
|
||||||
"ok": "OK",
|
"ok": "OK",
|
||||||
"pathCtrlPtTooltip": "Glisser-déposer le point de contrôle pour ajuster les propriétés de la courbe",
|
"pathCtrlPtTooltip": "Glisser-déposer le point de contrôle pour ajuster les propriétés de la courbe",
|
||||||
"pathNodeTooltip": "Glisser-déposer le nœud pour le déplacer. Double-cliquer le nœud pour changer de type de segment",
|
"pathNodeTooltip": "Glisser-déposer le nœud pour le déplacer. Double-cliquer le nœud pour changer de type de segment",
|
||||||
"saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
|
"saveFromBrowser": "Selectionner \"Enregistrer sous...\" dans votre navigateur pour sauvegarder l'image en tant que fichier %s."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
|
@ -4,8 +4,8 @@
|
||||||
{"id": "circle_cx", "title": "Verander het X coordinaat van het cirkel middelpunt"},
|
{"id": "circle_cx", "title": "Verander het X coordinaat van het cirkel middelpunt"},
|
||||||
{"id": "circle_cy", "title": "Verander het Y coordinaat van het cirkel middelpunt"},
|
{"id": "circle_cy", "title": "Verander het Y coordinaat van het cirkel middelpunt"},
|
||||||
{"id": "circle_r", "title": "Verander de cirkel radius"},
|
{"id": "circle_r", "title": "Verander de cirkel radius"},
|
||||||
{"id": "connector_no_arrow", "textContent": "No arrow"},
|
{"id": "connector_no_arrow", "textContent": "Geen pijl"},
|
||||||
{"id": "copyrightLabel", "textContent": "Powered by"},
|
{"id": "copyrightLabel", "textContent": "Mogelijk gemaakt door"},
|
||||||
{"id": "cornerRadiusLabel", "title": "Verander hoekradius rechthoek"},
|
{"id": "cornerRadiusLabel", "title": "Verander hoekradius rechthoek"},
|
||||||
{"id": "curve_segments", "textContent": "Gebogen"},
|
{"id": "curve_segments", "textContent": "Gebogen"},
|
||||||
{"id": "ellipse_cx", "title": "Verander het X coordinaat van het ellips middelpunt"},
|
{"id": "ellipse_cx", "title": "Verander het X coordinaat van het ellips middelpunt"},
|
||||||
|
@ -23,6 +23,7 @@
|
||||||
{"id": "icon_medium", "textContent": "Gemiddeld"},
|
{"id": "icon_medium", "textContent": "Gemiddeld"},
|
||||||
{"id": "icon_small", "textContent": "Klein"},
|
{"id": "icon_small", "textContent": "Klein"},
|
||||||
{"id": "icon_xlarge", "textContent": "Extra groot"},
|
{"id": "icon_xlarge", "textContent": "Extra groot"},
|
||||||
|
{"id": "idLabel", "title": "Identificeer het element"},
|
||||||
{"id": "image_height", "title": "Verander hoogte afbeelding"},
|
{"id": "image_height", "title": "Verander hoogte afbeelding"},
|
||||||
{"id": "image_opt_embed", "textContent": "Toevoegen data (lokale bestanden)"},
|
{"id": "image_opt_embed", "textContent": "Toevoegen data (lokale bestanden)"},
|
||||||
{"id": "image_opt_ref", "textContent": "Gebruik bestand referentie"},
|
{"id": "image_opt_ref", "textContent": "Gebruik bestand referentie"},
|
||||||
|
@ -40,14 +41,14 @@
|
||||||
{"id": "line_x2", "title": "Verander eind X coordinaat van de lijn"},
|
{"id": "line_x2", "title": "Verander eind X coordinaat van de lijn"},
|
||||||
{"id": "line_y1", "title": "Verander start Y coordinaat van de lijn"},
|
{"id": "line_y1", "title": "Verander start Y coordinaat van de lijn"},
|
||||||
{"id": "line_y2", "title": "Verander eind Y coordinaat van de lijn"},
|
{"id": "line_y2", "title": "Verander eind Y coordinaat van de lijn"},
|
||||||
{"id": "linecap_butt", "title": "Linecap: Butt"},
|
{"id": "linecap_butt", "title": "Lijneinde: Geen"},
|
||||||
{"id": "linecap_round", "title": "Linecap: Round"},
|
{"id": "linecap_round", "title": "Lijneinde: Rond"},
|
||||||
{"id": "linecap_square", "title": "Linecap: Square"},
|
{"id": "linecap_square", "title": "Lijneinde: Vierkant"},
|
||||||
{"id": "linejoin_bevel", "title": "Linejoin: Bevel"},
|
{"id": "linejoin_bevel", "title": "Lijnverbinding: Afgestompt"},
|
||||||
{"id": "linejoin_miter", "title": "Linejoin: Miter"},
|
{"id": "linejoin_miter", "title": "Lijnverbinding: Hoek"},
|
||||||
{"id": "linejoin_round", "title": "Linejoin: Round"},
|
{"id": "linejoin_round", "title": "Lijnverbinding: Rond"},
|
||||||
{"id": "main_icon", "title": "Main Menu"},
|
{"id": "main_icon", "title": "Hoofdmenu"},
|
||||||
{"id": "mode_connect", "title": "Connect two objects"},
|
{"id": "mode_connect", "title": "Verbind twee objecten"},
|
||||||
{"id": "page", "textContent": "Pagina"},
|
{"id": "page", "textContent": "Pagina"},
|
||||||
{"id": "palette", "title": "Klik om de vul kleur te veranderen, shift-klik om de lijn kleur te veranderen"},
|
{"id": "palette", "title": "Klik om de vul kleur te veranderen, shift-klik om de lijn kleur te veranderen"},
|
||||||
{"id": "path_node_x", "title": "Verander X coordinaat knooppunt"},
|
{"id": "path_node_x", "title": "Verander X coordinaat knooppunt"},
|
||||||
|
@ -78,8 +79,8 @@
|
||||||
{"id": "svginfo_title", "textContent": "Titel"},
|
{"id": "svginfo_title", "textContent": "Titel"},
|
||||||
{"id": "svginfo_width", "textContent": "Breedte:"},
|
{"id": "svginfo_width", "textContent": "Breedte:"},
|
||||||
{"id": "text", "title": "Wijzig tekst"},
|
{"id": "text", "title": "Wijzig tekst"},
|
||||||
{"id": "toggle_stroke_tools", "title": "Show/hide more stroke tools"},
|
{"id": "toggle_stroke_tools", "title": "Toon/verberg meer lijn gereedschap"},
|
||||||
{"id": "tool_add_subpath", "title": "Add sub-path"},
|
{"id": "tool_add_subpath", "title": "Subpad toevoegen"},
|
||||||
{"id": "tool_alignbottom", "title": "Onder uitlijnen"},
|
{"id": "tool_alignbottom", "title": "Onder uitlijnen"},
|
||||||
{"id": "tool_aligncenter", "title": "Centreren"},
|
{"id": "tool_aligncenter", "title": "Centreren"},
|
||||||
{"id": "tool_alignleft", "title": "Links uitlijnen"},
|
{"id": "tool_alignleft", "title": "Links uitlijnen"},
|
||||||
|
@ -87,7 +88,7 @@
|
||||||
{"id": "tool_alignright", "title": "Rechts uitlijnen"},
|
{"id": "tool_alignright", "title": "Rechts uitlijnen"},
|
||||||
{"id": "tool_aligntop", "title": "Boven uitlijnen"},
|
{"id": "tool_aligntop", "title": "Boven uitlijnen"},
|
||||||
{"id": "tool_angle", "title": "Draai"},
|
{"id": "tool_angle", "title": "Draai"},
|
||||||
{"id": "tool_blur", "title": "Change gaussian blur value"},
|
{"id": "tool_blur", "title": "Verander Gaussische vervaging waarde"},
|
||||||
{"id": "tool_bold", "title": "Vet"},
|
{"id": "tool_bold", "title": "Vet"},
|
||||||
{"id": "tool_circle", "title": "Cirkel"},
|
{"id": "tool_circle", "title": "Cirkel"},
|
||||||
{"id": "tool_clear", "textContent": "Nieuwe afbeelding"},
|
{"id": "tool_clear", "textContent": "Nieuwe afbeelding"},
|
||||||
|
@ -99,15 +100,15 @@
|
||||||
{"id": "tool_docprops_cancel", "textContent": "Annuleren"},
|
{"id": "tool_docprops_cancel", "textContent": "Annuleren"},
|
||||||
{"id": "tool_docprops_save", "textContent": "Ok"},
|
{"id": "tool_docprops_save", "textContent": "Ok"},
|
||||||
{"id": "tool_ellipse", "title": "Ellips"},
|
{"id": "tool_ellipse", "title": "Ellips"},
|
||||||
{"id": "tool_export", "textContent": "Export as PNG"},
|
{"id": "tool_export", "textContent": "Exporteer als PNG"},
|
||||||
{"id": "tool_eyedropper", "title": "Eye Dropper Tool"},
|
{"id": "tool_eyedropper", "title": "Kleuren kopieer gereedschap"},
|
||||||
{"id": "tool_fhellipse", "title": "Vrije stijl ellips"},
|
{"id": "tool_fhellipse", "title": "Vrije stijl ellips"},
|
||||||
{"id": "tool_fhpath", "title": "Potlood"},
|
{"id": "tool_fhpath", "title": "Potlood"},
|
||||||
{"id": "tool_fhrect", "title": "Vrije stijl rechthoek"},
|
{"id": "tool_fhrect", "title": "Vrije stijl rechthoek"},
|
||||||
{"id": "tool_font_size", "title": "Verander lettertype grootte"},
|
{"id": "tool_font_size", "title": "Verander lettertype grootte"},
|
||||||
{"id": "tool_group", "title": "Groepeer elementen"},
|
{"id": "tool_group", "title": "Groepeer elementen"},
|
||||||
{"id": "tool_image", "title": "Afbeelding"},
|
{"id": "tool_image", "title": "Afbeelding"},
|
||||||
{"id": "tool_import", "textContent": "Import SVG"},
|
{"id": "tool_import", "textContent": "Importeer SVG"},
|
||||||
{"id": "tool_italic", "title": "Cursief"},
|
{"id": "tool_italic", "title": "Cursief"},
|
||||||
{"id": "tool_line", "title": "Lijn"},
|
{"id": "tool_line", "title": "Lijn"},
|
||||||
{"id": "tool_move_bottom", "title": "Naar achtergrond"},
|
{"id": "tool_move_bottom", "title": "Naar achtergrond"},
|
||||||
|
@ -117,7 +118,9 @@
|
||||||
{"id": "tool_node_link", "title": "Koppel controle punten"},
|
{"id": "tool_node_link", "title": "Koppel controle punten"},
|
||||||
{"id": "tool_opacity", "title": "Verander opaciteit geselecteerde item"},
|
{"id": "tool_opacity", "title": "Verander opaciteit geselecteerde item"},
|
||||||
{"id": "tool_open", "textContent": "Open afbeelding"},
|
{"id": "tool_open", "textContent": "Open afbeelding"},
|
||||||
|
{"id": "tool_openclose_path", "title": "Open/sluit subpad"},
|
||||||
{"id": "tool_path", "title": "Pad"},
|
{"id": "tool_path", "title": "Pad"},
|
||||||
|
{"id": "tool_position", "title": "Lijn element uit relatief ten opzichte van de pagina"},
|
||||||
{"id": "tool_rect", "title": "Rechthoek"},
|
{"id": "tool_rect", "title": "Rechthoek"},
|
||||||
{"id": "tool_redo", "title": "Opnieuw doen"},
|
{"id": "tool_redo", "title": "Opnieuw doen"},
|
||||||
{"id": "tool_reorient", "title": "Herorienteer pad"},
|
{"id": "tool_reorient", "title": "Herorienteer pad"},
|
||||||
|
@ -133,7 +136,7 @@
|
||||||
{"id": "tool_ungroup", "title": "Groepering opheffen"},
|
{"id": "tool_ungroup", "title": "Groepering opheffen"},
|
||||||
{"id": "tool_wireframe", "title": "Draadmodel"},
|
{"id": "tool_wireframe", "title": "Draadmodel"},
|
||||||
{"id": "tool_zoom", "title": "Zoom"},
|
{"id": "tool_zoom", "title": "Zoom"},
|
||||||
{"id": "url_notice", "title": "NOTE: This image cannot be embedded. It will depend on this path to be displayed"},
|
{"id": "url_notice", "title": "Let op: Dit plaatje kan niet worden geintegreerd (embeded). Het hangt af van dit pad om te worden afgebeeld."},
|
||||||
{"id": "zoom_panel", "title": "In-/uitzoomen"},
|
{"id": "zoom_panel", "title": "In-/uitzoomen"},
|
||||||
{"id": "sidepanel_handle", "textContent": "L a g e n", "title": "Sleep naar links/rechts om het zijpaneel te vergroten/verkleinen"},
|
{"id": "sidepanel_handle", "textContent": "L a g e n", "title": "Sleep naar links/rechts om het zijpaneel te vergroten/verkleinen"},
|
||||||
{
|
{
|
||||||
|
@ -143,16 +146,16 @@
|
||||||
"QmoveElemsToLayer": "Verplaats geselecteerde elementen naar laag '%s'?",
|
"QmoveElemsToLayer": "Verplaats geselecteerde elementen naar laag '%s'?",
|
||||||
"QwantToClear": "Wil je de afbeelding leeg maken?\nDit zal ook de ongedaan maak geschiedenis wissen!",
|
"QwantToClear": "Wil je de afbeelding leeg maken?\nDit zal ook de ongedaan maak geschiedenis wissen!",
|
||||||
"cancel": "Annuleren",
|
"cancel": "Annuleren",
|
||||||
"defsFailOnSave": "NOTE: Due to a bug in your browser, this image may appear wrong (missing gradients or elements). It will however appear correct once actually saved.",
|
"defsFailOnSave": "Let op: Vanwege een fout in je browser, kan dit plaatje verkeerd verschijnen (missende hoeken en/of elementen). Het zal goed verschijnen zodra het plaatje echt wordt opgeslagen.",
|
||||||
"dupeLayerName": "Er is al een laag met die naam!",
|
"dupeLayerName": "Er is al een laag met die naam!",
|
||||||
"enterNewImgURL": "Geef de nieuwe afbeelding URL",
|
"enterNewImgURL": "Geef de nieuwe afbeelding URL",
|
||||||
"enterNewLayerName": "Geef een nieuwe laag naam",
|
"enterNewLayerName": "Geef een nieuwe laag naam",
|
||||||
"enterUniqueLayerName": "Geef een unieke laag naam",
|
"enterUniqueLayerName": "Geef een unieke laag naam",
|
||||||
"exportNoBlur": "Blurred elements will appear as un-blurred",
|
"exportNoBlur": "Vervaagde elementen zullen niet vervaagd worden geexporteerd.",
|
||||||
"exportNoDashArray": "Strokes will appear filled",
|
"exportNoDashArray": "Lijnstijlen zullen gevuld worden geexporteerd..",
|
||||||
"exportNoImage": "Image elements will not appear",
|
"exportNoImage": "Plaatjes elementen zullen niet worden geexporteerd.",
|
||||||
"exportNoText": "Text may not appear as expected",
|
"exportNoText": "Tekst kan mogelijk niet zo worden geexporteerd zoals verwacht.",
|
||||||
"exportNoforeignObject": "foreignObject elements will not appear",
|
"exportNoforeignObject": "Vreemde objecten zullen niet worden geexporteerd.",
|
||||||
"featNotSupported": "Functie wordt niet ondersteund",
|
"featNotSupported": "Functie wordt niet ondersteund",
|
||||||
"invalidAttrValGiven": "Verkeerde waarde gegeven",
|
"invalidAttrValGiven": "Verkeerde waarde gegeven",
|
||||||
"key_backspace": "backspace",
|
"key_backspace": "backspace",
|
||||||
|
@ -161,13 +164,13 @@
|
||||||
"key_up": "omhoog",
|
"key_up": "omhoog",
|
||||||
"layer": "Laag",
|
"layer": "Laag",
|
||||||
"layerHasThatName": "Laag heeft al die naam",
|
"layerHasThatName": "Laag heeft al die naam",
|
||||||
"loadingImage": "Loading image, please wait...",
|
"loadingImage": "Laden van het plaatje, even geduld aub...",
|
||||||
"noContentToFitTo": "Geen inhoud om omheen te passen",
|
"noContentToFitTo": "Geen inhoud om omheen te passen",
|
||||||
"noteTheseIssues": "Also note the following issues: ",
|
"noteTheseIssues": "Let op de volgende problemen: ",
|
||||||
"ok": "Ok",
|
"ok": "Ok",
|
||||||
"pathCtrlPtTooltip": "Versleep het controle punt om de boog eigenschappen te veranderen",
|
"pathCtrlPtTooltip": "Versleep het controle punt om de boog eigenschappen te veranderen",
|
||||||
"pathNodeTooltip": "Versleep knooppunt om hem te verslepen. Dubbel klik knooppunt om het segment type te veranderen",
|
"pathNodeTooltip": "Versleep knooppunt om hem te verslepen. Dubbel klik knooppunt om het segment type te veranderen",
|
||||||
"saveFromBrowser": "Select \"Save As...\" in your browser to save this image as a %s file."
|
"saveFromBrowser": "Kies \"Save As...\" in je browser om dit plaatje op te slaan als een %s bestand."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
|
@ -246,7 +246,9 @@
|
||||||
'zoom':'zoom.png',
|
'zoom':'zoom.png',
|
||||||
|
|
||||||
'clone':'clone.png',
|
'clone':'clone.png',
|
||||||
|
'node_clone':'node_clone.png',
|
||||||
'delete':'delete.png',
|
'delete':'delete.png',
|
||||||
|
'node_delete':'node_delete.png',
|
||||||
'group':'shape_group.png',
|
'group':'shape_group.png',
|
||||||
'ungroup':'shape_ungroup.png',
|
'ungroup':'shape_ungroup.png',
|
||||||
'move_top':'move_top.png',
|
'move_top':'move_top.png',
|
||||||
|
@ -300,8 +302,10 @@
|
||||||
'#tool_image':'image',
|
'#tool_image':'image',
|
||||||
'#tool_zoom':'zoom',
|
'#tool_zoom':'zoom',
|
||||||
|
|
||||||
'#tool_clone,#tool_clone_multi,#tool_node_clone':'clone',
|
'#tool_clone,#tool_clone_multi':'clone',
|
||||||
'#layer_delete,#tool_delete,#tool_delete_multi,#tool_node_delete':'delete',
|
'#tool_node_clone':'node_clone',
|
||||||
|
'#layer_delete,#tool_delete,#tool_delete_multi':'delete',
|
||||||
|
'#tool_node_delete':'node_delete',
|
||||||
'#tool_add_subpath':'add_subpath',
|
'#tool_add_subpath':'add_subpath',
|
||||||
'#tool_openclose_path':'open_path',
|
'#tool_openclose_path':'open_path',
|
||||||
'#tool_move_top':'move_top',
|
'#tool_move_top':'move_top',
|
||||||
|
@ -1823,15 +1827,6 @@
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
// var setIcon = function(holder_sel, id) {
|
|
||||||
// var icon = $.getSvgIcon(id).clone();
|
|
||||||
// var holder = $(holder_sel);
|
|
||||||
// icon[0].setAttribute('width',holder.width());
|
|
||||||
// icon[0].setAttribute('height',holder.height());
|
|
||||||
// holder.empty().append(icon)
|
|
||||||
// .attr('data-curopt', holder_sel.replace('_show','')); // This sets the current mode
|
|
||||||
// }
|
|
||||||
|
|
||||||
// Unfocus text input when workarea is mousedowned.
|
// Unfocus text input when workarea is mousedowned.
|
||||||
(function() {
|
(function() {
|
||||||
var inp;
|
var inp;
|
||||||
|
@ -2296,7 +2291,7 @@
|
||||||
var icon = $.getSvgIcon(icon_id).clone();
|
var icon = $.getSvgIcon(icon_id).clone();
|
||||||
$(elem).empty().append(icon);
|
$(elem).empty().append(icon);
|
||||||
var size = curPrefs.iconsize;
|
var size = curPrefs.iconsize;
|
||||||
if(size !== 'm') {
|
if(size && size !== 'm') {
|
||||||
var icon_sizes = { s:16, m:24, l:32, xl:48}, obj = {};
|
var icon_sizes = { s:16, m:24, l:32, xl:48}, obj = {};
|
||||||
obj[elem + ' .svg_icon'] = icon_sizes[size];
|
obj[elem + ' .svg_icon'] = icon_sizes[size];
|
||||||
$.resizeSvgIcons(obj);
|
$.resizeSvgIcons(obj);
|
||||||
|
@ -3464,7 +3459,7 @@
|
||||||
updateCanvas(true);
|
updateCanvas(true);
|
||||||
// });
|
// });
|
||||||
|
|
||||||
// var revnums = "svg-editor.js ($Rev: 1569 $) ";
|
// var revnums = "svg-editor.js ($Rev: 1574 $) ";
|
||||||
// revnums += svgCanvas.getVersion();
|
// revnums += svgCanvas.getVersion();
|
||||||
// $('#copyright')[0].setAttribute("title", revnums);
|
// $('#copyright')[0].setAttribute("title", revnums);
|
||||||
|
|
||||||
|
|
|
@ -961,7 +961,6 @@ function BatchCommand(text) {
|
||||||
'</svg>').documentElement, true);
|
'</svg>').documentElement, true);
|
||||||
|
|
||||||
$(svgroot).appendTo(container);
|
$(svgroot).appendTo(container);
|
||||||
|
|
||||||
var opac_ani = document.createElementNS(svgns, 'animate');
|
var opac_ani = document.createElementNS(svgns, 'animate');
|
||||||
$(opac_ani).attr({
|
$(opac_ani).attr({
|
||||||
attributeName: 'opacity',
|
attributeName: 'opacity',
|
||||||
|
@ -1777,7 +1776,9 @@ function BatchCommand(text) {
|
||||||
|
|
||||||
var i = selectedElements.length;
|
var i = selectedElements.length;
|
||||||
while(i--) {
|
while(i--) {
|
||||||
var cmd = recalculateDimensions(selectedElements[i]);
|
var elem = selectedElements[i];
|
||||||
|
// if(canvas.getRotationAngle(elem) && !hasMatrixTransform(canvas.getTransformList(elem))) continue;
|
||||||
|
var cmd = recalculateDimensions(elem);
|
||||||
if (cmd) {
|
if (cmd) {
|
||||||
batchCmd.addSubCommand(cmd);
|
batchCmd.addSubCommand(cmd);
|
||||||
}
|
}
|
||||||
|
@ -2052,6 +2053,8 @@ function BatchCommand(text) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// End here if all it has is a rotation
|
||||||
|
if(tlist.numberOfItems == 1 && canvas.getRotationAngle(selected)) return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
// if this element had no transforms, we are done
|
// if this element had no transforms, we are done
|
||||||
|
@ -2132,6 +2135,7 @@ function BatchCommand(text) {
|
||||||
transformListToTransform(tlist).matrix),
|
transformListToTransform(tlist).matrix),
|
||||||
m = svgroot.createSVGMatrix();
|
m = svgroot.createSVGMatrix();
|
||||||
|
|
||||||
|
|
||||||
// temporarily strip off the rotate and save the old center
|
// temporarily strip off the rotate and save the old center
|
||||||
var gangle = canvas.getRotationAngle(selected);
|
var gangle = canvas.getRotationAngle(selected);
|
||||||
if (gangle) {
|
if (gangle) {
|
||||||
|
@ -2158,6 +2162,10 @@ function BatchCommand(text) {
|
||||||
operation = 0,
|
operation = 0,
|
||||||
N = tlist.numberOfItems;
|
N = tlist.numberOfItems;
|
||||||
|
|
||||||
|
if(N) {
|
||||||
|
var first_m = tlist.getItem(0).matrix;
|
||||||
|
}
|
||||||
|
|
||||||
// first, if it was a scale then the second-last transform will be it
|
// first, if it was a scale then the second-last transform will be it
|
||||||
if (N >= 3 && tlist.getItem(N-2).type == 3 &&
|
if (N >= 3 && tlist.getItem(N-2).type == 3 &&
|
||||||
tlist.getItem(N-3).type == 2 && tlist.getItem(N-1).type == 2)
|
tlist.getItem(N-3).type == 2 && tlist.getItem(N-1).type == 2)
|
||||||
|
@ -2359,6 +2367,11 @@ function BatchCommand(text) {
|
||||||
// if it was a translate, put back the rotate at the new center
|
// if it was a translate, put back the rotate at the new center
|
||||||
if (operation == 2) {
|
if (operation == 2) {
|
||||||
if (gangle) {
|
if (gangle) {
|
||||||
|
newcenter = {
|
||||||
|
x: oldcenter.x + first_m.e,
|
||||||
|
y: oldcenter.y + first_m.f
|
||||||
|
};
|
||||||
|
|
||||||
var newRot = svgroot.createSVGTransform();
|
var newRot = svgroot.createSVGTransform();
|
||||||
newRot.setRotate(gangle,newcenter.x,newcenter.y);
|
newRot.setRotate(gangle,newcenter.x,newcenter.y);
|
||||||
tlist.insertItemBefore(newRot, 0);
|
tlist.insertItemBefore(newRot, 0);
|
||||||
|
@ -2550,6 +2563,10 @@ function BatchCommand(text) {
|
||||||
// if it was a translate, put back the rotate at the new center
|
// if it was a translate, put back the rotate at the new center
|
||||||
if (operation == 2) {
|
if (operation == 2) {
|
||||||
if (angle) {
|
if (angle) {
|
||||||
|
newcenter = {
|
||||||
|
x: oldcenter.x + m.e,
|
||||||
|
y: oldcenter.y + m.f
|
||||||
|
};
|
||||||
var newRot = svgroot.createSVGTransform();
|
var newRot = svgroot.createSVGTransform();
|
||||||
newRot.setRotate(angle, newcenter.x, newcenter.y);
|
newRot.setRotate(angle, newcenter.x, newcenter.y);
|
||||||
tlist.insertItemBefore(newRot, 0);
|
tlist.insertItemBefore(newRot, 0);
|
||||||
|
@ -3447,51 +3464,16 @@ function BatchCommand(text) {
|
||||||
var y2 = y;
|
var y2 = y;
|
||||||
|
|
||||||
if(evt.shiftKey) {
|
if(evt.shiftKey) {
|
||||||
|
var snap = Math.PI/4; // 45 degrees
|
||||||
var diff_x = x - start_x;
|
var diff_x = x - start_x;
|
||||||
var diff_y = y - start_y;
|
var diff_y = y - start_y;
|
||||||
|
var angle = Math.atan2(diff_y,diff_x);
|
||||||
var angle = ((Math.atan2(start_y-y,start_x-x) * (180/Math.PI))-90) % 360;
|
|
||||||
angle = angle<0?(360+angle):angle
|
|
||||||
|
|
||||||
// TODO: Write all this more efficiently
|
|
||||||
var dist = Math.sqrt(diff_x * diff_x + diff_y * diff_y);
|
var dist = Math.sqrt(diff_x * diff_x + diff_y * diff_y);
|
||||||
var val = Math.sqrt((dist*dist)/2);
|
var snapangle= Math.round(angle/snap)*snap;
|
||||||
var diagonal = false;
|
x2 = start_x + dist*Math.cos(snapangle);
|
||||||
|
y2 = start_y + dist*Math.sin(snapangle);
|
||||||
if(angle >= 360-22.5 || angle < 22.5) {
|
|
||||||
x2 = start_x;
|
|
||||||
} else if(angle >= 22.5 && angle < 22.5 + 45) {
|
|
||||||
diagonal = true;
|
|
||||||
} else if(angle >= 22.5 + 45 && angle < 22.5 + 90) {
|
|
||||||
y2 = start_y;
|
|
||||||
} else if(angle >= 22.5 + 90 && angle < 22.5 + 135) {
|
|
||||||
diagonal = true;
|
|
||||||
} else if(angle >= 22.5 + 135 && angle < 22.5 + 180) {
|
|
||||||
x2 = start_x;
|
|
||||||
} else if(angle >= 22.5 + 180 && angle < 22.5 + 225) {
|
|
||||||
diagonal = true;
|
|
||||||
} else if(angle >= 22.5 + 225 && angle < 22.5 + 270) {
|
|
||||||
y2 = start_y;
|
|
||||||
} else if(angle >= 22.5 + 270 && angle < 22.5 + 315) {
|
|
||||||
diagonal = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if(diagonal) {
|
|
||||||
if(y2 < start_y) {
|
|
||||||
y2 = start_y - val;
|
|
||||||
} else {
|
|
||||||
y2 = start_y + val;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(x2 < start_x) {
|
|
||||||
x2 = start_x - val;
|
|
||||||
} else {
|
|
||||||
x2 = start_x + val;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
shape.setAttributeNS(null, "x2", x2);
|
shape.setAttributeNS(null, "x2", x2);
|
||||||
shape.setAttributeNS(null, "y2", y2);
|
shape.setAttributeNS(null, "y2", y2);
|
||||||
if (!window.opera) svgroot.unsuspendRedraw(handle);
|
if (!window.opera) svgroot.unsuspendRedraw(handle);
|
||||||
|
@ -4831,16 +4813,36 @@ function BatchCommand(text) {
|
||||||
this.addSeg = function(index) {
|
this.addSeg = function(index) {
|
||||||
// Adds a new segment
|
// Adds a new segment
|
||||||
var seg = p.segs[index];
|
var seg = p.segs[index];
|
||||||
|
|
||||||
if(!seg.prev) return;
|
if(!seg.prev) return;
|
||||||
|
|
||||||
var prev = seg.prev;
|
var prev = seg.prev;
|
||||||
|
var newseg;
|
||||||
|
switch(seg.item.pathSegType) {
|
||||||
|
case 4:
|
||||||
var new_x = (seg.item.x + prev.item.x) / 2;
|
var new_x = (seg.item.x + prev.item.x) / 2;
|
||||||
var new_y = (seg.item.y + prev.item.y) / 2;
|
var new_y = (seg.item.y + prev.item.y) / 2;
|
||||||
|
newseg = elem.createSVGPathSegLinetoAbs(new_x, new_y);
|
||||||
|
break;
|
||||||
|
case 6: //make it a curved segment to preserve the shape (WRS)
|
||||||
|
// http://en.wikipedia.org/wiki/De_Casteljau%27s_algorithm#Geometric_interpretation
|
||||||
|
var p0_x = (prev.item.x + seg.item.x1)/2;
|
||||||
|
var p1_x = (seg.item.x1 + seg.item.x2)/2;
|
||||||
|
var p2_x = (seg.item.x2 + seg.item.x)/2;
|
||||||
|
var p01_x = (p0_x + p1_x)/2;
|
||||||
|
var p12_x = (p1_x + p2_x)/2;
|
||||||
|
var new_x = (p01_x + p12_x)/2;
|
||||||
|
var p0_y = (prev.item.y + seg.item.y1)/2;
|
||||||
|
var p1_y = (seg.item.y1 + seg.item.y2)/2;
|
||||||
|
var p2_y = (seg.item.y2 + seg.item.y)/2;
|
||||||
|
var p01_y = (p0_y + p1_y)/2;
|
||||||
|
var p12_y = (p1_y + p2_y)/2;
|
||||||
|
var new_y = (p01_y + p12_y)/2;
|
||||||
|
newseg = elem.createSVGPathSegCurvetoCubicAbs(new_x,new_y, p0_x,p0_y, p01_x,p01_y);
|
||||||
|
var pts = [seg.item.x,seg.item.y,p12_x,p12_y,p2_x,p2_y];
|
||||||
|
replacePathSeg(seg.type,index,pts);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
var list = elem.pathSegList;
|
|
||||||
var newseg = elem.createSVGPathSegLinetoAbs(new_x, new_y);
|
|
||||||
insertItemBefore(elem, newseg, index);
|
insertItemBefore(elem, newseg, index);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -5030,10 +5032,17 @@ function BatchCommand(text) {
|
||||||
var diff_x = cur_x - prev_x;
|
var diff_x = cur_x - prev_x;
|
||||||
var diff_y = cur_y - prev_y;
|
var diff_y = cur_y - prev_y;
|
||||||
// get control points from straight line segment
|
// get control points from straight line segment
|
||||||
|
/*
|
||||||
var ct1_x = (prev_x + (diff_y/2));
|
var ct1_x = (prev_x + (diff_y/2));
|
||||||
var ct1_y = (prev_y - (diff_x/2));
|
var ct1_y = (prev_y - (diff_x/2));
|
||||||
var ct2_x = (cur_x + (diff_y/2));
|
var ct2_x = (cur_x + (diff_y/2));
|
||||||
var ct2_y = (cur_y - (diff_x/2));
|
var ct2_y = (cur_y - (diff_x/2));
|
||||||
|
*/
|
||||||
|
//create control points on the line to preserve the shape (WRS)
|
||||||
|
var ct1_x = (prev_x + (diff_x/3));
|
||||||
|
var ct1_y = (prev_y + (diff_y/3));
|
||||||
|
var ct2_x = (cur_x - (diff_x/3));
|
||||||
|
var ct2_y = (cur_y - (diff_y/3));
|
||||||
points = [cur_x,cur_y, ct1_x,ct1_y, ct2_x,ct2_y];
|
points = [cur_x,cur_y, ct1_x,ct1_y, ct2_x,ct2_y];
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -9038,7 +9047,7 @@ function BatchCommand(text) {
|
||||||
// Function: getVersion
|
// Function: getVersion
|
||||||
// Returns a string which describes the revision number of SvgCanvas.
|
// Returns a string which describes the revision number of SvgCanvas.
|
||||||
this.getVersion = function() {
|
this.getVersion = function() {
|
||||||
return "svgcanvas.js ($Rev: 1569 $)";
|
return "svgcanvas.js ($Rev: 1573 $)";
|
||||||
};
|
};
|
||||||
|
|
||||||
this.setUiStrings = function(strs) {
|
this.setUiStrings = function(strs) {
|
||||||
|
|
|
@ -410,7 +410,9 @@ It is copied as a standard HTML attribute.
|
||||||
[['pre'], attrs],
|
[['pre'], attrs],
|
||||||
[['q', 'blockquote'], attrs+[:cite]],
|
[['q', 'blockquote'], attrs+[:cite]],
|
||||||
[['ins','del'], attrs+[:cite,:datetime]],
|
[['ins','del'], attrs+[:cite,:datetime]],
|
||||||
[['ol','ul','li'], attrs],
|
[['ol'], attrs+[:reversed, :start]],
|
||||||
|
[['ul'], attrs],
|
||||||
|
[['li'], attrs+[:value]],
|
||||||
['table',attrs+[:summary, :width, :frame, :rules, :border, :cellspacing, :cellpadding]],
|
['table',attrs+[:summary, :width, :frame, :rules, :border, :cellspacing, :cellpadding]],
|
||||||
['caption',attrs],
|
['caption',attrs],
|
||||||
[['colgroup','col'],attrs+[:span, :width]+cellhalign+cellvalign],
|
[['colgroup','col'],attrs+[:span, :width]+cellhalign+cellvalign],
|
||||||
|
|
Loading…
Reference in a new issue