inkweb.js revision ac851ddd38f466093751b7d307d128dd01ee858f
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz/*
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz** InkWeb - Inkscape's Javscript features for the open vector web
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz**
77fd5ff29861c6c87bcc9fc466d330b17a978c8ajaspervdg** Copyright (C) 2009 Aurelio A. Heckert, aurium (a) gmail dot com
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen**
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz** This program is free software: you can redistribute it and/or modify
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz** it under the terms of the GNU General Public License as published by
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz** the Free Software Foundation, either version 3 of the License, or
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz** (at your option) any later version.
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz**
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz** This program is distributed in the hope that it will be useful,
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz** but WITHOUT ANY WARRANTY; without even the implied warranty of
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz** GNU General Public License for more details.
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz**
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz** You should have received a copy of the GNU General Public License
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen** along with this program. If not, see <http://www.gnu.org/licenses/>.
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz*/
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelenvar InkWeb = {
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk version: 0.01,
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk NS: {
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk svg: "http://www.w3.org/2000/svg",
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk sodipodi: "http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd",
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk inkscape: "http://www.inkscape.org/namespaces/inkscape",
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk cc: "http://creativecommons.org/ns#",
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz dc: "http://purl.org/dc/elements/1.1/",
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz rdf: "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz xlink: "http://www.w3.org/1999/xlink",
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz xml: "http://www.w3.org/XML/1998/namespace"
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz }
9eb886f0efdd076022ef171278e8475a580a1e91jaspervdg
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz};
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz
39a897cf2c4e5c0208d081fe7d51dc893b5c33d1Liam P. WhiteInkWeb.reGetStyleAttVal = function (att) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz return new RegExp( "(^|.*;)[ ]*"+ att +":([^;]*)(;.*|$)" )
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz}
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzInkWeb.getStyle = function (el, att) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz // This method is needed because el.style is only working
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz // to HTML style in the Firefox 3.0
9eb886f0efdd076022ef171278e8475a580a1e91jaspervdg if ( typeof(el) == "string" )
9eb886f0efdd076022ef171278e8475a580a1e91jaspervdg el = document.getElementById(el);
9eb886f0efdd076022ef171278e8475a580a1e91jaspervdg var style = el.getAttribute("style");
9eb886f0efdd076022ef171278e8475a580a1e91jaspervdg var match = this.reGetStyleAttVal(att).exec(style);
9eb886f0efdd076022ef171278e8475a580a1e91jaspervdg if ( match ) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz return match[2];
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz } else {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz return false;
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz }
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz}
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzInkWeb.setStyle = function (el, att, val) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz if ( typeof(el) == "string" )
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz el = document.getElementById(el);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz var style = el.getAttribute("style");
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz re = this.reGetStyleAttVal(att);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz if ( re.test(style) ) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz style = style.replace( re, "$1"+ att +":"+ val +"$3" );
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen } else {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz style += ";"+ att +":"+ val;
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz }
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz el.setAttribute( "style", style );
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz return val
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz}
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzInkWeb.transmitAtt = function (conf) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz conf.att = conf.att.split( /\s+/ );
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz if ( typeof(conf.from) == "string" )
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz conf.from = document.getElementById( conf.from );
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz if ( ! conf.to.join )
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz conf.to = [ conf.to ];
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz for ( var toEl,elN=0; toEl=conf.to[elN]; elN++ ) {
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen if ( typeof(toEl) == "string" )
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz toEl = document.getElementById( toEl );
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk for ( var i=0; i<conf.att.length; i++ ) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz var val = this.getStyle( conf.from, conf.att[i] );
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz if ( val ) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz this.setStyle( toEl, conf.att[i], val );
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz } else {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz val = conf.from.getAttribute(conf.att[i]);
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz toEl.setAttribute( conf.att[i], val );
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen }
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz }
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk }
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz}
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruzInkWeb.setAtt = function (conf) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz if ( typeof(conf.el) == "string" )
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz conf.el = document.getElementById( conf.el );
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz conf.att = conf.att.split( /\s+/ );
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen conf.val = conf.val.split( /\s+/ );
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz var att;
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk for ( var i=0; att=conf.att[i]; i++ ) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz if (
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz att == "width" ||
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz att == "height" ||
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz att == "x" ||
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz att == "y" ||
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz att == "cx" ||
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen att == "cy" ||
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz att == "r" ||
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk att == "rx" ||
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz att == "ry" ||
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz att == "transform"
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz ) {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz conf.el.setAttribute( att, conf.val[i] );
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz } else {
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz this.setStyle( conf.el, att, conf.val[i] );
d37634d73670180f99a3e0ea583621373d90ec4fJohan Engelen }
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz }
9cf82ac568634e779873c4bf6cd6b7bdd465556dtweenk}
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz
e69f7d715a3db7f1fff1c8334714c8fab63852abjoncruz