server/php/basic/public_html/static/lib/paper/paper-full.js
author rougeronj
Tue, 22 Sep 2015 15:14:10 +0200
changeset 543 5f7bebdcfc0d
parent 495 444b80998255
child 598 eb4f4eceada0
permissions -rw-r--r--
Improve the way we init the view. The data loader send a "loaded" event, hooked by the scene.py and initializing the backbone.history and the view. We don't use redraw_active in save-once and full-json, because it was making the view initialization dependent of these file which are externals. Small fix to hide the "set saved view" button when there is only one view.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     1
/*!
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
     2
 * Paper.js v0.9.24 - The Swiss Army Knife of Vector Graphics Scripting.
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     3
 * http://paperjs.org/
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     4
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     5
 * Copyright (c) 2011 - 2014, Juerg Lehni & Jonathan Puckey
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     6
 * http://scratchdisk.com/ & http://jonathanpuckey.com/
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     7
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     8
 * Distributed under the MIT license. See LICENSE file for details.
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
     9
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    10
 * All rights reserved.
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    11
 *
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
    12
 * Date: Fri Aug 21 16:39:41 2015 +0200
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    13
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    14
 ***
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    15
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    16
 * Straps.js - Class inheritance library with support for bean-style accessors
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    17
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    18
 * Copyright (c) 2006 - 2013 Juerg Lehni
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    19
 * http://scratchdisk.com/
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    20
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    21
 * Distributed under the MIT license.
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    22
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    23
 ***
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    24
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    25
 * Acorn.js
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    26
 * http://marijnhaverbeke.nl/acorn/
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    27
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    28
 * Acorn is a tiny, fast JavaScript parser written in JavaScript,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    29
 * created by Marijn Haverbeke and released under an MIT license.
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    30
 *
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    31
 */
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    32
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    33
var paper = new function(undefined) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    34
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    35
var Base = new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    36
	var hidden = /^(statics|enumerable|beans|preserve)$/,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    37
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    38
		forEach = [].forEach || function(iter, bind) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    39
			for (var i = 0, l = this.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    40
				iter.call(bind, this[i], i, this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    41
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    42
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    43
		forIn = function(iter, bind) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    44
			for (var i in this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    45
				if (this.hasOwnProperty(i))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    46
					iter.call(bind, this[i], i, this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    47
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    48
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    49
		create = Object.create || function(proto) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    50
			return { __proto__: proto };
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    51
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    52
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    53
		describe = Object.getOwnPropertyDescriptor || function(obj, name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    54
			var get = obj.__lookupGetter__ && obj.__lookupGetter__(name);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    55
			return get
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    56
					? { get: get, set: obj.__lookupSetter__(name),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    57
						enumerable: true, configurable: true }
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    58
					: obj.hasOwnProperty(name)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    59
						? { value: obj[name], enumerable: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    60
							configurable: true, writable: true }
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    61
						: null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    62
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    63
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    64
		_define = Object.defineProperty || function(obj, name, desc) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    65
			if ((desc.get || desc.set) && obj.__defineGetter__) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    66
				if (desc.get)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    67
					obj.__defineGetter__(name, desc.get);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    68
				if (desc.set)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    69
					obj.__defineSetter__(name, desc.set);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    70
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    71
				obj[name] = desc.value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    72
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    73
			return obj;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    74
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    75
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    76
		define = function(obj, name, desc) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    77
			delete obj[name];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    78
			return _define(obj, name, desc);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    79
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    80
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    81
	function inject(dest, src, enumerable, beans, preserve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    82
		var beansNames = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    83
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    84
		function field(name, val) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    85
			val = val || (val = describe(src, name))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    86
					&& (val.get ? val : val.value);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    87
			if (typeof val === 'string' && val[0] === '#')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    88
				val = dest[val.substring(1)] || val;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    89
			var isFunc = typeof val === 'function',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    90
				res = val,
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
    91
				prev = preserve || isFunc && !val.base
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    92
						? (val && val.get ? name in dest : dest[name])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    93
						: null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    94
				bean;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    95
			if (!preserve || !prev) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    96
				if (isFunc && prev)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    97
					val.base = prev;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    98
				if (isFunc && beans !== false
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
    99
						&& (bean = name.match(/^([gs]et|is)(([A-Z])(.*))$/)))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   100
					beansNames[bean[3].toLowerCase() + bean[4]] = bean[2];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   101
				if (!res || isFunc || !res.get || typeof res.get !== 'function'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   102
						|| !Base.isPlainObject(res))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   103
					res = { value: res, writable: true };
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   104
				if ((describe(dest, name)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   105
						|| { configurable: true }).configurable) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   106
					res.configurable = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   107
					res.enumerable = enumerable;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   108
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   109
				define(dest, name, res);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   110
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   111
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   112
		if (src) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   113
			for (var name in src) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   114
				if (src.hasOwnProperty(name) && !hidden.test(name))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   115
					field(name);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   116
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   117
			for (var name in beansNames) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   118
				var part = beansNames[name],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   119
					set = dest['set' + part],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   120
					get = dest['get' + part] || set && dest['is' + part];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   121
				if (get && (beans === true || get.length === 0))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   122
					field(name, { get: get, set: set });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   123
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   124
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   125
		return dest;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   126
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   127
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   128
	function each(obj, iter, bind) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   129
		if (obj)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   130
			('length' in obj && !obj.getLength
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   131
					&& typeof obj.length === 'number'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   132
				? forEach
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   133
				: forIn).call(obj, iter, bind = bind || obj);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   134
		return bind;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   135
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   136
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   137
	function set(obj, props, exclude) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   138
		for (var key in props)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   139
			if (props.hasOwnProperty(key) && !(exclude && exclude[key]))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   140
				obj[key] = props[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   141
		return obj;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   142
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   143
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   144
	return inject(function Base() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   145
		for (var i = 0, l = arguments.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   146
			set(this, arguments[i]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   147
	}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   148
		inject: function(src) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   149
			if (src) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   150
				var statics = src.statics === true ? src : src.statics,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   151
					beans = src.beans,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   152
					preserve = src.preserve;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   153
				if (statics !== src)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   154
					inject(this.prototype, src, src.enumerable, beans, preserve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   155
				inject(this, statics, true, beans, preserve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   156
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   157
			for (var i = 1, l = arguments.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   158
				this.inject(arguments[i]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   159
			return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   160
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   161
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   162
		extend: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   163
			var base = this,
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   164
				ctor,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   165
				proto;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   166
			for (var i = 0, l = arguments.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   167
				if (ctor = arguments[i].initialize)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   168
					break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   169
			ctor = ctor || function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   170
				base.apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   171
			};
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   172
			proto = ctor.prototype = create(this.prototype);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   173
			define(proto, 'constructor',
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   174
					{ value: ctor, writable: true, configurable: true });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   175
			inject(ctor, this, true);
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   176
			if (arguments.length)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   177
				this.inject.apply(ctor, arguments);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   178
			ctor.base = base;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   179
			return ctor;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   180
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   181
	}, true).inject({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   182
		inject: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   183
			for (var i = 0, l = arguments.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   184
				var src = arguments[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   185
				if (src)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   186
					inject(this, src, src.enumerable, src.beans, src.preserve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   187
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   188
			return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   189
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   190
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   191
		extend: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   192
			var res = create(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   193
			return res.inject.apply(res, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   194
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   195
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   196
		each: function(iter, bind) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   197
			return each(this, iter, bind);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   198
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   199
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   200
		set: function(props) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   201
			return set(this, props);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   202
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   203
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   204
		clone: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   205
			return new this.constructor(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   206
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   207
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   208
		statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   209
			each: each,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   210
			create: create,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   211
			define: define,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   212
			describe: describe,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   213
			set: set,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   214
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   215
			clone: function(obj) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   216
				return set(new obj.constructor(), obj);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   217
			},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   218
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   219
			isPlainObject: function(obj) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   220
				var ctor = obj != null && obj.constructor;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   221
				return ctor && (ctor === Object || ctor === Base
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   222
						|| ctor.name === 'Object');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   223
			},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   224
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   225
			pick: function(a, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   226
				return a !== undefined ? a : b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   227
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   228
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   229
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   230
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   231
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   232
if (typeof module !== 'undefined')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   233
	module.exports = Base;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   234
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   235
Base.inject({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   236
	toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   237
		return this._id != null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   238
			?  (this._class || 'Object') + (this._name
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   239
				? " '" + this._name + "'"
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   240
				: ' @' + this._id)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   241
			: '{ ' + Base.each(this, function(value, key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   242
				if (!/^_/.test(key)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   243
					var type = typeof value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   244
					this.push(key + ': ' + (type === 'number'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   245
							? Formatter.instance.number(value)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   246
							: type === 'string' ? "'" + value + "'" : value));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   247
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   248
			}, []).join(', ') + ' }';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   249
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   250
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   251
	getClassName: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   252
		return this._class || '';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   253
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   254
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   255
	exportJSON: function(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   256
		return Base.exportJSON(this, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   257
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   258
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   259
	toJSON: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   260
		return Base.serialize(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   261
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   262
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   263
	_set: function(props, exclude, dontCheck) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   264
		if (props && (dontCheck || Base.isPlainObject(props))) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   265
			var keys = Object.keys(props._filtering || props);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   266
			for (var i = 0, l = keys.length; i < l; i++) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   267
				var key = keys[i];
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   268
				if (!(exclude && exclude[key])) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   269
					var value = props[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   270
					if (value !== undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   271
						this[key] = value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   272
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   273
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   274
			return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   275
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   276
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   277
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   278
	statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   279
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   280
		exports: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   281
			enumerable: true
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   282
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   283
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   284
		extend: function extend() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   285
			var res = extend.base.apply(this, arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   286
				name = res.prototype._class;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   287
			if (name && !Base.exports[name])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   288
				Base.exports[name] = res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   289
			return res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   290
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   291
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   292
		equals: function(obj1, obj2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   293
			if (obj1 === obj2)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   294
				return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   295
			if (obj1 && obj1.equals)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   296
				return obj1.equals(obj2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   297
			if (obj2 && obj2.equals)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   298
				return obj2.equals(obj1);
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   299
			if (obj1 && obj2
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   300
					&& typeof obj1 === 'object' && typeof obj2 === 'object') {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   301
				if (Array.isArray(obj1) && Array.isArray(obj2)) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   302
					var length = obj1.length;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   303
					if (length !== obj2.length)
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   304
						return false;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   305
					while (length--) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   306
						if (!Base.equals(obj1[length], obj2[length]))
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   307
							return false;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   308
					}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   309
				} else {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   310
					var keys = Object.keys(obj1),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   311
						length = keys.length;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   312
					if (length !== Object.keys(obj2).length)
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   313
						return false;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   314
					while (length--) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   315
						var key = keys[length];
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   316
						if (!(obj2.hasOwnProperty(key)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   317
								&& Base.equals(obj1[key], obj2[key])))
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   318
							return false;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   319
					}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   320
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   321
				return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   322
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   323
			return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   324
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   325
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   326
		read: function(list, start, options, length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   327
			if (this === Base) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   328
				var value = this.peek(list, start);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   329
				list.__index++;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   330
				return value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   331
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   332
			var proto = this.prototype,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   333
				readIndex = proto._readIndex,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   334
				index = start || readIndex && list.__index || 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   335
			if (!length)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   336
				length = list.length - index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   337
			var obj = list[index];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   338
			if (obj instanceof this
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   339
				|| options && options.readNull && obj == null && length <= 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   340
				if (readIndex)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   341
					list.__index = index + 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   342
				return obj && options && options.clone ? obj.clone() : obj;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   343
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   344
			obj = Base.create(this.prototype);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   345
			if (readIndex)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   346
				obj.__read = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   347
			obj = obj.initialize.apply(obj, index > 0 || length < list.length
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   348
				? Array.prototype.slice.call(list, index, index + length)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   349
				: list) || obj;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   350
			if (readIndex) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   351
				list.__index = index + obj.__read;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   352
				obj.__read = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   353
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   354
			return obj;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   355
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   356
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   357
		peek: function(list, start) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   358
			return list[list.__index = start || list.__index || 0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   359
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   360
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   361
		remain: function(list) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   362
			return list.length - (list.__index || 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   363
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   364
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   365
		readAll: function(list, start, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   366
			var res = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   367
				entry;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   368
			for (var i = start || 0, l = list.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   369
				res.push(Array.isArray(entry = list[i])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   370
						? this.read(entry, 0, options)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   371
						: this.read(list, i, options, 1));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   372
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   373
			return res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   374
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   375
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   376
		readNamed: function(list, name, start, options, length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   377
			var value = this.getNamed(list, name),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   378
				hasObject = value !== undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   379
			if (hasObject) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   380
				var filtered = list._filtered;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   381
				if (!filtered) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   382
					filtered = list._filtered = Base.create(list[0]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   383
					filtered._filtering = list[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   384
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   385
				filtered[name] = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   386
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   387
			return this.read(hasObject ? [value] : list, start, options, length);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   388
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   389
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   390
		getNamed: function(list, name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   391
			var arg = list[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   392
			if (list._hasObject === undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   393
				list._hasObject = list.length === 1 && Base.isPlainObject(arg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   394
			if (list._hasObject)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   395
				return name ? arg[name] : list._filtered || arg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   396
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   397
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   398
		hasNamed: function(list, name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   399
			return !!this.getNamed(list, name);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   400
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   401
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   402
		isPlainValue: function(obj, asString) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   403
			return this.isPlainObject(obj) || Array.isArray(obj)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   404
					|| asString && typeof obj === 'string';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   405
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   406
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   407
		serialize: function(obj, options, compact, dictionary) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   408
			options = options || {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   409
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   410
			var root = !dictionary,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   411
				res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   412
			if (root) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   413
				options.formatter = new Formatter(options.precision);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   414
				dictionary = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   415
					length: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   416
					definitions: {},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   417
					references: {},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   418
					add: function(item, create) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   419
						var id = '#' + item._id,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   420
							ref = this.references[id];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   421
						if (!ref) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   422
							this.length++;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   423
							var res = create.call(item),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   424
								name = item._class;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   425
							if (name && res[0] !== name)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   426
								res.unshift(name);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   427
							this.definitions[id] = res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   428
							ref = this.references[id] = [id];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   429
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   430
						return ref;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   431
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   432
				};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   433
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   434
			if (obj && obj._serialize) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   435
				res = obj._serialize(options, dictionary);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   436
				var name = obj._class;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   437
				if (name && !compact && !res._compact && res[0] !== name)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   438
					res.unshift(name);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   439
			} else if (Array.isArray(obj)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   440
				res = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   441
				for (var i = 0, l = obj.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   442
					res[i] = Base.serialize(obj[i], options, compact,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   443
							dictionary);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   444
				if (compact)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   445
					res._compact = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   446
			} else if (Base.isPlainObject(obj)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   447
				res = {};
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   448
				var keys = Object.keys(obj);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   449
				for (var i = 0, l = keys.length; i < l; i++) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   450
					var key = keys[i];
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   451
					res[key] = Base.serialize(obj[key], options, compact,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   452
							dictionary);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   453
				}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   454
			} else if (typeof obj === 'number') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   455
				res = options.formatter.number(obj, options.precision);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   456
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   457
				res = obj;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   458
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   459
			return root && dictionary.length > 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   460
					? [['dictionary', dictionary.definitions], res]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   461
					: res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   462
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   463
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   464
		deserialize: function(json, create, _data, _isDictionary) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   465
			var res = json,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   466
				isRoot = !_data;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   467
			_data = _data || {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   468
			if (Array.isArray(json)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   469
				var type = json[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   470
					isDictionary = type === 'dictionary';
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   471
				if (json.length == 1 && /^#/.test(type))
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   472
					return _data.dictionary[type];
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   473
				type = Base.exports[type];
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   474
				res = [];
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   475
				if (_isDictionary)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   476
					_data.dictionary = res;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   477
				for (var i = type ? 1 : 0, l = json.length; i < l; i++)
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   478
					res.push(Base.deserialize(json[i], create, _data,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   479
							isDictionary));
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   480
				if (type) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   481
					var args = res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   482
					if (create) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   483
						res = create(type, args);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   484
					} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   485
						res = Base.create(type.prototype);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   486
						type.apply(res, args);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   487
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   488
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   489
			} else if (Base.isPlainObject(json)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   490
				res = {};
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   491
				if (_isDictionary)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   492
					_data.dictionary = res;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   493
				for (var key in json)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   494
					res[key] = Base.deserialize(json[key], create, _data);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   495
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   496
			return isRoot && json && json.length && json[0][0] === 'dictionary'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   497
					? res[1]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   498
					: res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   499
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   500
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   501
		exportJSON: function(obj, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   502
			var json = Base.serialize(obj, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   503
			return options && options.asString === false
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   504
					? json
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   505
					: JSON.stringify(json);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   506
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   507
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   508
		importJSON: function(json, target) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   509
			return Base.deserialize(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   510
					typeof json === 'string' ? JSON.parse(json) : json,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   511
					function(type, args) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   512
						var obj = target && target.constructor === type
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   513
								? target
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   514
								: Base.create(type.prototype),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   515
							isTarget = obj === target;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   516
						if (args.length === 1 && obj instanceof Item
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   517
								&& (isTarget || !(obj instanceof Layer))) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   518
							var arg = args[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   519
							if (Base.isPlainObject(arg))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   520
								arg.insert = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   521
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   522
						type.apply(obj, args);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   523
						if (isTarget)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   524
							target = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   525
						return obj;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   526
					});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   527
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   528
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   529
		splice: function(list, items, index, remove) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   530
			var amount = items && items.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   531
				append = index === undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   532
			index = append ? list.length : index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   533
			if (index > list.length)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   534
				index = list.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   535
			for (var i = 0; i < amount; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   536
				items[i]._index = index + i;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   537
			if (append) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   538
				list.push.apply(list, items);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   539
				return [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   540
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   541
				var args = [index, remove];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   542
				if (items)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   543
					args.push.apply(args, items);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   544
				var removed = list.splice.apply(list, args);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   545
				for (var i = 0, l = removed.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   546
					removed[i]._index = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   547
				for (var i = index + amount, l = list.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   548
					list[i]._index = i;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   549
				return removed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   550
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   551
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   552
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   553
		capitalize: function(str) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   554
			return str.replace(/\b[a-z]/g, function(match) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   555
				return match.toUpperCase();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   556
			});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   557
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   558
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   559
		camelize: function(str) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   560
			return str.replace(/-(.)/g, function(all, chr) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   561
				return chr.toUpperCase();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   562
			});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   563
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   564
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   565
		hyphenate: function(str) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   566
			return str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   567
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   568
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   569
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   570
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   571
var Emitter = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   572
	on: function(type, func) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   573
		if (typeof type !== 'string') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   574
			Base.each(type, function(value, key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   575
				this.on(key, value);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   576
			}, this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   577
		} else {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   578
			var types = this._eventTypes,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   579
				entry = types && types[type],
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   580
				handlers = this._callbacks = this._callbacks || {};
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   581
			handlers = handlers[type] = handlers[type] || [];
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   582
			if (handlers.indexOf(func) === -1) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   583
				handlers.push(func);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   584
				if (entry && entry.install && handlers.length == 1)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   585
					entry.install.call(this, type);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   586
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   587
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   588
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   589
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   590
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   591
	off: function(type, func) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   592
		if (typeof type !== 'string') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   593
			Base.each(type, function(value, key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   594
				this.off(key, value);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   595
			}, this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   596
			return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   597
		}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   598
		var types = this._eventTypes,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   599
			entry = types && types[type],
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   600
			handlers = this._callbacks && this._callbacks[type],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   601
			index;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   602
		if (handlers) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   603
			if (!func || (index = handlers.indexOf(func)) !== -1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   604
					&& handlers.length === 1) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   605
				if (entry && entry.uninstall)
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   606
					entry.uninstall.call(this, type);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   607
				delete this._callbacks[type];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   608
			} else if (index !== -1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   609
				handlers.splice(index, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   610
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   611
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   612
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   613
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   614
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   615
	once: function(type, func) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   616
		return this.on(type, function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   617
			func.apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   618
			this.off(type, func);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   619
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   620
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   621
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   622
	emit: function(type, event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   623
		var handlers = this._callbacks && this._callbacks[type];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   624
		if (!handlers)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   625
			return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   626
		var args = [].slice.call(arguments, 1);
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   627
		handlers = handlers.slice();
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   628
		for (var i = 0, l = handlers.length; i < l; i++) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   629
			if (handlers[i].apply(this, args) === false) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   630
				if (event && event.stop)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   631
					event.stop();
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   632
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   633
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   634
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   635
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   636
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   637
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   638
	responds: function(type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   639
		return !!(this._callbacks && this._callbacks[type]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   640
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   641
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   642
	attach: '#on',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   643
	detach: '#off',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   644
	fire: '#emit',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   645
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   646
	_installEvents: function(install) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   647
		var handlers = this._callbacks,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   648
			key = install ? 'install' : 'uninstall';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   649
		for (var type in handlers) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   650
			if (handlers[type].length > 0) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   651
				var types = this._eventTypes,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   652
					entry = types && types[type],
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   653
					func = entry && entry[key];
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   654
				if (func)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   655
					func.call(this, type);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   656
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   657
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   658
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   659
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   660
	statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   661
		inject: function inject(src) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   662
			var events = src._events;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   663
			if (events) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   664
				var types = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   665
				Base.each(events, function(entry, key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   666
					var isString = typeof entry === 'string',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   667
						name = isString ? entry : key,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   668
						part = Base.capitalize(name),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   669
						type = name.substring(2).toLowerCase();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   670
					types[type] = isString ? {} : entry;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   671
					name = '_' + name;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   672
					src['get' + part] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   673
						return this[name];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   674
					};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   675
					src['set' + part] = function(func) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   676
						var prev = this[name];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   677
						if (prev)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   678
							this.off(type, prev);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   679
						if (func)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   680
							this.on(type, func);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   681
						this[name] = func;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   682
					};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   683
				});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   684
				src._eventTypes = types;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   685
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   686
			return inject.base.apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   687
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   688
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   689
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   690
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   691
var PaperScope = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   692
	_class: 'PaperScope',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   693
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   694
	initialize: function PaperScope() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   695
		paper = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   696
		this.settings = new Base({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   697
			applyMatrix: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   698
			handleSize: 4,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   699
			hitTolerance: 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   700
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   701
		this.project = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   702
		this.projects = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   703
		this.tools = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   704
		this.palettes = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   705
		this._id = PaperScope._id++;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   706
		PaperScope._scopes[this._id] = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   707
		var proto = PaperScope.prototype;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   708
		if (!this.support) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   709
			var ctx = CanvasProvider.getContext(1, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   710
			proto.support = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   711
				nativeDash: 'setLineDash' in ctx || 'mozDash' in ctx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   712
				nativeBlendModes: BlendMode.nativeModes
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   713
			};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   714
			CanvasProvider.release(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   715
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   716
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   717
		if (!this.browser) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   718
			var agent = navigator.userAgent.toLowerCase(),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   719
				platform = (/(win)/.exec(agent)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   720
						|| /(mac)/.exec(agent)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   721
						|| /(linux)/.exec(agent)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   722
						|| [])[0],
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   723
				browser = proto.browser = { platform: platform };
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   724
			if (platform)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   725
				browser[platform] = true;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   726
			agent.replace(
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   727
				/(opera|chrome|safari|webkit|firefox|msie|trident|atom)\/?\s*([.\d]+)(?:.*version\/([.\d]+))?(?:.*rv\:([.\d]+))?/g,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   728
				function(all, n, v1, v2, rv) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   729
					if (!browser.chrome) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   730
						var v = n === 'opera' ? v2 : v1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   731
						if (n === 'trident') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   732
							v = rv;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   733
							n = 'msie';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   734
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   735
						browser.version = v;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   736
						browser.versionNumber = parseFloat(v);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   737
						browser.name = n;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   738
						browser[n] = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   739
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   740
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   741
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   742
			if (browser.chrome)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   743
				delete browser.webkit;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   744
			if (browser.atom)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   745
				delete browser.chrome;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   746
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   747
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   748
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   749
	version: '0.9.24',
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   750
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   751
	getView: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   752
		return this.project && this.project.getView();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   753
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   754
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   755
	getPaper: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   756
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   757
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   758
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   759
	execute: function(code, url, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   760
		paper.PaperScript.execute(code, this, url, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   761
		View.updateFocus();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   762
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   763
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   764
	install: function(scope) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   765
		var that = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   766
		Base.each(['project', 'view', 'tool'], function(key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   767
			Base.define(scope, key, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   768
				configurable: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   769
				get: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   770
					return that[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   771
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   772
			});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   773
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   774
		for (var key in this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   775
			if (!/^_/.test(key) && this[key])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   776
				scope[key] = this[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   777
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   778
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   779
	setup: function(element) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   780
		paper = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   781
		this.project = new Project(element);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   782
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   783
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   784
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   785
	activate: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   786
		paper = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   787
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   788
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   789
	clear: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   790
		for (var i = this.projects.length - 1; i >= 0; i--)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   791
			this.projects[i].remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   792
		for (var i = this.tools.length - 1; i >= 0; i--)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   793
			this.tools[i].remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   794
		for (var i = this.palettes.length - 1; i >= 0; i--)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   795
			this.palettes[i].remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   796
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   797
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   798
	remove: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   799
		this.clear();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   800
		delete PaperScope._scopes[this._id];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   801
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   802
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   803
	statics: new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   804
		function handleAttribute(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   805
			name += 'Attribute';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   806
			return function(el, attr) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   807
				return el[name](attr) || el[name]('data-paper-' + attr);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   808
			};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   809
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   810
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   811
		return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   812
			_scopes: {},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   813
			_id: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   814
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   815
			get: function(id) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   816
				return this._scopes[id] || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   817
			},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   818
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   819
			getAttribute: handleAttribute('get'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   820
			hasAttribute: handleAttribute('has')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   821
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   822
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   823
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   824
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   825
var PaperScopeItem = Base.extend(Emitter, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   826
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   827
	initialize: function(activate) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   828
		this._scope = paper;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   829
		this._index = this._scope[this._list].push(this) - 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   830
		if (activate || !this._scope[this._reference])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   831
			this.activate();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   832
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   833
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   834
	activate: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   835
		if (!this._scope)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   836
			return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   837
		var prev = this._scope[this._reference];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   838
		if (prev && prev !== this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   839
			prev.emit('deactivate');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   840
		this._scope[this._reference] = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   841
		this.emit('activate', prev);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   842
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   843
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   844
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   845
	isActive: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   846
		return this._scope[this._reference] === this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   847
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   848
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   849
	remove: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   850
		if (this._index == null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   851
			return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   852
		Base.splice(this._scope[this._list], null, this._index, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   853
		if (this._scope[this._reference] == this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   854
			this._scope[this._reference] = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   855
		this._scope = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   856
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   857
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   858
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   859
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   860
var Formatter = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   861
	initialize: function(precision) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   862
		this.precision = precision || 5;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   863
		this.multiplier = Math.pow(10, this.precision);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   864
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   865
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   866
	number: function(val) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   867
		return Math.round(val * this.multiplier) / this.multiplier;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   868
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   869
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   870
	pair: function(val1, val2, separator) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   871
		return this.number(val1) + (separator || ',') + this.number(val2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   872
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   873
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   874
	point: function(val, separator) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   875
		return this.number(val.x) + (separator || ',') + this.number(val.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   876
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   877
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   878
	size: function(val, separator) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   879
		return this.number(val.width) + (separator || ',')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   880
				+ this.number(val.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   881
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   882
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   883
	rectangle: function(val, separator) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   884
		return this.point(val, separator) + (separator || ',')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   885
				+ this.size(val, separator);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   886
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   887
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   888
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   889
Formatter.instance = new Formatter();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   890
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   891
var Numerical = new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   892
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   893
	var abscissas = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   894
		[  0.5773502691896257645091488],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   895
		[0,0.7745966692414833770358531],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   896
		[  0.3399810435848562648026658,0.8611363115940525752239465],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   897
		[0,0.5384693101056830910363144,0.9061798459386639927976269],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   898
		[  0.2386191860831969086305017,0.6612093864662645136613996,0.9324695142031520278123016],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   899
		[0,0.4058451513773971669066064,0.7415311855993944398638648,0.9491079123427585245261897],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   900
		[  0.1834346424956498049394761,0.5255324099163289858177390,0.7966664774136267395915539,0.9602898564975362316835609],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   901
		[0,0.3242534234038089290385380,0.6133714327005903973087020,0.8360311073266357942994298,0.9681602395076260898355762],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   902
		[  0.1488743389816312108848260,0.4333953941292471907992659,0.6794095682990244062343274,0.8650633666889845107320967,0.9739065285171717200779640],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   903
		[0,0.2695431559523449723315320,0.5190961292068118159257257,0.7301520055740493240934163,0.8870625997680952990751578,0.9782286581460569928039380],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   904
		[  0.1252334085114689154724414,0.3678314989981801937526915,0.5873179542866174472967024,0.7699026741943046870368938,0.9041172563704748566784659,0.9815606342467192506905491],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   905
		[0,0.2304583159551347940655281,0.4484927510364468528779129,0.6423493394403402206439846,0.8015780907333099127942065,0.9175983992229779652065478,0.9841830547185881494728294],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   906
		[  0.1080549487073436620662447,0.3191123689278897604356718,0.5152486363581540919652907,0.6872929048116854701480198,0.8272013150697649931897947,0.9284348836635735173363911,0.9862838086968123388415973],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   907
		[0,0.2011940939974345223006283,0.3941513470775633698972074,0.5709721726085388475372267,0.7244177313601700474161861,0.8482065834104272162006483,0.9372733924007059043077589,0.9879925180204854284895657],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   908
		[  0.0950125098376374401853193,0.2816035507792589132304605,0.4580167776572273863424194,0.6178762444026437484466718,0.7554044083550030338951012,0.8656312023878317438804679,0.9445750230732325760779884,0.9894009349916499325961542]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   909
	];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   910
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   911
	var weights = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   912
		[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   913
		[0.8888888888888888888888889,0.5555555555555555555555556],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   914
		[0.6521451548625461426269361,0.3478548451374538573730639],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   915
		[0.5688888888888888888888889,0.4786286704993664680412915,0.2369268850561890875142640],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   916
		[0.4679139345726910473898703,0.3607615730481386075698335,0.1713244923791703450402961],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   917
		[0.4179591836734693877551020,0.3818300505051189449503698,0.2797053914892766679014678,0.1294849661688696932706114],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   918
		[0.3626837833783619829651504,0.3137066458778872873379622,0.2223810344533744705443560,0.1012285362903762591525314],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   919
		[0.3302393550012597631645251,0.3123470770400028400686304,0.2606106964029354623187429,0.1806481606948574040584720,0.0812743883615744119718922],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   920
		[0.2955242247147528701738930,0.2692667193099963550912269,0.2190863625159820439955349,0.1494513491505805931457763,0.0666713443086881375935688],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   921
		[0.2729250867779006307144835,0.2628045445102466621806889,0.2331937645919904799185237,0.1862902109277342514260976,0.1255803694649046246346943,0.0556685671161736664827537],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   922
		[0.2491470458134027850005624,0.2334925365383548087608499,0.2031674267230659217490645,0.1600783285433462263346525,0.1069393259953184309602547,0.0471753363865118271946160],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   923
		[0.2325515532308739101945895,0.2262831802628972384120902,0.2078160475368885023125232,0.1781459807619457382800467,0.1388735102197872384636018,0.0921214998377284479144218,0.0404840047653158795200216],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   924
		[0.2152638534631577901958764,0.2051984637212956039659241,0.1855383974779378137417166,0.1572031671581935345696019,0.1215185706879031846894148,0.0801580871597602098056333,0.0351194603317518630318329],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   925
		[0.2025782419255612728806202,0.1984314853271115764561183,0.1861610000155622110268006,0.1662692058169939335532009,0.1395706779261543144478048,0.1071592204671719350118695,0.0703660474881081247092674,0.0307532419961172683546284],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   926
		[0.1894506104550684962853967,0.1826034150449235888667637,0.1691565193950025381893121,0.1495959888165767320815017,0.1246289712555338720524763,0.0951585116824927848099251,0.0622535239386478928628438,0.0271524594117540948517806]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   927
	];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   928
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   929
	var abs = Math.abs,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   930
		sqrt = Math.sqrt,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   931
		pow = Math.pow,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   932
		TOLERANCE = 1e-6,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   933
		EPSILON = 1e-12,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   934
		MACHINE_EPSILON = 1.12e-16;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   935
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   936
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   937
		TOLERANCE: TOLERANCE,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   938
		EPSILON: EPSILON,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   939
		MACHINE_EPSILON: MACHINE_EPSILON,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   940
		KAPPA: 4 * (sqrt(2) - 1) / 3,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   941
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   942
		isZero: function(val) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   943
			return abs(val) <= EPSILON;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   944
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   945
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   946
		integrate: function(f, a, b, n) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   947
			var x = abscissas[n - 2],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   948
				w = weights[n - 2],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   949
				A = (b - a) * 0.5,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   950
				B = A + a,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   951
				i = 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   952
				m = (n + 1) >> 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   953
				sum = n & 1 ? w[i++] * f(B) : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   954
			while (i < m) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   955
				var Ax = A * x[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   956
				sum += w[i++] * (f(B + Ax) + f(B - Ax));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   957
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   958
			return A * sum;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   959
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   960
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   961
		findRoot: function(f, df, x, a, b, n, tolerance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   962
			for (var i = 0; i < n; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   963
				var fx = f(x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   964
					dx = fx / df(x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   965
					nx = x - dx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   966
				if (abs(dx) < tolerance)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   967
					return nx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   968
				if (fx > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   969
					b = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   970
					x = nx <= a ? (a + b) * 0.5 : nx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   971
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   972
					a = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   973
					x = nx >= b ? (a + b) * 0.5 : nx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   974
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   975
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   976
			return x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   977
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   978
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   979
		solveQuadratic: function(a, b, c, roots, min, max) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   980
			var count = 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   981
				x1, x2 = Infinity,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   982
				B = b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   983
				D;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   984
			b /= 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   985
			D = b * b - a * c;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   986
			if (D !== 0 && abs(D) < MACHINE_EPSILON) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   987
				var gmC = pow(abs(a * b * c), 1 / 3);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   988
				if (gmC < 1e-8) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   989
					var mult = pow(10, abs(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   990
						Math.floor(Math.log(gmC) * Math.LOG10E)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   991
					if (!isFinite(mult))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   992
						mult = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   993
					a *= mult;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   994
					b *= mult;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   995
					c *= mult;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   996
					D = b * b - a * c;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   997
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
   998
			}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
   999
			if (abs(a) < EPSILON) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1000
				if (abs(B) < EPSILON)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1001
					return abs(c) < EPSILON ? -1 : 0;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1002
				x1 = -c / B;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1003
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1004
				if (D >= -MACHINE_EPSILON) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1005
					D = D < 0 ? 0 : D;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1006
					var R = sqrt(D);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1007
					if (b >= MACHINE_EPSILON && b <= MACHINE_EPSILON) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1008
						x1 = abs(a) >= abs(c) ? R / a : -c / R;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1009
						x2 = -x1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1010
					} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1011
						var q = -(b + (b < 0 ? -1 : 1) * R);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1012
						x1 = q / a;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1013
						x2 = c / q;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1014
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1015
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1016
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1017
			if (isFinite(x1) && (min == null || x1 >= min && x1 <= max))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1018
				roots[count++] = x1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1019
			if (x2 !== x1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1020
					&& isFinite(x2) && (min == null || x2 >= min && x2 <= max))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1021
				roots[count++] = x2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1022
			return count;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1023
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1024
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1025
		solveCubic: function(a, b, c, d, roots, min, max) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1026
			var count = 0,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1027
				x, b1, c2;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1028
			if (abs(a) < EPSILON) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1029
				a = b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1030
				b1 = c;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1031
				c2 = d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1032
				x = Infinity;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1033
			} else if (abs(d) < EPSILON) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1034
				b1 = b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1035
				c2 = c;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1036
				x = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1037
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1038
				var ec = 1 + MACHINE_EPSILON,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1039
					x0, q, qd, t, r, s, tmp;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1040
				x = -(b / a) / 3;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1041
				tmp = a * x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1042
				b1 = tmp + b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1043
				c2 = b1 * x + c,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1044
				qd = (tmp + b1) * x + c2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1045
				q = c2 * x + d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1046
				t = q /a;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1047
				r = pow(abs(t), 1/3);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1048
				s = t < 0 ? -1 : 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1049
				t = -qd / a;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1050
				r = t > 0 ? 1.3247179572 * Math.max(r, sqrt(t)) : r;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1051
				x0 = x - s * r;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1052
				if (x0 !== x) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1053
					do {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1054
						x = x0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1055
						tmp = a * x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1056
						b1 = tmp + b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1057
						c2 = b1 * x + c,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1058
						qd = (tmp + b1) * x + c2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1059
						q = c2 * x + d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1060
						x0 = qd === 0 ? x : x - q / qd / ec;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1061
						if (x0 === x) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1062
							x = x0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1063
							break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1064
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1065
					} while (s * x0 > s * x);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1066
					if (abs(a) * x * x > abs(d / x)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1067
						c2 = -d / x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1068
						b1 = (c2 - c) / x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1069
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1070
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1071
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1072
			var count = Numerical.solveQuadratic(a, b1, c2, roots, min, max);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1073
			if (isFinite(x) && (count === 0 || x !== roots[count - 1])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1074
					&& (min == null || x >= min && x <= max))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1075
				roots[count++] = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1076
			return count;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1077
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1078
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1079
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1080
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1081
var UID = {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1082
	_id: 1,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1083
	_pools: {},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1084
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1085
	get: function(ctor) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1086
		if (ctor) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1087
			var name = ctor._class,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1088
				pool = this._pools[name];
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1089
			if (!pool)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1090
				pool = this._pools[name] = { _id: 1 };
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1091
			return pool._id++;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1092
		} else {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1093
			return this._id++;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1094
		}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1095
	}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1096
};
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1097
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1098
var Point = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1099
	_class: 'Point',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1100
	_readIndex: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1101
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1102
	initialize: function Point(arg0, arg1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1103
		var type = typeof arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1104
		if (type === 'number') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1105
			var hasY = typeof arg1 === 'number';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1106
			this.x = arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1107
			this.y = hasY ? arg1 : arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1108
			if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1109
				this.__read = hasY ? 2 : 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1110
		} else if (type === 'undefined' || arg0 === null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1111
			this.x = this.y = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1112
			if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1113
				this.__read = arg0 === null ? 1 : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1114
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1115
			if (Array.isArray(arg0)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1116
				this.x = arg0[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1117
				this.y = arg0.length > 1 ? arg0[1] : arg0[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1118
			} else if (arg0.x != null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1119
				this.x = arg0.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1120
				this.y = arg0.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1121
			} else if (arg0.width != null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1122
				this.x = arg0.width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1123
				this.y = arg0.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1124
			} else if (arg0.angle != null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1125
				this.x = arg0.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1126
				this.y = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1127
				this.setAngle(arg0.angle);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1128
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1129
				this.x = this.y = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1130
				if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1131
					this.__read = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1132
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1133
			if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1134
				this.__read = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1135
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1136
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1137
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1138
	set: function(x, y) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1139
		this.x = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1140
		this.y = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1141
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1142
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1143
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1144
	equals: function(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1145
		return this === point || point
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1146
				&& (this.x === point.x && this.y === point.y
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1147
					|| Array.isArray(point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1148
						&& this.x === point[0] && this.y === point[1])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1149
				|| false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1150
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1151
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1152
	clone: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1153
		return new Point(this.x, this.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1154
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1155
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1156
	toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1157
		var f = Formatter.instance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1158
		return '{ x: ' + f.number(this.x) + ', y: ' + f.number(this.y) + ' }';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1159
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1160
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1161
	_serialize: function(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1162
		var f = options.formatter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1163
		return [f.number(this.x), f.number(this.y)];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1164
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1165
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1166
	getLength: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1167
		return Math.sqrt(this.x * this.x + this.y * this.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1168
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1169
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1170
	setLength: function(length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1171
		if (this.isZero()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1172
			var angle = this._angle || 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1173
			this.set(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1174
				Math.cos(angle) * length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1175
				Math.sin(angle) * length
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1176
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1177
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1178
			var scale = length / this.getLength();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1179
			if (Numerical.isZero(scale))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1180
				this.getAngle();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1181
			this.set(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1182
				this.x * scale,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1183
				this.y * scale
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1184
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1185
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1186
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1187
	getAngle: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1188
		return this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1189
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1190
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1191
	setAngle: function(angle) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1192
		this.setAngleInRadians.call(this, angle * Math.PI / 180);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1193
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1194
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1195
	getAngleInDegrees: '#getAngle',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1196
	setAngleInDegrees: '#setAngle',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1197
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1198
	getAngleInRadians: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1199
		if (!arguments.length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1200
			return this.isZero()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1201
					? this._angle || 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1202
					: this._angle = Math.atan2(this.y, this.x);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1203
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1204
			var point = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1205
				div = this.getLength() * point.getLength();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1206
			if (Numerical.isZero(div)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1207
				return NaN;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1208
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1209
				var a = this.dot(point) / div;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1210
				return Math.acos(a < -1 ? -1 : a > 1 ? 1 : a);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1211
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1212
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1213
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1214
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1215
	setAngleInRadians: function(angle) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1216
		this._angle = angle;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1217
		if (!this.isZero()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1218
			var length = this.getLength();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1219
			this.set(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1220
				Math.cos(angle) * length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1221
				Math.sin(angle) * length
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1222
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1223
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1224
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1225
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1226
	getQuadrant: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1227
		return this.x >= 0 ? this.y >= 0 ? 1 : 4 : this.y >= 0 ? 2 : 3;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1228
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1229
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1230
	beans: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1231
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1232
	getDirectedAngle: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1233
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1234
		return Math.atan2(this.cross(point), this.dot(point)) * 180 / Math.PI;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1235
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1236
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1237
	getDistance: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1238
		var point = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1239
			x = point.x - this.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1240
			y = point.y - this.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1241
			d = x * x + y * y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1242
			squared = Base.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1243
		return squared ? d : Math.sqrt(d);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1244
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1245
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1246
	normalize: function(length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1247
		if (length === undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1248
			length = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1249
		var current = this.getLength(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1250
			scale = current !== 0 ? length / current : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1251
			point = new Point(this.x * scale, this.y * scale);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1252
		if (scale >= 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1253
			point._angle = this._angle;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1254
		return point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1255
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1256
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1257
	rotate: function(angle, center) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1258
		if (angle === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1259
			return this.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1260
		angle = angle * Math.PI / 180;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1261
		var point = center ? this.subtract(center) : this,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1262
			s = Math.sin(angle),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1263
			c = Math.cos(angle);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1264
		point = new Point(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1265
			point.x * c - point.y * s,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1266
			point.x * s + point.y * c
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1267
		);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1268
		return center ? point.add(center) : point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1269
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1270
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1271
	transform: function(matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1272
		return matrix ? matrix._transformPoint(this) : this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1273
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1274
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1275
	add: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1276
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1277
		return new Point(this.x + point.x, this.y + point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1278
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1279
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1280
	subtract: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1281
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1282
		return new Point(this.x - point.x, this.y - point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1283
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1284
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1285
	multiply: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1286
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1287
		return new Point(this.x * point.x, this.y * point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1288
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1289
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1290
	divide: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1291
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1292
		return new Point(this.x / point.x, this.y / point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1293
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1294
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1295
	modulo: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1296
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1297
		return new Point(this.x % point.x, this.y % point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1298
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1299
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1300
	negate: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1301
		return new Point(-this.x, -this.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1302
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1303
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1304
	isInside: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1305
		return Rectangle.read(arguments).contains(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1306
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1307
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1308
	isClose: function(point, tolerance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1309
		return this.getDistance(point) < tolerance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1310
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1311
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1312
	isCollinear: function(point) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1313
		return Math.abs(this.cross(point)) < 0.000001;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1314
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1315
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1316
	isColinear: '#isCollinear',
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1317
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1318
	isOrthogonal: function(point) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  1319
		return Math.abs(this.dot(point)) < 0.000001;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1320
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1321
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1322
	isZero: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1323
		return Numerical.isZero(this.x) && Numerical.isZero(this.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1324
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1325
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1326
	isNaN: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1327
		return isNaN(this.x) || isNaN(this.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1328
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1329
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1330
	dot: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1331
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1332
		return this.x * point.x + this.y * point.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1333
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1334
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1335
	cross: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1336
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1337
		return this.x * point.y - this.y * point.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1338
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1339
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1340
	project: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1341
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1342
		if (point.isZero()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1343
			return new Point(0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1344
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1345
			var scale = this.dot(point) / point.dot(point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1346
			return new Point(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1347
				point.x * scale,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1348
				point.y * scale
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1349
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1350
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1351
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1352
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1353
	statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1354
		min: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1355
			var point1 = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1356
				point2 = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1357
			return new Point(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1358
				Math.min(point1.x, point2.x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1359
				Math.min(point1.y, point2.y)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1360
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1361
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1362
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1363
		max: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1364
			var point1 = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1365
				point2 = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1366
			return new Point(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1367
				Math.max(point1.x, point2.x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1368
				Math.max(point1.y, point2.y)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1369
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1370
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1371
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1372
		random: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1373
			return new Point(Math.random(), Math.random());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1374
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1375
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1376
}, Base.each(['round', 'ceil', 'floor', 'abs'], function(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1377
	var op = Math[name];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1378
	this[name] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1379
		return new Point(op(this.x), op(this.y));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1380
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1381
}, {}));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1382
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1383
var LinkedPoint = Point.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1384
	initialize: function Point(x, y, owner, setter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1385
		this._x = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1386
		this._y = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1387
		this._owner = owner;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1388
		this._setter = setter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1389
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1390
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1391
	set: function(x, y, _dontNotify) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1392
		this._x = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1393
		this._y = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1394
		if (!_dontNotify)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1395
			this._owner[this._setter](this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1396
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1397
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1398
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1399
	getX: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1400
		return this._x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1401
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1402
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1403
	setX: function(x) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1404
		this._x = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1405
		this._owner[this._setter](this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1406
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1407
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1408
	getY: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1409
		return this._y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1410
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1411
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1412
	setY: function(y) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1413
		this._y = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1414
		this._owner[this._setter](this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1415
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1416
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1417
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1418
var Size = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1419
	_class: 'Size',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1420
	_readIndex: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1421
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1422
	initialize: function Size(arg0, arg1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1423
		var type = typeof arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1424
		if (type === 'number') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1425
			var hasHeight = typeof arg1 === 'number';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1426
			this.width = arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1427
			this.height = hasHeight ? arg1 : arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1428
			if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1429
				this.__read = hasHeight ? 2 : 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1430
		} else if (type === 'undefined' || arg0 === null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1431
			this.width = this.height = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1432
			if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1433
				this.__read = arg0 === null ? 1 : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1434
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1435
			if (Array.isArray(arg0)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1436
				this.width = arg0[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1437
				this.height = arg0.length > 1 ? arg0[1] : arg0[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1438
			} else if (arg0.width != null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1439
				this.width = arg0.width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1440
				this.height = arg0.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1441
			} else if (arg0.x != null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1442
				this.width = arg0.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1443
				this.height = arg0.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1444
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1445
				this.width = this.height = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1446
				if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1447
					this.__read = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1448
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1449
			if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1450
				this.__read = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1451
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1452
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1453
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1454
	set: function(width, height) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1455
		this.width = width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1456
		this.height = height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1457
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1458
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1459
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1460
	equals: function(size) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1461
		return size === this || size && (this.width === size.width
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1462
				&& this.height === size.height
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1463
				|| Array.isArray(size) && this.width === size[0]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1464
					&& this.height === size[1]) || false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1465
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1466
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1467
	clone: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1468
		return new Size(this.width, this.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1469
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1470
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1471
	toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1472
		var f = Formatter.instance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1473
		return '{ width: ' + f.number(this.width)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1474
				+ ', height: ' + f.number(this.height) + ' }';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1475
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1476
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1477
	_serialize: function(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1478
		var f = options.formatter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1479
		return [f.number(this.width),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1480
				f.number(this.height)];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1481
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1482
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1483
	add: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1484
		var size = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1485
		return new Size(this.width + size.width, this.height + size.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1486
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1487
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1488
	subtract: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1489
		var size = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1490
		return new Size(this.width - size.width, this.height - size.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1491
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1492
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1493
	multiply: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1494
		var size = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1495
		return new Size(this.width * size.width, this.height * size.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1496
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1497
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1498
	divide: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1499
		var size = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1500
		return new Size(this.width / size.width, this.height / size.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1501
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1502
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1503
	modulo: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1504
		var size = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1505
		return new Size(this.width % size.width, this.height % size.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1506
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1507
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1508
	negate: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1509
		return new Size(-this.width, -this.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1510
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1511
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1512
	isZero: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1513
		return Numerical.isZero(this.width) && Numerical.isZero(this.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1514
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1515
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1516
	isNaN: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1517
		return isNaN(this.width) || isNaN(this.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1518
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1519
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1520
	statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1521
		min: function(size1, size2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1522
			return new Size(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1523
				Math.min(size1.width, size2.width),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1524
				Math.min(size1.height, size2.height));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1525
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1526
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1527
		max: function(size1, size2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1528
			return new Size(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1529
				Math.max(size1.width, size2.width),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1530
				Math.max(size1.height, size2.height));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1531
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1532
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1533
		random: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1534
			return new Size(Math.random(), Math.random());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1535
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1536
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1537
}, Base.each(['round', 'ceil', 'floor', 'abs'], function(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1538
	var op = Math[name];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1539
	this[name] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1540
		return new Size(op(this.width), op(this.height));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1541
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1542
}, {}));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1543
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1544
var LinkedSize = Size.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1545
	initialize: function Size(width, height, owner, setter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1546
		this._width = width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1547
		this._height = height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1548
		this._owner = owner;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1549
		this._setter = setter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1550
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1551
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1552
	set: function(width, height, _dontNotify) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1553
		this._width = width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1554
		this._height = height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1555
		if (!_dontNotify)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1556
			this._owner[this._setter](this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1557
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1558
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1559
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1560
	getWidth: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1561
		return this._width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1562
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1563
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1564
	setWidth: function(width) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1565
		this._width = width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1566
		this._owner[this._setter](this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1567
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1568
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1569
	getHeight: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1570
		return this._height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1571
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1572
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1573
	setHeight: function(height) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1574
		this._height = height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1575
		this._owner[this._setter](this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1576
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1577
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1578
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1579
var Rectangle = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1580
	_class: 'Rectangle',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1581
	_readIndex: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1582
	beans: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1583
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1584
	initialize: function Rectangle(arg0, arg1, arg2, arg3) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1585
		var type = typeof arg0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1586
			read = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1587
		if (type === 'number') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1588
			this.x = arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1589
			this.y = arg1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1590
			this.width = arg2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1591
			this.height = arg3;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1592
			read = 4;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1593
		} else if (type === 'undefined' || arg0 === null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1594
			this.x = this.y = this.width = this.height = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1595
			read = arg0 === null ? 1 : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1596
		} else if (arguments.length === 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1597
			if (Array.isArray(arg0)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1598
				this.x = arg0[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1599
				this.y = arg0[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1600
				this.width = arg0[2];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1601
				this.height = arg0[3];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1602
				read = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1603
			} else if (arg0.x !== undefined || arg0.width !== undefined) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1604
				this.x = arg0.x || 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1605
				this.y = arg0.y || 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1606
				this.width = arg0.width || 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1607
				this.height = arg0.height || 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1608
				read = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1609
			} else if (arg0.from === undefined && arg0.to === undefined) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1610
				this.x = this.y = this.width = this.height = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1611
				this._set(arg0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1612
				read = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1613
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1614
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1615
		if (!read) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1616
			var point = Point.readNamed(arguments, 'from'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1617
				next = Base.peek(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1618
			this.x = point.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1619
			this.y = point.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1620
			if (next && next.x !== undefined || Base.hasNamed(arguments, 'to')) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1621
				var to = Point.readNamed(arguments, 'to');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1622
				this.width = to.x - point.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1623
				this.height = to.y - point.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1624
				if (this.width < 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1625
					this.x = to.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1626
					this.width = -this.width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1627
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1628
				if (this.height < 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1629
					this.y = to.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1630
					this.height = -this.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1631
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1632
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1633
				var size = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1634
				this.width = size.width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1635
				this.height = size.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1636
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1637
			read = arguments.__index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1638
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1639
		if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1640
			this.__read = read;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1641
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1642
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1643
	set: function(x, y, width, height) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1644
		this.x = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1645
		this.y = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1646
		this.width = width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1647
		this.height = height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1648
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1649
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1650
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1651
	clone: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1652
		return new Rectangle(this.x, this.y, this.width, this.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1653
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1654
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1655
	equals: function(rect) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1656
		var rt = Base.isPlainValue(rect)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1657
				? Rectangle.read(arguments)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1658
				: rect;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1659
		return rt === this
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1660
				|| rt && this.x === rt.x && this.y === rt.y
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1661
					&& this.width === rt.width && this.height === rt.height
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1662
				|| false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1663
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1664
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1665
	toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1666
		var f = Formatter.instance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1667
		return '{ x: ' + f.number(this.x)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1668
				+ ', y: ' + f.number(this.y)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1669
				+ ', width: ' + f.number(this.width)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1670
				+ ', height: ' + f.number(this.height)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1671
				+ ' }';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1672
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1673
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1674
	_serialize: function(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1675
		var f = options.formatter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1676
		return [f.number(this.x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1677
				f.number(this.y),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1678
				f.number(this.width),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1679
				f.number(this.height)];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1680
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1681
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1682
	getPoint: function(_dontLink) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1683
		var ctor = _dontLink ? Point : LinkedPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1684
		return new ctor(this.x, this.y, this, 'setPoint');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1685
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1686
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1687
	setPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1688
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1689
		this.x = point.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1690
		this.y = point.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1691
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1692
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1693
	getSize: function(_dontLink) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1694
		var ctor = _dontLink ? Size : LinkedSize;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1695
		return new ctor(this.width, this.height, this, 'setSize');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1696
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1697
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1698
	setSize: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1699
		var size = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1700
		if (this._fixX)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1701
			this.x += (this.width - size.width) * this._fixX;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1702
		if (this._fixY)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1703
			this.y += (this.height - size.height) * this._fixY;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1704
		this.width = size.width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1705
		this.height = size.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1706
		this._fixW = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1707
		this._fixH = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1708
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1709
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1710
	getLeft: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1711
		return this.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1712
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1713
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1714
	setLeft: function(left) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1715
		if (!this._fixW)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1716
			this.width -= left - this.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1717
		this.x = left;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1718
		this._fixX = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1719
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1720
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1721
	getTop: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1722
		return this.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1723
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1724
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1725
	setTop: function(top) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1726
		if (!this._fixH)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1727
			this.height -= top - this.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1728
		this.y = top;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1729
		this._fixY = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1730
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1731
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1732
	getRight: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1733
		return this.x + this.width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1734
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1735
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1736
	setRight: function(right) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1737
		if (this._fixX !== undefined && this._fixX !== 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1738
			this._fixW = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1739
		if (this._fixW)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1740
			this.x = right - this.width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1741
		else
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1742
			this.width = right - this.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1743
		this._fixX = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1744
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1745
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1746
	getBottom: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1747
		return this.y + this.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1748
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1749
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1750
	setBottom: function(bottom) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1751
		if (this._fixY !== undefined && this._fixY !== 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1752
			this._fixH = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1753
		if (this._fixH)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1754
			this.y = bottom - this.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1755
		else
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1756
			this.height = bottom - this.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1757
		this._fixY = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1758
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1759
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1760
	getCenterX: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1761
		return this.x + this.width * 0.5;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1762
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1763
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1764
	setCenterX: function(x) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1765
		this.x = x - this.width * 0.5;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1766
		this._fixX = 0.5;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1767
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1768
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1769
	getCenterY: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1770
		return this.y + this.height * 0.5;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1771
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1772
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1773
	setCenterY: function(y) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1774
		this.y = y - this.height * 0.5;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1775
		this._fixY = 0.5;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1776
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1777
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1778
	getCenter: function(_dontLink) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1779
		var ctor = _dontLink ? Point : LinkedPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1780
		return new ctor(this.getCenterX(), this.getCenterY(), this, 'setCenter');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1781
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1782
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1783
	setCenter: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1784
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1785
		this.setCenterX(point.x);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1786
		this.setCenterY(point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1787
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1788
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1789
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1790
	getArea: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1791
		return this.width * this.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1792
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1793
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1794
	isEmpty: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1795
		return this.width === 0 || this.height === 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1796
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1797
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1798
	contains: function(arg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1799
		return arg && arg.width !== undefined
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1800
				|| (Array.isArray(arg) ? arg : arguments).length == 4
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1801
				? this._containsRectangle(Rectangle.read(arguments))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1802
				: this._containsPoint(Point.read(arguments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1803
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1804
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1805
	_containsPoint: function(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1806
		var x = point.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1807
			y = point.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1808
		return x >= this.x && y >= this.y
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1809
				&& x <= this.x + this.width
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1810
				&& y <= this.y + this.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1811
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1812
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1813
	_containsRectangle: function(rect) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1814
		var x = rect.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1815
			y = rect.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1816
		return x >= this.x && y >= this.y
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1817
				&& x + rect.width <= this.x + this.width
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1818
				&& y + rect.height <= this.y + this.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1819
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1820
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1821
	intersects: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1822
		var rect = Rectangle.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1823
		return rect.x + rect.width > this.x
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1824
				&& rect.y + rect.height > this.y
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1825
				&& rect.x < this.x + this.width
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1826
				&& rect.y < this.y + this.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1827
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1828
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1829
	touches: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1830
		var rect = Rectangle.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1831
		return rect.x + rect.width >= this.x
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1832
				&& rect.y + rect.height >= this.y
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1833
				&& rect.x <= this.x + this.width
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1834
				&& rect.y <= this.y + this.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1835
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1836
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1837
	intersect: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1838
		var rect = Rectangle.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1839
			x1 = Math.max(this.x, rect.x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1840
			y1 = Math.max(this.y, rect.y),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1841
			x2 = Math.min(this.x + this.width, rect.x + rect.width),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1842
			y2 = Math.min(this.y + this.height, rect.y + rect.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1843
		return new Rectangle(x1, y1, x2 - x1, y2 - y1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1844
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1845
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1846
	unite: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1847
		var rect = Rectangle.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1848
			x1 = Math.min(this.x, rect.x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1849
			y1 = Math.min(this.y, rect.y),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1850
			x2 = Math.max(this.x + this.width, rect.x + rect.width),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1851
			y2 = Math.max(this.y + this.height, rect.y + rect.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1852
		return new Rectangle(x1, y1, x2 - x1, y2 - y1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1853
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1854
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1855
	include: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1856
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1857
		var x1 = Math.min(this.x, point.x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1858
			y1 = Math.min(this.y, point.y),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1859
			x2 = Math.max(this.x + this.width, point.x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1860
			y2 = Math.max(this.y + this.height, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1861
		return new Rectangle(x1, y1, x2 - x1, y2 - y1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1862
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1863
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1864
	expand: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1865
		var amount = Size.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1866
			hor = amount.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1867
			ver = amount.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1868
		return new Rectangle(this.x - hor / 2, this.y - ver / 2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1869
				this.width + hor, this.height + ver);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1870
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1871
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1872
	scale: function(hor, ver) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1873
		return this.expand(this.width * hor - this.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1874
				this.height * (ver === undefined ? hor : ver) - this.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1875
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1876
}, Base.each([
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1877
		['Top', 'Left'], ['Top', 'Right'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1878
		['Bottom', 'Left'], ['Bottom', 'Right'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1879
		['Left', 'Center'], ['Top', 'Center'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1880
		['Right', 'Center'], ['Bottom', 'Center']
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1881
	],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1882
	function(parts, index) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1883
		var part = parts.join('');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1884
		var xFirst = /^[RL]/.test(part);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1885
		if (index >= 4)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1886
			parts[1] += xFirst ? 'Y' : 'X';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1887
		var x = parts[xFirst ? 0 : 1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1888
			y = parts[xFirst ? 1 : 0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1889
			getX = 'get' + x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1890
			getY = 'get' + y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1891
			setX = 'set' + x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1892
			setY = 'set' + y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1893
			get = 'get' + part,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1894
			set = 'set' + part;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1895
		this[get] = function(_dontLink) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1896
			var ctor = _dontLink ? Point : LinkedPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1897
			return new ctor(this[getX](), this[getY](), this, set);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1898
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1899
		this[set] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1900
			var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1901
			this[setX](point.x);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1902
			this[setY](point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1903
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1904
	}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1905
		beans: true
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1906
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1907
));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1908
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1909
var LinkedRectangle = Rectangle.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1910
	initialize: function Rectangle(x, y, width, height, owner, setter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1911
		this.set(x, y, width, height, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1912
		this._owner = owner;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1913
		this._setter = setter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1914
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1915
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1916
	set: function(x, y, width, height, _dontNotify) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1917
		this._x = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1918
		this._y = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1919
		this._width = width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1920
		this._height = height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1921
		if (!_dontNotify)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1922
			this._owner[this._setter](this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1923
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1924
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1925
}, new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1926
	var proto = Rectangle.prototype;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1927
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1928
	return Base.each(['x', 'y', 'width', 'height'], function(key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1929
		var part = Base.capitalize(key);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1930
		var internal = '_' + key;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1931
		this['get' + part] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1932
			return this[internal];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1933
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1934
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1935
		this['set' + part] = function(value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1936
			this[internal] = value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1937
			if (!this._dontNotify)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1938
				this._owner[this._setter](this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1939
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1940
	}, Base.each(['Point', 'Size', 'Center',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1941
			'Left', 'Top', 'Right', 'Bottom', 'CenterX', 'CenterY',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1942
			'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1943
			'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1944
		function(key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1945
			var name = 'set' + key;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1946
			this[name] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1947
				this._dontNotify = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1948
				proto[name].apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1949
				this._dontNotify = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1950
				this._owner[this._setter](this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1951
			};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1952
		}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1953
			isSelected: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1954
				return this._owner._boundsSelected;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1955
			},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1956
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1957
			setSelected: function(selected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1958
				var owner = this._owner;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1959
				if (owner.setSelected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1960
					owner._boundsSelected = selected;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1961
					owner.setSelected(selected || owner._selectedSegmentState > 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1962
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1963
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1964
		})
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1965
	);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1966
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1967
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1968
var Matrix = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1969
	_class: 'Matrix',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1970
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1971
	initialize: function Matrix(arg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1972
		var count = arguments.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1973
			ok = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1974
		if (count === 6) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1975
			this.set.apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1976
		} else if (count === 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1977
			if (arg instanceof Matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1978
				this.set(arg._a, arg._c, arg._b, arg._d, arg._tx, arg._ty);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1979
			} else if (Array.isArray(arg)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1980
				this.set.apply(this, arg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1981
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1982
				ok = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1983
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1984
		} else if (count === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1985
			this.reset();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1986
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1987
			ok = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1988
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1989
		if (!ok)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1990
			throw new Error('Unsupported matrix parameters');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1991
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1992
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1993
	set: function(a, c, b, d, tx, ty, _dontNotify) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1994
		this._a = a;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1995
		this._c = c;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1996
		this._b = b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1997
		this._d = d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1998
		this._tx = tx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  1999
		this._ty = ty;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2000
		if (!_dontNotify)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2001
			this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2002
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2003
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2004
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2005
	_serialize: function(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2006
		return Base.serialize(this.getValues(), options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2007
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2008
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2009
	_changed: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2010
		var owner = this._owner;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2011
		if (owner) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2012
			if (owner._applyMatrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2013
				owner.transform(null, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2014
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2015
				owner._changed(9);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2016
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2017
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2018
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2019
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2020
	clone: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2021
		return new Matrix(this._a, this._c, this._b, this._d,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2022
				this._tx, this._ty);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2023
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2024
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2025
	equals: function(mx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2026
		return mx === this || mx && this._a === mx._a && this._b === mx._b
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2027
				&& this._c === mx._c && this._d === mx._d
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2028
				&& this._tx === mx._tx && this._ty === mx._ty
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2029
				|| false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2030
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2031
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2032
	toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2033
		var f = Formatter.instance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2034
		return '[[' + [f.number(this._a), f.number(this._b),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2035
					f.number(this._tx)].join(', ') + '], ['
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2036
				+ [f.number(this._c), f.number(this._d),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2037
					f.number(this._ty)].join(', ') + ']]';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2038
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2039
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2040
	reset: function(_dontNotify) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2041
		this._a = this._d = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2042
		this._c = this._b = this._tx = this._ty = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2043
		if (!_dontNotify)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2044
			this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2045
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2046
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2047
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2048
	apply: function(recursively, _setApplyMatrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2049
		var owner = this._owner;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2050
		if (owner) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2051
			owner.transform(null, true, Base.pick(recursively, true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2052
					_setApplyMatrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2053
			return this.isIdentity();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2054
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2055
		return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2056
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2057
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2058
	translate: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2059
		var point = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2060
			x = point.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2061
			y = point.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2062
		this._tx += x * this._a + y * this._b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2063
		this._ty += x * this._c + y * this._d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2064
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2065
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2066
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2067
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2068
	scale: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2069
		var scale = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2070
			center = Point.read(arguments, 0, { readNull: true });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2071
		if (center)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2072
			this.translate(center);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2073
		this._a *= scale.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2074
		this._c *= scale.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2075
		this._b *= scale.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2076
		this._d *= scale.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2077
		if (center)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2078
			this.translate(center.negate());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2079
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2080
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2081
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2082
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2083
	rotate: function(angle ) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2084
		angle *= Math.PI / 180;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2085
		var center = Point.read(arguments, 1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2086
			x = center.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2087
			y = center.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2088
			cos = Math.cos(angle),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2089
			sin = Math.sin(angle),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2090
			tx = x - x * cos + y * sin,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2091
			ty = y - x * sin - y * cos,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2092
			a = this._a,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2093
			b = this._b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2094
			c = this._c,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2095
			d = this._d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2096
		this._a = cos * a + sin * b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2097
		this._b = -sin * a + cos * b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2098
		this._c = cos * c + sin * d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2099
		this._d = -sin * c + cos * d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2100
		this._tx += tx * a + ty * b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2101
		this._ty += tx * c + ty * d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2102
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2103
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2104
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2105
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2106
	shear: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2107
		var shear = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2108
			center = Point.read(arguments, 0, { readNull: true });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2109
		if (center)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2110
			this.translate(center);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2111
		var a = this._a,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2112
			c = this._c;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2113
		this._a += shear.y * this._b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2114
		this._c += shear.y * this._d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2115
		this._b += shear.x * a;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2116
		this._d += shear.x * c;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2117
		if (center)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2118
			this.translate(center.negate());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2119
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2120
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2121
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2122
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2123
	skew: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2124
		var skew = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2125
			center = Point.read(arguments, 0, { readNull: true }),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2126
			toRadians = Math.PI / 180,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2127
			shear = new Point(Math.tan(skew.x * toRadians),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2128
				Math.tan(skew.y * toRadians));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2129
		return this.shear(shear, center);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2130
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2131
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2132
	concatenate: function(mx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2133
		var a1 = this._a,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2134
			b1 = this._b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2135
			c1 = this._c,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2136
			d1 = this._d,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2137
			a2 = mx._a,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2138
			b2 = mx._b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2139
			c2 = mx._c,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2140
			d2 = mx._d,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2141
			tx2 = mx._tx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2142
			ty2 = mx._ty;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2143
		this._a = a2 * a1 + c2 * b1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2144
		this._b = b2 * a1 + d2 * b1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2145
		this._c = a2 * c1 + c2 * d1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2146
		this._d = b2 * c1 + d2 * d1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2147
		this._tx += tx2 * a1 + ty2 * b1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2148
		this._ty += tx2 * c1 + ty2 * d1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2149
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2150
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2151
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2152
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2153
	preConcatenate: function(mx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2154
		var a1 = this._a,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2155
			b1 = this._b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2156
			c1 = this._c,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2157
			d1 = this._d,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2158
			tx1 = this._tx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2159
			ty1 = this._ty,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2160
			a2 = mx._a,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2161
			b2 = mx._b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2162
			c2 = mx._c,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2163
			d2 = mx._d,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2164
			tx2 = mx._tx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2165
			ty2 = mx._ty;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2166
		this._a = a2 * a1 + b2 * c1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2167
		this._b = a2 * b1 + b2 * d1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2168
		this._c = c2 * a1 + d2 * c1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2169
		this._d = c2 * b1 + d2 * d1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2170
		this._tx = a2 * tx1 + b2 * ty1 + tx2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2171
		this._ty = c2 * tx1 + d2 * ty1 + ty2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2172
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2173
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2174
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2175
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2176
	chain: function(mx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2177
		var a1 = this._a,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2178
			b1 = this._b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2179
			c1 = this._c,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2180
			d1 = this._d,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2181
			tx1 = this._tx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2182
			ty1 = this._ty,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2183
			a2 = mx._a,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2184
			b2 = mx._b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2185
			c2 = mx._c,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2186
			d2 = mx._d,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2187
			tx2 = mx._tx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2188
			ty2 = mx._ty;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2189
		return new Matrix(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2190
				a2 * a1 + c2 * b1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2191
				a2 * c1 + c2 * d1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2192
				b2 * a1 + d2 * b1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2193
				b2 * c1 + d2 * d1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2194
				tx1 + tx2 * a1 + ty2 * b1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2195
				ty1 + tx2 * c1 + ty2 * d1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2196
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2197
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2198
	isIdentity: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2199
		return this._a === 1 && this._c === 0 && this._b === 0 && this._d === 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2200
				&& this._tx === 0 && this._ty === 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2201
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2202
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2203
	orNullIfIdentity: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2204
		return this.isIdentity() ? null : this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2205
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2206
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2207
	isInvertible: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2208
		return !!this._getDeterminant();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2209
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2210
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2211
	isSingular: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2212
		return !this._getDeterminant();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2213
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2214
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2215
	transform: function( src, dst, count) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2216
		return arguments.length < 3
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2217
			? this._transformPoint(Point.read(arguments))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2218
			: this._transformCoordinates(src, dst, count);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2219
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2220
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2221
	_transformPoint: function(point, dest, _dontNotify) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2222
		var x = point.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2223
			y = point.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2224
		if (!dest)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2225
			dest = new Point();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2226
		return dest.set(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2227
			x * this._a + y * this._b + this._tx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2228
			x * this._c + y * this._d + this._ty,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2229
			_dontNotify
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2230
		);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2231
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2232
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2233
	_transformCoordinates: function(src, dst, count) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2234
		var i = 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2235
			j = 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2236
			max = 2 * count;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2237
		while (i < max) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2238
			var x = src[i++],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2239
				y = src[i++];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2240
			dst[j++] = x * this._a + y * this._b + this._tx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2241
			dst[j++] = x * this._c + y * this._d + this._ty;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2242
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2243
		return dst;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2244
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2245
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2246
	_transformCorners: function(rect) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2247
		var x1 = rect.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2248
			y1 = rect.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2249
			x2 = x1 + rect.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2250
			y2 = y1 + rect.height,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2251
			coords = [ x1, y1, x2, y1, x2, y2, x1, y2 ];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2252
		return this._transformCoordinates(coords, coords, 4);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2253
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2254
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2255
	_transformBounds: function(bounds, dest, _dontNotify) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2256
		var coords = this._transformCorners(bounds),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2257
			min = coords.slice(0, 2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2258
			max = coords.slice();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2259
		for (var i = 2; i < 8; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2260
			var val = coords[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2261
				j = i & 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2262
			if (val < min[j])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2263
				min[j] = val;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2264
			else if (val > max[j])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2265
				max[j] = val;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2266
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2267
		if (!dest)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2268
			dest = new Rectangle();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2269
		return dest.set(min[0], min[1], max[0] - min[0], max[1] - min[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2270
				_dontNotify);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2271
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2272
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2273
	inverseTransform: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2274
		return this._inverseTransform(Point.read(arguments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2275
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2276
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2277
	_getDeterminant: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2278
		var det = this._a * this._d - this._b * this._c;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2279
		return isFinite(det) && !Numerical.isZero(det)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2280
				&& isFinite(this._tx) && isFinite(this._ty)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2281
				? det : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2282
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2283
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2284
	_inverseTransform: function(point, dest, _dontNotify) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2285
		var det = this._getDeterminant();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2286
		if (!det)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2287
			return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2288
		var x = point.x - this._tx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2289
			y = point.y - this._ty;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2290
		if (!dest)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2291
			dest = new Point();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2292
		return dest.set(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2293
			(x * this._d - y * this._b) / det,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2294
			(y * this._a - x * this._c) / det,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2295
			_dontNotify
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2296
		);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2297
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2298
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2299
	decompose: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2300
		var a = this._a, b = this._b, c = this._c, d = this._d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2301
		if (Numerical.isZero(a * d - b * c))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2302
			return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2303
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2304
		var scaleX = Math.sqrt(a * a + b * b);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2305
		a /= scaleX;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2306
		b /= scaleX;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2307
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2308
		var shear = a * c + b * d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2309
		c -= a * shear;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2310
		d -= b * shear;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2311
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2312
		var scaleY = Math.sqrt(c * c + d * d);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2313
		c /= scaleY;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2314
		d /= scaleY;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2315
		shear /= scaleY;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2316
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2317
		if (a * d < b * c) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2318
			a = -a;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2319
			b = -b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2320
			shear = -shear;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2321
			scaleX = -scaleX;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2322
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2323
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2324
		return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2325
			scaling: new Point(scaleX, scaleY),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2326
			rotation: -Math.atan2(b, a) * 180 / Math.PI,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2327
			shearing: shear
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2328
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2329
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2330
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2331
	getValues: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2332
		return [ this._a, this._c, this._b, this._d, this._tx, this._ty ];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2333
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2334
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2335
	getTranslation: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2336
		return new Point(this._tx, this._ty);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2337
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2338
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2339
	getScaling: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2340
		return (this.decompose() || {}).scaling;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2341
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2342
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2343
	getRotation: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2344
		return (this.decompose() || {}).rotation;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2345
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2346
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2347
	inverted: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2348
		var det = this._getDeterminant();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2349
		return det && new Matrix(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2350
				this._d / det,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2351
				-this._c / det,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2352
				-this._b / det,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2353
				this._a / det,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2354
				(this._b * this._ty - this._d * this._tx) / det,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2355
				(this._c * this._tx - this._a * this._ty) / det);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2356
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2357
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2358
	shiftless: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2359
		return new Matrix(this._a, this._c, this._b, this._d, 0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2360
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2361
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2362
	applyToContext: function(ctx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2363
		ctx.transform(this._a, this._c, this._b, this._d, this._tx, this._ty);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2364
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2365
}, Base.each(['a', 'c', 'b', 'd', 'tx', 'ty'], function(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2366
	var part = Base.capitalize(name),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2367
		prop = '_' + name;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2368
	this['get' + part] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2369
		return this[prop];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2370
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2371
	this['set' + part] = function(value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2372
		this[prop] = value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2373
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2374
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2375
}, {}));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2376
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2377
var Line = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2378
	_class: 'Line',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2379
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2380
	initialize: function Line(arg0, arg1, arg2, arg3, arg4) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2381
		var asVector = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2382
		if (arguments.length >= 4) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2383
			this._px = arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2384
			this._py = arg1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2385
			this._vx = arg2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2386
			this._vy = arg3;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2387
			asVector = arg4;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2388
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2389
			this._px = arg0.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2390
			this._py = arg0.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2391
			this._vx = arg1.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2392
			this._vy = arg1.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2393
			asVector = arg2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2394
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2395
		if (!asVector) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2396
			this._vx -= this._px;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2397
			this._vy -= this._py;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2398
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2399
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2400
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2401
	getPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2402
		return new Point(this._px, this._py);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2403
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2404
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2405
	getVector: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2406
		return new Point(this._vx, this._vy);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2407
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2408
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2409
	getLength: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2410
		return this.getVector().getLength();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2411
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2412
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2413
	intersect: function(line, isInfinite) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2414
		return Line.intersect(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2415
				this._px, this._py, this._vx, this._vy,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2416
				line._px, line._py, line._vx, line._vy,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2417
				true, isInfinite);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2418
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2419
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2420
	getSide: function(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2421
		return Line.getSide(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2422
				this._px, this._py, this._vx, this._vy,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2423
				point.x, point.y, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2424
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2425
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2426
	getDistance: function(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2427
		return Math.abs(Line.getSignedDistance(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2428
				this._px, this._py, this._vx, this._vy,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2429
				point.x, point.y, true));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2430
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2431
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2432
	statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2433
		intersect: function(apx, apy, avx, avy, bpx, bpy, bvx, bvy, asVector,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2434
				isInfinite) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2435
			if (!asVector) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2436
				avx -= apx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2437
				avy -= apy;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2438
				bvx -= bpx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2439
				bvy -= bpy;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2440
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2441
			var cross = avx * bvy - avy * bvx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2442
			if (!Numerical.isZero(cross)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2443
				var dx = apx - bpx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2444
					dy = apy - bpy,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2445
					ta = (bvx * dy - bvy * dx) / cross,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2446
					tb = (avx * dy - avy * dx) / cross;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2447
				if (isInfinite || 0 <= ta && ta <= 1 && 0 <= tb && tb <= 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2448
					return new Point(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2449
								apx + ta * avx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2450
								apy + ta * avy);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2451
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2452
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2453
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2454
		getSide: function(px, py, vx, vy, x, y, asVector) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2455
			if (!asVector) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2456
				vx -= px;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2457
				vy -= py;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2458
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2459
			var v2x = x - px,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2460
				v2y = y - py,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2461
				ccw = v2x * vy - v2y * vx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2462
			if (ccw === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2463
				ccw = v2x * vx + v2y * vy;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2464
				if (ccw > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2465
					v2x -= vx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2466
					v2y -= vy;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2467
					ccw = v2x * vx + v2y * vy;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2468
					if (ccw < 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2469
						ccw = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2470
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2471
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2472
			return ccw < 0 ? -1 : ccw > 0 ? 1 : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2473
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2474
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2475
		getSignedDistance: function(px, py, vx, vy, x, y, asVector) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2476
			if (!asVector) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2477
				vx -= px;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2478
				vy -= py;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2479
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2480
			return Numerical.isZero(vx)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2481
					? vy >= 0 ? px - x : x - px
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2482
					: Numerical.isZero(vy)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2483
						? vx >= 0 ? y - py : py - y
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2484
						: (vx * (y - py) - vy * (x - px)) / Math.sqrt(vx * vx + vy * vy);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2485
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2486
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2487
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2488
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2489
var Project = PaperScopeItem.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2490
	_class: 'Project',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2491
	_list: 'projects',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2492
	_reference: 'project',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2493
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2494
	initialize: function Project(element) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2495
		PaperScopeItem.call(this, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2496
		this.layers = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2497
		this._activeLayer = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2498
		this.symbols = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2499
		this._currentStyle = new Style(null, null, this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2500
		this._view = View.create(this,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2501
				element || CanvasProvider.getCanvas(1, 1));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2502
		this._selectedItems = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2503
		this._selectedItemCount = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2504
		this._updateVersion = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2505
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2506
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2507
	_serialize: function(options, dictionary) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2508
		return Base.serialize(this.layers, options, true, dictionary);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2509
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2510
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2511
	clear: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2512
		for (var i = this.layers.length - 1; i >= 0; i--)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2513
			this.layers[i].remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2514
		this.symbols = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2515
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2516
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2517
	isEmpty: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2518
		return this.layers.length === 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2519
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2520
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2521
	remove: function remove() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2522
		if (!remove.base.call(this))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2523
			return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2524
		if (this._view)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2525
			this._view.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2526
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2527
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2528
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2529
	getView: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2530
		return this._view;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2531
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2532
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2533
	getCurrentStyle: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2534
		return this._currentStyle;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2535
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2536
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2537
	setCurrentStyle: function(style) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2538
		this._currentStyle.initialize(style);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2539
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2540
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2541
	getIndex: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2542
		return this._index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2543
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2544
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2545
	getOptions: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2546
		return this._scope.settings;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2547
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2548
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2549
	getActiveLayer: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2550
		return this._activeLayer || new Layer({ project: this });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2551
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2552
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2553
	getSelectedItems: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2554
		var items = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2555
		for (var id in this._selectedItems) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2556
			var item = this._selectedItems[id];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2557
			if (item.isInserted())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2558
				items.push(item);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2559
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2560
		return items;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2561
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2562
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2563
	insertChild: function(index, item, _preserve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2564
		if (item instanceof Layer) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2565
			item._remove(false, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2566
			Base.splice(this.layers, [item], index, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2567
			item._setProject(this, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2568
			if (this._changes)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2569
				item._changed(5);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2570
			if (!this._activeLayer)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2571
				this._activeLayer = item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2572
		} else if (item instanceof Item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2573
			(this._activeLayer
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2574
				|| this.insertChild(index, new Layer(Item.NO_INSERT)))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2575
					.insertChild(index, item, _preserve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2576
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2577
			item = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2578
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2579
		return item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2580
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2581
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2582
	addChild: function(item, _preserve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2583
		return this.insertChild(undefined, item, _preserve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2584
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2585
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2586
	_updateSelection: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2587
		var id = item._id,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2588
			selectedItems = this._selectedItems;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2589
		if (item._selected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2590
			if (selectedItems[id] !== item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2591
				this._selectedItemCount++;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2592
				selectedItems[id] = item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2593
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2594
		} else if (selectedItems[id] === item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2595
			this._selectedItemCount--;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2596
			delete selectedItems[id];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2597
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2598
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2599
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2600
	selectAll: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2601
		var layers = this.layers;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2602
		for (var i = 0, l = layers.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2603
			layers[i].setFullySelected(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2604
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2605
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2606
	deselectAll: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2607
		var selectedItems = this._selectedItems;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2608
		for (var i in selectedItems)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2609
			selectedItems[i].setFullySelected(false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2610
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2611
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2612
	hitTest: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2613
		var point = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2614
			options = HitResult.getOptions(Base.read(arguments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2615
		for (var i = this.layers.length - 1; i >= 0; i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2616
			var res = this.layers[i]._hitTest(point, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2617
			if (res) return res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2618
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2619
		return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2620
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2621
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2622
	getItems: function(match) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2623
		return Item._getItems(this.layers, match);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2624
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2625
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2626
	getItem: function(match) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2627
		return Item._getItems(this.layers, match, null, null, true)[0] || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2628
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2629
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2630
	importJSON: function(json) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2631
		this.activate();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2632
		var layer = this._activeLayer;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2633
		return Base.importJSON(json, layer && layer.isEmpty() && layer);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2634
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2635
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2636
	draw: function(ctx, matrix, pixelRatio) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2637
		this._updateVersion++;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2638
		ctx.save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2639
		matrix.applyToContext(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2640
		var param = new Base({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2641
			offset: new Point(0, 0),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2642
			pixelRatio: pixelRatio,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2643
			viewMatrix: matrix.isIdentity() ? null : matrix,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2644
			matrices: [new Matrix()],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2645
			updateMatrix: true
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2646
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2647
		for (var i = 0, layers = this.layers, l = layers.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2648
			layers[i].draw(ctx, param);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2649
		ctx.restore();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2650
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2651
		if (this._selectedItemCount > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2652
			ctx.save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2653
			ctx.strokeWidth = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2654
			var items = this._selectedItems,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2655
				size = this._scope.settings.handleSize,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2656
				version = this._updateVersion;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2657
			for (var id in items)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2658
				items[id]._drawSelection(ctx, matrix, size, items, version);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2659
			ctx.restore();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2660
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2661
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2662
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2663
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2664
var Symbol = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2665
	_class: 'Symbol',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2666
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2667
	initialize: function Symbol(item, dontCenter) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  2668
		this._id = UID.get();
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2669
		this.project = paper.project;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2670
		this.project.symbols.push(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2671
		if (item)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2672
			this.setDefinition(item, dontCenter);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2673
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2674
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2675
	_serialize: function(options, dictionary) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2676
		return dictionary.add(this, function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2677
			return Base.serialize([this._class, this._definition],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2678
					options, false, dictionary);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2679
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2680
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2681
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2682
	_changed: function(flags) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2683
		if (flags & 8) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2684
			Item._clearBoundsCache(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2685
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2686
		if (flags & 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2687
			this.project._needsUpdate = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2688
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2689
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2690
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2691
	getDefinition: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2692
		return this._definition;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2693
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2694
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2695
	setDefinition: function(item, _dontCenter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2696
		if (item._parentSymbol)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2697
			item = item.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2698
		if (this._definition)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2699
			this._definition._parentSymbol = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2700
		this._definition = item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2701
		item.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2702
		item.setSelected(false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2703
		if (!_dontCenter)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2704
			item.setPosition(new Point());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2705
		item._parentSymbol = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2706
		this._changed(9);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2707
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2708
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2709
	place: function(position) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2710
		return new PlacedSymbol(this, position);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2711
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2712
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2713
	clone: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2714
		return new Symbol(this._definition.clone(false));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2715
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2716
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2717
	equals: function(symbol) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2718
		return symbol === this
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2719
				|| symbol && this.definition.equals(symbol.definition)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2720
				|| false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2721
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2722
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2723
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2724
var Item = Base.extend(Emitter, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2725
	statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2726
		extend: function extend(src) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2727
			if (src._serializeFields)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2728
				src._serializeFields = new Base(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2729
						this.prototype._serializeFields, src._serializeFields);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2730
			return extend.base.apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2731
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2732
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2733
		NO_INSERT: { insert: false }
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2734
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2735
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2736
	_class: 'Item',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2737
	_applyMatrix: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2738
	_canApplyMatrix: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2739
	_boundsSelected: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2740
	_selectChildren: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2741
	_serializeFields: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2742
		name: null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2743
		applyMatrix: null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2744
		matrix: new Matrix(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2745
		pivot: null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2746
		locked: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2747
		visible: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2748
		blendMode: 'normal',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2749
		opacity: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2750
		guide: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2751
		selected: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2752
		clipMask: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2753
		data: {}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2754
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2755
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2756
	initialize: function Item() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2757
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2758
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2759
	_initialize: function(props, point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2760
		var hasProps = props && Base.isPlainObject(props),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2761
			internal = hasProps && props.internal === true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2762
			matrix = this._matrix = new Matrix(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2763
			project = hasProps && props.project || paper.project;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2764
		if (!internal)
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  2765
			this._id = UID.get();
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2766
		this._applyMatrix = this._canApplyMatrix && paper.settings.applyMatrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2767
		if (point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2768
			matrix.translate(point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2769
		matrix._owner = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2770
		this._style = new Style(project._currentStyle, this, project);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2771
		if (!this._project) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2772
			if (internal || hasProps && props.insert === false) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2773
				this._setProject(project);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2774
			} else if (hasProps && props.parent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2775
				this.setParent(props.parent);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2776
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2777
				(project._activeLayer || new Layer()).addChild(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2778
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2779
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2780
		if (hasProps && props !== Item.NO_INSERT)
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  2781
			this._set(props, { insert: true, project: true, parent: true },
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  2782
					true);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2783
		return hasProps;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2784
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2785
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2786
	_events: new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2787
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2788
		var mouseFlags = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2789
			mousedown: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2790
				mousedown: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2791
				mousedrag: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2792
				click: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2793
				doubleclick: 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2794
			},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2795
			mouseup: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2796
				mouseup: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2797
				mousedrag: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2798
				click: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2799
				doubleclick: 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2800
			},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2801
			mousemove: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2802
				mousedrag: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2803
				mousemove: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2804
				mouseenter: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2805
				mouseleave: 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2806
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2807
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2808
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2809
		var mouseEvent = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2810
			install: function(type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2811
				var counters = this.getView()._eventCounters;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2812
				if (counters) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2813
					for (var key in mouseFlags) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2814
						counters[key] = (counters[key] || 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2815
								+ (mouseFlags[key][type] || 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2816
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2817
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2818
			},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2819
			uninstall: function(type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2820
				var counters = this.getView()._eventCounters;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2821
				if (counters) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2822
					for (var key in mouseFlags)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2823
						counters[key] -= mouseFlags[key][type] || 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2824
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2825
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2826
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2827
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2828
		return Base.each(['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onClick',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2829
			'onDoubleClick', 'onMouseMove', 'onMouseEnter', 'onMouseLeave'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2830
			function(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2831
				this[name] = mouseEvent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2832
			}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2833
				onFrame: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2834
					install: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2835
						this._animateItem(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2836
					},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2837
					uninstall: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2838
						this._animateItem(false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2839
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2840
				},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2841
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2842
				onLoad: {}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2843
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2844
		);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2845
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2846
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2847
	_animateItem: function(animate) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2848
		this.getView()._animateItem(this, animate);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2849
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2850
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2851
	_serialize: function(options, dictionary) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2852
		var props = {},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2853
			that = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2854
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2855
		function serialize(fields) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2856
			for (var key in fields) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2857
				var value = that[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2858
				if (!Base.equals(value, key === 'leading'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2859
						? fields.fontSize * 1.2 : fields[key])) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2860
					props[key] = Base.serialize(value, options,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2861
							key !== 'data', dictionary);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2862
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2863
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2864
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2865
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2866
		serialize(this._serializeFields);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2867
		if (!(this instanceof Group))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2868
			serialize(this._style._defaults);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2869
		return [ this._class, props ];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2870
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2871
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2872
	_changed: function(flags) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2873
		var symbol = this._parentSymbol,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2874
			cacheParent = this._parent || symbol,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2875
			project = this._project;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2876
		if (flags & 8) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2877
			this._bounds = this._position = this._decomposed =
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2878
					this._globalMatrix = this._currentPath = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2879
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2880
		if (cacheParent
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2881
				&& (flags & 40)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2882
			Item._clearBoundsCache(cacheParent);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2883
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2884
		if (flags & 2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2885
			Item._clearBoundsCache(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2886
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2887
		if (project) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2888
			if (flags & 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2889
				project._needsUpdate = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2890
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2891
			if (project._changes) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2892
				var entry = project._changesById[this._id];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2893
				if (entry) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2894
					entry.flags |= flags;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2895
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2896
					entry = { item: this, flags: flags };
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2897
					project._changesById[this._id] = entry;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2898
					project._changes.push(entry);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2899
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2900
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2901
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2902
		if (symbol)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2903
			symbol._changed(flags);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2904
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2905
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2906
	set: function(props) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2907
		if (props)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2908
			this._set(props);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2909
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2910
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2911
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2912
	getId: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2913
		return this._id;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2914
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2915
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2916
	getName: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2917
		return this._name;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2918
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2919
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2920
	setName: function(name, unique) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2921
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2922
		if (this._name)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2923
			this._removeNamed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2924
		if (name === (+name) + '')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2925
			throw new Error(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2926
					'Names consisting only of numbers are not supported.');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2927
		var parent = this._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2928
		if (name && parent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2929
			var children = parent._children,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2930
				namedChildren = parent._namedChildren,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2931
				orig = name,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2932
				i = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2933
			while (unique && children[name])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2934
				name = orig + ' ' + (i++);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2935
			(namedChildren[name] = namedChildren[name] || []).push(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2936
			children[name] = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2937
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2938
		this._name = name || undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2939
		this._changed(128);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2940
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2941
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2942
	getStyle: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2943
		return this._style;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2944
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2945
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2946
	setStyle: function(style) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2947
		this.getStyle().set(style);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2948
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2949
}, Base.each(['locked', 'visible', 'blendMode', 'opacity', 'guide'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2950
	function(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2951
		var part = Base.capitalize(name),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2952
			name = '_' + name;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2953
		this['get' + part] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2954
			return this[name];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2955
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2956
		this['set' + part] = function(value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2957
			if (value != this[name]) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2958
				this[name] = value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2959
				this._changed(name === '_locked'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2960
						? 128 : 129);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2961
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2962
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2963
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2964
{}), {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2965
	beans: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2966
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2967
	_locked: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2968
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2969
	_visible: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2970
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2971
	_blendMode: 'normal',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2972
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2973
	_opacity: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2974
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2975
	_guide: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2976
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2977
	isSelected: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2978
		if (this._selectChildren) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2979
			var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2980
			for (var i = 0, l = children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2981
				if (children[i].isSelected())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2982
					return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2983
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2984
		return this._selected;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2985
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2986
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2987
	setSelected: function(selected, noChildren) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2988
		if (!noChildren && this._selectChildren) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2989
			var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2990
			for (var i = 0, l = children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2991
				children[i].setSelected(selected);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2992
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2993
		if ((selected = !!selected) ^ this._selected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2994
			this._selected = selected;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2995
			this._project._updateSelection(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2996
			this._changed(129);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2997
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2998
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  2999
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3000
	_selected: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3001
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3002
	isFullySelected: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3003
		var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3004
		if (children && this._selected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3005
			for (var i = 0, l = children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3006
				if (!children[i].isFullySelected())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3007
					return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3008
			return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3009
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3010
		return this._selected;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3011
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3012
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3013
	setFullySelected: function(selected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3014
		var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3015
		if (children) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3016
			for (var i = 0, l = children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3017
				children[i].setFullySelected(selected);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3018
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3019
		this.setSelected(selected, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3020
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3021
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3022
	isClipMask: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3023
		return this._clipMask;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3024
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3025
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3026
	setClipMask: function(clipMask) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3027
		if (this._clipMask != (clipMask = !!clipMask)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3028
			this._clipMask = clipMask;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3029
			if (clipMask) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3030
				this.setFillColor(null);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3031
				this.setStrokeColor(null);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3032
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3033
			this._changed(129);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3034
			if (this._parent)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3035
				this._parent._changed(1024);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3036
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3037
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3038
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3039
	_clipMask: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3040
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3041
	getData: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3042
		if (!this._data)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3043
			this._data = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3044
		return this._data;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3045
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3046
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3047
	setData: function(data) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3048
		this._data = data;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3049
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3050
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3051
	getPosition: function(_dontLink) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3052
		var position = this._position,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3053
			ctor = _dontLink ? Point : LinkedPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3054
		if (!position) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3055
			var pivot = this._pivot;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3056
			position = this._position = pivot
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3057
					? this._matrix._transformPoint(pivot)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3058
					: this.getBounds().getCenter(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3059
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3060
		return new ctor(position.x, position.y, this, 'setPosition');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3061
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3062
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3063
	setPosition: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3064
		this.translate(Point.read(arguments).subtract(this.getPosition(true)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3065
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3066
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3067
	getPivot: function(_dontLink) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3068
		var pivot = this._pivot;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3069
		if (pivot) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3070
			var ctor = _dontLink ? Point : LinkedPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3071
			pivot = new ctor(pivot.x, pivot.y, this, 'setPivot');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3072
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3073
		return pivot;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3074
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3075
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3076
	setPivot: function() {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3077
		this._pivot = Point.read(arguments, 0, { clone: true, readNull: true });
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3078
		this._position = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3079
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3080
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3081
	_pivot: null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3082
}, Base.each(['bounds', 'strokeBounds', 'handleBounds', 'roughBounds',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3083
		'internalBounds', 'internalRoughBounds'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3084
	function(key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3085
		var getter = 'get' + Base.capitalize(key),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3086
			match = key.match(/^internal(.*)$/),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3087
			internalGetter = match ? 'get' + match[1] : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3088
		this[getter] = function(_matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3089
			var boundsGetter = this._boundsGetter,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3090
				name = !internalGetter && (typeof boundsGetter === 'string'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3091
						? boundsGetter : boundsGetter && boundsGetter[getter])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3092
						|| getter,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3093
				bounds = this._getCachedBounds(name, _matrix, this,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3094
						internalGetter);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3095
			return key === 'bounds'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3096
					? new LinkedRectangle(bounds.x, bounds.y, bounds.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3097
							bounds.height, this, 'setBounds')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3098
					: bounds;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3099
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3100
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3101
{
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3102
	beans: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3103
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3104
	_getBounds: function(getter, matrix, cacheItem) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3105
		var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3106
		if (!children || children.length == 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3107
			return new Rectangle();
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3108
		Item._updateBoundsCache(this, cacheItem);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3109
		var x1 = Infinity,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3110
			x2 = -x1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3111
			y1 = x1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3112
			y2 = x2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3113
		for (var i = 0, l = children.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3114
			var child = children[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3115
			if (child._visible && !child.isEmpty()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3116
				var rect = child._getCachedBounds(getter,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3117
						matrix && matrix.chain(child._matrix), cacheItem);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3118
				x1 = Math.min(rect.x, x1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3119
				y1 = Math.min(rect.y, y1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3120
				x2 = Math.max(rect.x + rect.width, x2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3121
				y2 = Math.max(rect.y + rect.height, y2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3122
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3123
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3124
		return isFinite(x1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3125
				? new Rectangle(x1, y1, x2 - x1, y2 - y1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3126
				: new Rectangle();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3127
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3128
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3129
	setBounds: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3130
		var rect = Rectangle.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3131
			bounds = this.getBounds(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3132
			matrix = new Matrix(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3133
			center = rect.getCenter();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3134
		matrix.translate(center);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3135
		if (rect.width != bounds.width || rect.height != bounds.height) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3136
			matrix.scale(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3137
					bounds.width != 0 ? rect.width / bounds.width : 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3138
					bounds.height != 0 ? rect.height / bounds.height : 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3139
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3140
		center = bounds.getCenter();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3141
		matrix.translate(-center.x, -center.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3142
		this.transform(matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3143
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3144
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3145
	_getCachedBounds: function(getter, matrix, cacheItem, internalGetter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3146
		matrix = matrix && matrix.orNullIfIdentity();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3147
		var _matrix = internalGetter ? null : this._matrix.orNullIfIdentity(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3148
			cache = (!matrix || matrix.equals(_matrix)) && getter;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3149
		Item._updateBoundsCache(this._parent || this._parentSymbol, cacheItem);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3150
		if (cache && this._bounds && this._bounds[cache])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3151
			return this._bounds[cache].clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3152
		var bounds = this._getBounds(internalGetter || getter,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3153
				matrix || _matrix, cacheItem);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3154
		if (cache) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3155
			if (!this._bounds)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3156
				this._bounds = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3157
			var cached = this._bounds[cache] = bounds.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3158
			cached._internal = !!internalGetter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3159
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3160
		return bounds;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3161
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3162
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3163
	statics: {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3164
		_updateBoundsCache: function(parent, item) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3165
			if (parent) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3166
				var id = item._id,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3167
					ref = parent._boundsCache = parent._boundsCache || {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3168
						ids: {},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3169
						list: []
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3170
					};
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3171
				if (!ref.ids[id]) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3172
					ref.list.push(item);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3173
					ref.ids[id] = item;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3174
				}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3175
			}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3176
		},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3177
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3178
		_clearBoundsCache: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3179
			var cache = item._boundsCache;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3180
			if (cache) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3181
				item._bounds = item._position = item._boundsCache = undefined;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3182
				for (var i = 0, list = cache.list, l = list.length; i < l; i++){
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3183
					var other = list[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3184
					if (other !== item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3185
						other._bounds = other._position = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3186
						if (other._boundsCache)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3187
							Item._clearBoundsCache(other);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3188
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3189
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3190
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3191
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3192
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3193
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3194
}), {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3195
	beans: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3196
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3197
	_decompose: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3198
		return this._decomposed = this._matrix.decompose();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3199
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3200
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3201
	getRotation: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3202
		var decomposed = this._decomposed || this._decompose();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3203
		return decomposed && decomposed.rotation;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3204
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3205
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3206
	setRotation: function(rotation) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3207
		var current = this.getRotation();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3208
		if (current != null && rotation != null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3209
			var decomposed = this._decomposed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3210
			this.rotate(rotation - current);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3211
			decomposed.rotation = rotation;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3212
			this._decomposed = decomposed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3213
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3214
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3215
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3216
	getScaling: function(_dontLink) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3217
		var decomposed = this._decomposed || this._decompose(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3218
			scaling = decomposed && decomposed.scaling,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3219
			ctor = _dontLink ? Point : LinkedPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3220
		return scaling && new ctor(scaling.x, scaling.y, this, 'setScaling');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3221
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3222
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3223
	setScaling: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3224
		var current = this.getScaling();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3225
		if (current) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3226
			var scaling = Point.read(arguments, 0, { clone: true }),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3227
				decomposed = this._decomposed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3228
			this.scale(scaling.x / current.x, scaling.y / current.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3229
			decomposed.scaling = scaling;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3230
			this._decomposed = decomposed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3231
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3232
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3233
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3234
	getMatrix: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3235
		return this._matrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3236
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3237
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3238
	setMatrix: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3239
		var matrix = this._matrix;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3240
		matrix.initialize.apply(matrix, arguments);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3241
		if (this._applyMatrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3242
			this.transform(null, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3243
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3244
			this._changed(9);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3245
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3246
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3247
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3248
	getGlobalMatrix: function(_dontClone) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3249
		var matrix = this._globalMatrix,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3250
			updateVersion = this._project._updateVersion;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3251
		if (matrix && matrix._updateVersion !== updateVersion)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3252
			matrix = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3253
		if (!matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3254
			matrix = this._globalMatrix = this._matrix.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3255
			var parent = this._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3256
			if (parent)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3257
				matrix.preConcatenate(parent.getGlobalMatrix(true));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3258
			matrix._updateVersion = updateVersion;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3259
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3260
		return _dontClone ? matrix : matrix.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3261
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3262
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3263
	getApplyMatrix: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3264
		return this._applyMatrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3265
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3266
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3267
	setApplyMatrix: function(apply) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3268
		if (this._applyMatrix = this._canApplyMatrix && !!apply)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3269
			this.transform(null, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3270
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3271
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3272
	getTransformContent: '#getApplyMatrix',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3273
	setTransformContent: '#setApplyMatrix',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3274
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3275
	getProject: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3276
		return this._project;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3277
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3278
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3279
	_setProject: function(project, installEvents) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3280
		if (this._project !== project) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3281
			if (this._project)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3282
				this._installEvents(false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3283
			this._project = project;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3284
			var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3285
			for (var i = 0, l = children && children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3286
				children[i]._setProject(project);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3287
			installEvents = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3288
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3289
		if (installEvents)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3290
			this._installEvents(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3291
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3292
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3293
	getView: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3294
		return this._project.getView();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3295
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3296
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3297
	_installEvents: function _installEvents(install) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3298
		_installEvents.base.call(this, install);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3299
		var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3300
		for (var i = 0, l = children && children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3301
			children[i]._installEvents(install);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3302
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3303
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3304
	getLayer: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3305
		var parent = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3306
		while (parent = parent._parent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3307
			if (parent instanceof Layer)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3308
				return parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3309
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3310
		return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3311
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3312
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3313
	getParent: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3314
		return this._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3315
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3316
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3317
	setParent: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3318
		return item.addChild(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3319
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3320
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3321
	getChildren: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3322
		return this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3323
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3324
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3325
	setChildren: function(items) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3326
		this.removeChildren();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3327
		this.addChildren(items);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3328
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3329
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3330
	getFirstChild: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3331
		return this._children && this._children[0] || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3332
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3333
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3334
	getLastChild: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3335
		return this._children && this._children[this._children.length - 1]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3336
				|| null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3337
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3338
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3339
	getNextSibling: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3340
		return this._parent && this._parent._children[this._index + 1] || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3341
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3342
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3343
	getPreviousSibling: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3344
		return this._parent && this._parent._children[this._index - 1] || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3345
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3346
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3347
	getIndex: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3348
		return this._index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3349
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3350
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3351
	equals: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3352
		return item === this || item && this._class === item._class
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3353
				&& this._style.equals(item._style)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3354
				&& this._matrix.equals(item._matrix)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3355
				&& this._locked === item._locked
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3356
				&& this._visible === item._visible
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3357
				&& this._blendMode === item._blendMode
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3358
				&& this._opacity === item._opacity
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3359
				&& this._clipMask === item._clipMask
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3360
				&& this._guide === item._guide
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3361
				&& this._equals(item)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3362
				|| false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3363
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3364
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3365
	_equals: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3366
		return Base.equals(this._children, item._children);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3367
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3368
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3369
	clone: function(insert) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3370
		return this._clone(new this.constructor(Item.NO_INSERT), insert);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3371
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3372
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3373
	_clone: function(copy, insert, includeMatrix) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3374
		var keys = ['_locked', '_visible', '_blendMode', '_opacity',
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3375
				'_clipMask', '_guide'],
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3376
			children = this._children;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3377
		copy.setStyle(this._style);
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3378
		for (var i = 0, l = children && children.length; i < l; i++) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3379
			copy.addChild(children[i].clone(false), true);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3380
		}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3381
		for (var i = 0, l = keys.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3382
			var key = keys[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3383
			if (this.hasOwnProperty(key))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3384
				copy[key] = this[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3385
		}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3386
		if (includeMatrix !== false)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3387
			copy._matrix.initialize(this._matrix);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3388
		copy.setApplyMatrix(this._applyMatrix);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3389
		copy.setPivot(this._pivot);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3390
		copy.setSelected(this._selected);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3391
		copy._data = this._data ? Base.clone(this._data) : null;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3392
		if (insert || insert === undefined)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3393
			copy.insertAbove(this);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3394
		if (this._name)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3395
			copy.setName(this._name, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3396
		return copy;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3397
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3398
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3399
	copyTo: function(itemOrProject) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3400
		return itemOrProject.addChild(this.clone(false));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3401
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3402
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3403
	rasterize: function(resolution) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3404
		var bounds = this.getStrokeBounds(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3405
			scale = (resolution || this.getView().getResolution()) / 72,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3406
			topLeft = bounds.getTopLeft().floor(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3407
			bottomRight = bounds.getBottomRight().ceil(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3408
			size = new Size(bottomRight.subtract(topLeft)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3409
			canvas = CanvasProvider.getCanvas(size.multiply(scale)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3410
			ctx = canvas.getContext('2d'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3411
			matrix = new Matrix().scale(scale).translate(topLeft.negate());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3412
		ctx.save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3413
		matrix.applyToContext(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3414
		this.draw(ctx, new Base({ matrices: [matrix] }));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3415
		ctx.restore();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3416
		var raster = new Raster(Item.NO_INSERT);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3417
		raster.setCanvas(canvas);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3418
		raster.transform(new Matrix().translate(topLeft.add(size.divide(2)))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3419
				.scale(1 / scale));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3420
		raster.insertAbove(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3421
		return raster;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3422
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3423
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3424
	contains: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3425
		return !!this._contains(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3426
				this._matrix._inverseTransform(Point.read(arguments)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3427
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3428
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3429
	_contains: function(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3430
		if (this._children) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3431
			for (var i = this._children.length - 1; i >= 0; i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3432
				if (this._children[i].contains(point))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3433
					return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3434
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3435
			return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3436
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3437
		return point.isInside(this.getInternalBounds());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3438
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3439
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3440
	isInside: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3441
		return Rectangle.read(arguments).contains(this.getBounds());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3442
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3443
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3444
	_asPathItem: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3445
		return new Path.Rectangle({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3446
			rectangle: this.getInternalBounds(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3447
			matrix: this._matrix,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3448
			insert: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3449
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3450
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3451
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3452
	intersects: function(item, _matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3453
		if (!(item instanceof Item))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3454
			return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3455
		return this._asPathItem().getIntersections(item._asPathItem(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3456
				_matrix || item._matrix).length > 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3457
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3458
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3459
	hitTest: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3460
		return this._hitTest(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3461
				Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3462
				HitResult.getOptions(Base.read(arguments)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3463
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3464
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3465
	_hitTest: function(point, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3466
		if (this._locked || !this._visible || this._guide && !options.guides
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3467
				|| this.isEmpty())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3468
			return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3469
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3470
		var matrix = this._matrix,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3471
			parentTotalMatrix = options._totalMatrix,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3472
			view = this.getView(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3473
			totalMatrix = options._totalMatrix = parentTotalMatrix
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3474
					? parentTotalMatrix.chain(matrix)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3475
					: this.getGlobalMatrix().preConcatenate(view._matrix),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3476
			tolerancePadding = options._tolerancePadding = new Size(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3477
						Path._getPenPadding(1, totalMatrix.inverted())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3478
					).multiply(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3479
						Math.max(options.tolerance, 0.000001)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3480
					);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3481
		point = matrix._inverseTransform(point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3482
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3483
		if (!this._children && !this.getInternalRoughBounds()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3484
				.expand(tolerancePadding.multiply(2))._containsPoint(point))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3485
			return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3486
		var checkSelf = !(options.guides && !this._guide
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3487
				|| options.selected && !this._selected
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3488
				|| options.type && options.type !== Base.hyphenate(this._class)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3489
				|| options.class && !(this instanceof options.class)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3490
			that = this,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3491
			res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3492
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3493
		function checkBounds(type, part) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3494
			var pt = bounds['get' + part]();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3495
			if (point.subtract(pt).divide(tolerancePadding).length <= 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3496
				return new HitResult(type, that,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3497
						{ name: Base.hyphenate(part), point: pt });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3498
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3499
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3500
		if (checkSelf && (options.center || options.bounds) && this._parent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3501
			var bounds = this.getInternalBounds();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3502
			if (options.center)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3503
				res = checkBounds('center', 'Center');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3504
			if (!res && options.bounds) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3505
				var points = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3506
					'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3507
					'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3508
				];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3509
				for (var i = 0; i < 8 && !res; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3510
					res = checkBounds('bounds', points[i]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3511
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3512
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3513
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3514
		var children = !res && this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3515
		if (children) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3516
			var opts = this._getChildHitTestOptions(options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3517
			for (var i = children.length - 1; i >= 0 && !res; i--)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3518
				res = children[i]._hitTest(point, opts);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3519
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3520
		if (!res && checkSelf)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3521
			res = this._hitTestSelf(point, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3522
		if (res && res.point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3523
			res.point = matrix.transform(res.point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3524
		options._totalMatrix = parentTotalMatrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3525
		return res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3526
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3527
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3528
	_getChildHitTestOptions: function(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3529
		return options;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3530
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3531
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3532
	_hitTestSelf: function(point, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3533
		if (options.fill && this.hasFill() && this._contains(point))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3534
			return new HitResult('fill', this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3535
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3536
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3537
	matches: function(name, compare) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3538
		function matchObject(obj1, obj2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3539
			for (var i in obj1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3540
				if (obj1.hasOwnProperty(i)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3541
					var val1 = obj1[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3542
						val2 = obj2[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3543
					if (Base.isPlainObject(val1) && Base.isPlainObject(val2)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3544
						if (!matchObject(val1, val2))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3545
							return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3546
					} else if (!Base.equals(val1, val2)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3547
						return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3548
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3549
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3550
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3551
			return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3552
		}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3553
		var type = typeof name;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3554
		if (type === 'object') {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3555
			for (var key in name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3556
				if (name.hasOwnProperty(key) && !this.matches(key, name[key]))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3557
					return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3558
			}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3559
		} else if (type === 'function') {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3560
			return name(this);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3561
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3562
			var value = /^(empty|editable)$/.test(name)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3563
					? this['is' + Base.capitalize(name)]()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3564
					: name === 'type'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3565
						? Base.hyphenate(this._class)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3566
						: this[name];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3567
			if (/^(constructor|class)$/.test(name)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3568
				if (!(this instanceof compare))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3569
					return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3570
			} else if (compare instanceof RegExp) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3571
				if (!compare.test(value))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3572
					return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3573
			} else if (typeof compare === 'function') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3574
				if (!compare(value))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3575
					return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3576
			} else if (Base.isPlainObject(compare)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3577
				if (!matchObject(compare, value))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3578
					return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3579
			} else if (!Base.equals(value, compare)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3580
				return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3581
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3582
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3583
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3584
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3585
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3586
	getItems: function(match) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3587
		return Item._getItems(this._children, match, this._matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3588
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3589
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3590
	getItem: function(match) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3591
		return Item._getItems(this._children, match, this._matrix, null, true)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3592
				[0] || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3593
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3594
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3595
	statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3596
		_getItems: function _getItems(children, match, matrix, param,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3597
				firstOnly) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3598
			if (!param && typeof match === 'object') {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3599
				var overlapping = match.overlapping,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3600
					inside = match.inside,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3601
					bounds = overlapping || inside,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3602
					rect =	bounds && Rectangle.read([bounds]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3603
				param = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3604
					items: [],
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3605
					inside: !!inside,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3606
					overlapping: !!overlapping,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3607
					rect: rect,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3608
					path: overlapping && new Path.Rectangle({
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3609
						rectangle: rect,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3610
						insert: false
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3611
					})
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3612
				};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3613
				if (bounds)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3614
					match = Base.set({}, match,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3615
							{ inside: true, overlapping: true });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3616
			}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3617
			var items = param && param.items,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3618
				rect = param && param.rect;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3619
			matrix = rect && (matrix || new Matrix());
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3620
			for (var i = 0, l = children && children.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3621
				var child = children[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3622
					childMatrix = matrix && matrix.chain(child._matrix),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3623
					add = true;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3624
				if (rect) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3625
					var bounds = child.getBounds(childMatrix);
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3626
					if (!rect.intersects(bounds))
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3627
						continue;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3628
					if (!(param.inside && rect.contains(bounds))
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3629
							&& !(param.overlapping && (bounds.contains(rect)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  3630
								|| param.path.intersects(child, childMatrix))))
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3631
						add = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3632
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3633
				if (add && child.matches(match)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3634
					items.push(child);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3635
					if (firstOnly)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3636
						break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3637
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3638
				_getItems(child._children, match,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3639
						childMatrix, param,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3640
						firstOnly);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3641
				if (firstOnly && items.length > 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3642
					break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3643
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3644
			return items;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3645
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3646
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3647
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3648
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3649
	importJSON: function(json) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3650
		var res = Base.importJSON(json, this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3651
		return res !== this
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3652
				? this.addChild(res)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3653
				: res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3654
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3655
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3656
	addChild: function(item, _preserve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3657
		return this.insertChild(undefined, item, _preserve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3658
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3659
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3660
	insertChild: function(index, item, _preserve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3661
		var res = item ? this.insertChildren(index, [item], _preserve) : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3662
		return res && res[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3663
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3664
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3665
	addChildren: function(items, _preserve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3666
		return this.insertChildren(this._children.length, items, _preserve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3667
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3668
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3669
	insertChildren: function(index, items, _preserve, _proto) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3670
		var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3671
		if (children && items && items.length > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3672
			items = Array.prototype.slice.apply(items);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3673
			for (var i = items.length - 1; i >= 0; i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3674
				var item = items[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3675
				if (_proto && !(item instanceof _proto)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3676
					items.splice(i, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3677
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3678
					var shift = item._parent === this && item._index < index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3679
					if (item._remove(false, true) && shift)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3680
						index--;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3681
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3682
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3683
			Base.splice(children, items, index, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3684
			var project = this._project,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3685
				notifySelf = project && project._changes;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3686
			for (var i = 0, l = items.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3687
				var item = items[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3688
				item._parent = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3689
				item._setProject(this._project, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3690
				if (item._name)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3691
					item.setName(item._name);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3692
				if (notifySelf)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3693
					this._changed(5);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3694
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3695
			this._changed(11);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3696
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3697
			items = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3698
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3699
		return items;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3700
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3701
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3702
	_insertSibling: function(index, item, _preserve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3703
		return this._parent
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3704
				? this._parent.insertChild(index, item, _preserve)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3705
				: null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3706
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3707
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3708
	insertAbove: function(item, _preserve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3709
		return item._insertSibling(item._index + 1, this, _preserve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3710
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3711
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3712
	insertBelow: function(item, _preserve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3713
		return item._insertSibling(item._index, this, _preserve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3714
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3715
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3716
	sendToBack: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3717
		return (this._parent || this instanceof Layer && this._project)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3718
				.insertChild(0, this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3719
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3720
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3721
	bringToFront: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3722
		return (this._parent || this instanceof Layer && this._project)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3723
				.addChild(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3724
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3725
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3726
	appendTop: '#addChild',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3727
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3728
	appendBottom: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3729
		return this.insertChild(0, item);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3730
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3731
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3732
	moveAbove: '#insertAbove',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3733
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3734
	moveBelow: '#insertBelow',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3735
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3736
	reduce: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3737
		if (this._children && this._children.length === 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3738
			var child = this._children[0].reduce();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3739
			child.insertAbove(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3740
			child.setStyle(this._style);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3741
			this.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3742
			return child;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3743
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3744
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3745
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3746
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3747
	_removeNamed: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3748
		var parent = this._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3749
		if (parent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3750
			var children = parent._children,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3751
				namedChildren = parent._namedChildren,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3752
				name = this._name,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3753
				namedArray = namedChildren[name],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3754
				index = namedArray ? namedArray.indexOf(this) : -1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3755
			if (index !== -1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3756
				if (children[name] == this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3757
					delete children[name];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3758
				namedArray.splice(index, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3759
				if (namedArray.length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3760
					children[name] = namedArray[namedArray.length - 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3761
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3762
					delete namedChildren[name];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3763
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3764
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3765
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3766
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3767
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3768
	_remove: function(notifySelf, notifyParent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3769
		var parent = this._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3770
		if (parent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3771
			if (this._name)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3772
				this._removeNamed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3773
			if (this._index != null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3774
				Base.splice(parent._children, null, this._index, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3775
			this._installEvents(false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3776
			if (notifySelf) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3777
				var project = this._project;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3778
				if (project && project._changes)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3779
					this._changed(5);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3780
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3781
			if (notifyParent)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3782
				parent._changed(11);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3783
			this._parent = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3784
			return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3785
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3786
		return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3787
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3788
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3789
	remove: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3790
		return this._remove(true, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3791
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3792
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3793
	replaceWith: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3794
		var ok = item && item.insertBelow(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3795
		if (ok)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3796
			this.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3797
		return ok;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3798
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3799
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3800
	removeChildren: function(from, to) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3801
		if (!this._children)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3802
			return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3803
		from = from || 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3804
		to = Base.pick(to, this._children.length);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3805
		var removed = Base.splice(this._children, null, from, to - from);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3806
		for (var i = removed.length - 1; i >= 0; i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3807
			removed[i]._remove(true, false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3808
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3809
		if (removed.length > 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3810
			this._changed(11);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3811
		return removed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3812
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3813
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3814
	clear: '#removeChildren',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3815
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3816
	reverseChildren: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3817
		if (this._children) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3818
			this._children.reverse();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3819
			for (var i = 0, l = this._children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3820
				this._children[i]._index = i;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3821
			this._changed(11);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3822
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3823
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3824
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3825
	isEmpty: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3826
		return !this._children || this._children.length === 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3827
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3828
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3829
	isEditable: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3830
		var item = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3831
		while (item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3832
			if (!item._visible || item._locked)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3833
				return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3834
			item = item._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3835
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3836
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3837
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3838
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3839
	hasFill: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3840
		return this.getStyle().hasFill();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3841
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3842
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3843
	hasStroke: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3844
		return this.getStyle().hasStroke();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3845
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3846
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3847
	hasShadow: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3848
		return this.getStyle().hasShadow();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3849
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3850
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3851
	_getOrder: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3852
		function getList(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3853
			var list = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3854
			do {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3855
				list.unshift(item);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3856
			} while (item = item._parent);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3857
			return list;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3858
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3859
		var list1 = getList(this),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3860
			list2 = getList(item);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3861
		for (var i = 0, l = Math.min(list1.length, list2.length); i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3862
			if (list1[i] != list2[i]) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3863
				return list1[i]._index < list2[i]._index ? 1 : -1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3864
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3865
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3866
		return 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3867
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3868
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3869
	hasChildren: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3870
		return this._children && this._children.length > 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3871
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3872
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3873
	isInserted: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3874
		return this._parent ? this._parent.isInserted() : false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3875
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3876
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3877
	isAbove: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3878
		return this._getOrder(item) === -1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3879
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3880
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3881
	isBelow: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3882
		return this._getOrder(item) === 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3883
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3884
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3885
	isParent: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3886
		return this._parent === item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3887
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3888
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3889
	isChild: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3890
		return item && item._parent === this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3891
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3892
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3893
	isDescendant: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3894
		var parent = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3895
		while (parent = parent._parent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3896
			if (parent == item)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3897
				return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3898
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3899
		return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3900
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3901
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3902
	isAncestor: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3903
		return item ? item.isDescendant(this) : false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3904
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3905
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3906
	isGroupedWith: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3907
		var parent = this._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3908
		while (parent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3909
			if (parent._parent
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3910
				&& /^(Group|Layer|CompoundPath)$/.test(parent._class)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3911
				&& item.isDescendant(parent))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3912
					return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3913
			parent = parent._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3914
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3915
		return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3916
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3917
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3918
	translate: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3919
		var mx = new Matrix();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3920
		return this.transform(mx.translate.apply(mx, arguments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3921
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3922
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3923
	rotate: function(angle ) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3924
		return this.transform(new Matrix().rotate(angle,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3925
				Point.read(arguments, 1, { readNull: true })
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3926
					|| this.getPosition(true)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3927
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3928
}, Base.each(['scale', 'shear', 'skew'], function(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3929
	this[name] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3930
		var point = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3931
			center = Point.read(arguments, 0, { readNull: true });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3932
		return this.transform(new Matrix()[name](point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3933
				center || this.getPosition(true)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3934
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3935
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3936
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3937
}), {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3938
	transform: function(matrix, _applyMatrix, _applyRecursively,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3939
			_setApplyMatrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3940
		if (matrix && matrix.isIdentity())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3941
			matrix = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3942
		var _matrix = this._matrix,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3943
			applyMatrix = (_applyMatrix || this._applyMatrix)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3944
					&& ((!_matrix.isIdentity() || matrix)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3945
						|| _applyMatrix && _applyRecursively && this._children);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3946
		if (!matrix && !applyMatrix)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3947
			return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3948
		if (matrix)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3949
			_matrix.preConcatenate(matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3950
		if (applyMatrix = applyMatrix && this._transformContent(_matrix,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3951
					_applyRecursively, _setApplyMatrix)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3952
			var pivot = this._pivot,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3953
				style = this._style,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3954
				fillColor = style.getFillColor(true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3955
				strokeColor = style.getStrokeColor(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3956
			if (pivot)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3957
				_matrix._transformPoint(pivot, pivot, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3958
			if (fillColor)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3959
				fillColor.transform(_matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3960
			if (strokeColor)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3961
				strokeColor.transform(_matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3962
			_matrix.reset(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3963
			if (_setApplyMatrix && this._canApplyMatrix)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3964
				this._applyMatrix = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3965
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3966
		var bounds = this._bounds,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3967
			position = this._position;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3968
		this._changed(9);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3969
		var decomp = bounds && matrix && matrix.decompose();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3970
		if (decomp && !decomp.shearing && decomp.rotation % 90 === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3971
			for (var key in bounds) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3972
				var rect = bounds[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3973
				if (applyMatrix || !rect._internal)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3974
					matrix._transformBounds(rect, rect);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3975
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3976
			var getter = this._boundsGetter,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3977
				rect = bounds[getter && getter.getBounds || getter || 'getBounds'];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3978
			if (rect)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3979
				this._position = rect.getCenter(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3980
			this._bounds = bounds;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3981
		} else if (matrix && position) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3982
			this._position = matrix._transformPoint(position, position);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3983
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3984
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3985
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3986
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3987
	_transformContent: function(matrix, applyRecursively, setApplyMatrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3988
		var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3989
		if (children) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3990
			for (var i = 0, l = children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3991
				children[i].transform(matrix, true, applyRecursively,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3992
						setApplyMatrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3993
			return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3994
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3995
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3996
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3997
	globalToLocal: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3998
		return this.getGlobalMatrix(true)._inverseTransform(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  3999
				Point.read(arguments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4000
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4001
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4002
	localToGlobal: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4003
		return this.getGlobalMatrix(true)._transformPoint(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4004
				Point.read(arguments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4005
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4006
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4007
	parentToLocal: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4008
		return this._matrix._inverseTransform(Point.read(arguments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4009
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4010
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4011
	localToParent: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4012
		return this._matrix._transformPoint(Point.read(arguments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4013
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4014
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4015
	fitBounds: function(rectangle, fill) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4016
		rectangle = Rectangle.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4017
		var bounds = this.getBounds(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4018
			itemRatio = bounds.height / bounds.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4019
			rectRatio = rectangle.height / rectangle.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4020
			scale = (fill ? itemRatio > rectRatio : itemRatio < rectRatio)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4021
					? rectangle.width / bounds.width
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4022
					: rectangle.height / bounds.height,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4023
			newBounds = new Rectangle(new Point(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4024
					new Size(bounds.width * scale, bounds.height * scale));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4025
		newBounds.setCenter(rectangle.getCenter());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4026
		this.setBounds(newBounds);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4027
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4028
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4029
	_setStyles: function(ctx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4030
		var style = this._style,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4031
			fillColor = style.getFillColor(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4032
			strokeColor = style.getStrokeColor(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4033
			shadowColor = style.getShadowColor();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4034
		if (fillColor)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4035
			ctx.fillStyle = fillColor.toCanvasStyle(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4036
		if (strokeColor) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4037
			var strokeWidth = style.getStrokeWidth();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4038
			if (strokeWidth > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4039
				ctx.strokeStyle = strokeColor.toCanvasStyle(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4040
				ctx.lineWidth = strokeWidth;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4041
				var strokeJoin = style.getStrokeJoin(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4042
					strokeCap = style.getStrokeCap(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4043
					miterLimit = style.getMiterLimit();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4044
				if (strokeJoin)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4045
					ctx.lineJoin = strokeJoin;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4046
				if (strokeCap)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4047
					ctx.lineCap = strokeCap;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4048
				if (miterLimit)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4049
					ctx.miterLimit = miterLimit;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4050
				if (paper.support.nativeDash) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4051
					var dashArray = style.getDashArray(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4052
						dashOffset = style.getDashOffset();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4053
					if (dashArray && dashArray.length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4054
						if ('setLineDash' in ctx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4055
							ctx.setLineDash(dashArray);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4056
							ctx.lineDashOffset = dashOffset;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4057
						} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4058
							ctx.mozDash = dashArray;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4059
							ctx.mozDashOffset = dashOffset;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4060
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4061
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4062
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4063
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4064
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4065
		if (shadowColor) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4066
			var shadowBlur = style.getShadowBlur();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4067
			if (shadowBlur > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4068
				ctx.shadowColor = shadowColor.toCanvasStyle(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4069
				ctx.shadowBlur = shadowBlur;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4070
				var offset = this.getShadowOffset();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4071
				ctx.shadowOffsetX = offset.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4072
				ctx.shadowOffsetY = offset.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4073
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4074
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4075
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4076
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4077
	draw: function(ctx, param, parentStrokeMatrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4078
		var updateVersion = this._updateVersion = this._project._updateVersion;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4079
		if (!this._visible || this._opacity === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4080
			return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4081
		var matrices = param.matrices,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4082
			viewMatrix = param.viewMatrix,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4083
			matrix = this._matrix,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4084
			globalMatrix = matrices[matrices.length - 1].chain(matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4085
		if (!globalMatrix.isInvertible())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4086
			return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4087
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4088
		function getViewMatrix(matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4089
			return viewMatrix ? viewMatrix.chain(matrix) : matrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4090
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4091
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4092
		matrices.push(globalMatrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4093
		if (param.updateMatrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4094
			globalMatrix._updateVersion = updateVersion;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4095
			this._globalMatrix = globalMatrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4096
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4097
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4098
		var blendMode = this._blendMode,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4099
			opacity = this._opacity,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4100
			normalBlend = blendMode === 'normal',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4101
			nativeBlend = BlendMode.nativeModes[blendMode],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4102
			direct = normalBlend && opacity === 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4103
					|| param.dontStart
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4104
					|| param.clip
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4105
					|| (nativeBlend || normalBlend && opacity < 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4106
						&& this._canComposite(),
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4107
			pixelRatio = param.pixelRatio || 1,
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4108
			mainCtx, itemOffset, prevOffset;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4109
		if (!direct) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4110
			var bounds = this.getStrokeBounds(getViewMatrix(globalMatrix));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4111
			if (!bounds.width || !bounds.height)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4112
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4113
			prevOffset = param.offset;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4114
			itemOffset = param.offset = bounds.getTopLeft().floor();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4115
			mainCtx = ctx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4116
			ctx = CanvasProvider.getContext(bounds.getSize().ceil().add(1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4117
					.multiply(pixelRatio));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4118
			if (pixelRatio !== 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4119
				ctx.scale(pixelRatio, pixelRatio);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4120
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4121
		ctx.save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4122
		var strokeMatrix = parentStrokeMatrix
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4123
				? parentStrokeMatrix.chain(matrix)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4124
				: !this.getStrokeScaling(true) && getViewMatrix(globalMatrix),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4125
			clip = !direct && param.clipItem,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4126
			transform = !strokeMatrix || clip;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4127
		if (direct) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4128
			ctx.globalAlpha = opacity;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4129
			if (nativeBlend)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4130
				ctx.globalCompositeOperation = blendMode;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4131
		} else if (transform) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4132
			ctx.translate(-itemOffset.x, -itemOffset.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4133
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4134
		if (transform)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4135
			(direct ? matrix : getViewMatrix(globalMatrix)).applyToContext(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4136
		if (clip)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4137
			param.clipItem.draw(ctx, param.extend({ clip: true }));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4138
		if (strokeMatrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4139
			ctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4140
			var offset = param.offset;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4141
			if (offset)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4142
				ctx.translate(-offset.x, -offset.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4143
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4144
		this._draw(ctx, param, strokeMatrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4145
		ctx.restore();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4146
		matrices.pop();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4147
		if (param.clip && !param.dontFinish)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4148
			ctx.clip();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4149
		if (!direct) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4150
			BlendMode.process(blendMode, ctx, mainCtx, opacity,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4151
					itemOffset.subtract(prevOffset).multiply(pixelRatio));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4152
			CanvasProvider.release(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4153
			param.offset = prevOffset;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4154
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4155
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4156
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4157
	_isUpdated: function(updateVersion) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4158
		var parent = this._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4159
		if (parent instanceof CompoundPath)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4160
			return parent._isUpdated(updateVersion);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4161
		var updated = this._updateVersion === updateVersion;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4162
		if (!updated && parent && parent._visible
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4163
				&& parent._isUpdated(updateVersion)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4164
			this._updateVersion = updateVersion;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4165
			updated = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4166
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4167
		return updated;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4168
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4169
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4170
	_drawSelection: function(ctx, matrix, size, selectedItems, updateVersion) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4171
		if ((this._drawSelected || this._boundsSelected)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4172
				&& this._isUpdated(updateVersion)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4173
			var color = this.getSelectedColor(true)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4174
					|| this.getLayer().getSelectedColor(true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4175
				mx = matrix.chain(this.getGlobalMatrix(true));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4176
			ctx.strokeStyle = ctx.fillStyle = color
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4177
					? color.toCanvasStyle(ctx) : '#009dec';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4178
			if (this._drawSelected)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4179
				this._drawSelected(ctx, mx, selectedItems);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4180
			if (this._boundsSelected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4181
				var half = size / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4182
					coords = mx._transformCorners(this.getInternalBounds());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4183
				ctx.beginPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4184
				for (var i = 0; i < 8; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4185
					ctx[i === 0 ? 'moveTo' : 'lineTo'](coords[i], coords[++i]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4186
				ctx.closePath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4187
				ctx.stroke();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4188
				for (var i = 0; i < 8; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4189
					ctx.fillRect(coords[i] - half, coords[++i] - half,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4190
							size, size);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4191
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4192
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4193
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4194
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4195
	_canComposite: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4196
		return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4197
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4198
}, Base.each(['down', 'drag', 'up', 'move'], function(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4199
	this['removeOn' + Base.capitalize(name)] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4200
		var hash = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4201
		hash[name] = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4202
		return this.removeOn(hash);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4203
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4204
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4205
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4206
	removeOn: function(obj) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4207
		for (var name in obj) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4208
			if (obj[name]) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4209
				var key = 'mouse' + name,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4210
					project = this._project,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4211
					sets = project._removeSets = project._removeSets || {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4212
				sets[key] = sets[key] || {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4213
				sets[key][this._id] = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4214
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4215
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4216
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4217
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4218
}));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4219
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4220
var Group = Item.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4221
	_class: 'Group',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4222
	_selectChildren: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4223
	_serializeFields: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4224
		children: []
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4225
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4226
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4227
	initialize: function Group(arg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4228
		this._children = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4229
		this._namedChildren = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4230
		if (!this._initialize(arg))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4231
			this.addChildren(Array.isArray(arg) ? arg : arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4232
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4233
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4234
	_changed: function _changed(flags) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4235
		_changed.base.call(this, flags);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4236
		if (flags & 1026) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4237
			this._clipItem = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4238
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4239
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4240
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4241
	_getClipItem: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4242
		var clipItem = this._clipItem;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4243
		if (clipItem === undefined) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4244
			clipItem = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4245
			for (var i = 0, l = this._children.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4246
				var child = this._children[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4247
				if (child._clipMask) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4248
					clipItem = child;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4249
					break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4250
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4251
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4252
			this._clipItem = clipItem;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4253
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4254
		return clipItem;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4255
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4256
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4257
	isClipped: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4258
		return !!this._getClipItem();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4259
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4260
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4261
	setClipped: function(clipped) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4262
		var child = this.getFirstChild();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4263
		if (child)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4264
			child.setClipMask(clipped);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4265
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4266
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4267
	_draw: function(ctx, param) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4268
		var clip = param.clip,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4269
			clipItem = !clip && this._getClipItem(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4270
			draw = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4271
		param = param.extend({ clipItem: clipItem, clip: false });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4272
		if (clip) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4273
			if (this._currentPath) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4274
				ctx.currentPath = this._currentPath;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4275
				draw = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4276
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4277
				ctx.beginPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4278
				param.dontStart = param.dontFinish = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4279
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4280
		} else if (clipItem) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4281
			clipItem.draw(ctx, param.extend({ clip: true }));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4282
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4283
		if (draw) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4284
			for (var i = 0, l = this._children.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4285
				var item = this._children[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4286
				if (item !== clipItem)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4287
					item.draw(ctx, param);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4288
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4289
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4290
		if (clip) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4291
			this._currentPath = ctx.currentPath;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4292
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4293
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4294
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4295
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4296
var Layer = Group.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4297
	_class: 'Layer',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4298
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4299
	initialize: function Layer(arg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4300
		var props = Base.isPlainObject(arg)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4301
				? new Base(arg)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4302
				: { children: Array.isArray(arg) ? arg : arguments },
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4303
			insert = props.insert;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4304
		props.insert = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4305
		Group.call(this, props);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4306
		if (insert || insert === undefined) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4307
			this._project.addChild(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4308
			this.activate();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4309
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4310
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4311
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4312
	_remove: function _remove(notifySelf, notifyParent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4313
		if (this._parent)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4314
			return _remove.base.call(this, notifySelf, notifyParent);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4315
		if (this._index != null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4316
			var project = this._project;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4317
			if (project._activeLayer === this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4318
				project._activeLayer = this.getNextSibling()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4319
						|| this.getPreviousSibling();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4320
			Base.splice(project.layers, null, this._index, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4321
			this._installEvents(false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4322
			if (notifySelf && project._changes)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4323
				this._changed(5);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4324
			if (notifyParent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4325
				project._needsUpdate = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4326
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4327
			return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4328
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4329
		return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4330
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4331
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4332
	getNextSibling: function getNextSibling() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4333
		return this._parent ? getNextSibling.base.call(this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4334
				: this._project.layers[this._index + 1] || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4335
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4336
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4337
	getPreviousSibling: function getPreviousSibling() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4338
		return this._parent ? getPreviousSibling.base.call(this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4339
				: this._project.layers[this._index - 1] || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4340
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4341
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4342
	isInserted: function isInserted() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4343
		return this._parent ? isInserted.base.call(this) : this._index != null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4344
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4345
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4346
	activate: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4347
		this._project._activeLayer = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4348
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4349
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4350
	_insertSibling: function _insertSibling(index, item, _preserve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4351
		return !this._parent
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4352
				? this._project.insertChild(index, item, _preserve)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4353
				: _insertSibling.base.call(this, index, item, _preserve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4354
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4355
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4356
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4357
var Shape = Item.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4358
	_class: 'Shape',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4359
	_applyMatrix: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4360
	_canApplyMatrix: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4361
	_boundsSelected: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4362
	_serializeFields: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4363
		type: null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4364
		size: null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4365
		radius: null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4366
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4367
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4368
	initialize: function Shape(props) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4369
		this._initialize(props);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4370
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4371
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4372
	_equals: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4373
		return this._type === item._type
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4374
			&& this._size.equals(item._size)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4375
			&& Base.equals(this._radius, item._radius);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4376
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4377
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4378
	clone: function(insert) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4379
		var copy = new Shape(Item.NO_INSERT);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4380
		copy.setType(this._type);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4381
		copy.setSize(this._size);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4382
		copy.setRadius(this._radius);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4383
		return this._clone(copy, insert);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4384
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4385
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4386
	getType: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4387
		return this._type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4388
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4389
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4390
	setType: function(type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4391
		this._type = type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4392
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4393
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4394
	getShape: '#getType',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4395
	setShape: '#setType',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4396
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4397
	getSize: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4398
		var size = this._size;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4399
		return new LinkedSize(size.width, size.height, this, 'setSize');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4400
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4401
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4402
	setSize: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4403
		var size = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4404
		if (!this._size) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4405
			this._size = size.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4406
		} else if (!this._size.equals(size)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4407
			var type = this._type,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4408
				width = size.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4409
				height = size.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4410
			if (type === 'rectangle') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4411
				var radius = Size.min(this._radius, size.divide(2));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4412
				this._radius.set(radius.width, radius.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4413
			} else if (type === 'circle') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4414
				width = height = (width + height) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4415
				this._radius = width / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4416
			} else if (type === 'ellipse') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4417
				this._radius.set(width / 2, height / 2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4418
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4419
			this._size.set(width, height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4420
			this._changed(9);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4421
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4422
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4423
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4424
	getRadius: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4425
		var rad = this._radius;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4426
		return this._type === 'circle'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4427
				? rad
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4428
				: new LinkedSize(rad.width, rad.height, this, 'setRadius');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4429
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4430
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4431
	setRadius: function(radius) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4432
		var type = this._type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4433
		if (type === 'circle') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4434
			if (radius === this._radius)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4435
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4436
			var size = radius * 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4437
			this._radius = radius;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4438
			this._size.set(size, size);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4439
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4440
			radius = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4441
			if (!this._radius) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4442
				this._radius = radius.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4443
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4444
				if (this._radius.equals(radius))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4445
					return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4446
				this._radius.set(radius.width, radius.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4447
				if (type === 'rectangle') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4448
					var size = Size.max(this._size, radius.multiply(2));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4449
					this._size.set(size.width, size.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4450
				} else if (type === 'ellipse') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4451
					this._size.set(radius.width * 2, radius.height * 2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4452
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4453
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4454
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4455
		this._changed(9);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4456
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4457
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4458
	isEmpty: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4459
		return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4460
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4461
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4462
	toPath: function(insert) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4463
		var path = this._clone(new Path[Base.capitalize(this._type)]({
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4464
			center: new Point(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4465
			size: this._size,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4466
			radius: this._radius,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4467
			insert: false
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4468
		}), insert);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4469
		if (paper.settings.applyMatrix)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4470
			path.setApplyMatrix(true);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4471
		return path;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4472
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4473
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4474
	_draw: function(ctx, param, strokeMatrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4475
		var style = this._style,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4476
			hasFill = style.hasFill(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4477
			hasStroke = style.hasStroke(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4478
			dontPaint = param.dontFinish || param.clip,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4479
			untransformed = !strokeMatrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4480
		if (hasFill || hasStroke || dontPaint) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4481
			var type = this._type,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4482
				radius = this._radius,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4483
				isCircle = type === 'circle';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4484
			if (!param.dontStart)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4485
				ctx.beginPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4486
			if (untransformed && isCircle) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4487
				ctx.arc(0, 0, radius, 0, Math.PI * 2, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4488
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4489
				var rx = isCircle ? radius : radius.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4490
					ry = isCircle ? radius : radius.height,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4491
					size = this._size,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4492
					width = size.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4493
					height = size.height;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4494
				if (untransformed && type === 'rectangle' && rx === 0 && ry === 0) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4495
					ctx.rect(-width / 2, -height / 2, width, height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4496
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4497
					var x = width / 2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4498
						y = height / 2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4499
						kappa = 1 - 0.5522847498307936,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4500
						cx = rx * kappa,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4501
						cy = ry * kappa,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4502
						c = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4503
							-x, -y + ry,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4504
							-x, -y + cy,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4505
							-x + cx, -y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4506
							-x + rx, -y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4507
							x - rx, -y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4508
							x - cx, -y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4509
							x, -y + cy,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4510
							x, -y + ry,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4511
							x, y - ry,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4512
							x, y - cy,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4513
							x - cx, y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4514
							x - rx, y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4515
							-x + rx, y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4516
							-x + cx, y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4517
							-x, y - cy,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4518
							-x, y - ry
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4519
						];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4520
					if (strokeMatrix)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4521
						strokeMatrix.transform(c, c, 32);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4522
					ctx.moveTo(c[0], c[1]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4523
					ctx.bezierCurveTo(c[2], c[3], c[4], c[5], c[6], c[7]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4524
					if (x !== rx)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4525
						ctx.lineTo(c[8], c[9]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4526
					ctx.bezierCurveTo(c[10], c[11], c[12], c[13], c[14], c[15]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4527
					if (y !== ry)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4528
						ctx.lineTo(c[16], c[17]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4529
					ctx.bezierCurveTo(c[18], c[19], c[20], c[21], c[22], c[23]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4530
					if (x !== rx)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4531
						ctx.lineTo(c[24], c[25]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4532
					ctx.bezierCurveTo(c[26], c[27], c[28], c[29], c[30], c[31]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4533
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4534
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4535
			ctx.closePath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4536
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4537
		if (!dontPaint && (hasFill || hasStroke)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4538
			this._setStyles(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4539
			if (hasFill) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4540
				ctx.fill(style.getWindingRule());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4541
				ctx.shadowColor = 'rgba(0,0,0,0)';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4542
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4543
			if (hasStroke)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4544
				ctx.stroke();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4545
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4546
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4547
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4548
	_canComposite: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4549
		return !(this.hasFill() && this.hasStroke());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4550
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4551
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4552
	_getBounds: function(getter, matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4553
		var rect = new Rectangle(this._size).setCenter(0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4554
		if (getter !== 'getBounds' && this.hasStroke())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4555
			rect = rect.expand(this.getStrokeWidth());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4556
		return matrix ? matrix._transformBounds(rect) : rect;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4557
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4558
},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4559
new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4560
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4561
	function getCornerCenter(that, point, expand) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4562
		var radius = that._radius;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4563
		if (!radius.isZero()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4564
			var halfSize = that._size.divide(2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4565
			for (var i = 0; i < 4; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4566
				var dir = new Point(i & 1 ? 1 : -1, i > 1 ? 1 : -1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4567
					corner = dir.multiply(halfSize),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4568
					center = corner.subtract(dir.multiply(radius)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4569
					rect = new Rectangle(corner, center);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4570
				if ((expand ? rect.expand(expand) : rect).contains(point))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4571
					return center;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4572
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4573
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4574
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4575
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4576
	function getEllipseRadius(point, radius) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4577
		var angle = point.getAngleInRadians(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4578
			width = radius.width * 2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4579
			height = radius.height * 2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4580
			x = width * Math.sin(angle),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4581
			y = height * Math.cos(angle);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4582
		return width * height / (2 * Math.sqrt(x * x + y * y));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4583
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4584
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4585
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4586
		_contains: function _contains(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4587
			if (this._type === 'rectangle') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4588
				var center = getCornerCenter(this, point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4589
				return center
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4590
						? point.subtract(center).divide(this._radius)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4591
							.getLength() <= 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4592
						: _contains.base.call(this, point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4593
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4594
				return point.divide(this.size).getLength() <= 0.5;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4595
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4596
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4597
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4598
		_hitTestSelf: function _hitTestSelf(point, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4599
			var hit = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4600
			if (this.hasStroke()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4601
				var type = this._type,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4602
					radius = this._radius,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4603
					strokeWidth = this.getStrokeWidth() + 2 * options.tolerance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4604
				if (type === 'rectangle') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4605
					var center = getCornerCenter(this, point, strokeWidth);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4606
					if (center) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4607
						var pt = point.subtract(center);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4608
						hit = 2 * Math.abs(pt.getLength()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4609
								- getEllipseRadius(pt, radius)) <= strokeWidth;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4610
					} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4611
						var rect = new Rectangle(this._size).setCenter(0, 0),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4612
							outer = rect.expand(strokeWidth),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4613
							inner = rect.expand(-strokeWidth);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4614
						hit = outer._containsPoint(point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4615
								&& !inner._containsPoint(point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4616
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4617
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4618
					if (type === 'ellipse')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4619
						radius = getEllipseRadius(point, radius);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4620
					hit = 2 * Math.abs(point.getLength() - radius)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4621
							<= strokeWidth;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4622
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4623
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4624
			return hit
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4625
					? new HitResult('stroke', this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4626
					: _hitTestSelf.base.apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4627
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4628
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4629
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4630
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4631
statics: new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4632
	function createShape(type, point, size, radius, args) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4633
		var item = new Shape(Base.getNamed(args));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4634
		item._type = type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4635
		item._size = size;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4636
		item._radius = radius;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4637
		return item.translate(point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4638
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4639
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4640
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4641
		Circle: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4642
			var center = Point.readNamed(arguments, 'center'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4643
				radius = Base.readNamed(arguments, 'radius');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4644
			return createShape('circle', center, new Size(radius * 2), radius,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4645
					arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4646
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4647
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4648
		Rectangle: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4649
			var rect = Rectangle.readNamed(arguments, 'rectangle'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4650
				radius = Size.min(Size.readNamed(arguments, 'radius'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4651
						rect.getSize(true).divide(2));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4652
			return createShape('rectangle', rect.getCenter(true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4653
					rect.getSize(true), radius, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4654
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4655
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4656
		Ellipse: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4657
			var ellipse = Shape._readEllipse(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4658
				radius = ellipse.radius;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4659
			return createShape('ellipse', ellipse.center, radius.multiply(2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4660
					radius, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4661
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4662
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4663
		_readEllipse: function(args) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4664
			var center,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4665
				radius;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4666
			if (Base.hasNamed(args, 'radius')) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4667
				center = Point.readNamed(args, 'center');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4668
				radius = Size.readNamed(args, 'radius');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4669
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4670
				var rect = Rectangle.readNamed(args, 'rectangle');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4671
				center = rect.getCenter(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4672
				radius = rect.getSize(true).divide(2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4673
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4674
			return { center: center, radius: radius };
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4675
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4676
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4677
}});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4678
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4679
var Raster = Item.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4680
	_class: 'Raster',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4681
	_applyMatrix: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4682
	_canApplyMatrix: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4683
	_boundsGetter: 'getBounds',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4684
	_boundsSelected: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4685
	_serializeFields: {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4686
		crossOrigin: null,
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4687
		source: null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4688
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4689
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4690
	initialize: function Raster(object, position) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4691
		if (!this._initialize(object,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4692
				position !== undefined && Point.read(arguments, 1))) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4693
			if (typeof object === 'string') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4694
				this.setSource(object);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4695
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4696
				this.setImage(object);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4697
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4698
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4699
		if (!this._size) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4700
			this._size = new Size();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4701
			this._loaded = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4702
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4703
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4704
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4705
	_equals: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4706
		return this.getSource() === item.getSource();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4707
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4708
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4709
	clone: function(insert) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4710
		var copy = new Raster(Item.NO_INSERT),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4711
			image = this._image,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4712
			canvas = this._canvas;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4713
		if (image) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4714
			copy.setImage(image);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4715
		} else if (canvas) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4716
			var copyCanvas = CanvasProvider.getCanvas(this._size);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4717
			copyCanvas.getContext('2d').drawImage(canvas, 0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4718
			copy.setImage(copyCanvas);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4719
		}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4720
		copy._crossOrigin = this._crossOrigin;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4721
		return this._clone(copy, insert);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4722
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4723
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4724
	getSize: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4725
		var size = this._size;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4726
		return new LinkedSize(size ? size.width : 0, size ? size.height : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4727
				this, 'setSize');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4728
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4729
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4730
	setSize: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4731
		var size = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4732
		if (!size.equals(this._size)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4733
			if (size.width > 0 && size.height > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4734
				var element = this.getElement();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4735
				this.setImage(CanvasProvider.getCanvas(size));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4736
				if (element)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4737
					this.getContext(true).drawImage(element, 0, 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4738
							size.width, size.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4739
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4740
				if (this._canvas)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4741
					CanvasProvider.release(this._canvas);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4742
				this._size = size.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4743
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4744
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4745
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4746
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4747
	getWidth: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4748
		return this._size ? this._size.width : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4749
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4750
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4751
	setWidth: function(width) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4752
		this.setSize(width, this.getHeight());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4753
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4754
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4755
	getHeight: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4756
		return this._size ? this._size.height : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4757
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4758
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4759
	setHeight: function(height) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4760
		this.setSize(this.getWidth(), height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4761
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4762
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4763
	isEmpty: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4764
		var size = this._size;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4765
		return !size || size.width === 0 && size.height === 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4766
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4767
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4768
	getResolution: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4769
		var matrix = this._matrix,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4770
			orig = new Point(0, 0).transform(matrix),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4771
			u = new Point(1, 0).transform(matrix).subtract(orig),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4772
			v = new Point(0, 1).transform(matrix).subtract(orig);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4773
		return new Size(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4774
			72 / u.getLength(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4775
			72 / v.getLength()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4776
		);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4777
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4778
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4779
	getPpi: '#getResolution',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4780
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4781
	getImage: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4782
		return this._image;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4783
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4784
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4785
	setImage: function(image) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4786
		if (this._canvas)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4787
			CanvasProvider.release(this._canvas);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4788
		if (image && image.getContext) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4789
			this._image = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4790
			this._canvas = image;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4791
			this._loaded = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4792
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4793
			this._image = image;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4794
			this._canvas = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4795
			this._loaded = image && image.complete;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4796
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4797
		this._size = new Size(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4798
				image ? image.naturalWidth || image.width : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4799
				image ? image.naturalHeight || image.height : 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4800
		this._context = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4801
		this._changed(521);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4802
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4803
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4804
	getCanvas: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4805
		if (!this._canvas) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4806
			var ctx = CanvasProvider.getContext(this._size);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4807
			try {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4808
				if (this._image)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4809
					ctx.drawImage(this._image, 0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4810
				this._canvas = ctx.canvas;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4811
			} catch (e) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4812
				CanvasProvider.release(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4813
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4814
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4815
		return this._canvas;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4816
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4817
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4818
	setCanvas: '#setImage',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4819
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4820
	getContext: function(modify) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4821
		if (!this._context)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4822
			this._context = this.getCanvas().getContext('2d');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4823
		if (modify) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4824
			this._image = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4825
			this._changed(513);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4826
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4827
		return this._context;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4828
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4829
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4830
	setContext: function(context) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4831
		this._context = context;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4832
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4833
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4834
	getSource: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4835
		return this._image && this._image.src || this.toDataURL();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4836
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4837
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4838
	setSource: function(src) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4839
		var that = this,
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4840
			crossOrigin = this._crossOrigin,
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4841
			image;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4842
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4843
		function loaded() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4844
			var view = that.getView();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4845
			if (view) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4846
				paper = view._scope;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4847
				that.setImage(image);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4848
				that.emit('load');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4849
				view.update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4850
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4851
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4852
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4853
		image = document.getElementById(src) || new Image();
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4854
		if (crossOrigin)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4855
			image.crossOrigin = crossOrigin;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4856
		if (image.naturalWidth && image.naturalHeight) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4857
			setTimeout(loaded, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4858
		} else {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4859
			DomEvent.add(image, { load: loaded });
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4860
			if (!image.src)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4861
				image.src = src;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4862
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4863
		this.setImage(image);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4864
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4865
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4866
	getCrossOrigin: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4867
		return this._image && this._image.crossOrigin || this._crossOrigin || '';
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4868
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4869
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4870
	setCrossOrigin: function(crossOrigin) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4871
		this._crossOrigin = crossOrigin;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4872
		if (this._image)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4873
			this._image.crossOrigin = crossOrigin;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4874
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  4875
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4876
	getElement: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4877
		return this._canvas || this._loaded && this._image;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4878
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4879
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4880
	beans: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4881
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4882
	getSubCanvas: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4883
		var rect = Rectangle.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4884
			ctx = CanvasProvider.getContext(rect.getSize());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4885
		ctx.drawImage(this.getCanvas(), rect.x, rect.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4886
				rect.width, rect.height, 0, 0, rect.width, rect.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4887
		return ctx.canvas;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4888
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4889
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4890
	getSubRaster: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4891
		var rect = Rectangle.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4892
			raster = new Raster(Item.NO_INSERT);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4893
		raster.setImage(this.getSubCanvas(rect));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4894
		raster.translate(rect.getCenter().subtract(this.getSize().divide(2)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4895
		raster._matrix.preConcatenate(this._matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4896
		raster.insertAbove(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4897
		return raster;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4898
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4899
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4900
	toDataURL: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4901
		var src = this._image && this._image.src;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4902
		if (/^data:/.test(src))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4903
			return src;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4904
		var canvas = this.getCanvas();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4905
		return canvas ? canvas.toDataURL() : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4906
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4907
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4908
	drawImage: function(image ) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4909
		var point = Point.read(arguments, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4910
		this.getContext(true).drawImage(image, point.x, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4911
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4912
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4913
	getAverageColor: function(object) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4914
		var bounds, path;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4915
		if (!object) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4916
			bounds = this.getBounds();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4917
		} else if (object instanceof PathItem) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4918
			path = object;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4919
			bounds = object.getBounds();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4920
		} else if (object.width) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4921
			bounds = new Rectangle(object);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4922
		} else if (object.x) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4923
			bounds = new Rectangle(object.x - 0.5, object.y - 0.5, 1, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4924
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4925
		var sampleSize = 32,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4926
			width = Math.min(bounds.width, sampleSize),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4927
			height = Math.min(bounds.height, sampleSize);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4928
		var ctx = Raster._sampleContext;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4929
		if (!ctx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4930
			ctx = Raster._sampleContext = CanvasProvider.getContext(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4931
					new Size(sampleSize));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4932
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4933
			ctx.clearRect(0, 0, sampleSize + 1, sampleSize + 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4934
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4935
		ctx.save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4936
		var matrix = new Matrix()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4937
				.scale(width / bounds.width, height / bounds.height)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4938
				.translate(-bounds.x, -bounds.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4939
		matrix.applyToContext(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4940
		if (path)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4941
			path.draw(ctx, new Base({ clip: true, matrices: [matrix] }));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4942
		this._matrix.applyToContext(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4943
		var element = this.getElement(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4944
			size = this._size;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4945
		if (element)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4946
			ctx.drawImage(element, -size.width / 2, -size.height / 2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4947
		ctx.restore();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4948
		var pixels = ctx.getImageData(0.5, 0.5, Math.ceil(width),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4949
				Math.ceil(height)).data,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4950
			channels = [0, 0, 0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4951
			total = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4952
		for (var i = 0, l = pixels.length; i < l; i += 4) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4953
			var alpha = pixels[i + 3];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4954
			total += alpha;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4955
			alpha /= 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4956
			channels[0] += pixels[i] * alpha;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4957
			channels[1] += pixels[i + 1] * alpha;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4958
			channels[2] += pixels[i + 2] * alpha;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4959
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4960
		for (var i = 0; i < 3; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4961
			channels[i] /= total;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4962
		return total ? Color.read(channels) : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4963
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4964
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4965
	getPixel: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4966
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4967
		var data = this.getContext().getImageData(point.x, point.y, 1, 1).data;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4968
		return new Color('rgb', [data[0] / 255, data[1] / 255, data[2] / 255],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4969
				data[3] / 255);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4970
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4971
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4972
	setPixel: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4973
		var point = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4974
			color = Color.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4975
			components = color._convert('rgb'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4976
			alpha = color._alpha,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4977
			ctx = this.getContext(true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4978
			imageData = ctx.createImageData(1, 1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4979
			data = imageData.data;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4980
		data[0] = components[0] * 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4981
		data[1] = components[1] * 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4982
		data[2] = components[2] * 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4983
		data[3] = alpha != null ? alpha * 255 : 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4984
		ctx.putImageData(imageData, point.x, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4985
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4986
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4987
	createImageData: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4988
		var size = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4989
		return this.getContext().createImageData(size.width, size.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4990
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4991
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4992
	getImageData: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4993
		var rect = Rectangle.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4994
		if (rect.isEmpty())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4995
			rect = new Rectangle(this._size);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4996
		return this.getContext().getImageData(rect.x, rect.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4997
				rect.width, rect.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4998
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  4999
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5000
	setImageData: function(data ) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5001
		var point = Point.read(arguments, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5002
		this.getContext(true).putImageData(data, point.x, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5003
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5004
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5005
	_getBounds: function(getter, matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5006
		var rect = new Rectangle(this._size).setCenter(0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5007
		return matrix ? matrix._transformBounds(rect) : rect;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5008
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5009
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5010
	_hitTestSelf: function(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5011
		if (this._contains(point)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5012
			var that = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5013
			return new HitResult('pixel', that, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5014
				offset: point.add(that._size.divide(2)).round(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5015
				color: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5016
					get: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5017
						return that.getPixel(this.offset);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5018
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5019
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5020
			});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5021
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5022
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5023
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5024
	_draw: function(ctx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5025
		var element = this.getElement();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5026
		if (element) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5027
			ctx.globalAlpha = this._opacity;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5028
			ctx.drawImage(element,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5029
					-this._size.width / 2, -this._size.height / 2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5030
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5031
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5032
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5033
	_canComposite: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5034
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5035
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5036
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5037
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5038
var PlacedSymbol = Item.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5039
	_class: 'PlacedSymbol',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5040
	_applyMatrix: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5041
	_canApplyMatrix: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5042
	_boundsGetter: { getBounds: 'getStrokeBounds' },
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5043
	_boundsSelected: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5044
	_serializeFields: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5045
		symbol: null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5046
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5047
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5048
	initialize: function PlacedSymbol(arg0, arg1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5049
		if (!this._initialize(arg0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5050
				arg1 !== undefined && Point.read(arguments, 1)))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5051
			this.setSymbol(arg0 instanceof Symbol ? arg0 : new Symbol(arg0));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5052
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5053
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5054
	_equals: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5055
		return this._symbol === item._symbol;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5056
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5057
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5058
	getSymbol: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5059
		return this._symbol;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5060
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5061
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5062
	setSymbol: function(symbol) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5063
		this._symbol = symbol;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5064
		this._changed(9);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5065
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5066
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5067
	clone: function(insert) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5068
		var copy = new PlacedSymbol(Item.NO_INSERT);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5069
		copy.setSymbol(this._symbol);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5070
		return this._clone(copy, insert);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5071
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5072
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5073
	isEmpty: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5074
		return this._symbol._definition.isEmpty();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5075
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5076
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5077
	_getBounds: function(getter, matrix, cacheItem) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5078
		var definition = this.symbol._definition;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5079
		return definition._getCachedBounds(getter,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5080
				matrix && matrix.chain(definition._matrix), cacheItem);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5081
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5082
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5083
	_hitTestSelf: function(point, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5084
		var res = this._symbol._definition._hitTest(point, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5085
		if (res)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5086
			res.item = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5087
		return res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5088
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5089
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5090
	_draw: function(ctx, param) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5091
		this.symbol._definition.draw(ctx, param);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5092
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5093
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5094
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5095
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5096
var HitResult = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5097
	_class: 'HitResult',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5098
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5099
	initialize: function HitResult(type, item, values) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5100
		this.type = type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5101
		this.item = item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5102
		if (values) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5103
			values.enumerable = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5104
			this.inject(values);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5105
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5106
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5107
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5108
	statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5109
		getOptions: function(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5110
			return new Base({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5111
				type: null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5112
				tolerance: paper.settings.hitTolerance,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5113
				fill: !options,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5114
				stroke: !options,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5115
				segments: !options,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5116
				handles: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5117
				ends: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5118
				center: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5119
				bounds: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5120
				guides: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5121
				selected: false
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5122
			}, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5123
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5124
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5125
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5126
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5127
var Segment = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5128
	_class: 'Segment',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5129
	beans: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5130
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5131
	initialize: function Segment(arg0, arg1, arg2, arg3, arg4, arg5) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5132
		var count = arguments.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5133
			point, handleIn, handleOut;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5134
		if (count === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5135
		} else if (count === 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5136
			if (arg0.point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5137
				point = arg0.point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5138
				handleIn = arg0.handleIn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5139
				handleOut = arg0.handleOut;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5140
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5141
				point = arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5142
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5143
		} else if (count === 2 && typeof arg0 === 'number') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5144
			point = arguments;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5145
		} else if (count <= 3) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5146
			point = arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5147
			handleIn = arg1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5148
			handleOut = arg2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5149
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5150
			point = arg0 !== undefined ? [ arg0, arg1 ] : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5151
			handleIn = arg2 !== undefined ? [ arg2, arg3 ] : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5152
			handleOut = arg4 !== undefined ? [ arg4, arg5 ] : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5153
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5154
		new SegmentPoint(point, this, '_point');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5155
		new SegmentPoint(handleIn, this, '_handleIn');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5156
		new SegmentPoint(handleOut, this, '_handleOut');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5157
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5158
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5159
	_serialize: function(options) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5160
		return Base.serialize(this.isStraight() ? this._point
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5161
				: [this._point, this._handleIn, this._handleOut],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5162
				options, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5163
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5164
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5165
	_changed: function(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5166
		var path = this._path;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5167
		if (!path)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5168
			return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5169
		var curves = path._curves,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5170
			index = this._index,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5171
			curve;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5172
		if (curves) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5173
			if ((!point || point === this._point || point === this._handleIn)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5174
					&& (curve = index > 0 ? curves[index - 1] : path._closed
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5175
						? curves[curves.length - 1] : null))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5176
				curve._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5177
			if ((!point || point === this._point || point === this._handleOut)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5178
					&& (curve = curves[index]))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5179
				curve._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5180
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5181
		path._changed(25);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5182
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5183
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5184
	getPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5185
		return this._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5186
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5187
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5188
	setPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5189
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5190
		this._point.set(point.x, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5191
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5192
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5193
	getHandleIn: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5194
		return this._handleIn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5195
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5196
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5197
	setHandleIn: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5198
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5199
		this._handleIn.set(point.x, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5200
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5201
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5202
	getHandleOut: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5203
		return this._handleOut;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5204
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5205
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5206
	setHandleOut: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5207
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5208
		this._handleOut.set(point.x, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5209
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5210
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5211
	hasHandles: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5212
		return !this.isStraight();
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5213
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5214
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5215
	isStraight: function() {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5216
		return this._handleIn.isZero() && this._handleOut.isZero();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5217
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5218
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5219
	isLinear: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5220
		return Segment.isLinear(this, this.getNext());
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5221
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5222
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5223
	isCollinear: function(segment) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5224
		return Segment.isCollinear(this, this.getNext(),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5225
				segment, segment.getNext());
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5226
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5227
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5228
	isColinear: '#isCollinear',
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5229
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5230
	isOrthogonal: function() {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5231
		return Segment.isOrthogonal(this.getPrevious(), this, this.getNext());
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5232
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5233
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5234
	isOrthogonalArc: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5235
		return Segment.isOrthogonalArc(this, this.getNext());
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5236
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5237
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5238
	isArc: '#isOrthogonalArc',
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5239
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5240
	_selectionState: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5241
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5242
	isSelected: function(_point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5243
		var state = this._selectionState;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5244
		return !_point ? !!(state & 7)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5245
			: _point === this._point ? !!(state & 4)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5246
			: _point === this._handleIn ? !!(state & 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5247
			: _point === this._handleOut ? !!(state & 2)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5248
			: false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5249
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5250
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5251
	setSelected: function(selected, _point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5252
		var path = this._path,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5253
			selected = !!selected,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5254
			state = this._selectionState,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5255
			oldState = state,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5256
			flag = !_point ? 7
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5257
					: _point === this._point ? 4
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5258
					: _point === this._handleIn ? 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5259
					: _point === this._handleOut ? 2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5260
					: 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5261
		if (selected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5262
			state |= flag;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5263
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5264
			state &= ~flag;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5265
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5266
		this._selectionState = state;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5267
		if (path && state !== oldState) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5268
			path._updateSelection(this, oldState, state);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5269
			path._changed(129);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5270
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5271
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5272
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5273
	getIndex: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5274
		return this._index !== undefined ? this._index : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5275
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5276
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5277
	getPath: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5278
		return this._path || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5279
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5280
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5281
	getCurve: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5282
		var path = this._path,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5283
			index = this._index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5284
		if (path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5285
			if (index > 0 && !path._closed
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5286
					&& index === path._segments.length - 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5287
				index--;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5288
			return path.getCurves()[index] || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5289
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5290
		return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5291
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5292
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5293
	getLocation: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5294
		var curve = this.getCurve();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5295
		return curve
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5296
				? new CurveLocation(curve, this === curve._segment1 ? 0 : 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5297
				: null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5298
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5299
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5300
	getNext: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5301
		var segments = this._path && this._path._segments;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5302
		return segments && (segments[this._index + 1]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5303
				|| this._path._closed && segments[0]) || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5304
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5305
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5306
	getPrevious: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5307
		var segments = this._path && this._path._segments;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5308
		return segments && (segments[this._index - 1]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5309
				|| this._path._closed && segments[segments.length - 1]) || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5310
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5311
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5312
	reverse: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5313
		return new Segment(this._point, this._handleOut, this._handleIn);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5314
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5315
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5316
	remove: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5317
		return this._path ? !!this._path.removeSegment(this._index) : false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5318
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5319
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5320
	clone: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5321
		return new Segment(this._point, this._handleIn, this._handleOut);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5322
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5323
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5324
	equals: function(segment) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5325
		return segment === this || segment && this._class === segment._class
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5326
				&& this._point.equals(segment._point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5327
				&& this._handleIn.equals(segment._handleIn)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5328
				&& this._handleOut.equals(segment._handleOut)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5329
				|| false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5330
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5331
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5332
	toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5333
		var parts = [ 'point: ' + this._point ];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5334
		if (!this._handleIn.isZero())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5335
			parts.push('handleIn: ' + this._handleIn);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5336
		if (!this._handleOut.isZero())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5337
			parts.push('handleOut: ' + this._handleOut);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5338
		return '{ ' + parts.join(', ') + ' }';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5339
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5340
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5341
	transform: function(matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5342
		this._transformCoordinates(matrix, new Array(6), true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5343
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5344
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5345
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5346
	_transformCoordinates: function(matrix, coords, change) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5347
		var point = this._point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5348
			handleIn = !change || !this._handleIn.isZero()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5349
					? this._handleIn : null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5350
			handleOut = !change || !this._handleOut.isZero()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5351
					? this._handleOut : null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5352
			x = point._x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5353
			y = point._y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5354
			i = 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5355
		coords[0] = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5356
		coords[1] = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5357
		if (handleIn) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5358
			coords[i++] = handleIn._x + x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5359
			coords[i++] = handleIn._y + y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5360
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5361
		if (handleOut) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5362
			coords[i++] = handleOut._x + x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5363
			coords[i++] = handleOut._y + y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5364
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5365
		if (matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5366
			matrix._transformCoordinates(coords, coords, i / 2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5367
			x = coords[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5368
			y = coords[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5369
			if (change) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5370
				point._x = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5371
				point._y = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5372
				i  = 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5373
				if (handleIn) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5374
					handleIn._x = coords[i++] - x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5375
					handleIn._y = coords[i++] - y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5376
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5377
				if (handleOut) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5378
					handleOut._x = coords[i++] - x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5379
					handleOut._y = coords[i++] - y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5380
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5381
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5382
				if (!handleIn) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5383
					coords[i++] = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5384
					coords[i++] = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5385
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5386
				if (!handleOut) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5387
					coords[i++] = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5388
					coords[i++] = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5389
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5390
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5391
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5392
		return coords;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5393
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5394
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5395
   statics: {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5396
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5397
		isLinear: function(seg1, seg2) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5398
			var l = seg2._point.subtract(seg1._point);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5399
			return l.isCollinear(seg1._handleOut)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5400
					&& l.isCollinear(seg2._handleIn);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5401
		},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5402
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5403
		isCollinear: function(seg1, seg2, seg3, seg4) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5404
			return seg1._handleOut.isZero() && seg2._handleIn.isZero()
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5405
					&& seg3._handleOut.isZero() && seg4._handleIn.isZero()
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5406
					&& seg2._point.subtract(seg1._point).isCollinear(
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5407
						seg4._point.subtract(seg3._point));
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5408
		},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5409
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5410
		isOrthogonal: function(seg1, seg2, seg3) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5411
			return seg1._handleOut.isZero() && seg2._handleIn.isZero()
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5412
				&& seg2._handleOut.isZero() && seg3._handleIn.isZero()
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5413
				&& seg2._point.subtract(seg1._point).isOrthogonal(
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5414
						seg3._point.subtract(seg2._point));
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5415
		},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5416
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5417
		isOrthogonalArc: function(seg1, seg2) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5418
			var handle1 = seg1._handleOut,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5419
				handle2 = seg2._handleIn,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5420
				kappa = 0.5522847498307936;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5421
			if (handle1.isOrthogonal(handle2)) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5422
				var pt1 = seg1._point,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5423
					pt2 = seg2._point,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5424
					corner = new Line(pt1, handle1, true).intersect(
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5425
							new Line(pt2, handle2, true), true);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5426
				return corner && Numerical.isZero(handle1.getLength() /
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5427
						corner.subtract(pt1).getLength() - kappa)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5428
					&& Numerical.isZero(handle2.getLength() /
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5429
						corner.subtract(pt2).getLength() - kappa);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5430
			}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5431
			return false;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5432
		},
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5433
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5434
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5435
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5436
var SegmentPoint = Point.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5437
	initialize: function SegmentPoint(point, owner, key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5438
		var x, y, selected;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5439
		if (!point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5440
			x = y = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5441
		} else if ((x = point[0]) !== undefined) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5442
			y = point[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5443
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5444
			var pt = point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5445
			if ((x = pt.x) === undefined) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5446
				pt = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5447
				x = pt.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5448
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5449
			y = pt.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5450
			selected = pt.selected;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5451
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5452
		this._x = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5453
		this._y = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5454
		this._owner = owner;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5455
		owner[key] = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5456
		if (selected)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5457
			this.setSelected(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5458
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5459
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5460
	set: function(x, y) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5461
		this._x = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5462
		this._y = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5463
		this._owner._changed(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5464
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5465
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5466
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5467
	_serialize: function(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5468
		var f = options.formatter,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5469
			x = f.number(this._x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5470
			y = f.number(this._y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5471
		return this.isSelected()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5472
				? { x: x, y: y, selected: true }
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5473
				: [x, y];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5474
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5475
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5476
	getX: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5477
		return this._x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5478
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5479
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5480
	setX: function(x) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5481
		this._x = x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5482
		this._owner._changed(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5483
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5484
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5485
	getY: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5486
		return this._y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5487
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5488
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5489
	setY: function(y) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5490
		this._y = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5491
		this._owner._changed(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5492
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5493
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5494
	isZero: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5495
		return Numerical.isZero(this._x) && Numerical.isZero(this._y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5496
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5497
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5498
	setSelected: function(selected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5499
		this._owner.setSelected(selected, this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5500
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5501
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5502
	isSelected: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5503
		return this._owner.isSelected(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5504
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5505
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5506
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5507
var Curve = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5508
	_class: 'Curve',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5509
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5510
	initialize: function Curve(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5511
		var count = arguments.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5512
		if (count === 3) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5513
			this._path = arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5514
			this._segment1 = arg1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5515
			this._segment2 = arg2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5516
		} else if (count === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5517
			this._segment1 = new Segment();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5518
			this._segment2 = new Segment();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5519
		} else if (count === 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5520
			this._segment1 = new Segment(arg0.segment1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5521
			this._segment2 = new Segment(arg0.segment2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5522
		} else if (count === 2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5523
			this._segment1 = new Segment(arg0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5524
			this._segment2 = new Segment(arg1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5525
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5526
			var point1, handle1, handle2, point2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5527
			if (count === 4) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5528
				point1 = arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5529
				handle1 = arg1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5530
				handle2 = arg2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5531
				point2 = arg3;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5532
			} else if (count === 8) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5533
				point1 = [arg0, arg1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5534
				point2 = [arg6, arg7];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5535
				handle1 = [arg2 - arg0, arg3 - arg1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5536
				handle2 = [arg4 - arg6, arg5 - arg7];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5537
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5538
			this._segment1 = new Segment(point1, null, handle1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5539
			this._segment2 = new Segment(point2, handle2, null);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5540
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5541
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5542
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5543
	_changed: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5544
		this._length = this._bounds = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5545
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5546
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5547
	getPoint1: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5548
		return this._segment1._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5549
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5550
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5551
	setPoint1: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5552
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5553
		this._segment1._point.set(point.x, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5554
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5555
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5556
	getPoint2: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5557
		return this._segment2._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5558
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5559
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5560
	setPoint2: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5561
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5562
		this._segment2._point.set(point.x, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5563
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5564
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5565
	getHandle1: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5566
		return this._segment1._handleOut;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5567
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5568
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5569
	setHandle1: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5570
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5571
		this._segment1._handleOut.set(point.x, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5572
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5573
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5574
	getHandle2: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5575
		return this._segment2._handleIn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5576
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5577
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5578
	setHandle2: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5579
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5580
		this._segment2._handleIn.set(point.x, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5581
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5582
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5583
	getSegment1: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5584
		return this._segment1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5585
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5586
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5587
	getSegment2: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5588
		return this._segment2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5589
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5590
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5591
	getPath: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5592
		return this._path;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5593
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5594
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5595
	getIndex: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5596
		return this._segment1._index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5597
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5598
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5599
	getNext: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5600
		var curves = this._path && this._path._curves;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5601
		return curves && (curves[this._segment1._index + 1]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5602
				|| this._path._closed && curves[0]) || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5603
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5604
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5605
	getPrevious: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5606
		var curves = this._path && this._path._curves;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5607
		return curves && (curves[this._segment1._index - 1]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5608
				|| this._path._closed && curves[curves.length - 1]) || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5609
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5610
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5611
	isSelected: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5612
		return this.getPoint1().isSelected()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5613
				&& this.getHandle2().isSelected()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5614
				&& this.getHandle2().isSelected()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5615
				&& this.getPoint2().isSelected();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5616
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5617
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5618
	setSelected: function(selected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5619
		this.getPoint1().setSelected(selected);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5620
		this.getHandle1().setSelected(selected);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5621
		this.getHandle2().setSelected(selected);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5622
		this.getPoint2().setSelected(selected);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5623
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5624
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5625
	getValues: function(matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5626
		return Curve.getValues(this._segment1, this._segment2, matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5627
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5628
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5629
	getPoints: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5630
		var coords = this.getValues(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5631
			points = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5632
		for (var i = 0; i < 8; i += 2)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5633
			points.push(new Point(coords[i], coords[i + 1]));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5634
		return points;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5635
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5636
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5637
	getLength: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5638
		if (this._length == null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5639
			this._length = this.isLinear()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5640
				? this._segment2._point.getDistance(this._segment1._point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5641
				: Curve.getLength(this.getValues(), 0, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5642
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5643
		return this._length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5644
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5645
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5646
	getArea: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5647
		return Curve.getArea(this.getValues());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5648
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5649
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5650
	getPart: function(from, to) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5651
		return new Curve(Curve.getPart(this.getValues(), from, to));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5652
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5653
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5654
	getPartLength: function(from, to) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5655
		return Curve.getLength(this.getValues(), from, to);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5656
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5657
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5658
	hasHandles: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5659
		return !this._segment1._handleOut.isZero()
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5660
				|| !this._segment2._handleIn.isZero();
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5661
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5662
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5663
	isLinear: function() {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5664
		return Segment.isLinear(this._segment1, this._segment2);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5665
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5666
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5667
	isCollinear: function(curve) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5668
		return Ssegment.isCollinear(this._segment1, this._segment2,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5669
				curve._segment1, curve._segment2);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5670
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5671
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5672
	isOrthogonalArc: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5673
		return Segment.isOrthogonalArc(this._segment1, this._segment2);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5674
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5675
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5676
	getIntersections: function(curve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5677
		return Curve.filterIntersections(Curve.getIntersections(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5678
				this.getValues(), curve.getValues(), this, curve, []));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5679
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5680
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5681
	_getParameter: function(offset, isParameter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5682
		return isParameter
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5683
				? offset
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5684
				: offset && offset.curve === this
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5685
					? offset.parameter
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5686
					: offset === undefined && isParameter === undefined
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5687
						? 0.5
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5688
						: this.getParameterAt(offset, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5689
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5690
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5691
	divide: function(offset, isParameter, ignoreLinear) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5692
		var parameter = this._getParameter(offset, isParameter),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5693
			tolerance = 0.000001,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5694
			res = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5695
		if (parameter > tolerance && parameter < 1 - tolerance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5696
			var parts = Curve.subdivide(this.getValues(), parameter),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5697
				isLinear = ignoreLinear ? false : this.isLinear(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5698
				left = parts[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5699
				right = parts[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5700
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5701
			if (!isLinear) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5702
				this._segment1._handleOut.set(left[2] - left[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5703
						left[3] - left[1]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5704
				this._segment2._handleIn.set(right[4] - right[6],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5705
						right[5] - right[7]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5706
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5707
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5708
			var x = left[6], y = left[7],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5709
				segment = new Segment(new Point(x, y),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5710
						!isLinear && new Point(left[4] - x, left[5] - y),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5711
						!isLinear && new Point(right[2] - x, right[3] - y));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5712
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5713
			if (this._path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5714
				if (this._segment1._index > 0 && this._segment2._index === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5715
					this._path.add(segment);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5716
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5717
					this._path.insert(this._segment2._index, segment);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5718
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5719
				res = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5720
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5721
				var end = this._segment2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5722
				this._segment2 = segment;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5723
				res = new Curve(segment, end);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5724
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5725
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5726
		return res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5727
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5728
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5729
	split: function(offset, isParameter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5730
		return this._path
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5731
			? this._path.split(this._segment1._index,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5732
					this._getParameter(offset, isParameter))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5733
			: null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5734
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5735
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5736
	reverse: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5737
		return new Curve(this._segment2.reverse(), this._segment1.reverse());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5738
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5739
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5740
	remove: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5741
		var removed = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5742
		if (this._path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5743
			var segment2 = this._segment2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5744
				handleOut = segment2._handleOut;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5745
			removed = segment2.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5746
			if (removed)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5747
				this._segment1._handleOut.set(handleOut.x, handleOut.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5748
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5749
		return removed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5750
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5751
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5752
	clone: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5753
		return new Curve(this._segment1, this._segment2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5754
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5755
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5756
	toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5757
		var parts = [ 'point1: ' + this._segment1._point ];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5758
		if (!this._segment1._handleOut.isZero())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5759
			parts.push('handle1: ' + this._segment1._handleOut);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5760
		if (!this._segment2._handleIn.isZero())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5761
			parts.push('handle2: ' + this._segment2._handleIn);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5762
		parts.push('point2: ' + this._segment2._point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5763
		return '{ ' + parts.join(', ') + ' }';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5764
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5765
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5766
statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5767
	getValues: function(segment1, segment2, matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5768
		var p1 = segment1._point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5769
			h1 = segment1._handleOut,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5770
			h2 = segment2._handleIn,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5771
			p2 = segment2._point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5772
			values = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5773
				p1._x, p1._y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5774
				p1._x + h1._x, p1._y + h1._y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5775
				p2._x + h2._x, p2._y + h2._y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5776
				p2._x, p2._y
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5777
			];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5778
		if (matrix)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5779
			matrix._transformCoordinates(values, values, 4);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5780
		return values;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5781
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5782
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5783
	subdivide: function(v, t) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5784
		var p1x = v[0], p1y = v[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5785
			c1x = v[2], c1y = v[3],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5786
			c2x = v[4], c2y = v[5],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5787
			p2x = v[6], p2y = v[7];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5788
		if (t === undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5789
			t = 0.5;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5790
		var u = 1 - t,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5791
			p3x = u * p1x + t * c1x, p3y = u * p1y + t * c1y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5792
			p4x = u * c1x + t * c2x, p4y = u * c1y + t * c2y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5793
			p5x = u * c2x + t * p2x, p5y = u * c2y + t * p2y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5794
			p6x = u * p3x + t * p4x, p6y = u * p3y + t * p4y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5795
			p7x = u * p4x + t * p5x, p7y = u * p4y + t * p5y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5796
			p8x = u * p6x + t * p7x, p8y = u * p6y + t * p7y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5797
		return [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5798
			[p1x, p1y, p3x, p3y, p6x, p6y, p8x, p8y],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5799
			[p8x, p8y, p7x, p7y, p5x, p5y, p2x, p2y]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5800
		];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5801
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5802
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5803
	solveCubic: function (v, coord, val, roots, min, max) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5804
		var p1 = v[coord],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5805
			c1 = v[coord + 2],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5806
			c2 = v[coord + 4],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5807
			p2 = v[coord + 6],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5808
			c = 3 * (c1 - p1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5809
			b = 3 * (c2 - c1) - c,
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5810
			a = p2 - p1 - c - b;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5811
		return Numerical.solveCubic(a, b, c, p1 - val, roots, min, max);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5812
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5813
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5814
	getParameterOf: function(v, x, y) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5815
		var tolerance = 0.000001;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5816
		if (Math.abs(v[0] - x) < tolerance && Math.abs(v[1] - y) < tolerance)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5817
			return 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5818
		if (Math.abs(v[6] - x) < tolerance && Math.abs(v[7] - y) < tolerance)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5819
			return 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5820
		var txs = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5821
			tys = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5822
			sx = Curve.solveCubic(v, 0, x, txs, 0, 1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5823
			sy = Curve.solveCubic(v, 1, y, tys, 0, 1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5824
			tx, ty;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5825
		for (var cx = 0;  sx === -1 || cx < sx;) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5826
			if (sx === -1 || (tx = txs[cx++]) > 0 && tx < 1) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5827
				for (var cy = 0; sy === -1 || cy < sy;) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5828
					if (sy === -1 || (ty = tys[cy++]) > 0 && ty < 1) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5829
						if (sx === -1) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5830
							tx = ty;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5831
						} else if (sy === -1) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5832
							ty = tx;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5833
						}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5834
						if (Math.abs(tx - ty) < tolerance)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5835
							return (tx + ty) * 0.5;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5836
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5837
				}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5838
				if (sx === -1)
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5839
					break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5840
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5841
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5842
		return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5843
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5844
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5845
	getPart: function(v, from, to) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5846
		if (from > 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5847
			v = Curve.subdivide(v, from)[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5848
		if (to < 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5849
			v = Curve.subdivide(v, (to - from) / (1 - from))[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5850
		return v;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5851
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5852
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5853
	hasHandles: function(v) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5854
		var isZero = Numerical.isZero;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5855
		return !(isZero(v[0] - v[2]) && isZero(v[1] - v[3])
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5856
				&& isZero(v[4] - v[6]) && isZero(v[5] - v[7]));
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5857
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5858
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5859
	isLinear: function(v) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5860
		var p1x = v[0], p1y = v[1],
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5861
			p2x = v[6], p2y = v[7],
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5862
			l = new Point(p2x - p1x, p2y - p1y);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5863
		return l.isCollinear(new Point(v[2] - p1x, v[3] - p1y))
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5864
				&& l.isCollinear(new Point(v[4] - p2x, v[5] - p2y));
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5865
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5866
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5867
	isFlatEnough: function(v, tolerance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5868
		var p1x = v[0], p1y = v[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5869
			c1x = v[2], c1y = v[3],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5870
			c2x = v[4], c2y = v[5],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5871
			p2x = v[6], p2y = v[7],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5872
			ux = 3 * c1x - 2 * p1x - p2x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5873
			uy = 3 * c1y - 2 * p1y - p2y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5874
			vx = 3 * c2x - 2 * p2x - p1x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5875
			vy = 3 * c2y - 2 * p2y - p1y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5876
		return Math.max(ux * ux, vx * vx) + Math.max(uy * uy, vy * vy)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5877
				< 10 * tolerance * tolerance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5878
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5879
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5880
	getArea: function(v) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5881
		var p1x = v[0], p1y = v[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5882
			c1x = v[2], c1y = v[3],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5883
			c2x = v[4], c2y = v[5],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5884
			p2x = v[6], p2y = v[7];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5885
		return (  3.0 * c1y * p1x - 1.5 * c1y * c2x
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5886
				- 1.5 * c1y * p2x - 3.0 * p1y * c1x
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5887
				- 1.5 * p1y * c2x - 0.5 * p1y * p2x
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5888
				+ 1.5 * c2y * p1x + 1.5 * c2y * c1x
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5889
				- 3.0 * c2y * p2x + 0.5 * p2y * p1x
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5890
				+ 1.5 * p2y * c1x + 3.0 * p2y * c2x) / 10;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5891
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5892
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5893
	getEdgeSum: function(v) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5894
		return	  (v[0] - v[2]) * (v[3] + v[1])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5895
				+ (v[2] - v[4]) * (v[5] + v[3])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5896
				+ (v[4] - v[6]) * (v[7] + v[5]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5897
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5898
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5899
	getBounds: function(v) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5900
		var min = v.slice(0, 2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5901
			max = min.slice(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5902
			roots = [0, 0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5903
		for (var i = 0; i < 2; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5904
			Curve._addBounds(v[i], v[i + 2], v[i + 4], v[i + 6],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5905
					i, 0, min, max, roots);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5906
		return new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5907
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5908
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5909
	_addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5910
		function add(value, padding) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5911
			var left = value - padding,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5912
				right = value + padding;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5913
			if (left < min[coord])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5914
				min[coord] = left;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5915
			if (right > max[coord])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5916
				max[coord] = right;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5917
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5918
		var a = 3 * (v1 - v2) - v0 + v3,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5919
			b = 2 * (v0 + v2) - 4 * v1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5920
			c = v1 - v0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5921
			count = Numerical.solveQuadratic(a, b, c, roots),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5922
			tMin = 0.000001,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5923
			tMax = 1 - tMin;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5924
		add(v3, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5925
		for (var i = 0; i < count; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5926
			var t = roots[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5927
				u = 1 - t;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5928
			if (tMin < t && t < tMax)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5929
				add(u * u * u * v0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5930
					+ 3 * u * u * t * v1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5931
					+ 3 * u * t * t * v2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5932
					+ t * t * t * v3,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5933
					padding);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5934
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5935
	}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5936
}}, Base.each(
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5937
	['getBounds', 'getStrokeBounds', 'getHandleBounds', 'getRoughBounds'],
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5938
	function(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5939
		this[name] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5940
			if (!this._bounds)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5941
				this._bounds = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5942
			var bounds = this._bounds[name];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5943
			if (!bounds) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5944
				bounds = this._bounds[name] = Path[name]([this._segment1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5945
						this._segment2], false, this._path.getStyle());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5946
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5947
			return bounds.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5948
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5949
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5950
{
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5951
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5952
}), {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5953
	beans: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5954
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5955
	getParameterAt: function(offset, start) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5956
		return Curve.getParameterAt(this.getValues(), offset, start);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5957
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5958
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5959
	getParameterOf: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5960
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5961
		return Curve.getParameterOf(this.getValues(), point.x, point.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5962
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5963
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5964
	getLocationAt: function(offset, isParameter) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5965
		var t = isParameter ? offset : this.getParameterAt(offset);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5966
		return t != null && t >= 0 && t <= 1
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5967
				? new CurveLocation(this, t)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5968
				: null;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5969
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5970
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5971
	getLocationOf: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5972
		return this.getLocationAt(this.getParameterOf(Point.read(arguments)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5973
				true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5974
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5975
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5976
	getOffsetOf: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5977
		var loc = this.getLocationOf.apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5978
		return loc ? loc.getOffset() : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5979
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5980
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5981
	getNearestLocation: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5982
		var point = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5983
			values = this.getValues(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5984
			count = 100,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5985
			minDist = Infinity,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5986
			minT = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5987
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5988
		function refine(t) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5989
			if (t >= 0 && t <= 1) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  5990
				var dist = point.getDistance(Curve.getPoint(values, t), true);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5991
				if (dist < minDist) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5992
					minDist = dist;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5993
					minT = t;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5994
					return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5995
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5996
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5997
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5998
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  5999
		for (var i = 0; i <= count; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6000
			refine(i / count);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6001
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6002
		var step = 1 / (count * 2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6003
		while (step > 0.000001) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6004
			if (!refine(minT - step) && !refine(minT + step))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6005
				step /= 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6006
		}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6007
		var pt = Curve.getPoint(values, minT);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6008
		return new CurveLocation(this, minT, pt, null, null, null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6009
				point.getDistance(pt));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6010
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6011
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6012
	getNearestPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6013
		return this.getNearestLocation.apply(this, arguments).getPoint();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6014
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6015
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6016
},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6017
new function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6018
	var methods = ['getPoint', 'getTangent', 'getNormal', 'getWeightedTangent',
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6019
		'getWeightedNormal', 'getCurvature'];
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6020
	return Base.each(methods,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6021
	function(name) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6022
		this[name + 'At'] = function(offset, isParameter) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6023
			var values = this.getValues();
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6024
			return Curve[name](values, isParameter ? offset
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6025
					: Curve.getParameterAt(values, offset, 0));
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6026
		};
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6027
	}, {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6028
		statics: {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6029
			evaluateMethods: methods
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6030
		}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6031
	})
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6032
},
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6033
new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6034
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6035
	function getLengthIntegrand(v) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6036
		var p1x = v[0], p1y = v[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6037
			c1x = v[2], c1y = v[3],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6038
			c2x = v[4], c2y = v[5],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6039
			p2x = v[6], p2y = v[7],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6040
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6041
			ax = 9 * (c1x - c2x) + 3 * (p2x - p1x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6042
			bx = 6 * (p1x + c2x) - 12 * c1x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6043
			cx = 3 * (c1x - p1x),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6044
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6045
			ay = 9 * (c1y - c2y) + 3 * (p2y - p1y),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6046
			by = 6 * (p1y + c2y) - 12 * c1y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6047
			cy = 3 * (c1y - p1y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6048
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6049
		return function(t) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6050
			var dx = (ax * t + bx) * t + cx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6051
				dy = (ay * t + by) * t + cy;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6052
			return Math.sqrt(dx * dx + dy * dy);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6053
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6054
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6055
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6056
	function getIterations(a, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6057
		return Math.max(2, Math.min(16, Math.ceil(Math.abs(b - a) * 32)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6058
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6059
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6060
	function evaluate(v, t, type, normalized) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6061
		if (t == null || t < 0 || t > 1)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6062
			return null;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6063
		var p1x = v[0], p1y = v[1],
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6064
			c1x = v[2], c1y = v[3],
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6065
			c2x = v[4], c2y = v[5],
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6066
			p2x = v[6], p2y = v[7],
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6067
			tolerance = 0.000001,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6068
			x, y;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6069
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6070
		if (type === 0 && (t < tolerance || t > 1 - tolerance)) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6071
			var isZero = t < tolerance;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6072
			x = isZero ? p1x : p2x;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6073
			y = isZero ? p1y : p2y;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6074
		} else {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6075
			var cx = 3 * (c1x - p1x),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6076
				bx = 3 * (c2x - c1x) - cx,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6077
				ax = p2x - p1x - cx - bx,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6078
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6079
				cy = 3 * (c1y - p1y),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6080
				by = 3 * (c2y - c1y) - cy,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6081
				ay = p2y - p1y - cy - by;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6082
			if (type === 0) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6083
				x = ((ax * t + bx) * t + cx) * t + p1x;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6084
				y = ((ay * t + by) * t + cy) * t + p1y;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6085
			} else {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6086
				if (t < tolerance) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6087
					x = cx;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6088
					y = cy;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6089
				} else if (t > 1 - tolerance) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6090
					x = 3 * (p2x - c2x);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6091
					y = 3 * (p2y - c2y);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6092
				} else {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6093
					x = (3 * ax * t + 2 * bx) * t + cx;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6094
					y = (3 * ay * t + 2 * by) * t + cy;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6095
				}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6096
				if (normalized) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6097
					if (x === 0 && y === 0
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6098
							&& (t < tolerance || t > 1 - tolerance)) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6099
						x = c2x - c1x;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6100
						y = c2y - c1y;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6101
					}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6102
					var len = Math.sqrt(x * x + y * y);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6103
					x /= len;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6104
					y /= len;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6105
				}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6106
				if (type === 3) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6107
					var x2 = 6 * ax * t + 2 * bx,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6108
						y2 = 6 * ay * t + 2 * by,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6109
						d = Math.pow(x * x + y * y, 3 / 2);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6110
					x = d !== 0 ? (x * y2 - y * x2) / d : 0;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6111
					y = 0;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6112
				}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6113
			}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6114
		}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6115
		return type === 2 ? new Point(y, -x) : new Point(x, y);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6116
	}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6117
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6118
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6119
		statics: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6120
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6121
		getLength: function(v, a, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6122
			if (a === undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6123
				a = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6124
			if (b === undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6125
				b = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6126
			var isZero = Numerical.isZero;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6127
			if (a === 0 && b === 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6128
					&& isZero(v[0] - v[2]) && isZero(v[1] - v[3])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6129
					&& isZero(v[6] - v[4]) && isZero(v[7] - v[5])) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6130
				var dx = v[6] - v[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6131
					dy = v[7] - v[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6132
				return Math.sqrt(dx * dx + dy * dy);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6133
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6134
			var ds = getLengthIntegrand(v);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6135
			return Numerical.integrate(ds, a, b, getIterations(a, b));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6136
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6137
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6138
		getParameterAt: function(v, offset, start) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6139
			if (start === undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6140
				start = offset < 0 ? 1 : 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6141
			if (offset === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6142
				return start;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6143
			var tolerance = 0.000001,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6144
				abs = Math.abs,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6145
				forward = offset > 0,
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6146
				a = forward ? start : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6147
				b = forward ? 1 : start,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6148
				ds = getLengthIntegrand(v),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6149
				rangeLength = Numerical.integrate(ds, a, b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6150
						getIterations(a, b));
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6151
			if (abs(offset - rangeLength) < tolerance) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6152
				return forward ? b : a;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6153
			} else if (abs(offset) > rangeLength) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6154
				return null;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6155
			}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6156
			var guess = offset / rangeLength,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6157
				length = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6158
			function f(t) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6159
				length += Numerical.integrate(ds, start, t,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6160
						getIterations(start, t));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6161
				start = t;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6162
				return length - offset;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6163
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6164
			return Numerical.findRoot(f, ds, start + guess, a, b, 16,
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6165
					tolerance);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6166
		},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6167
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6168
		getPoint: function(v, t) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6169
			return evaluate(v, t, 0, false);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6170
		},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6171
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6172
		getTangent: function(v, t) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6173
			return evaluate(v, t, 1, true);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6174
		},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6175
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6176
		getWeightedTangent: function(v, t) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6177
			return evaluate(v, t, 1, false);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6178
		},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6179
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6180
		getNormal: function(v, t) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6181
			return evaluate(v, t, 2, true);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6182
		},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6183
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6184
		getWeightedNormal: function(v, t) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6185
			return evaluate(v, t, 2, false);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6186
		},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6187
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6188
		getCurvature: function(v, t) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6189
			return evaluate(v, t, 3, false).x;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6190
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6191
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6192
}, new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6193
	function addLocation(locations, include, curve1, t1, point1, curve2, t2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6194
			point2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6195
		var loc = new CurveLocation(curve1, t1, point1, curve2, t2, point2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6196
		if (!include || include(loc))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6197
			locations.push(loc);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6198
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6199
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6200
	function addCurveIntersections(v1, v2, curve1, curve2, locations, include,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6201
			tMin, tMax, uMin, uMax, oldTDiff, reverse, recursion) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6202
		if (recursion > 32)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6203
			return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6204
		var q0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6205
			tolerance = 0.000001,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6206
			getSignedDistance = Line.getSignedDistance,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6207
			d1 = getSignedDistance(q0x, q0y, q3x, q3y, v2[2], v2[3]) || 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6208
			d2 = getSignedDistance(q0x, q0y, q3x, q3y, v2[4], v2[5]) || 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6209
			factor = d1 * d2 > 0 ? 3 / 4 : 4 / 9,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6210
			dMin = factor * Math.min(0, d1, d2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6211
			dMax = factor * Math.max(0, d1, d2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6212
			dp0 = getSignedDistance(q0x, q0y, q3x, q3y, v1[0], v1[1]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6213
			dp1 = getSignedDistance(q0x, q0y, q3x, q3y, v1[2], v1[3]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6214
			dp2 = getSignedDistance(q0x, q0y, q3x, q3y, v1[4], v1[5]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6215
			dp3 = getSignedDistance(q0x, q0y, q3x, q3y, v1[6], v1[7]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6216
			tMinNew, tMaxNew, tDiff;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6217
		if (q0x === q3x && uMax - uMin < tolerance && recursion > 3) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6218
			tMaxNew = tMinNew = (tMax + tMin) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6219
			tDiff = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6220
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6221
			var hull = getConvexHull(dp0, dp1, dp2, dp3),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6222
				top = hull[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6223
				bottom = hull[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6224
				tMinClip, tMaxClip;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6225
			tMinClip = clipConvexHull(top, bottom, dMin, dMax);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6226
			top.reverse();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6227
			bottom.reverse();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6228
			tMaxClip = clipConvexHull(top, bottom, dMin, dMax);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6229
			if (tMinClip == null || tMaxClip == null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6230
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6231
			v1 = Curve.getPart(v1, tMinClip, tMaxClip);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6232
			tDiff = tMaxClip - tMinClip;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6233
			tMinNew = tMax * tMinClip + tMin * (1 - tMinClip);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6234
			tMaxNew = tMax * tMaxClip + tMin * (1 - tMaxClip);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6235
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6236
		if (oldTDiff > 0.5 && tDiff > 0.5) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6237
			if (tMaxNew - tMinNew > uMax - uMin) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6238
				var parts = Curve.subdivide(v1, 0.5),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6239
					t = tMinNew + (tMaxNew - tMinNew) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6240
				addCurveIntersections(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6241
					v2, parts[0], curve2, curve1, locations, include,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6242
					uMin, uMax, tMinNew, t, tDiff, !reverse, ++recursion);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6243
				addCurveIntersections(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6244
					v2, parts[1], curve2, curve1, locations, include,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6245
					uMin, uMax, t, tMaxNew, tDiff, !reverse, recursion);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6246
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6247
				var parts = Curve.subdivide(v2, 0.5),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6248
					t = uMin + (uMax - uMin) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6249
				addCurveIntersections(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6250
					parts[0], v1, curve2, curve1, locations, include,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6251
					uMin, t, tMinNew, tMaxNew, tDiff, !reverse, ++recursion);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6252
				addCurveIntersections(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6253
					parts[1], v1, curve2, curve1, locations, include,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6254
					t, uMax, tMinNew, tMaxNew, tDiff, !reverse, recursion);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6255
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6256
		} else if (Math.max(uMax - uMin, tMaxNew - tMinNew) < tolerance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6257
			var t1 = tMinNew + (tMaxNew - tMinNew) / 2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6258
				t2 = uMin + (uMax - uMin) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6259
			if (reverse) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6260
				addLocation(locations, include,
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6261
						curve2, t2, Curve.getPoint(v2, t2),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6262
						curve1, t1, Curve.getPoint(v1, t1));
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6263
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6264
				addLocation(locations, include,
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6265
						curve1, t1, Curve.getPoint(v1, t1),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6266
						curve2, t2, Curve.getPoint(v2, t2));
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6267
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6268
		} else if (tDiff > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6269
			addCurveIntersections(v2, v1, curve2, curve1, locations, include,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6270
					uMin, uMax, tMinNew, tMaxNew, tDiff, !reverse, ++recursion);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6271
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6272
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6273
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6274
	function getConvexHull(dq0, dq1, dq2, dq3) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6275
		var p0 = [ 0, dq0 ],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6276
			p1 = [ 1 / 3, dq1 ],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6277
			p2 = [ 2 / 3, dq2 ],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6278
			p3 = [ 1, dq3 ],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6279
			getSignedDistance = Line.getSignedDistance,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6280
			dist1 = getSignedDistance(0, dq0, 1, dq3, 1 / 3, dq1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6281
			dist2 = getSignedDistance(0, dq0, 1, dq3, 2 / 3, dq2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6282
			flip = false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6283
			hull;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6284
		if (dist1 * dist2 < 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6285
			hull = [[p0, p1, p3], [p0, p2, p3]];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6286
			flip = dist1 < 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6287
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6288
			var pmax, cross = 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6289
				distZero = dist1 === 0 || dist2 === 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6290
			if (Math.abs(dist1) > Math.abs(dist2)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6291
				pmax = p1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6292
				cross = (dq3 - dq2 - (dq3 - dq0) / 3)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6293
						* (2 * (dq3 - dq2) - dq3 + dq1) / 3;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6294
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6295
				pmax = p2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6296
				cross = (dq1 - dq0 + (dq0 - dq3) / 3)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6297
						* (-2 * (dq0 - dq1) + dq0 - dq2) / 3;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6298
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6299
			hull = cross < 0 || distZero
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6300
					? [[p0, pmax, p3], [p0, p3]]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6301
					: [[p0, p1, p2, p3], [p0, p3]];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6302
			flip = dist1 ? dist1 < 0 : dist2 < 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6303
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6304
		return flip ? hull.reverse() : hull;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6305
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6306
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6307
	function clipConvexHull(hullTop, hullBottom, dMin, dMax) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6308
		if (hullTop[0][1] < dMin) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6309
			return clipConvexHullPart(hullTop, true, dMin);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6310
		} else if (hullBottom[0][1] > dMax) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6311
			return clipConvexHullPart(hullBottom, false, dMax);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6312
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6313
			return hullTop[0][0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6314
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6315
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6316
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6317
	function clipConvexHullPart(part, top, threshold) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6318
		var px = part[0][0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6319
			py = part[0][1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6320
		for (var i = 1, l = part.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6321
			var qx = part[i][0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6322
				qy = part[i][1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6323
			if (top ? qy >= threshold : qy <= threshold)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6324
				return px + (threshold - py) * (qx - px) / (qy - py);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6325
			px = qx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6326
			py = qy;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6327
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6328
		return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6329
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6330
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6331
	function addCurveLineIntersections(v1, v2, curve1, curve2, locations,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6332
			include) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6333
		var flip = Curve.isLinear(v1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6334
			vc = flip ? v2 : v1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6335
			vl = flip ? v1 : v2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6336
			lx1 = vl[0], ly1 = vl[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6337
			lx2 = vl[6], ly2 = vl[7],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6338
			ldx = lx2 - lx1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6339
			ldy = ly2 - ly1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6340
			angle = Math.atan2(-ldy, ldx),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6341
			sin = Math.sin(angle),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6342
			cos = Math.cos(angle),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6343
			rlx2 = ldx * cos - ldy * sin,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6344
			rvl = [0, 0, 0, 0, rlx2, 0, rlx2, 0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6345
			rvc = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6346
		for(var i = 0; i < 8; i += 2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6347
			var x = vc[i] - lx1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6348
				y = vc[i + 1] - ly1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6349
			rvc.push(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6350
				x * cos - y * sin,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6351
				y * cos + x * sin);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6352
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6353
		var roots = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6354
			count = Curve.solveCubic(rvc, 1, 0, roots, 0, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6355
		for (var i = 0; i < count; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6356
			var tc = roots[i],
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6357
				x = Curve.getPoint(rvc, tc).x;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6358
			if (x >= 0 && x <= rlx2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6359
				var tl = Curve.getParameterOf(rvl, x, 0),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6360
					t1 = flip ? tl : tc,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6361
					t2 = flip ? tc : tl;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6362
				addLocation(locations, include,
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6363
						curve1, t1, Curve.getPoint(v1, t1),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6364
						curve2, t2, Curve.getPoint(v2, t2));
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6365
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6366
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6367
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6368
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6369
	function addLineIntersection(v1, v2, curve1, curve2, locations, include) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6370
		var point = Line.intersect(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6371
				v1[0], v1[1], v1[6], v1[7],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6372
				v2[0], v2[1], v2[6], v2[7]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6373
		if (point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6374
			var x = point.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6375
				y = point.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6376
			addLocation(locations, include,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6377
					curve1, Curve.getParameterOf(v1, x, y), point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6378
					curve2, Curve.getParameterOf(v2, x, y), point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6379
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6380
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6381
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6382
	return { statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6383
		getIntersections: function(v1, v2, c1, c2, locations, include) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6384
			var linear1 = Curve.isLinear(v1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6385
				linear2 = Curve.isLinear(v2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6386
				c1p1 = c1.getPoint1(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6387
				c1p2 = c1.getPoint2(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6388
				c2p1 = c2.getPoint1(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6389
				c2p2 = c2.getPoint2(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6390
				tolerance = 0.000001;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6391
			if (c1p1.isClose(c2p1, tolerance))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6392
				addLocation(locations, include, c1, 0, c1p1, c2, 0, c1p1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6393
			if (c1p1.isClose(c2p2, tolerance))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6394
				addLocation(locations, include, c1, 0, c1p1, c2, 1, c1p1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6395
			(linear1 && linear2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6396
				? addLineIntersection
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6397
				: linear1 || linear2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6398
					? addCurveLineIntersections
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6399
					: addCurveIntersections)(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6400
						v1, v2, c1, c2, locations, include,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6401
						0, 1, 0, 1, 0, false, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6402
			if (c1p2.isClose(c2p1, tolerance))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6403
				addLocation(locations, include, c1, 1, c1p2, c2, 0, c1p2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6404
			if (c1p2.isClose(c2p2, tolerance))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6405
				addLocation(locations, include, c1, 1, c1p2, c2, 1, c1p2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6406
			return locations;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6407
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6408
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6409
		filterIntersections: function(locations, _expand) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6410
			var last = locations.length - 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6411
				tMax = 1 - 0.000001;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6412
			for (var i = last; i >= 0; i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6413
				var loc = locations[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6414
					next = loc._curve.getNext(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6415
					next2 = loc._curve2.getNext();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6416
				if (next && loc._parameter >= tMax) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6417
					loc._parameter = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6418
					loc._curve = next;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6419
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6420
				if (next2 && loc._parameter2 >= tMax) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6421
					loc._parameter2 = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6422
					loc._curve2 = next2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6423
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6424
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6425
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6426
			function compare(loc1, loc2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6427
				var path1 = loc1.getPath(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6428
					path2 = loc2.getPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6429
				return path1 === path2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6430
						? (loc1.getIndex() + loc1.getParameter())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6431
								- (loc2.getIndex() + loc2.getParameter())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6432
						: path1._id - path2._id;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6433
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6434
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6435
			if (last > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6436
				locations.sort(compare);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6437
				for (var i = last; i > 0; i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6438
					if (locations[i].equals(locations[i - 1])) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6439
						locations.splice(i, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6440
						last--;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6441
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6442
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6443
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6444
			if (_expand) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6445
				for (var i = last; i >= 0; i--)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6446
					locations.push(locations[i].getIntersection());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6447
				locations.sort(compare);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6448
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6449
			return locations;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6450
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6451
	}};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6452
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6453
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6454
var CurveLocation = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6455
	_class: 'CurveLocation',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6456
	beans: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6457
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6458
	initialize: function CurveLocation(curve, parameter, point, _curve2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6459
			_parameter2, _point2, _distance) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6460
		this._id = UID.get(CurveLocation);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6461
		var path = curve._path;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6462
		this._version = path ? path._version : 0;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6463
		this._curve = curve;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6464
		this._parameter = parameter;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6465
		this._point = point || curve.getPointAt(parameter, true);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6466
		this._curve2 = _curve2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6467
		this._parameter2 = _parameter2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6468
		this._point2 = _point2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6469
		this._distance = _distance;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6470
		this._segment1 = curve._segment1;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6471
		this._segment2 = curve._segment2;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6472
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6473
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6474
	getSegment: function(_preferFirst) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6475
		if (!this._segment) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6476
			var curve = this.getCurve(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6477
				parameter = this.getParameter();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6478
			if (parameter === 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6479
				this._segment = curve._segment2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6480
			} else if (parameter === 0 || _preferFirst) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6481
				this._segment = curve._segment1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6482
			} else if (parameter == null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6483
				return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6484
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6485
				this._segment = curve.getPartLength(0, parameter)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6486
					< curve.getPartLength(parameter, 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6487
						? curve._segment1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6488
						: curve._segment2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6489
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6490
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6491
		return this._segment;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6492
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6493
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6494
	getCurve: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6495
		var curve = this._curve,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6496
			path = curve && curve._path;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6497
		if (path && path._version !== this._version) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6498
			curve = null;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6499
			this._parameter = null;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6500
		}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6501
		if (!curve) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6502
			curve = this._segment1.getCurve();
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6503
			if (curve.getParameterOf(this._point) == null)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6504
				curve = this._segment2.getPrevious().getCurve();
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6505
			this._curve = curve;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6506
			path = curve._path;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6507
			this._version = path ? path._version : 0;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6508
		}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6509
		return curve;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6510
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6511
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6512
	getPath: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6513
		var curve = this.getCurve();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6514
		return curve && curve._path;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6515
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6516
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6517
	getIndex: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6518
		var curve = this.getCurve();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6519
		return curve && curve.getIndex();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6520
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6521
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6522
	getParameter: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6523
		var curve = this.getCurve(),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6524
			parameter = this._parameter;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6525
		return curve && parameter == null
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6526
			? this._parameter = curve.getParameterOf(this._point)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6527
			: parameter;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6528
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6529
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6530
	getPoint: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6531
		return this._point;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6532
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6533
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6534
	getOffset: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6535
		var path = this.getPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6536
		return path ? path._getOffset(this) : this.getCurveOffset();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6537
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6538
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6539
	getCurveOffset: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6540
		var curve = this.getCurve(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6541
			parameter = this.getParameter();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6542
		return parameter != null && curve && curve.getPartLength(0, parameter);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6543
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6544
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6545
	getIntersection: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6546
		var intersection = this._intersection;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6547
		if (!intersection && this._curve2) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6548
			this._intersection = intersection = new CurveLocation(this._curve2,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6549
					this._parameter2, this._point2 || this._point, this);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6550
			intersection._intersection = this;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6551
		}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6552
		return intersection;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6553
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6554
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6555
	getDistance: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6556
		return this._distance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6557
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6558
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6559
	divide: function() {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6560
		var curve = this.getCurve();
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6561
		return curve && curve.divide(this.getParameter(), true);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6562
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6563
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6564
	split: function() {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6565
		var curve = this.getCurve();
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6566
		return curve && curve.split(this.getParameter(), true);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6567
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6568
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6569
	equals: function(loc) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6570
		var abs = Math.abs,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6571
			tolerance = 0.000001;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6572
		return this === loc
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6573
				|| loc instanceof CurveLocation
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6574
					&& this.getCurve() === loc.getCurve()
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6575
					&& abs(this.getParameter() - loc.getParameter()) < tolerance
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6576
					&& this._curve2 === loc._curve2
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6577
					&& abs(this._parameter2 - loc._parameter2) < tolerance
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6578
				|| false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6579
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6580
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6581
	toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6582
		var parts = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6583
			point = this.getPoint(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6584
			f = Formatter.instance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6585
		if (point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6586
			parts.push('point: ' + point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6587
		var index = this.getIndex();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6588
		if (index != null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6589
			parts.push('index: ' + index);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6590
		var parameter = this.getParameter();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6591
		if (parameter != null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6592
			parts.push('parameter: ' + f.number(parameter));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6593
		if (this._distance != null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6594
			parts.push('distance: ' + f.number(this._distance));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6595
		return '{ ' + parts.join(', ') + ' }';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6596
	}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6597
}, Base.each(Curve.evaluateMethods, function(name) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6598
	if (name !== 'getPoint') {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6599
		var get = name + 'At';
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6600
		this[name] = function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6601
			var parameter = this.getParameter(),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6602
				curve = this.getCurve();
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6603
			return parameter != null && curve && curve[get](parameter, true);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6604
		};
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6605
	}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6606
}, {}));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6607
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6608
var PathItem = Item.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6609
	_class: 'PathItem',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6610
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6611
	initialize: function PathItem() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6612
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6613
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6614
	getIntersections: function(path, _matrix, _expand) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6615
		if (this === path)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6616
			path = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6617
		var locations = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6618
			curves1 = this.getCurves(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6619
			curves2 = path ? path.getCurves() : curves1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6620
			matrix1 = this._matrix.orNullIfIdentity(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6621
			matrix2 = path ? (_matrix || path._matrix).orNullIfIdentity()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6622
				: matrix1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6623
			length1 = curves1.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6624
			length2 = path ? curves2.length : length1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6625
			values2 = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6626
			tMin = 0.000001,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6627
			tMax = 1 - tMin;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6628
		if (path && !this.getBounds(matrix1).touches(path.getBounds(matrix2)))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6629
			return [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6630
		for (var i = 0; i < length2; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6631
			values2[i] = curves2[i].getValues(matrix2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6632
		for (var i = 0; i < length1; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6633
			var curve1 = curves1[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6634
				values1 = path ? curve1.getValues(matrix1) : values2[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6635
			if (!path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6636
				var seg1 = curve1.getSegment1(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6637
					seg2 = curve1.getSegment2(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6638
					h1 = seg1._handleOut,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6639
					h2 = seg2._handleIn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6640
				if (new Line(seg1._point.subtract(h1), h1.multiply(2), true)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6641
						.intersect(new Line(seg2._point.subtract(h2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6642
						h2.multiply(2), true), false)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6643
					var parts = Curve.subdivide(values1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6644
					Curve.getIntersections(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6645
						parts[0], parts[1], curve1, curve1, locations,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6646
						function(loc) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6647
							if (loc._parameter <= tMax) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6648
								loc._parameter /= 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6649
								loc._parameter2 = 0.5 + loc._parameter2 / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6650
								return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6651
							}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6652
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6653
					);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6654
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6655
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6656
			for (var j = path ? 0 : i + 1; j < length2; j++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6657
				Curve.getIntersections(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6658
					values1, values2[j], curve1, curves2[j], locations,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6659
					!path && (j === i + 1 || j === length2 - 1 && i === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6660
						&& function(loc) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6661
							var t = loc._parameter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6662
							return t >= tMin && t <= tMax;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6663
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6664
				);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6665
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6666
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6667
		return Curve.filterIntersections(locations, _expand);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6668
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6669
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6670
	_asPathItem: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6671
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6672
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6673
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6674
	setPathData: function(data) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6675
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6676
		var parts = data.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6677
			coords,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6678
			relative = false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6679
			previous,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6680
			control,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6681
			current = new Point(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6682
			start = new Point();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6683
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6684
		function getCoord(index, coord) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6685
			var val = +coords[index];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6686
			if (relative)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6687
				val += current[coord];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6688
			return val;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6689
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6690
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6691
		function getPoint(index) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6692
			return new Point(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6693
				getCoord(index, 'x'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6694
				getCoord(index + 1, 'y')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6695
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6696
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6697
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6698
		this.clear();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6699
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6700
		for (var i = 0, l = parts && parts.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6701
			var part = parts[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6702
				command = part[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6703
				lower = command.toLowerCase();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6704
			coords = part.match(/[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/g);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6705
			var length = coords && coords.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6706
			relative = command === lower;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6707
			if (previous === 'z' && !/[mz]/.test(lower))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6708
				this.moveTo(current = start);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6709
			switch (lower) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6710
			case 'm':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6711
			case 'l':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6712
				var move = lower === 'm';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6713
				for (var j = 0; j < length; j += 2)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6714
					this[j === 0 && move ? 'moveTo' : 'lineTo'](
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6715
							current = getPoint(j));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6716
				control = current;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6717
				if (move)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6718
					start = current;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6719
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6720
			case 'h':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6721
			case 'v':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6722
				var coord = lower === 'h' ? 'x' : 'y';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6723
				for (var j = 0; j < length; j++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6724
					current[coord] = getCoord(j, coord);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6725
					this.lineTo(current);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6726
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6727
				control = current;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6728
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6729
			case 'c':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6730
				for (var j = 0; j < length; j += 6) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6731
					this.cubicCurveTo(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6732
							getPoint(j),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6733
							control = getPoint(j + 2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6734
							current = getPoint(j + 4));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6735
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6736
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6737
			case 's':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6738
				for (var j = 0; j < length; j += 4) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6739
					this.cubicCurveTo(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6740
							/[cs]/.test(previous)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6741
									? current.multiply(2).subtract(control)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6742
									: current,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6743
							control = getPoint(j),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6744
							current = getPoint(j + 2));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6745
					previous = lower;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6746
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6747
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6748
			case 'q':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6749
				for (var j = 0; j < length; j += 4) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6750
					this.quadraticCurveTo(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6751
							control = getPoint(j),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6752
							current = getPoint(j + 2));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6753
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6754
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6755
			case 't':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6756
				for (var j = 0; j < length; j += 2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6757
					this.quadraticCurveTo(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6758
							control = (/[qt]/.test(previous)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6759
									? current.multiply(2).subtract(control)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6760
									: current),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6761
							current = getPoint(j));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6762
					previous = lower;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6763
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6764
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6765
			case 'a':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6766
				for (var j = 0; j < length; j += 7) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6767
					this.arcTo(current = getPoint(j + 5),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6768
							new Size(+coords[j], +coords[j + 1]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6769
							+coords[j + 2], +coords[j + 4], +coords[j + 3]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6770
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6771
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6772
			case 'z':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6773
				this.closePath(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6774
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6775
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6776
			previous = lower;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6777
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6778
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6779
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6780
	_canComposite: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6781
		return !(this.hasFill() && this.hasStroke());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6782
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6783
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6784
	_contains: function(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6785
		var winding = this._getWinding(point, false, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6786
		return !!(this.getWindingRule() === 'evenodd' ? winding & 1 : winding);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6787
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6788
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6789
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6790
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6791
var Path = PathItem.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6792
	_class: 'Path',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6793
	_serializeFields: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6794
		segments: [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6795
		closed: false
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6796
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6797
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6798
	initialize: function Path(arg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6799
		this._closed = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6800
		this._segments = [];
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6801
		this._version = 0;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6802
		var segments = Array.isArray(arg)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6803
			? typeof arg[0] === 'object'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6804
				? arg
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6805
				: arguments
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6806
			: arg && (arg.size === undefined && (arg.x !== undefined
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6807
					|| arg.point !== undefined))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6808
				? arguments
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6809
				: null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6810
		if (segments && segments.length > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6811
			this.setSegments(segments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6812
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6813
			this._curves = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6814
			this._selectedSegmentState = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6815
			if (!segments && typeof arg === 'string') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6816
				this.setPathData(arg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6817
				arg = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6818
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6819
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6820
		this._initialize(!segments && arg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6821
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6822
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6823
	_equals: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6824
		return this._closed === item._closed
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6825
				&& Base.equals(this._segments, item._segments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6826
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6827
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6828
	clone: function(insert) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6829
		var copy = new Path(Item.NO_INSERT);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6830
		copy.setSegments(this._segments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6831
		copy._closed = this._closed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6832
		if (this._clockwise !== undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6833
			copy._clockwise = this._clockwise;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6834
		return this._clone(copy, insert);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6835
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6836
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6837
	_changed: function _changed(flags) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6838
		_changed.base.call(this, flags);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6839
		if (flags & 8) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6840
			var parent = this._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6841
			if (parent)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6842
				parent._currentPath = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6843
			this._length = this._clockwise = undefined;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6844
			if (flags & 16) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6845
				this._version++;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6846
			} else if (this._curves) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6847
			   for (var i = 0, l = this._curves.length; i < l; i++)
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6848
					this._curves[i]._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6849
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6850
			this._monoCurves = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6851
		} else if (flags & 32) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6852
			this._bounds = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6853
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6854
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6855
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6856
	getStyle: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6857
		var parent = this._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6858
		return (parent instanceof CompoundPath ? parent : this)._style;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6859
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6860
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6861
	getSegments: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6862
		return this._segments;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6863
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6864
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6865
	setSegments: function(segments) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6866
		var fullySelected = this.isFullySelected();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6867
		this._segments.length = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6868
		this._selectedSegmentState = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6869
		this._curves = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6870
		if (segments && segments.length > 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6871
			this._add(Segment.readAll(segments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6872
		if (fullySelected)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6873
			this.setFullySelected(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6874
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6875
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6876
	getFirstSegment: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6877
		return this._segments[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6878
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6879
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6880
	getLastSegment: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6881
		return this._segments[this._segments.length - 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6882
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6883
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6884
	getCurves: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6885
		var curves = this._curves,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6886
			segments = this._segments;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6887
		if (!curves) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6888
			var length = this._countCurves();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6889
			curves = this._curves = new Array(length);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6890
			for (var i = 0; i < length; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6891
				curves[i] = new Curve(this, segments[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6892
					segments[i + 1] || segments[0]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6893
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6894
		return curves;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6895
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6896
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6897
	getFirstCurve: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6898
		return this.getCurves()[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6899
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6900
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6901
	getLastCurve: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6902
		var curves = this.getCurves();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6903
		return curves[curves.length - 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6904
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6905
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6906
	isClosed: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6907
		return this._closed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6908
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6909
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6910
	setClosed: function(closed) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6911
		if (this._closed != (closed = !!closed)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6912
			this._closed = closed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6913
			if (this._curves) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6914
				var length = this._curves.length = this._countCurves();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6915
				if (closed)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6916
					this._curves[length - 1] = new Curve(this,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6917
						this._segments[length - 1], this._segments[0]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6918
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6919
			this._changed(25);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6920
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6921
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6922
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6923
	beans: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6924
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6925
	getPathData: function(_matrix, _precision) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6926
		var segments = this._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6927
			length = segments.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6928
			f = new Formatter(_precision),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6929
			coords = new Array(6),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6930
			first = true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6931
			curX, curY,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6932
			prevX, prevY,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6933
			inX, inY,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6934
			outX, outY,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6935
			parts = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6936
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6937
		function addSegment(segment, skipLine) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6938
			segment._transformCoordinates(_matrix, coords, false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6939
			curX = coords[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6940
			curY = coords[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6941
			if (first) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6942
				parts.push('M' + f.pair(curX, curY));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6943
				first = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6944
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6945
				inX = coords[2];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6946
				inY = coords[3];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6947
				if (inX === curX && inY === curY
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6948
						&& outX === prevX && outY === prevY) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6949
					if (!skipLine)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6950
						parts.push('l' + f.pair(curX - prevX, curY - prevY));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6951
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6952
					parts.push('c' + f.pair(outX - prevX, outY - prevY)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6953
							+ ' ' + f.pair(inX - prevX, inY - prevY)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6954
							+ ' ' + f.pair(curX - prevX, curY - prevY));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6955
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6956
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6957
			prevX = curX;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6958
			prevY = curY;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6959
			outX = coords[4];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6960
			outY = coords[5];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6961
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6962
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6963
		if (length === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6964
			return '';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6965
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6966
		for (var i = 0; i < length; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6967
			addSegment(segments[i]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6968
		if (this._closed && length > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6969
			addSegment(segments[0], true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6970
			parts.push('z');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6971
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6972
		return parts.join('');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6973
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6974
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6975
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6976
	isEmpty: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6977
		return this._segments.length === 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6978
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6979
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6980
	isLinear: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6981
		var segments = this._segments;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6982
		for (var i = 0, l = segments.length; i < l; i++) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6983
			if (!segments[i].isLinear())
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6984
				return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6985
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6986
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6987
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6988
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6989
	hasHandles: function() {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6990
		var segments = this._segments;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6991
		for (var i = 0, l = segments.length; i < l; i++) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6992
			if (segments[i].hasHandles())
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6993
				return true;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6994
		}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6995
		return false;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6996
	},
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  6997
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6998
	_transformContent: function(matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  6999
		var coords = new Array(6);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7000
		for (var i = 0, l = this._segments.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7001
			this._segments[i]._transformCoordinates(matrix, coords, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7002
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7003
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7004
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7005
	_add: function(segs, index) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7006
		var segments = this._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7007
			curves = this._curves,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7008
			amount = segs.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7009
			append = index == null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7010
			index = append ? segments.length : index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7011
		for (var i = 0; i < amount; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7012
			var segment = segs[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7013
			if (segment._path)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7014
				segment = segs[i] = segment.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7015
			segment._path = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7016
			segment._index = index + i;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7017
			if (segment._selectionState)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7018
				this._updateSelection(segment, 0, segment._selectionState);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7019
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7020
		if (append) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7021
			segments.push.apply(segments, segs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7022
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7023
			segments.splice.apply(segments, [index, 0].concat(segs));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7024
			for (var i = index + amount, l = segments.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7025
				segments[i]._index = i;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7026
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7027
		if (curves || segs._curves) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7028
			if (!curves)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7029
				curves = this._curves = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7030
			var from = index > 0 ? index - 1 : index,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7031
				start = from,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7032
				to = Math.min(from + amount, this._countCurves());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7033
			if (segs._curves) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7034
				curves.splice.apply(curves, [from, 0].concat(segs._curves));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7035
				start += segs._curves.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7036
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7037
			for (var i = start; i < to; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7038
				curves.splice(i, 0, new Curve(this, null, null));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7039
			this._adjustCurves(from, to);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7040
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7041
		this._changed(25);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7042
		return segs;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7043
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7044
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7045
	_adjustCurves: function(from, to) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7046
		var segments = this._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7047
			curves = this._curves,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7048
			curve;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7049
		for (var i = from; i < to; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7050
			curve = curves[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7051
			curve._path = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7052
			curve._segment1 = segments[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7053
			curve._segment2 = segments[i + 1] || segments[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7054
			curve._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7055
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7056
		if (curve = curves[this._closed && from === 0 ? segments.length - 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7057
				: from - 1]) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7058
			curve._segment2 = segments[from] || segments[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7059
			curve._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7060
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7061
		if (curve = curves[to]) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7062
			curve._segment1 = segments[to];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7063
			curve._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7064
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7065
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7066
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7067
	_countCurves: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7068
		var length = this._segments.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7069
		return !this._closed && length > 0 ? length - 1 : length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7070
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7071
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7072
	add: function(segment1 ) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7073
		return arguments.length > 1 && typeof segment1 !== 'number'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7074
			? this._add(Segment.readAll(arguments))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7075
			: this._add([ Segment.read(arguments) ])[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7076
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7077
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7078
	insert: function(index, segment1 ) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7079
		return arguments.length > 2 && typeof segment1 !== 'number'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7080
			? this._add(Segment.readAll(arguments, 1), index)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7081
			: this._add([ Segment.read(arguments, 1) ], index)[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7082
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7083
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7084
	addSegment: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7085
		return this._add([ Segment.read(arguments) ])[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7086
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7087
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7088
	insertSegment: function(index ) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7089
		return this._add([ Segment.read(arguments, 1) ], index)[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7090
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7091
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7092
	addSegments: function(segments) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7093
		return this._add(Segment.readAll(segments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7094
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7095
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7096
	insertSegments: function(index, segments) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7097
		return this._add(Segment.readAll(segments), index);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7098
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7099
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7100
	removeSegment: function(index) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7101
		return this.removeSegments(index, index + 1)[0] || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7102
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7103
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7104
	removeSegments: function(from, to, _includeCurves) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7105
		from = from || 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7106
		to = Base.pick(to, this._segments.length);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7107
		var segments = this._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7108
			curves = this._curves,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7109
			count = segments.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7110
			removed = segments.splice(from, to - from),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7111
			amount = removed.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7112
		if (!amount)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7113
			return removed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7114
		for (var i = 0; i < amount; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7115
			var segment = removed[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7116
			if (segment._selectionState)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7117
				this._updateSelection(segment, segment._selectionState, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7118
			segment._index = segment._path = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7119
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7120
		for (var i = from, l = segments.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7121
			segments[i]._index = i;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7122
		if (curves) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7123
			var index = from > 0 && to === count + (this._closed ? 1 : 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7124
					? from - 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7125
					: from,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7126
				curves = curves.splice(index, amount);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7127
			if (_includeCurves)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7128
				removed._curves = curves.slice(1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7129
			this._adjustCurves(index, index);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7130
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7131
		this._changed(25);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7132
		return removed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7133
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7134
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7135
	clear: '#removeSegments',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7136
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7137
	getLength: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7138
		if (this._length == null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7139
			var curves = this.getCurves();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7140
			this._length = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7141
			for (var i = 0, l = curves.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7142
				this._length += curves[i].getLength();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7143
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7144
		return this._length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7145
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7146
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7147
	getArea: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7148
		var curves = this.getCurves();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7149
		var area = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7150
		for (var i = 0, l = curves.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7151
			area += curves[i].getArea();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7152
		return area;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7153
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7154
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7155
	isFullySelected: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7156
		var length = this._segments.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7157
		return this._selected && length > 0 && this._selectedSegmentState
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7158
				=== length * 7;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7159
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7160
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7161
	setFullySelected: function(selected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7162
		if (selected)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7163
			this._selectSegments(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7164
		this.setSelected(selected);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7165
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7166
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7167
	setSelected: function setSelected(selected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7168
		if (!selected)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7169
			this._selectSegments(false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7170
		setSelected.base.call(this, selected);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7171
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7172
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7173
	_selectSegments: function(selected) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7174
		var length = this._segments.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7175
		this._selectedSegmentState = selected
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7176
				? length * 7 : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7177
		for (var i = 0; i < length; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7178
			this._segments[i]._selectionState = selected
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7179
					? 7 : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7180
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7181
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7182
	_updateSelection: function(segment, oldState, newState) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7183
		segment._selectionState = newState;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7184
		var total = this._selectedSegmentState += newState - oldState;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7185
		if (total > 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7186
			this.setSelected(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7187
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7188
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7189
	flatten: function(maxDistance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7190
		var iterator = new PathIterator(this, 64, 0.1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7191
			pos = 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7192
			step = iterator.length / Math.ceil(iterator.length / maxDistance),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7193
			end = iterator.length + (this._closed ? -step : step) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7194
		var segments = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7195
		while (pos <= end) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7196
			segments.push(new Segment(iterator.getPointAt(pos)));
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7197
			pos += step;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7198
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7199
		this.setSegments(segments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7200
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7201
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7202
	reduce: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7203
		var curves = this.getCurves();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7204
		for (var i = curves.length - 1; i >= 0; i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7205
			var curve = curves[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7206
			if (curve.isLinear() && curve.getLength() === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7207
				curve.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7208
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7209
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7210
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7211
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7212
	simplify: function(tolerance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7213
		if (this._segments.length > 2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7214
			var fitter = new PathFitter(this, tolerance || 2.5);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7215
			this.setSegments(fitter.fit());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7216
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7217
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7218
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7219
	split: function(index, parameter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7220
		if (parameter === null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7221
			return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7222
		if (arguments.length === 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7223
			var arg = index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7224
			if (typeof arg === 'number')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7225
				arg = this.getLocationAt(arg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7226
			if (!arg)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7227
				return null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7228
			index = arg.index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7229
			parameter = arg.parameter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7230
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7231
		var tolerance = 0.000001;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7232
		if (parameter >= 1 - tolerance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7233
			index++;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7234
			parameter--;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7235
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7236
		var curves = this.getCurves();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7237
		if (index >= 0 && index < curves.length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7238
			if (parameter > tolerance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7239
				curves[index++].divide(parameter, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7240
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7241
			var segs = this.removeSegments(index, this._segments.length, true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7242
				path;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7243
			if (this._closed) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7244
				this.setClosed(false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7245
				path = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7246
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7247
				path = this._clone(new Path().insertAbove(this, true));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7248
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7249
			path._add(segs, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7250
			this.addSegment(segs[0]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7251
			return path;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7252
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7253
		return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7254
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7255
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7256
	isClockwise: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7257
		if (this._clockwise !== undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7258
			return this._clockwise;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7259
		return Path.isClockwise(this._segments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7260
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7261
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7262
	setClockwise: function(clockwise) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7263
		if (this.isClockwise() != (clockwise = !!clockwise))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7264
			this.reverse();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7265
		this._clockwise = clockwise;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7266
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7267
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7268
	reverse: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7269
		this._segments.reverse();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7270
		for (var i = 0, l = this._segments.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7271
			var segment = this._segments[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7272
			var handleIn = segment._handleIn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7273
			segment._handleIn = segment._handleOut;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7274
			segment._handleOut = handleIn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7275
			segment._index = i;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7276
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7277
		this._curves = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7278
		if (this._clockwise !== undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7279
			this._clockwise = !this._clockwise;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7280
		this._changed(9);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7281
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7282
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7283
	join: function(path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7284
		if (path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7285
			var segments = path._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7286
				last1 = this.getLastSegment(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7287
				last2 = path.getLastSegment();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7288
			if (!last2)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7289
				return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7290
			if (last1 && last1._point.equals(last2._point))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7291
				path.reverse();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7292
			var first2 = path.getFirstSegment();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7293
			if (last1 && last1._point.equals(first2._point)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7294
				last1.setHandleOut(first2._handleOut);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7295
				this._add(segments.slice(1));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7296
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7297
				var first1 = this.getFirstSegment();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7298
				if (first1 && first1._point.equals(first2._point))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7299
					path.reverse();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7300
				last2 = path.getLastSegment();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7301
				if (first1 && first1._point.equals(last2._point)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7302
					first1.setHandleIn(last2._handleIn);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7303
					this._add(segments.slice(0, segments.length - 1), 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7304
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7305
					this._add(segments.slice());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7306
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7307
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7308
			if (path.closed)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7309
				this._add([segments[0]]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7310
			path.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7311
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7312
		var first = this.getFirstSegment(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7313
			last = this.getLastSegment();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7314
		if (first !== last && first._point.equals(last._point)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7315
			first.setHandleIn(last._handleIn);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7316
			last.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7317
			this.setClosed(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7318
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7319
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7320
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7321
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7322
	toShape: function(insert) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7323
		if (!this._closed)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7324
			return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7325
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7326
		var segments = this._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7327
			type,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7328
			size,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7329
			radius,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7330
			topCenter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7331
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7332
		function isCollinear(i, j) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7333
			return segments[i].isCollinear(segments[j]);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7334
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7335
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7336
		function isOrthogonal(i) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7337
			return segments[i].isOrthogonal();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7338
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7339
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7340
		function isArc(i) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7341
			return segments[i].isOrthogonalArc();
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7342
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7343
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7344
		function getDistance(i, j) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7345
			return segments[i]._point.getDistance(segments[j]._point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7346
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7347
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7348
		if (!this.hasHandles() && segments.length === 4
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7349
				&& isCollinear(0, 2) && isCollinear(1, 3) && isOrthogonal(1)) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7350
			type = Shape.Rectangle;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7351
			size = new Size(getDistance(0, 3), getDistance(0, 1));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7352
			topCenter = segments[1]._point.add(segments[2]._point).divide(2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7353
		} else if (segments.length === 8 && isArc(0) && isArc(2) && isArc(4)
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7354
				&& isArc(6) && isCollinear(1, 5) && isCollinear(3, 7)) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7355
			type = Shape.Rectangle;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7356
			size = new Size(getDistance(1, 6), getDistance(0, 3));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7357
			radius = size.subtract(new Size(getDistance(0, 7),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7358
					getDistance(1, 2))).divide(2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7359
			topCenter = segments[3]._point.add(segments[4]._point).divide(2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7360
		} else if (segments.length === 4
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7361
				&& isArc(0) && isArc(1) && isArc(2) && isArc(3)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7362
			if (Numerical.isZero(getDistance(0, 2) - getDistance(1, 3))) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7363
				type = Shape.Circle;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7364
				radius = getDistance(0, 2) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7365
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7366
				type = Shape.Ellipse;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7367
				radius = new Size(getDistance(2, 0) / 2, getDistance(3, 1) / 2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7368
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7369
			topCenter = segments[1]._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7370
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7371
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7372
		if (type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7373
			var center = this.getPosition(true),
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7374
				shape = this._clone(new type({
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7375
					center: center,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7376
					size: size,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7377
					radius: radius,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7378
					insert: false
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7379
				}), insert, false);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7380
			shape.rotate(topCenter.subtract(center).getAngle() + 90);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7381
			return shape;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7382
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7383
		return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7384
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7385
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7386
	_hitTestSelf: function(point, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7387
		var that = this,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7388
			style = this.getStyle(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7389
			segments = this._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7390
			numSegments = segments.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7391
			closed = this._closed,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7392
			tolerancePadding = options._tolerancePadding,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7393
			strokePadding = tolerancePadding,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7394
			join, cap, miterLimit,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7395
			area, loc, res,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7396
			hitStroke = options.stroke && style.hasStroke(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7397
			hitFill = options.fill && style.hasFill(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7398
			hitCurves = options.curves,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7399
			radius = hitStroke
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7400
					? style.getStrokeWidth() / 2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7401
					: hitFill && options.tolerance > 0 || hitCurves
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7402
						? 0 : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7403
		if (radius !== null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7404
			if (radius > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7405
				join = style.getStrokeJoin();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7406
				cap = style.getStrokeCap();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7407
				miterLimit = radius * style.getMiterLimit();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7408
				strokePadding = tolerancePadding.add(new Point(radius, radius));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7409
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7410
				join = cap = 'round';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7411
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7412
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7413
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7414
		function isCloseEnough(pt, padding) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7415
			return point.subtract(pt).divide(padding).length <= 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7416
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7417
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7418
		function checkSegmentPoint(seg, pt, name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7419
			if (!options.selected || pt.isSelected()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7420
				var anchor = seg._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7421
				if (pt !== anchor)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7422
					pt = pt.add(anchor);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7423
				if (isCloseEnough(pt, strokePadding)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7424
					return new HitResult(name, that, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7425
						segment: seg,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7426
						point: pt
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7427
					});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7428
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7429
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7430
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7431
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7432
		function checkSegmentPoints(seg, ends) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7433
			return (ends || options.segments)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7434
				&& checkSegmentPoint(seg, seg._point, 'segment')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7435
				|| (!ends && options.handles) && (
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7436
					checkSegmentPoint(seg, seg._handleIn, 'handle-in') ||
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7437
					checkSegmentPoint(seg, seg._handleOut, 'handle-out'));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7438
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7439
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7440
		function addToArea(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7441
			area.add(point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7442
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7443
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7444
		function checkSegmentStroke(segment) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7445
			if (join !== 'round' || cap !== 'round') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7446
				area = new Path({ internal: true, closed: true });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7447
				if (closed || segment._index > 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7448
						&& segment._index < numSegments - 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7449
					if (join !== 'round' && (segment._handleIn.isZero()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7450
							|| segment._handleOut.isZero()))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7451
						Path._addBevelJoin(segment, join, radius, miterLimit,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7452
								addToArea, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7453
				} else if (cap !== 'round') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7454
					Path._addSquareCap(segment, cap, radius, addToArea, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7455
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7456
				if (!area.isEmpty()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7457
					var loc;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7458
					return area.contains(point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7459
						|| (loc = area.getNearestLocation(point))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7460
							&& isCloseEnough(loc.getPoint(), tolerancePadding);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7461
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7462
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7463
			return isCloseEnough(segment._point, strokePadding);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7464
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7465
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7466
		if (options.ends && !options.segments && !closed) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7467
			if (res = checkSegmentPoints(segments[0], true)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7468
					|| checkSegmentPoints(segments[numSegments - 1], true))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7469
				return res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7470
		} else if (options.segments || options.handles) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7471
			for (var i = 0; i < numSegments; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7472
				if (res = checkSegmentPoints(segments[i]))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7473
					return res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7474
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7475
		if (radius !== null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7476
			loc = this.getNearestLocation(point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7477
			if (loc) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7478
				var parameter = loc.getParameter();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7479
				if (parameter === 0 || parameter === 1 && numSegments > 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7480
					if (!checkSegmentStroke(loc.getSegment()))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7481
						loc = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7482
				} else if (!isCloseEnough(loc.getPoint(), strokePadding)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7483
					loc = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7484
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7485
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7486
			if (!loc && join === 'miter' && numSegments > 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7487
				for (var i = 0; i < numSegments; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7488
					var segment = segments[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7489
					if (point.getDistance(segment._point) <= miterLimit
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7490
							&& checkSegmentStroke(segment)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7491
						loc = segment.getLocation();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7492
						break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7493
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7494
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7495
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7496
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7497
		return !loc && hitFill && this._contains(point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7498
				|| loc && !hitStroke && !hitCurves
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7499
					? new HitResult('fill', this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7500
					: loc
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7501
						? new HitResult(hitStroke ? 'stroke' : 'curve', this, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7502
							location: loc,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7503
							point: loc.getPoint()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7504
						})
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7505
						: null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7506
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7507
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7508
}, Base.each(Curve.evaluateMethods,
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7509
	function(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7510
		this[name + 'At'] = function(offset, isParameter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7511
			var loc = this.getLocationAt(offset, isParameter);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7512
			return loc && loc[name]();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7513
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7514
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7515
{
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7516
	beans: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7517
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7518
	_getOffset: function(location) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7519
		var index = location && location.getIndex();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7520
		if (index != null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7521
			var curves = this.getCurves(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7522
				offset = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7523
			for (var i = 0; i < index; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7524
				offset += curves[i].getLength();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7525
			var curve = curves[index],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7526
				parameter = location.getParameter();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7527
			if (parameter > 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7528
				offset += curve.getPartLength(0, parameter);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7529
			return offset;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7530
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7531
		return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7532
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7533
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7534
	getLocationOf: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7535
		var point = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7536
			curves = this.getCurves();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7537
		for (var i = 0, l = curves.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7538
			var loc = curves[i].getLocationOf(point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7539
			if (loc)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7540
				return loc;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7541
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7542
		return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7543
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7544
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7545
	getOffsetOf: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7546
		var loc = this.getLocationOf.apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7547
		return loc ? loc.getOffset() : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7548
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7549
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7550
	getLocationAt: function(offset, isParameter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7551
		var curves = this.getCurves(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7552
			length = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7553
		if (isParameter) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7554
			var index = ~~offset,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7555
				curve = curves[index];
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  7556
			return curve ? curve.getLocationAt(offset - index, true) : null;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7557
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7558
		for (var i = 0, l = curves.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7559
			var start = length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7560
				curve = curves[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7561
			length += curve.getLength();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7562
			if (length > offset) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7563
				return curve.getLocationAt(offset - start);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7564
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7565
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7566
		if (offset <= this.getLength())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7567
			return new CurveLocation(curves[curves.length - 1], 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7568
		return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7569
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7570
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7571
	getNearestLocation: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7572
		var point = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7573
			curves = this.getCurves(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7574
			minDist = Infinity,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7575
			minLoc = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7576
		for (var i = 0, l = curves.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7577
			var loc = curves[i].getNearestLocation(point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7578
			if (loc._distance < minDist) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7579
				minDist = loc._distance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7580
				minLoc = loc;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7581
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7582
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7583
		return minLoc;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7584
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7585
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7586
	getNearestPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7587
		return this.getNearestLocation.apply(this, arguments).getPoint();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7588
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7589
}), new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7590
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7591
	function drawHandles(ctx, segments, matrix, size) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7592
		var half = size / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7593
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7594
		function drawHandle(index) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7595
			var hX = coords[index],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7596
				hY = coords[index + 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7597
			if (pX != hX || pY != hY) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7598
				ctx.beginPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7599
				ctx.moveTo(pX, pY);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7600
				ctx.lineTo(hX, hY);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7601
				ctx.stroke();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7602
				ctx.beginPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7603
				ctx.arc(hX, hY, half, 0, Math.PI * 2, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7604
				ctx.fill();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7605
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7606
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7607
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7608
		var coords = new Array(6);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7609
		for (var i = 0, l = segments.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7610
			var segment = segments[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7611
			segment._transformCoordinates(matrix, coords, false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7612
			var state = segment._selectionState,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7613
				pX = coords[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7614
				pY = coords[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7615
			if (state & 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7616
				drawHandle(2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7617
			if (state & 2)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7618
				drawHandle(4);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7619
			ctx.fillRect(pX - half, pY - half, size, size);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7620
			if (!(state & 4)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7621
				var fillStyle = ctx.fillStyle;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7622
				ctx.fillStyle = '#ffffff';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7623
				ctx.fillRect(pX - half + 1, pY - half + 1, size - 2, size - 2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7624
				ctx.fillStyle = fillStyle;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7625
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7626
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7627
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7628
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7629
	function drawSegments(ctx, path, matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7630
		var segments = path._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7631
			length = segments.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7632
			coords = new Array(6),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7633
			first = true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7634
			curX, curY,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7635
			prevX, prevY,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7636
			inX, inY,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7637
			outX, outY;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7638
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7639
		function drawSegment(segment) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7640
			if (matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7641
				segment._transformCoordinates(matrix, coords, false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7642
				curX = coords[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7643
				curY = coords[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7644
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7645
				var point = segment._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7646
				curX = point._x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7647
				curY = point._y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7648
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7649
			if (first) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7650
				ctx.moveTo(curX, curY);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7651
				first = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7652
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7653
				if (matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7654
					inX = coords[2];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7655
					inY = coords[3];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7656
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7657
					var handle = segment._handleIn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7658
					inX = curX + handle._x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7659
					inY = curY + handle._y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7660
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7661
				if (inX === curX && inY === curY
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7662
						&& outX === prevX && outY === prevY) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7663
					ctx.lineTo(curX, curY);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7664
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7665
					ctx.bezierCurveTo(outX, outY, inX, inY, curX, curY);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7666
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7667
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7668
			prevX = curX;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7669
			prevY = curY;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7670
			if (matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7671
				outX = coords[4];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7672
				outY = coords[5];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7673
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7674
				var handle = segment._handleOut;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7675
				outX = prevX + handle._x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7676
				outY = prevY + handle._y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7677
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7678
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7679
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7680
		for (var i = 0; i < length; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7681
			drawSegment(segments[i]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7682
		if (path._closed && length > 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7683
			drawSegment(segments[0]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7684
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7685
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7686
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7687
		_draw: function(ctx, param, strokeMatrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7688
			var dontStart = param.dontStart,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7689
				dontPaint = param.dontFinish || param.clip,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7690
				style = this.getStyle(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7691
				hasFill = style.hasFill(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7692
				hasStroke = style.hasStroke(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7693
				dashArray = style.getDashArray(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7694
				dashLength = !paper.support.nativeDash && hasStroke
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7695
						&& dashArray && dashArray.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7696
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7697
			if (!dontStart)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7698
				ctx.beginPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7699
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7700
			if (!dontStart && this._currentPath) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7701
				ctx.currentPath = this._currentPath;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7702
			} else if (hasFill || hasStroke && !dashLength || dontPaint) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7703
				drawSegments(ctx, this, strokeMatrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7704
				if (this._closed)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7705
					ctx.closePath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7706
				if (!dontStart)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7707
					this._currentPath = ctx.currentPath;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7708
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7709
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7710
			function getOffset(i) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7711
				return dashArray[((i % dashLength) + dashLength) % dashLength];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7712
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7713
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7714
			if (!dontPaint && (hasFill || hasStroke)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7715
				this._setStyles(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7716
				if (hasFill) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7717
					ctx.fill(style.getWindingRule());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7718
					ctx.shadowColor = 'rgba(0,0,0,0)';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7719
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7720
				if (hasStroke) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7721
					if (dashLength) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7722
						if (!dontStart)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7723
							ctx.beginPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7724
						var iterator = new PathIterator(this, 32, 0.25,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7725
								strokeMatrix),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7726
							length = iterator.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7727
							from = -style.getDashOffset(), to,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7728
							i = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7729
						from = from % length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7730
						while (from > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7731
							from -= getOffset(i--) + getOffset(i--);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7732
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7733
						while (from < length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7734
							to = from + getOffset(i++);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7735
							if (from > 0 || to > 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7736
								iterator.drawPart(ctx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7737
										Math.max(from, 0), Math.max(to, 0));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7738
							from = to + getOffset(i++);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7739
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7740
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7741
					ctx.stroke();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7742
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7743
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7744
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7745
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7746
		_drawSelected: function(ctx, matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7747
			ctx.beginPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7748
			drawSegments(ctx, this, matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7749
			ctx.stroke();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7750
			drawHandles(ctx, this._segments, matrix, paper.settings.handleSize);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7751
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7752
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7753
}, new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7754
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7755
	function getFirstControlPoints(rhs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7756
		var n = rhs.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7757
			x = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7758
			tmp = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7759
			b = 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7760
		x[0] = rhs[0] / b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7761
		for (var i = 1; i < n; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7762
			tmp[i] = 1 / b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7763
			b = (i < n - 1 ? 4 : 2) - tmp[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7764
			x[i] = (rhs[i] - x[i - 1]) / b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7765
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7766
		for (var i = 1; i < n; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7767
			x[n - i - 1] -= tmp[n - i] * x[n - i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7768
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7769
		return x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7770
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7771
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7772
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7773
		smooth: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7774
			var segments = this._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7775
				size = segments.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7776
				closed = this._closed,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7777
				n = size,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7778
				overlap = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7779
			if (size <= 2)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7780
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7781
			if (closed) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7782
				overlap = Math.min(size, 4);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7783
				n += Math.min(size, overlap) * 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7784
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7785
			var knots = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7786
			for (var i = 0; i < size; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7787
				knots[i + overlap] = segments[i]._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7788
			if (closed) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7789
				for (var i = 0; i < overlap; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7790
					knots[i] = segments[i + size - overlap]._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7791
					knots[i + size + overlap] = segments[i]._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7792
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7793
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7794
				n--;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7795
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7796
			var rhs = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7797
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7798
			for (var i = 1; i < n - 1; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7799
				rhs[i] = 4 * knots[i]._x + 2 * knots[i + 1]._x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7800
			rhs[0] = knots[0]._x + 2 * knots[1]._x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7801
			rhs[n - 1] = 3 * knots[n - 1]._x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7802
			var x = getFirstControlPoints(rhs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7803
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7804
			for (var i = 1; i < n - 1; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7805
				rhs[i] = 4 * knots[i]._y + 2 * knots[i + 1]._y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7806
			rhs[0] = knots[0]._y + 2 * knots[1]._y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7807
			rhs[n - 1] = 3 * knots[n - 1]._y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7808
			var y = getFirstControlPoints(rhs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7809
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7810
			if (closed) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7811
				for (var i = 0, j = size; i < overlap; i++, j++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7812
					var f1 = i / overlap,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7813
						f2 = 1 - f1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7814
						ie = i + overlap,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7815
						je = j + overlap;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7816
					x[j] = x[i] * f1 + x[j] * f2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7817
					y[j] = y[i] * f1 + y[j] * f2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7818
					x[je] = x[ie] * f2 + x[je] * f1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7819
					y[je] = y[ie] * f2 + y[je] * f1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7820
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7821
				n--;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7822
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7823
			var handleIn = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7824
			for (var i = overlap; i <= n - overlap; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7825
				var segment = segments[i - overlap];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7826
				if (handleIn)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7827
					segment.setHandleIn(handleIn.subtract(segment._point));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7828
				if (i < n) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7829
					segment.setHandleOut(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7830
							new Point(x[i], y[i]).subtract(segment._point));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7831
					handleIn = i < n - 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7832
							? new Point(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7833
								2 * knots[i + 1]._x - x[i + 1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7834
								2 * knots[i + 1]._y - y[i + 1])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7835
							: new Point(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7836
								(knots[n]._x + x[n - 1]) / 2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7837
								(knots[n]._y + y[n - 1]) / 2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7838
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7839
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7840
			if (closed && handleIn) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7841
				var segment = this._segments[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7842
				segment.setHandleIn(handleIn.subtract(segment._point));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7843
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7844
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7845
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7846
}, new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7847
	function getCurrentSegment(that) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7848
		var segments = that._segments;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7849
		if (segments.length === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7850
			throw new Error('Use a moveTo() command first');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7851
		return segments[segments.length - 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7852
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7853
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7854
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7855
		moveTo: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7856
			var segments = this._segments;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7857
			if (segments.length === 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7858
				this.removeSegment(0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7859
			if (!segments.length)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7860
				this._add([ new Segment(Point.read(arguments)) ]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7861
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7862
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7863
		moveBy: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7864
			throw new Error('moveBy() is unsupported on Path items.');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7865
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7866
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7867
		lineTo: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7868
			this._add([ new Segment(Point.read(arguments)) ]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7869
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7870
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7871
		cubicCurveTo: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7872
			var handle1 = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7873
				handle2 = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7874
				to = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7875
				current = getCurrentSegment(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7876
			current.setHandleOut(handle1.subtract(current._point));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7877
			this._add([ new Segment(to, handle2.subtract(to)) ]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7878
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7879
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7880
		quadraticCurveTo: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7881
			var handle = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7882
				to = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7883
				current = getCurrentSegment(this)._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7884
			this.cubicCurveTo(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7885
				handle.add(current.subtract(handle).multiply(1 / 3)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7886
				handle.add(to.subtract(handle).multiply(1 / 3)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7887
				to
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7888
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7889
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7890
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7891
		curveTo: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7892
			var through = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7893
				to = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7894
				t = Base.pick(Base.read(arguments), 0.5),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7895
				t1 = 1 - t,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7896
				current = getCurrentSegment(this)._point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7897
				handle = through.subtract(current.multiply(t1 * t1))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7898
					.subtract(to.multiply(t * t)).divide(2 * t * t1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7899
			if (handle.isNaN())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7900
				throw new Error(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7901
					'Cannot put a curve through points with parameter = ' + t);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7902
			this.quadraticCurveTo(handle, to);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7903
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7904
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7905
		arcTo: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7906
			var current = getCurrentSegment(this),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7907
				from = current._point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7908
				to = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7909
				through,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7910
				peek = Base.peek(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7911
				clockwise = Base.pick(peek, true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7912
				center, extent, vector, matrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7913
			if (typeof clockwise === 'boolean') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7914
				var middle = from.add(to).divide(2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7915
				through = middle.add(middle.subtract(from).rotate(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7916
						clockwise ? -90 : 90));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7917
			} else if (Base.remain(arguments) <= 2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7918
				through = to;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7919
				to = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7920
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7921
				var radius = Size.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7922
				if (radius.isZero())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7923
					return this.lineTo(to);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7924
				var rotation = Base.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7925
					clockwise = !!Base.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7926
					large = !!Base.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7927
					middle = from.add(to).divide(2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7928
					pt = from.subtract(middle).rotate(-rotation),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7929
					x = pt.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7930
					y = pt.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7931
					abs = Math.abs,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7932
					epsilon = 1e-12,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7933
					rx = abs(radius.width),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7934
					ry = abs(radius.height),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7935
					rxSq = rx * rx,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7936
					rySq = ry * ry,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7937
					xSq =  x * x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7938
					ySq =  y * y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7939
				var factor = Math.sqrt(xSq / rxSq + ySq / rySq);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7940
				if (factor > 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7941
					rx *= factor;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7942
					ry *= factor;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7943
					rxSq = rx * rx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7944
					rySq = ry * ry;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7945
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7946
				factor = (rxSq * rySq - rxSq * ySq - rySq * xSq) /
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7947
						(rxSq * ySq + rySq * xSq);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7948
				if (abs(factor) < epsilon)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7949
					factor = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7950
				if (factor < 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7951
					throw new Error(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7952
							'Cannot create an arc with the given arguments');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7953
				center = new Point(rx * y / ry, -ry * x / rx)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7954
						.multiply((large === clockwise ? -1 : 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7955
							* Math.sqrt(factor))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7956
						.rotate(rotation).add(middle);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7957
				matrix = new Matrix().translate(center).rotate(rotation)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7958
						.scale(rx, ry);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7959
				vector = matrix._inverseTransform(from);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7960
				extent = vector.getDirectedAngle(matrix._inverseTransform(to));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7961
				if (!clockwise && extent > 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7962
					extent -= 360;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7963
				else if (clockwise && extent < 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7964
					extent += 360;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7965
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7966
			if (through) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7967
				var l1 = new Line(from.add(through).divide(2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7968
							through.subtract(from).rotate(90), true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7969
					l2 = new Line(through.add(to).divide(2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7970
							to.subtract(through).rotate(90), true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7971
					line = new Line(from, to),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7972
					throughSide = line.getSide(through);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7973
				center = l1.intersect(l2, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7974
				if (!center) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7975
					if (!throughSide)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7976
						return this.lineTo(to);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7977
					throw new Error(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7978
							'Cannot create an arc with the given arguments');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7979
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7980
				vector = from.subtract(center);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7981
				extent = vector.getDirectedAngle(to.subtract(center));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7982
				var centerSide = line.getSide(center);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7983
				if (centerSide === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7984
					extent = throughSide * Math.abs(extent);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7985
				} else if (throughSide === centerSide) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7986
					extent += extent < 0 ? 360 : -360;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7987
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7988
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7989
			var ext = Math.abs(extent),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7990
				count = ext >= 360 ? 4 : Math.ceil(ext / 90),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7991
				inc = extent / count,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7992
				half = inc * Math.PI / 360,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7993
				z = 4 / 3 * Math.sin(half) / (1 + Math.cos(half)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7994
				segments = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7995
			for (var i = 0; i <= count; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7996
				var pt = to,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7997
					out = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7998
				if (i < count) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  7999
					out = vector.rotate(90).multiply(z);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8000
					if (matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8001
						pt = matrix._transformPoint(vector);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8002
						out = matrix._transformPoint(vector.add(out))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8003
								.subtract(pt);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8004
					} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8005
						pt = center.add(vector);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8006
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8007
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8008
				if (i === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8009
					current.setHandleOut(out);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8010
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8011
					var _in = vector.rotate(-90).multiply(z);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8012
					if (matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8013
						_in = matrix._transformPoint(vector.add(_in))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8014
								.subtract(pt);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8015
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8016
					segments.push(new Segment(pt, _in, out));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8017
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8018
				vector = vector.rotate(inc);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8019
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8020
			this._add(segments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8021
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8022
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8023
		lineBy: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8024
			var to = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8025
				current = getCurrentSegment(this)._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8026
			this.lineTo(current.add(to));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8027
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8028
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8029
		curveBy: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8030
			var through = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8031
				to = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8032
				parameter = Base.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8033
				current = getCurrentSegment(this)._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8034
			this.curveTo(current.add(through), current.add(to), parameter);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8035
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8036
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8037
		cubicCurveBy: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8038
			var handle1 = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8039
				handle2 = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8040
				to = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8041
				current = getCurrentSegment(this)._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8042
			this.cubicCurveTo(current.add(handle1), current.add(handle2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8043
					current.add(to));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8044
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8045
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8046
		quadraticCurveBy: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8047
			var handle = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8048
				to = Point.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8049
				current = getCurrentSegment(this)._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8050
			this.quadraticCurveTo(current.add(handle), current.add(to));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8051
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8052
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8053
		arcBy: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8054
			var current = getCurrentSegment(this)._point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8055
				point = current.add(Point.read(arguments)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8056
				clockwise = Base.pick(Base.peek(arguments), true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8057
			if (typeof clockwise === 'boolean') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8058
				this.arcTo(point, clockwise);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8059
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8060
				this.arcTo(point, current.add(Point.read(arguments)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8061
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8062
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8063
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8064
		closePath: function(join) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8065
			this.setClosed(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8066
			if (join)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8067
				this.join();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8068
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8069
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8070
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8071
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8072
	_getBounds: function(getter, matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8073
		return Path[getter](this._segments, this._closed, this.getStyle(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8074
				matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8075
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8076
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8077
statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8078
	isClockwise: function(segments) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8079
		var sum = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8080
		for (var i = 0, l = segments.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8081
			sum += Curve.getEdgeSum(Curve.getValues(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8082
					segments[i], segments[i + 1 < l ? i + 1 : 0]));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8083
		return sum > 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8084
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8085
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8086
	getBounds: function(segments, closed, style, matrix, strokePadding) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8087
		var first = segments[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8088
		if (!first)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8089
			return new Rectangle();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8090
		var coords = new Array(6),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8091
			prevCoords = first._transformCoordinates(matrix, new Array(6), false),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8092
			min = prevCoords.slice(0, 2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8093
			max = min.slice(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8094
			roots = new Array(2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8095
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8096
		function processSegment(segment) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8097
			segment._transformCoordinates(matrix, coords, false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8098
			for (var i = 0; i < 2; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8099
				Curve._addBounds(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8100
					prevCoords[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8101
					prevCoords[i + 4],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8102
					coords[i + 2],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8103
					coords[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8104
					i, strokePadding ? strokePadding[i] : 0, min, max, roots);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8105
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8106
			var tmp = prevCoords;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8107
			prevCoords = coords;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8108
			coords = tmp;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8109
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8110
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8111
		for (var i = 1, l = segments.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8112
			processSegment(segments[i]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8113
		if (closed)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8114
			processSegment(first);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8115
		return new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8116
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8117
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8118
	getStrokeBounds: function(segments, closed, style, matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8119
		if (!style.hasStroke())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8120
			return Path.getBounds(segments, closed, style, matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8121
		var length = segments.length - (closed ? 0 : 1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8122
			radius = style.getStrokeWidth() / 2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8123
			padding = Path._getPenPadding(radius, matrix),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8124
			bounds = Path.getBounds(segments, closed, style, matrix, padding),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8125
			join = style.getStrokeJoin(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8126
			cap = style.getStrokeCap(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8127
			miterLimit = radius * style.getMiterLimit();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8128
		var joinBounds = new Rectangle(new Size(padding).multiply(2));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8129
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8130
		function add(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8131
			bounds = bounds.include(matrix
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8132
				? matrix._transformPoint(point, point) : point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8133
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8134
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8135
		function addRound(segment) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8136
			bounds = bounds.unite(joinBounds.setCenter(matrix
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8137
				? matrix._transformPoint(segment._point) : segment._point));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8138
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8139
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8140
		function addJoin(segment, join) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8141
			var handleIn = segment._handleIn,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8142
				handleOut = segment._handleOut;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8143
			if (join === 'round' || !handleIn.isZero() && !handleOut.isZero()
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8144
					&& handleIn.isCollinear(handleOut)) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8145
				addRound(segment);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8146
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8147
				Path._addBevelJoin(segment, join, radius, miterLimit, add);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8148
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8149
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8150
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8151
		function addCap(segment, cap) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8152
			if (cap === 'round') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8153
				addRound(segment);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8154
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8155
				Path._addSquareCap(segment, cap, radius, add);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8156
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8157
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8158
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8159
		for (var i = 1; i < length; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8160
			addJoin(segments[i], join);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8161
		if (closed) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8162
			addJoin(segments[0], join);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8163
		} else if (length > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8164
			addCap(segments[0], cap);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8165
			addCap(segments[segments.length - 1], cap);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8166
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8167
		return bounds;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8168
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8169
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8170
	_getPenPadding: function(radius, matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8171
		if (!matrix)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8172
			return [radius, radius];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8173
		var mx = matrix.shiftless(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8174
			hor = mx.transform(new Point(radius, 0)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8175
			ver = mx.transform(new Point(0, radius)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8176
			phi = hor.getAngleInRadians(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8177
			a = hor.getLength(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8178
			b = ver.getLength();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8179
		var sin = Math.sin(phi),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8180
			cos = Math.cos(phi),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8181
			tan = Math.tan(phi),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8182
			tx = -Math.atan(b * tan / a),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8183
			ty = Math.atan(b / (tan * a));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8184
		return [Math.abs(a * Math.cos(tx) * cos - b * Math.sin(tx) * sin),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8185
				Math.abs(b * Math.sin(ty) * cos + a * Math.cos(ty) * sin)];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8186
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8187
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8188
	_addBevelJoin: function(segment, join, radius, miterLimit, addPoint, area) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8189
		var curve2 = segment.getCurve(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8190
			curve1 = curve2.getPrevious(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8191
			point = curve2.getPointAt(0, true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8192
			normal1 = curve1.getNormalAt(1, true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8193
			normal2 = curve2.getNormalAt(0, true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8194
			step = normal1.getDirectedAngle(normal2) < 0 ? -radius : radius;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8195
		normal1.setLength(step);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8196
		normal2.setLength(step);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8197
		if (area) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8198
			addPoint(point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8199
			addPoint(point.add(normal1));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8200
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8201
		if (join === 'miter') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8202
			var corner = new Line(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8203
					point.add(normal1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8204
					new Point(-normal1.y, normal1.x), true
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8205
				).intersect(new Line(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8206
					point.add(normal2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8207
					new Point(-normal2.y, normal2.x), true
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8208
				), true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8209
			if (corner && point.getDistance(corner) <= miterLimit) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8210
				addPoint(corner);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8211
				if (!area)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8212
					return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8213
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8214
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8215
		if (!area)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8216
			addPoint(point.add(normal1));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8217
		addPoint(point.add(normal2));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8218
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8219
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8220
	_addSquareCap: function(segment, cap, radius, addPoint, area) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8221
		var point = segment._point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8222
			loc = segment.getLocation(),
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8223
			normal = loc.getNormal().multiply(radius);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8224
		if (area) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8225
			addPoint(point.subtract(normal));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8226
			addPoint(point.add(normal));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8227
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8228
		if (cap === 'square')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8229
			point = point.add(normal.rotate(loc.getParameter() === 0 ? -90 : 90));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8230
		addPoint(point.add(normal));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8231
		addPoint(point.subtract(normal));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8232
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8233
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8234
	getHandleBounds: function(segments, closed, style, matrix, strokePadding,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8235
			joinPadding) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8236
		var coords = new Array(6),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8237
			x1 = Infinity,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8238
			x2 = -x1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8239
			y1 = x1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8240
			y2 = x2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8241
		for (var i = 0, l = segments.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8242
			var segment = segments[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8243
			segment._transformCoordinates(matrix, coords, false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8244
			for (var j = 0; j < 6; j += 2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8245
				var padding = j === 0 ? joinPadding : strokePadding,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8246
					paddingX = padding ? padding[0] : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8247
					paddingY = padding ? padding[1] : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8248
					x = coords[j],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8249
					y = coords[j + 1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8250
					xn = x - paddingX,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8251
					xx = x + paddingX,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8252
					yn = y - paddingY,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8253
					yx = y + paddingY;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8254
				if (xn < x1) x1 = xn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8255
				if (xx > x2) x2 = xx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8256
				if (yn < y1) y1 = yn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8257
				if (yx > y2) y2 = yx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8258
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8259
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8260
		return new Rectangle(x1, y1, x2 - x1, y2 - y1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8261
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8262
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8263
	getRoughBounds: function(segments, closed, style, matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8264
		var strokeRadius = style.hasStroke() ? style.getStrokeWidth() / 2 : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8265
			joinRadius = strokeRadius;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8266
		if (strokeRadius > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8267
			if (style.getStrokeJoin() === 'miter')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8268
				joinRadius = strokeRadius * style.getMiterLimit();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8269
			if (style.getStrokeCap() === 'square')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8270
				joinRadius = Math.max(joinRadius, strokeRadius * Math.sqrt(2));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8271
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8272
		return Path.getHandleBounds(segments, closed, style, matrix,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8273
				Path._getPenPadding(strokeRadius, matrix),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8274
				Path._getPenPadding(joinRadius, matrix));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8275
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8276
}});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8277
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8278
Path.inject({ statics: new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8279
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8280
	var kappa = 0.5522847498307936,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8281
		ellipseSegments = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8282
			new Segment([-1, 0], [0, kappa ], [0, -kappa]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8283
			new Segment([0, -1], [-kappa, 0], [kappa, 0 ]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8284
			new Segment([1, 0], [0, -kappa], [0, kappa ]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8285
			new Segment([0, 1], [kappa, 0 ], [-kappa, 0])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8286
		];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8287
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8288
	function createPath(segments, closed, args) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8289
		var props = Base.getNamed(args),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8290
			path = new Path(props && props.insert === false && Item.NO_INSERT);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8291
		path._add(segments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8292
		path._closed = closed;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8293
		return path.set(props);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8294
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8295
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8296
	function createEllipse(center, radius, args) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8297
		var segments = new Array(4);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8298
		for (var i = 0; i < 4; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8299
			var segment = ellipseSegments[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8300
			segments[i] = new Segment(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8301
				segment._point.multiply(radius).add(center),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8302
				segment._handleIn.multiply(radius),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8303
				segment._handleOut.multiply(radius)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8304
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8305
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8306
		return createPath(segments, true, args);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8307
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8308
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8309
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8310
		Line: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8311
			return createPath([
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8312
				new Segment(Point.readNamed(arguments, 'from')),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8313
				new Segment(Point.readNamed(arguments, 'to'))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8314
			], false, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8315
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8316
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8317
		Circle: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8318
			var center = Point.readNamed(arguments, 'center'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8319
				radius = Base.readNamed(arguments, 'radius');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8320
			return createEllipse(center, new Size(radius), arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8321
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8322
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8323
		Rectangle: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8324
			var rect = Rectangle.readNamed(arguments, 'rectangle'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8325
				radius = Size.readNamed(arguments, 'radius', 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8326
						{ readNull: true }),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8327
				bl = rect.getBottomLeft(true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8328
				tl = rect.getTopLeft(true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8329
				tr = rect.getTopRight(true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8330
				br = rect.getBottomRight(true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8331
				segments;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8332
			if (!radius || radius.isZero()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8333
				segments = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8334
					new Segment(bl),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8335
					new Segment(tl),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8336
					new Segment(tr),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8337
					new Segment(br)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8338
				];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8339
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8340
				radius = Size.min(radius, rect.getSize(true).divide(2));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8341
				var rx = radius.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8342
					ry = radius.height,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8343
					hx = rx * kappa,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8344
					hy = ry * kappa;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8345
				segments = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8346
					new Segment(bl.add(rx, 0), null, [-hx, 0]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8347
					new Segment(bl.subtract(0, ry), [0, hy]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8348
					new Segment(tl.add(0, ry), null, [0, -hy]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8349
					new Segment(tl.add(rx, 0), [-hx, 0], null),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8350
					new Segment(tr.subtract(rx, 0), null, [hx, 0]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8351
					new Segment(tr.add(0, ry), [0, -hy], null),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8352
					new Segment(br.subtract(0, ry), null, [0, hy]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8353
					new Segment(br.subtract(rx, 0), [hx, 0])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8354
				];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8355
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8356
			return createPath(segments, true, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8357
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8358
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8359
		RoundRectangle: '#Rectangle',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8360
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8361
		Ellipse: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8362
			var ellipse = Shape._readEllipse(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8363
			return createEllipse(ellipse.center, ellipse.radius, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8364
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8365
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8366
		Oval: '#Ellipse',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8367
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8368
		Arc: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8369
			var from = Point.readNamed(arguments, 'from'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8370
				through = Point.readNamed(arguments, 'through'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8371
				to = Point.readNamed(arguments, 'to'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8372
				props = Base.getNamed(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8373
				path = new Path(props && props.insert === false
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8374
						&& Item.NO_INSERT);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8375
			path.moveTo(from);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8376
			path.arcTo(through, to);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8377
			return path.set(props);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8378
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8379
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8380
		RegularPolygon: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8381
			var center = Point.readNamed(arguments, 'center'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8382
				sides = Base.readNamed(arguments, 'sides'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8383
				radius = Base.readNamed(arguments, 'radius'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8384
				step = 360 / sides,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8385
				three = !(sides % 3),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8386
				vector = new Point(0, three ? -radius : radius),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8387
				offset = three ? -1 : 0.5,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8388
				segments = new Array(sides);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8389
			for (var i = 0; i < sides; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8390
				segments[i] = new Segment(center.add(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8391
					vector.rotate((i + offset) * step)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8392
			return createPath(segments, true, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8393
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8394
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8395
		Star: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8396
			var center = Point.readNamed(arguments, 'center'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8397
				points = Base.readNamed(arguments, 'points') * 2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8398
				radius1 = Base.readNamed(arguments, 'radius1'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8399
				radius2 = Base.readNamed(arguments, 'radius2'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8400
				step = 360 / points,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8401
				vector = new Point(0, -1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8402
				segments = new Array(points);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8403
			for (var i = 0; i < points; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8404
				segments[i] = new Segment(center.add(vector.rotate(step * i)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8405
						.multiply(i % 2 ? radius2 : radius1)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8406
			return createPath(segments, true, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8407
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8408
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8409
}});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8410
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8411
var CompoundPath = PathItem.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8412
	_class: 'CompoundPath',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8413
	_serializeFields: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8414
		children: []
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8415
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8416
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8417
	initialize: function CompoundPath(arg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8418
		this._children = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8419
		this._namedChildren = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8420
		if (!this._initialize(arg)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8421
			if (typeof arg === 'string') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8422
				this.setPathData(arg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8423
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8424
				this.addChildren(Array.isArray(arg) ? arg : arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8425
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8426
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8427
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8428
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8429
	insertChildren: function insertChildren(index, items, _preserve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8430
		items = insertChildren.base.call(this, index, items, _preserve, Path);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8431
		for (var i = 0, l = !_preserve && items && items.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8432
			var item = items[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8433
			if (item._clockwise === undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8434
				item.setClockwise(item._index === 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8435
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8436
		return items;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8437
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8438
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8439
	reverse: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8440
		var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8441
		for (var i = 0, l = children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8442
			children[i].reverse();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8443
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8444
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8445
	smooth: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8446
		for (var i = 0, l = this._children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8447
			this._children[i].smooth();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8448
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8449
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8450
	reduce: function reduce() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8451
		if (this._children.length === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8452
			var path = new Path(Item.NO_INSERT);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8453
			path.insertAbove(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8454
			path.setStyle(this._style);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8455
			this.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8456
			return path;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8457
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8458
			return reduce.base.call(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8459
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8460
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8461
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8462
	isClockwise: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8463
		var child = this.getFirstChild();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8464
		return child && child.isClockwise();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8465
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8466
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8467
	setClockwise: function(clockwise) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8468
		if (this.isClockwise() !== !!clockwise)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8469
			this.reverse();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8470
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8471
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8472
	getFirstSegment: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8473
		var first = this.getFirstChild();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8474
		return first && first.getFirstSegment();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8475
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8476
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8477
	getLastSegment: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8478
		var last = this.getLastChild();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8479
		return last && last.getLastSegment();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8480
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8481
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8482
	getCurves: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8483
		var children = this._children,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8484
			curves = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8485
		for (var i = 0, l = children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8486
			curves.push.apply(curves, children[i].getCurves());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8487
		return curves;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8488
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8489
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8490
	getFirstCurve: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8491
		var first = this.getFirstChild();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8492
		return first && first.getFirstCurve();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8493
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8494
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8495
	getLastCurve: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8496
		var last = this.getLastChild();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8497
		return last && last.getFirstCurve();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8498
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8499
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8500
	getArea: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8501
		var children = this._children,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8502
			area = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8503
		for (var i = 0, l = children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8504
			area += children[i].getArea();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8505
		return area;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8506
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8507
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8508
	beans: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8509
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8510
	getPathData: function(_matrix, _precision) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8511
		var children = this._children,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8512
			paths = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8513
		for (var i = 0, l = children.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8514
			var child = children[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8515
				mx = child._matrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8516
			paths.push(child.getPathData(_matrix && !mx.isIdentity()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8517
					? _matrix.chain(mx) : mx, _precision));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8518
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8519
		return paths.join(' ');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8520
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8521
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8522
	_getChildHitTestOptions: function(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8523
		return options.class === Path || options.type === 'path'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8524
				? options
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8525
				: new Base(options, { fill: false });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8526
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8527
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8528
	_draw: function(ctx, param, strokeMatrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8529
		var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8530
		if (children.length === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8531
			return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8532
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8533
		if (this._currentPath) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8534
			ctx.currentPath = this._currentPath;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8535
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8536
			param = param.extend({ dontStart: true, dontFinish: true });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8537
			ctx.beginPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8538
			for (var i = 0, l = children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8539
				children[i].draw(ctx, param, strokeMatrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8540
			this._currentPath = ctx.currentPath;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8541
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8542
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8543
		if (!param.clip) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8544
			this._setStyles(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8545
			var style = this._style;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8546
			if (style.hasFill()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8547
				ctx.fill(style.getWindingRule());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8548
				ctx.shadowColor = 'rgba(0,0,0,0)';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8549
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8550
			if (style.hasStroke())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8551
				ctx.stroke();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8552
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8553
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8554
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8555
	_drawSelected: function(ctx, matrix, selectedItems) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8556
		var children = this._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8557
		for (var i = 0, l = children.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8558
			var child = children[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8559
				mx = child._matrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8560
			if (!selectedItems[child._id])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8561
				child._drawSelected(ctx, mx.isIdentity() ? matrix
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8562
						: matrix.chain(mx));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8563
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8564
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8565
}, new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8566
	function getCurrentPath(that, check) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8567
		var children = that._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8568
		if (check && children.length === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8569
			throw new Error('Use a moveTo() command first');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8570
		return children[children.length - 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8571
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8572
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8573
	var fields = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8574
		moveTo: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8575
			var current = getCurrentPath(this),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8576
				path = current && current.isEmpty() ? current : new Path();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8577
			if (path !== current)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8578
				this.addChild(path);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8579
			path.moveTo.apply(path, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8580
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8581
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8582
		moveBy: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8583
			var current = getCurrentPath(this, true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8584
				last = current && current.getLastSegment(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8585
				point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8586
			this.moveTo(last ? point.add(last._point) : point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8587
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8588
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8589
		closePath: function(join) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8590
			getCurrentPath(this, true).closePath(join);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8591
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8592
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8593
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8594
	Base.each(['lineTo', 'cubicCurveTo', 'quadraticCurveTo', 'curveTo', 'arcTo',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8595
			'lineBy', 'cubicCurveBy', 'quadraticCurveBy', 'curveBy', 'arcBy'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8596
			function(key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8597
				fields[key] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8598
					var path = getCurrentPath(this, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8599
					path[key].apply(path, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8600
				};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8601
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8602
	);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8603
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8604
	return fields;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8605
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8606
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8607
PathItem.inject(new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8608
	var operators = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8609
		unite: function(w) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8610
			return w === 1 || w === 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8611
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8612
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8613
		intersect: function(w) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8614
			return w === 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8615
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8616
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8617
		subtract: function(w) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8618
			return w === 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8619
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8620
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8621
		exclude: function(w) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8622
			return w === 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8623
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8624
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8625
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8626
	function computeBoolean(path1, path2, operation) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8627
		var operator = operators[operation];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8628
		function preparePath(path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8629
			return path.clone(false).reduce().reorient().transform(null, true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8630
					true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8631
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8632
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8633
		var _path1 = preparePath(path1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8634
			_path2 = path2 && path1 !== path2 && preparePath(path2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8635
		if (_path2 && /^(subtract|exclude)$/.test(operation)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8636
				^ (_path2.isClockwise() !== _path1.isClockwise()))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8637
			_path2.reverse();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8638
		splitPath(_path1.getIntersections(_path2, null, true));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8639
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8640
		var chain = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8641
			segments = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8642
			monoCurves = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8643
			tolerance = 0.000001;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8644
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8645
		function collect(paths) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8646
			for (var i = 0, l = paths.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8647
				var path = paths[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8648
				segments.push.apply(segments, path._segments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8649
				monoCurves.push.apply(monoCurves, path._getMonoCurves());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8650
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8651
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8652
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8653
		collect(_path1._children || [_path1]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8654
		if (_path2)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8655
			collect(_path2._children || [_path2]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8656
		segments.sort(function(a, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8657
			var _a = a._intersection,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8658
				_b = b._intersection;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8659
			return !_a && !_b || _a && _b ? 0 : _a ? -1 : 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8660
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8661
		for (var i = 0, l = segments.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8662
			var segment = segments[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8663
			if (segment._winding != null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8664
				continue;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8665
			chain.length = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8666
			var startSeg = segment,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8667
				totalLength = 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8668
				windingSum = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8669
			do {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8670
				var length = segment.getCurve().getLength();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8671
				chain.push({ segment: segment, length: length });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8672
				totalLength += length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8673
				segment = segment.getNext();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8674
			} while (segment && !segment._intersection && segment !== startSeg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8675
			for (var j = 0; j < 3; j++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8676
				var length = totalLength * (j + 1) / 4;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8677
				for (var k = 0, m = chain.length; k < m; k++) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8678
					var node = chain[k],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8679
						curveLength = node.length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8680
					if (length <= curveLength) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8681
						if (length < tolerance
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8682
								|| curveLength - length < tolerance)
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8683
							length = curveLength / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8684
						var curve = node.segment.getCurve(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8685
							pt = curve.getPointAt(length),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8686
							hor = curve.isLinear() && Math.abs(curve
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8687
									.getTangentAt(0.5, true).y) < tolerance,
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8688
							path = curve._path;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8689
						if (path._parent instanceof CompoundPath)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8690
							path = path._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8691
						windingSum += operation === 'subtract' && _path2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8692
							&& (path === _path1 && _path2._getWinding(pt, hor)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8693
							|| path === _path2 && !_path1._getWinding(pt, hor))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8694
							? 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8695
							: getWinding(pt, monoCurves, hor);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8696
						break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8697
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8698
					length -= curveLength;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8699
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8700
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8701
			var winding = Math.round(windingSum / 3);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8702
			for (var j = chain.length - 1; j >= 0; j--)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8703
				chain[j].segment._winding = winding;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8704
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8705
		var result = new CompoundPath(Item.NO_INSERT);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8706
		result.insertAbove(path1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8707
		result.addChildren(tracePaths(segments, operator), true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8708
		result = result.reduce();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8709
		result.setStyle(path1._style);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8710
		return result;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8711
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8712
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8713
	function splitPath(intersections) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8714
		var tMin = 0.000001,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8715
			tMax = 1 - tMin,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8716
			linearHandles;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8717
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8718
		function resetLinear() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8719
			for (var i = 0, l = linearHandles.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8720
				linearHandles[i].set(0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8721
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8722
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8723
		for (var i = intersections.length - 1, curve, prev; i >= 0; i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8724
			var loc = intersections[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8725
				t = loc._parameter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8726
			if (prev && prev._curve === loc._curve && prev._parameter > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8727
				t /= prev._parameter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8728
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8729
				curve = loc._curve;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8730
				if (linearHandles)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8731
					resetLinear();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8732
				linearHandles = curve.isLinear() ? [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8733
						curve._segment1._handleOut,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8734
						curve._segment2._handleIn
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8735
					] : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8736
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8737
			var newCurve,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8738
				segment;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8739
			if (newCurve = curve.divide(t, true, true)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8740
				segment = newCurve._segment1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8741
				curve = newCurve.getPrevious();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8742
				if (linearHandles)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8743
					linearHandles.push(segment._handleOut, segment._handleIn);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8744
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8745
				segment = t < tMin
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8746
					? curve._segment1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8747
					: t > tMax
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8748
						? curve._segment2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8749
						: curve.getPartLength(0, t) < curve.getPartLength(t, 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8750
							? curve._segment1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8751
							: curve._segment2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8752
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8753
			segment._intersection = loc.getIntersection();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8754
			loc._segment = segment;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8755
			prev = loc;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8756
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8757
		if (linearHandles)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8758
			resetLinear();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8759
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8760
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8761
	function getWinding(point, curves, horizontal, testContains) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8762
		var tolerance = 0.000001,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8763
			tMin = tolerance,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8764
			tMax = 1 - tMin,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8765
			px = point.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8766
			py = point.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8767
			windLeft = 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8768
			windRight = 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8769
			roots = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8770
			abs = Math.abs;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8771
		if (horizontal) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8772
			var yTop = -Infinity,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8773
				yBottom = Infinity,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8774
				yBefore = py - tolerance,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8775
				yAfter = py + tolerance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8776
			for (var i = 0, l = curves.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8777
				var values = curves[i].values;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8778
				if (Curve.solveCubic(values, 0, px, roots, 0, 1) > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8779
					for (var j = roots.length - 1; j >= 0; j--) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8780
						var y = Curve.getPoint(values, roots[j]).y;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8781
						if (y < yBefore && y > yTop) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8782
							yTop = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8783
						} else if (y > yAfter && y < yBottom) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8784
							yBottom = y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8785
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8786
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8787
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8788
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8789
			yTop = (yTop + py) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8790
			yBottom = (yBottom + py) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8791
			if (yTop > -Infinity)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8792
				windLeft = getWinding(new Point(px, yTop), curves);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8793
			if (yBottom < Infinity)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8794
				windRight = getWinding(new Point(px, yBottom), curves);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8795
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8796
			var xBefore = px - tolerance,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8797
				xAfter = px + tolerance;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8798
			var startCounted = false,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8799
				prevCurve,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8800
				prevT;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8801
			for (var i = 0, l = curves.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8802
				var curve = curves[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8803
					values = curve.values,
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8804
					winding = curve.winding;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8805
				if (winding && (winding === 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8806
						&& py >= values[1] && py <= values[7]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8807
						|| py >= values[7] && py <= values[1])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8808
					&& Curve.solveCubic(values, 1, py, roots, 0, 1) === 1) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8809
					var t = roots[0];
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8810
					if (!(
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8811
						t > tMax && startCounted && curve.next !== curves[i + 1]
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8812
						|| t < tMin && prevT > tMax
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8813
							&& curve.previous === prevCurve)) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8814
						var x = Curve.getPoint(values, t).x,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8815
							slope = Curve.getTangent(values, t).y,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8816
							counted = false;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8817
						if (Numerical.isZero(slope) && !Curve.isLinear(values)
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8818
								|| t < tMin && slope * Curve.getTangent(
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8819
									curve.previous.values, 1).y < 0
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8820
								|| t > tMax && slope * Curve.getTangent(
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8821
									curve.next.values, 0).y < 0) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8822
							if (testContains && x >= xBefore && x <= xAfter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8823
								++windLeft;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8824
								++windRight;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8825
								counted = true;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8826
							}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8827
						} else if (x <= xBefore) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8828
							windLeft += winding;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8829
							counted = true;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8830
						} else if (x >= xAfter) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8831
							windRight += winding;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8832
							counted = true;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8833
						}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8834
						if (curve.previous !== curves[i - 1])
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8835
							startCounted = t < tMin && counted;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8836
					}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8837
					prevCurve = curve;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8838
					prevT = t;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8839
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8840
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8841
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8842
		return Math.max(abs(windLeft), abs(windRight));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8843
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8844
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8845
	function tracePaths(segments, operator, selfOp) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8846
		var paths = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8847
			tMin = 0.000001,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8848
			tMax = 1 - tMin;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8849
		for (var i = 0, seg, startSeg, l = segments.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8850
			seg = startSeg = segments[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8851
			if (seg._visited || !operator(seg._winding))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8852
				continue;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8853
			var path = new Path(Item.NO_INSERT),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8854
				inter = seg._intersection,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8855
				startInterSeg = inter && inter._segment,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8856
				added = false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8857
				dir = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8858
			do {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8859
				var handleIn = dir > 0 ? seg._handleIn : seg._handleOut,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8860
					handleOut = dir > 0 ? seg._handleOut : seg._handleIn,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8861
					interSeg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8862
				if (added && (!operator(seg._winding) || selfOp)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8863
						&& (inter = seg._intersection)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8864
						&& (interSeg = inter._segment)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8865
						&& interSeg !== startSeg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8866
					if (selfOp) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8867
						seg._visited = interSeg._visited;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8868
						seg = interSeg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8869
						dir = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8870
					} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8871
						var c1 = seg.getCurve();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8872
						if (dir > 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8873
							c1 = c1.getPrevious();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8874
						var t1 = c1.getTangentAt(dir < 1 ? tMin : tMax, true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8875
							c4 = interSeg.getCurve(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8876
							c3 = c4.getPrevious(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8877
							t3 = c3.getTangentAt(tMax, true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8878
							t4 = c4.getTangentAt(tMin, true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8879
							w3 = t1.cross(t3),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8880
							w4 = t1.cross(t4);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8881
						if (w3 * w4 !== 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8882
							var curve = w3 < w4 ? c3 : c4,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8883
								nextCurve = operator(curve._segment1._winding)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8884
									? curve
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8885
									: w3 < w4 ? c4 : c3,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8886
								nextSeg = nextCurve._segment1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8887
							dir = nextCurve === c3 ? -1 : 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8888
							if (nextSeg._visited && seg._path !== nextSeg._path
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8889
										|| !operator(nextSeg._winding)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8890
								dir = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8891
							} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8892
								seg._visited = interSeg._visited;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8893
								seg = interSeg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8894
								if (nextSeg._visited)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8895
									dir = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8896
							}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8897
						} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8898
							dir = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8899
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8900
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8901
					handleOut = dir > 0 ? seg._handleOut : seg._handleIn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8902
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8903
				path.add(new Segment(seg._point, added && handleIn, handleOut));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8904
				added = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8905
				seg._visited = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8906
				seg = dir > 0 ? seg.getNext() : seg. getPrevious();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8907
			} while (seg && !seg._visited
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8908
					&& seg !== startSeg && seg !== startInterSeg
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8909
					&& (seg._intersection || operator(seg._winding)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8910
			if (seg && (seg === startSeg || seg === startInterSeg)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8911
				path.firstSegment.setHandleIn((seg === startInterSeg
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8912
						? startInterSeg : seg)._handleIn);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8913
				path.setClosed(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8914
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8915
				path.lastSegment._handleOut.set(0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8916
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8917
			if (path._segments.length >
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  8918
					(path._closed ? path.isLinear() ? 2 : 0 : 1))
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8919
				paths.push(path);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8920
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8921
		return paths;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8922
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8923
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8924
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8925
		_getWinding: function(point, horizontal, testContains) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8926
			return getWinding(point, this._getMonoCurves(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8927
					horizontal, testContains);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8928
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8929
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8930
		unite: function(path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8931
			return computeBoolean(this, path, 'unite');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8932
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8933
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8934
		intersect: function(path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8935
			return computeBoolean(this, path, 'intersect');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8936
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8937
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8938
		subtract: function(path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8939
			return computeBoolean(this, path, 'subtract');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8940
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8941
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8942
		exclude: function(path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8943
			return computeBoolean(this, path, 'exclude');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8944
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8945
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8946
		divide: function(path) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8947
			return new Group([this.subtract(path), this.intersect(path)]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8948
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8949
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8950
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8951
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8952
Path.inject({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8953
	_getMonoCurves: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8954
		var monoCurves = this._monoCurves,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8955
			prevCurve;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8956
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8957
		function insertCurve(v) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8958
			var y0 = v[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8959
				y1 = v[7],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8960
				curve = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8961
					values: v,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8962
					winding: y0 === y1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8963
						? 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8964
						: y0 > y1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8965
							? -1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8966
							: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8967
					previous: prevCurve,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8968
					next: null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8969
				};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8970
			if (prevCurve)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8971
				prevCurve.next = curve;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8972
			monoCurves.push(curve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8973
			prevCurve = curve;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8974
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8975
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8976
		function handleCurve(v) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8977
			if (Curve.getLength(v) === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8978
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8979
			var y0 = v[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8980
				y1 = v[3],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8981
				y2 = v[5],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8982
				y3 = v[7];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8983
			if (Curve.isLinear(v)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8984
				insertCurve(v);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8985
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8986
				var a = 3 * (y1 - y2) - y0 + y3,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8987
					b = 2 * (y0 + y2) - 4 * y1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8988
					c = y1 - y0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8989
					tolerance = 0.000001,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8990
					roots = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8991
				var count = Numerical.solveQuadratic(a, b, c, roots, tolerance,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8992
						1 - tolerance);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8993
				if (count === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8994
					insertCurve(v);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8995
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8996
					roots.sort();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8997
					var t = roots[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8998
						parts = Curve.subdivide(v, t);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  8999
					insertCurve(parts[0]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9000
					if (count > 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9001
						t = (roots[1] - t) / (1 - t);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9002
						parts = Curve.subdivide(parts[1], t);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9003
						insertCurve(parts[0]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9004
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9005
					insertCurve(parts[1]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9006
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9007
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9008
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9009
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9010
		if (!monoCurves) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9011
			monoCurves = this._monoCurves = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9012
			var curves = this.getCurves(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9013
				segments = this._segments;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9014
			for (var i = 0, l = curves.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9015
				handleCurve(curves[i].getValues());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9016
			if (!this._closed && segments.length > 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9017
				var p1 = segments[segments.length - 1]._point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9018
					p2 = segments[0]._point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9019
					p1x = p1._x, p1y = p1._y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9020
					p2x = p2._x, p2y = p2._y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9021
				handleCurve([p1x, p1y, p1x, p1y, p2x, p2y, p2x, p2y]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9022
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9023
			if (monoCurves.length > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9024
				var first = monoCurves[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9025
					last = monoCurves[monoCurves.length - 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9026
				first.previous = last;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9027
				last.next = first;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9028
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9029
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9030
		return monoCurves;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9031
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9032
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9033
	getInteriorPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9034
		var bounds = this.getBounds(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9035
			point = bounds.getCenter(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9036
		if (!this.contains(point)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9037
			var curves = this._getMonoCurves(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9038
				roots = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9039
				y = point.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9040
				xIntercepts = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9041
			for (var i = 0, l = curves.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9042
				var values = curves[i].values;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9043
				if ((curves[i].winding === 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9044
						&& y >= values[1] && y <= values[7]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9045
						|| y >= values[7] && y <= values[1])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9046
						&& Curve.solveCubic(values, 1, y, roots, 0, 1) > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9047
					for (var j = roots.length - 1; j >= 0; j--)
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9048
						xIntercepts.push(Curve.getPoint(values, roots[j]).x);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9049
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9050
				if (xIntercepts.length > 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9051
					break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9052
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9053
			point.x = (xIntercepts[0] + xIntercepts[1]) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9054
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9055
		return point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9056
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9057
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9058
	reorient: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9059
		this.setClockwise(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9060
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9061
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9062
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9063
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9064
CompoundPath.inject({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9065
	_getMonoCurves: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9066
		var children = this._children,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9067
			monoCurves = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9068
		for (var i = 0, l = children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9069
			monoCurves.push.apply(monoCurves, children[i]._getMonoCurves());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9070
		return monoCurves;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9071
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9072
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9073
	reorient: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9074
		var children = this.removeChildren().sort(function(a, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9075
			return b.getBounds().getArea() - a.getBounds().getArea();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9076
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9077
		if (children.length > 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9078
			this.addChildren(children);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9079
			var clockwise = children[0].isClockwise();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9080
			for (var i = 1, l = children.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9081
				var point = children[i].getInteriorPoint(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9082
					counters = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9083
				for (var j = i - 1; j >= 0; j--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9084
					if (children[j].contains(point))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9085
						counters++;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9086
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9087
				children[i].setClockwise(counters % 2 === 0 && clockwise);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9088
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9089
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9090
		return this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9091
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9092
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9093
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9094
var PathIterator = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9095
	_class: 'PathIterator',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9096
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9097
	initialize: function(path, maxRecursion, tolerance, matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9098
		var curves = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9099
			parts = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9100
			length = 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9101
			minDifference = 1 / (maxRecursion || 32),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9102
			segments = path._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9103
			segment1 = segments[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9104
			segment2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9105
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9106
		function addCurve(segment1, segment2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9107
			var curve = Curve.getValues(segment1, segment2, matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9108
			curves.push(curve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9109
			computeParts(curve, segment1._index, 0, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9110
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9111
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9112
		function computeParts(curve, index, minT, maxT) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9113
			if ((maxT - minT) > minDifference
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9114
					&& !Curve.isFlatEnough(curve, tolerance || 0.25)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9115
				var split = Curve.subdivide(curve),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9116
					halfT = (minT + maxT) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9117
				computeParts(split[0], index, minT, halfT);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9118
				computeParts(split[1], index, halfT, maxT);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9119
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9120
				var x = curve[6] - curve[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9121
					y = curve[7] - curve[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9122
					dist = Math.sqrt(x * x + y * y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9123
				if (dist > 0.000001) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9124
					length += dist;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9125
					parts.push({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9126
						offset: length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9127
						value: maxT,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9128
						index: index
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9129
					});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9130
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9131
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9132
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9133
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9134
		for (var i = 1, l = segments.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9135
			segment2 = segments[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9136
			addCurve(segment1, segment2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9137
			segment1 = segment2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9138
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9139
		if (path._closed)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9140
			addCurve(segment2, segments[0]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9141
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9142
		this.curves = curves;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9143
		this.parts = parts;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9144
		this.length = length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9145
		this.index = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9146
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9147
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9148
	getParameterAt: function(offset) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9149
		var i, j = this.index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9150
		for (;;) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9151
			i = j;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9152
			if (j == 0 || this.parts[--j].offset < offset)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9153
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9154
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9155
		for (var l = this.parts.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9156
			var part = this.parts[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9157
			if (part.offset >= offset) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9158
				this.index = i;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9159
				var prev = this.parts[i - 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9160
				var prevVal = prev && prev.index == part.index ? prev.value : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9161
					prevLen = prev ? prev.offset : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9162
				return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9163
					value: prevVal + (part.value - prevVal)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9164
						* (offset - prevLen) / (part.offset - prevLen),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9165
					index: part.index
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9166
				};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9167
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9168
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9169
		var part = this.parts[this.parts.length - 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9170
		return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9171
			value: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9172
			index: part.index
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9173
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9174
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9175
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9176
	drawPart: function(ctx, from, to) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9177
		from = this.getParameterAt(from);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9178
		to = this.getParameterAt(to);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9179
		for (var i = from.index; i <= to.index; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9180
			var curve = Curve.getPart(this.curves[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9181
					i == from.index ? from.value : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9182
					i == to.index ? to.value : 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9183
			if (i == from.index)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9184
				ctx.moveTo(curve[0], curve[1]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9185
			ctx.bezierCurveTo.apply(ctx, curve.slice(2));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9186
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9187
	}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9188
}, Base.each(Curve.evaluateMethods,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9189
	function(name) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9190
		this[name + 'At'] = function(offset, weighted) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9191
			var param = this.getParameterAt(offset);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9192
			return Curve[name](this.curves[param.index], param.value, weighted);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9193
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9194
	}, {})
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9195
);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9196
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9197
var PathFitter = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9198
	initialize: function(path, error) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9199
		var points = this.points = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9200
			segments = path._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9201
			prev;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9202
		for (var i = 0, l = segments.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9203
			var point = segments[i].point.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9204
			if (!prev || !prev.equals(point)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9205
				points.push(point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9206
				prev = point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9207
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9208
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9209
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9210
		if (path._closed) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9211
			this.closed = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9212
			points.unshift(points[points.length - 1]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9213
			points.push(points[1]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9214
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9215
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9216
		this.error = error;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9217
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9218
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9219
	fit: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9220
		var points = this.points,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9221
			length = points.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9222
			segments = this.segments = length > 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9223
					? [new Segment(points[0])] : [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9224
		if (length > 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9225
			this.fitCubic(0, length - 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9226
				points[1].subtract(points[0]).normalize(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9227
				points[length - 2].subtract(points[length - 1]).normalize());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9228
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9229
		if (this.closed) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9230
			segments.shift();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9231
			segments.pop();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9232
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9233
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9234
		return segments;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9235
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9236
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9237
	fitCubic: function(first, last, tan1, tan2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9238
		if (last - first == 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9239
			var pt1 = this.points[first],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9240
				pt2 = this.points[last],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9241
				dist = pt1.getDistance(pt2) / 3;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9242
			this.addCurve([pt1, pt1.add(tan1.normalize(dist)),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9243
					pt2.add(tan2.normalize(dist)), pt2]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9244
			return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9245
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9246
		var uPrime = this.chordLengthParameterize(first, last),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9247
			maxError = Math.max(this.error, this.error * this.error),
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9248
			split,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9249
			parametersInOrder = true;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9250
		for (var i = 0; i <= 4; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9251
			var curve = this.generateBezier(first, last, uPrime, tan1, tan2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9252
			var max = this.findMaxError(first, last, curve, uPrime);
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9253
			if (max.error < this.error && parametersInOrder) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9254
				this.addCurve(curve);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9255
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9256
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9257
			split = max.index;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9258
			if (max.error >= maxError)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9259
				break;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9260
			parametersInOrder = this.reparameterize(first, last, uPrime, curve);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9261
			maxError = max.error;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9262
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9263
		var V1 = this.points[split - 1].subtract(this.points[split]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9264
			V2 = this.points[split].subtract(this.points[split + 1]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9265
			tanCenter = V1.add(V2).divide(2).normalize();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9266
		this.fitCubic(first, split, tan1, tanCenter);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9267
		this.fitCubic(split, last, tanCenter.negate(), tan2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9268
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9269
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9270
	addCurve: function(curve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9271
		var prev = this.segments[this.segments.length - 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9272
		prev.setHandleOut(curve[1].subtract(curve[0]));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9273
		this.segments.push(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9274
				new Segment(curve[3], curve[2].subtract(curve[3])));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9275
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9276
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9277
	generateBezier: function(first, last, uPrime, tan1, tan2) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9278
		var epsilon = 1e-12,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9279
			pt1 = this.points[first],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9280
			pt2 = this.points[last],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9281
			C = [[0, 0], [0, 0]],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9282
			X = [0, 0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9283
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9284
		for (var i = 0, l = last - first + 1; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9285
			var u = uPrime[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9286
				t = 1 - u,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9287
				b = 3 * u * t,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9288
				b0 = t * t * t,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9289
				b1 = b * t,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9290
				b2 = b * u,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9291
				b3 = u * u * u,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9292
				a1 = tan1.normalize(b1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9293
				a2 = tan2.normalize(b2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9294
				tmp = this.points[first + i]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9295
					.subtract(pt1.multiply(b0 + b1))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9296
					.subtract(pt2.multiply(b2 + b3));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9297
			C[0][0] += a1.dot(a1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9298
			C[0][1] += a1.dot(a2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9299
			C[1][0] = C[0][1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9300
			C[1][1] += a2.dot(a2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9301
			X[0] += a1.dot(tmp);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9302
			X[1] += a2.dot(tmp);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9303
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9304
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9305
		var detC0C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9306
			alpha1, alpha2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9307
		if (Math.abs(detC0C1) > epsilon) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9308
			var detC0X	= C[0][0] * X[1]	- C[1][0] * X[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9309
				detXC1	= X[0]	  * C[1][1] - X[1]	  * C[0][1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9310
			alpha1 = detXC1 / detC0C1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9311
			alpha2 = detC0X / detC0C1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9312
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9313
			var c0 = C[0][0] + C[0][1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9314
				c1 = C[1][0] + C[1][1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9315
			if (Math.abs(c0) > epsilon) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9316
				alpha1 = alpha2 = X[0] / c0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9317
			} else if (Math.abs(c1) > epsilon) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9318
				alpha1 = alpha2 = X[1] / c1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9319
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9320
				alpha1 = alpha2 = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9321
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9322
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9323
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9324
		var segLength = pt2.getDistance(pt1),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9325
			eps = epsilon * segLength,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9326
			handle1,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9327
			handle2;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9328
		if (alpha1 < eps || alpha2 < eps) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9329
			alpha1 = alpha2 = segLength / 3;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9330
		} else {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9331
			var line = pt2.subtract(pt1);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9332
			handle1 = tan1.normalize(alpha1);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9333
			handle2 = tan2.normalize(alpha2);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9334
			if (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9335
				alpha1 = alpha2 = segLength / 3;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9336
				handle1 = handle2 = null;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9337
			}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9338
		}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9339
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9340
		return [pt1, pt1.add(handle1 || tan1.normalize(alpha1)),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9341
				pt2.add(handle2 || tan2.normalize(alpha2)), pt2];
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9342
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9343
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9344
	reparameterize: function(first, last, u, curve) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9345
		for (var i = first; i <= last; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9346
			u[i - first] = this.findRoot(curve, this.points[i], u[i - first]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9347
		}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9348
		for (var i = 1, l = u.length; i < l; i++) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9349
			if (u[i] <= u[i - 1])
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9350
				return false;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9351
		}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9352
		return true;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9353
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9354
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9355
	findRoot: function(curve, point, u) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9356
		var curve1 = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9357
			curve2 = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9358
		for (var i = 0; i <= 2; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9359
			curve1[i] = curve[i + 1].subtract(curve[i]).multiply(3);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9360
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9361
		for (var i = 0; i <= 1; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9362
			curve2[i] = curve1[i + 1].subtract(curve1[i]).multiply(2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9363
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9364
		var pt = this.evaluate(3, curve, u),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9365
			pt1 = this.evaluate(2, curve1, u),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9366
			pt2 = this.evaluate(1, curve2, u),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9367
			diff = pt.subtract(point),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9368
			df = pt1.dot(pt1) + diff.dot(pt2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9369
		if (Math.abs(df) < 0.000001)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9370
			return u;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9371
		return u - diff.dot(pt1) / df;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9372
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9373
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9374
	evaluate: function(degree, curve, t) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9375
		var tmp = curve.slice();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9376
		for (var i = 1; i <= degree; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9377
			for (var j = 0; j <= degree - i; j++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9378
				tmp[j] = tmp[j].multiply(1 - t).add(tmp[j + 1].multiply(t));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9379
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9380
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9381
		return tmp[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9382
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9383
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9384
	chordLengthParameterize: function(first, last) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9385
		var u = [0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9386
		for (var i = first + 1; i <= last; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9387
			u[i - first] = u[i - first - 1]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9388
					+ this.points[i].getDistance(this.points[i - 1]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9389
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9390
		for (var i = 1, m = last - first; i <= m; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9391
			u[i] /= u[m];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9392
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9393
		return u;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9394
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9395
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9396
	findMaxError: function(first, last, curve, u) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9397
		var index = Math.floor((last - first + 1) / 2),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9398
			maxDist = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9399
		for (var i = first + 1; i < last; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9400
			var P = this.evaluate(3, curve, u[i - first]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9401
			var v = P.subtract(this.points[i]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9402
			var dist = v.x * v.x + v.y * v.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9403
			if (dist >= maxDist) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9404
				maxDist = dist;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9405
				index = i;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9406
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9407
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9408
		return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9409
			error: maxDist,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9410
			index: index
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9411
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9412
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9413
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9414
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9415
var TextItem = Item.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9416
	_class: 'TextItem',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9417
	_boundsSelected: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9418
	_applyMatrix: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9419
	_canApplyMatrix: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9420
	_serializeFields: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9421
		content: null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9422
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9423
	_boundsGetter: 'getBounds',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9424
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9425
	initialize: function TextItem(arg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9426
		this._content = '';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9427
		this._lines = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9428
		var hasProps = arg && Base.isPlainObject(arg)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9429
				&& arg.x === undefined && arg.y === undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9430
		this._initialize(hasProps && arg, !hasProps && Point.read(arguments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9431
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9432
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9433
	_equals: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9434
		return this._content === item._content;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9435
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9436
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9437
	_clone: function _clone(copy, insert, includeMatrix) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9438
		copy.setContent(this._content);
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9439
		return _clone.base.call(this, copy, insert, includeMatrix);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9440
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9441
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9442
	getContent: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9443
		return this._content;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9444
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9445
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9446
	setContent: function(content) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9447
		this._content = '' + content;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9448
		this._lines = this._content.split(/\r\n|\n|\r/mg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9449
		this._changed(265);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9450
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9451
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9452
	isEmpty: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9453
		return !this._content;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9454
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9455
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9456
	getCharacterStyle: '#getStyle',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9457
	setCharacterStyle: '#setStyle',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9458
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9459
	getParagraphStyle: '#getStyle',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9460
	setParagraphStyle: '#setStyle'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9461
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9462
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9463
var PointText = TextItem.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9464
	_class: 'PointText',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9465
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9466
	initialize: function PointText() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9467
		TextItem.apply(this, arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9468
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9469
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9470
	clone: function(insert) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9471
		return this._clone(new PointText(Item.NO_INSERT), insert);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9472
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9473
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9474
	getPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9475
		var point = this._matrix.getTranslation();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9476
		return new LinkedPoint(point.x, point.y, this, 'setPoint');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9477
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9478
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9479
	setPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9480
		var point = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9481
		this.translate(point.subtract(this._matrix.getTranslation()));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9482
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9483
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9484
	_draw: function(ctx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9485
		if (!this._content)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9486
			return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9487
		this._setStyles(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9488
		var style = this._style,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9489
			lines = this._lines,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9490
			leading = style.getLeading(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9491
			shadowColor = ctx.shadowColor;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9492
		ctx.font = style.getFontStyle();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9493
		ctx.textAlign = style.getJustification();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9494
		for (var i = 0, l = lines.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9495
			ctx.shadowColor = shadowColor;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9496
			var line = lines[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9497
			if (style.hasFill()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9498
				ctx.fillText(line, 0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9499
				ctx.shadowColor = 'rgba(0,0,0,0)';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9500
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9501
			if (style.hasStroke())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9502
				ctx.strokeText(line, 0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9503
			ctx.translate(0, leading);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9504
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9505
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9506
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9507
	_getBounds: function(getter, matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9508
		var style = this._style,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9509
			lines = this._lines,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9510
			numLines = lines.length,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9511
			justification = style.getJustification(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9512
			leading = style.getLeading(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9513
			width = this.getView().getTextWidth(style.getFontStyle(), lines),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9514
			x = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9515
		if (justification !== 'left')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9516
			x -= width / (justification === 'center' ? 2: 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9517
		var bounds = new Rectangle(x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9518
					numLines ? - 0.75 * leading : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9519
					width, numLines * leading);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9520
		return matrix ? matrix._transformBounds(bounds, bounds) : bounds;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9521
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9522
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9523
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9524
var Color = Base.extend(new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9525
	var types = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9526
		gray: ['gray'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9527
		rgb: ['red', 'green', 'blue'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9528
		hsb: ['hue', 'saturation', 'brightness'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9529
		hsl: ['hue', 'saturation', 'lightness'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9530
		gradient: ['gradient', 'origin', 'destination', 'highlight']
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9531
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9532
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9533
	var componentParsers = {},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9534
		colorCache = {},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9535
		colorCtx;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9536
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9537
	function fromCSS(string) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9538
		var match = string.match(/^#(\w{1,2})(\w{1,2})(\w{1,2})$/),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9539
			components;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9540
		if (match) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9541
			components = [0, 0, 0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9542
			for (var i = 0; i < 3; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9543
				var value = match[i + 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9544
				components[i] = parseInt(value.length == 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9545
						? value + value : value, 16) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9546
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9547
		} else if (match = string.match(/^rgba?\((.*)\)$/)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9548
			components = match[1].split(',');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9549
			for (var i = 0, l = components.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9550
				var value = +components[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9551
				components[i] = i < 3 ? value / 255 : value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9552
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9553
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9554
			var cached = colorCache[string];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9555
			if (!cached) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9556
				if (!colorCtx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9557
					colorCtx = CanvasProvider.getContext(1, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9558
					colorCtx.globalCompositeOperation = 'copy';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9559
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9560
				colorCtx.fillStyle = 'rgba(0,0,0,0)';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9561
				colorCtx.fillStyle = string;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9562
				colorCtx.fillRect(0, 0, 1, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9563
				var data = colorCtx.getImageData(0, 0, 1, 1).data;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9564
				cached = colorCache[string] = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9565
					data[0] / 255,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9566
					data[1] / 255,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9567
					data[2] / 255
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9568
				];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9569
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9570
			components = cached.slice();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9571
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9572
		return components;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9573
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9574
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9575
	var hsbIndices = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9576
		[0, 3, 1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9577
		[2, 0, 1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9578
		[1, 0, 3],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9579
		[1, 2, 0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9580
		[3, 1, 0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9581
		[0, 1, 2]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9582
	];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9583
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9584
	var converters = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9585
		'rgb-hsb': function(r, g, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9586
			var max = Math.max(r, g, b),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9587
				min = Math.min(r, g, b),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9588
				delta = max - min,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9589
				h = delta === 0 ? 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9590
					:	( max == r ? (g - b) / delta + (g < b ? 6 : 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9591
						: max == g ? (b - r) / delta + 2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9592
						:			 (r - g) / delta + 4) * 60;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9593
			return [h, max === 0 ? 0 : delta / max, max];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9594
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9595
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9596
		'hsb-rgb': function(h, s, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9597
			h = (((h / 60) % 6) + 6) % 6;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9598
			var i = Math.floor(h),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9599
				f = h - i,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9600
				i = hsbIndices[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9601
				v = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9602
					b,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9603
					b * (1 - s),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9604
					b * (1 - s * f),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9605
					b * (1 - s * (1 - f))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9606
				];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9607
			return [v[i[0]], v[i[1]], v[i[2]]];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9608
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9609
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9610
		'rgb-hsl': function(r, g, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9611
			var max = Math.max(r, g, b),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9612
				min = Math.min(r, g, b),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9613
				delta = max - min,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9614
				achromatic = delta === 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9615
				h = achromatic ? 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9616
					:	( max == r ? (g - b) / delta + (g < b ? 6 : 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9617
						: max == g ? (b - r) / delta + 2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9618
						:			 (r - g) / delta + 4) * 60,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9619
				l = (max + min) / 2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9620
				s = achromatic ? 0 : l < 0.5
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9621
						? delta / (max + min)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9622
						: delta / (2 - max - min);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9623
			return [h, s, l];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9624
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9625
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9626
		'hsl-rgb': function(h, s, l) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9627
			h = (((h / 360) % 1) + 1) % 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9628
			if (s === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9629
				return [l, l, l];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9630
			var t3s = [ h + 1 / 3, h, h - 1 / 3 ],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9631
				t2 = l < 0.5 ? l * (1 + s) : l + s - l * s,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9632
				t1 = 2 * l - t2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9633
				c = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9634
			for (var i = 0; i < 3; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9635
				var t3 = t3s[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9636
				if (t3 < 0) t3 += 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9637
				if (t3 > 1) t3 -= 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9638
				c[i] = 6 * t3 < 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9639
					? t1 + (t2 - t1) * 6 * t3
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9640
					: 2 * t3 < 1
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9641
						? t2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9642
						: 3 * t3 < 2
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9643
							? t1 + (t2 - t1) * ((2 / 3) - t3) * 6
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9644
							: t1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9645
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9646
			return c;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9647
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9648
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9649
		'rgb-gray': function(r, g, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9650
			return [r * 0.2989 + g * 0.587 + b * 0.114];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9651
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9652
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9653
		'gray-rgb': function(g) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9654
			return [g, g, g];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9655
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9656
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9657
		'gray-hsb': function(g) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9658
			return [0, 0, g];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9659
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9660
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9661
		'gray-hsl': function(g) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9662
			return [0, 0, g];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9663
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9664
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9665
		'gradient-rgb': function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9666
			return [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9667
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9668
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9669
		'rgb-gradient': function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9670
			return [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9671
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9672
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9673
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9674
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9675
	return Base.each(types, function(properties, type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9676
		componentParsers[type] = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9677
		Base.each(properties, function(name, index) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9678
			var part = Base.capitalize(name),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9679
				hasOverlap = /^(hue|saturation)$/.test(name),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9680
				parser = componentParsers[type][index] = name === 'gradient'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9681
					? function(value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9682
						var current = this._components[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9683
						value = Gradient.read(Array.isArray(value) ? value
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9684
								: arguments, 0, { readNull: true });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9685
						if (current !== value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9686
							if (current)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9687
								current._removeOwner(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9688
							if (value)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9689
								value._addOwner(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9690
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9691
						return value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9692
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9693
					: type === 'gradient'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9694
						? function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9695
							return Point.read(arguments, 0, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9696
									readNull: name === 'highlight',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9697
									clone: true
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9698
							});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9699
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9700
						: function(value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9701
							return value == null || isNaN(value) ? 0 : value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9702
						};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9703
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9704
			this['get' + part] = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9705
				return this._type === type
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9706
					|| hasOverlap && /^hs[bl]$/.test(this._type)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9707
						? this._components[index]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9708
						: this._convert(type)[index];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9709
			};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9710
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9711
			this['set' + part] = function(value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9712
				if (this._type !== type
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9713
						&& !(hasOverlap && /^hs[bl]$/.test(this._type))) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9714
					this._components = this._convert(type);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9715
					this._properties = types[type];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9716
					this._type = type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9717
				}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9718
				this._components[index] = parser.call(this, value);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9719
				this._changed();
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9720
			};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9721
		}, this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9722
	}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9723
		_class: 'Color',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9724
		_readIndex: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9725
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9726
		initialize: function Color(arg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9727
			var slice = Array.prototype.slice,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9728
				args = arguments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9729
				read = 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9730
				type,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9731
				components,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9732
				alpha,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9733
				values;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9734
			if (Array.isArray(arg)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9735
				args = arg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9736
				arg = args[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9737
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9738
			var argType = arg != null && typeof arg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9739
			if (argType === 'string' && arg in types) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9740
				type = arg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9741
				arg = args[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9742
				if (Array.isArray(arg)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9743
					components = arg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9744
					alpha = args[2];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9745
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9746
					if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9747
						read = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9748
					args = slice.call(args, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9749
					argType = typeof arg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9750
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9751
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9752
			if (!components) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9753
				values = argType === 'number'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9754
						? args
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9755
						: argType === 'object' && arg.length != null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9756
							? arg
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9757
							: null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9758
				if (values) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9759
					if (!type)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9760
						type = values.length >= 3
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9761
								? 'rgb'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9762
								: 'gray';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9763
					var length = types[type].length;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9764
					alpha = values[length];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9765
					if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9766
						read += values === arguments
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9767
							? length + (alpha != null ? 1 : 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9768
							: 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9769
					if (values.length > length)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9770
						values = slice.call(values, 0, length);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9771
				} else if (argType === 'string') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9772
					type = 'rgb';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9773
					components = fromCSS(arg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9774
					if (components.length === 4) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9775
						alpha = components[3];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9776
						components.length--;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9777
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9778
				} else if (argType === 'object') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9779
					if (arg.constructor === Color) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9780
						type = arg._type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9781
						components = arg._components.slice();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9782
						alpha = arg._alpha;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9783
						if (type === 'gradient') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9784
							for (var i = 1, l = components.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9785
								var point = components[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9786
								if (point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9787
									components[i] = point.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9788
							}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9789
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9790
					} else if (arg.constructor === Gradient) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9791
						type = 'gradient';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9792
						values = args;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9793
					} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9794
						type = 'hue' in arg
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9795
							? 'lightness' in arg
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9796
								? 'hsl'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9797
								: 'hsb'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9798
							: 'gradient' in arg || 'stops' in arg
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9799
									|| 'radial' in arg
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9800
								? 'gradient'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9801
								: 'gray' in arg
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9802
									? 'gray'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9803
									: 'rgb';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9804
						var properties = types[type];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9805
							parsers = componentParsers[type];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9806
						this._components = components = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9807
						for (var i = 0, l = properties.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9808
							var value = arg[properties[i]];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9809
							if (value == null && i === 0 && type === 'gradient'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9810
									&& 'stops' in arg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9811
								value = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9812
									stops: arg.stops,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9813
									radial: arg.radial
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9814
								};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9815
							}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9816
							value = parsers[i].call(this, value);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9817
							if (value != null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9818
								components[i] = value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9819
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9820
						alpha = arg.alpha;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9821
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9822
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9823
				if (this.__read && type)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9824
					read = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9825
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9826
			this._type = type || 'rgb';
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
  9827
			this._id = UID.get(Color);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9828
			if (!components) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9829
				this._components = components = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9830
				var parsers = componentParsers[this._type];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9831
				for (var i = 0, l = parsers.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9832
					var value = parsers[i].call(this, values && values[i]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9833
					if (value != null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9834
						components[i] = value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9835
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9836
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9837
			this._components = components;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9838
			this._properties = types[this._type];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9839
			this._alpha = alpha;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9840
			if (this.__read)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9841
				this.__read = read;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9842
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9843
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9844
		_serialize: function(options, dictionary) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9845
			var components = this.getComponents();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9846
			return Base.serialize(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9847
					/^(gray|rgb)$/.test(this._type)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9848
						? components
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9849
						: [this._type].concat(components),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9850
					options, true, dictionary);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9851
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9852
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9853
		_changed: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9854
			this._canvasStyle = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9855
			if (this._owner)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9856
				this._owner._changed(65);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9857
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9858
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9859
		_convert: function(type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9860
			var converter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9861
			return this._type === type
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9862
					? this._components.slice()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9863
					: (converter = converters[this._type + '-' + type])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9864
						? converter.apply(this, this._components)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9865
						: converters['rgb-' + type].apply(this,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9866
							converters[this._type + '-rgb'].apply(this,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9867
								this._components));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9868
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9869
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9870
		convert: function(type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9871
			return new Color(type, this._convert(type), this._alpha);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9872
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9873
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9874
		getType: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9875
			return this._type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9876
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9877
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9878
		setType: function(type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9879
			this._components = this._convert(type);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9880
			this._properties = types[type];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9881
			this._type = type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9882
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9883
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9884
		getComponents: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9885
			var components = this._components.slice();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9886
			if (this._alpha != null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9887
				components.push(this._alpha);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9888
			return components;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9889
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9890
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9891
		getAlpha: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9892
			return this._alpha != null ? this._alpha : 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9893
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9894
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9895
		setAlpha: function(alpha) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9896
			this._alpha = alpha == null ? null : Math.min(Math.max(alpha, 0), 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9897
			this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9898
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9899
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9900
		hasAlpha: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9901
			return this._alpha != null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9902
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9903
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9904
		equals: function(color) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9905
			var col = Base.isPlainValue(color, true)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9906
					? Color.read(arguments)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9907
					: color;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9908
			return col === this || col && this._class === col._class
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9909
					&& this._type === col._type
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9910
					&& this._alpha === col._alpha
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9911
					&& Base.equals(this._components, col._components)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9912
					|| false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9913
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9914
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9915
		toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9916
			var properties = this._properties,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9917
				parts = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9918
				isGradient = this._type === 'gradient',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9919
				f = Formatter.instance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9920
			for (var i = 0, l = properties.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9921
				var value = this._components[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9922
				if (value != null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9923
					parts.push(properties[i] + ': '
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9924
							+ (isGradient ? value : f.number(value)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9925
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9926
			if (this._alpha != null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9927
				parts.push('alpha: ' + f.number(this._alpha));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9928
			return '{ ' + parts.join(', ') + ' }';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9929
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9930
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9931
		toCSS: function(hex) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9932
			var components = this._convert('rgb'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9933
				alpha = hex || this._alpha == null ? 1 : this._alpha;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9934
			function convert(val) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9935
				return Math.round((val < 0 ? 0 : val > 1 ? 1 : val) * 255);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9936
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9937
			components = [
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9938
				convert(components[0]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9939
				convert(components[1]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9940
				convert(components[2])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9941
			];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9942
			if (alpha < 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9943
				components.push(alpha < 0 ? 0 : alpha);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9944
			return hex
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9945
					? '#' + ((1 << 24) + (components[0] << 16)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9946
						+ (components[1] << 8)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9947
						+ components[2]).toString(16).slice(1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9948
					: (components.length == 4 ? 'rgba(' : 'rgb(')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9949
						+ components.join(',') + ')';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9950
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9951
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9952
		toCanvasStyle: function(ctx) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9953
			if (this._canvasStyle)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9954
				return this._canvasStyle;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9955
			if (this._type !== 'gradient')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9956
				return this._canvasStyle = this.toCSS();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9957
			var components = this._components,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9958
				gradient = components[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9959
				stops = gradient._stops,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9960
				origin = components[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9961
				destination = components[2],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9962
				canvasGradient;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9963
			if (gradient._radial) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9964
				var radius = destination.getDistance(origin),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9965
					highlight = components[3];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9966
				if (highlight) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9967
					var vector = highlight.subtract(origin);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9968
					if (vector.getLength() > radius)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9969
						highlight = origin.add(vector.normalize(radius - 0.1));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9970
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9971
				var start = highlight || origin;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9972
				canvasGradient = ctx.createRadialGradient(start.x, start.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9973
						0, origin.x, origin.y, radius);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9974
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9975
				canvasGradient = ctx.createLinearGradient(origin.x, origin.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9976
						destination.x, destination.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9977
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9978
			for (var i = 0, l = stops.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9979
				var stop = stops[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9980
				canvasGradient.addColorStop(stop._rampPoint,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9981
						stop._color.toCanvasStyle());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9982
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9983
			return this._canvasStyle = canvasGradient;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9984
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9985
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9986
		transform: function(matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9987
			if (this._type === 'gradient') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9988
				var components = this._components;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9989
				for (var i = 1, l = components.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9990
					var point = components[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9991
					matrix._transformPoint(point, point, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9992
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9993
				this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9994
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9995
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9996
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9997
		statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9998
			_types: types,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
  9999
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10000
			random: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10001
				var random = Math.random;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10002
				return new Color(random(), random(), random());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10003
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10004
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10005
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10006
}, new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10007
	var operators = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10008
		add: function(a, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10009
			return a + b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10010
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10011
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10012
		subtract: function(a, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10013
			return a - b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10014
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10015
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10016
		multiply: function(a, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10017
			return a * b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10018
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10019
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10020
		divide: function(a, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10021
			return a / b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10022
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10023
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10024
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10025
	return Base.each(operators, function(operator, name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10026
		this[name] = function(color) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10027
			color = Color.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10028
			var type = this._type,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10029
				components1 = this._components,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10030
				components2 = color._convert(type);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10031
			for (var i = 0, l = components1.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10032
				components2[i] = operator(components1[i], components2[i]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10033
			return new Color(type, components2,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10034
					this._alpha != null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10035
							? operator(this._alpha, color.getAlpha())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10036
							: null);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10037
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10038
	}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10039
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10040
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10041
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10042
Base.each(Color._types, function(properties, type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10043
	var ctor = this[Base.capitalize(type) + 'Color'] = function(arg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10044
			var argType = arg != null && typeof arg,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10045
				components = argType === 'object' && arg.length != null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10046
					? arg
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10047
					: argType === 'string'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10048
						? null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10049
						: arguments;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10050
			return components
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10051
					? new Color(type, components)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10052
					: new Color(arg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10053
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10054
	if (type.length == 3) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10055
		var acronym = type.toUpperCase();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10056
		Color[acronym] = this[acronym + 'Color'] = ctor;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10057
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10058
}, Base.exports);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10059
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10060
var Gradient = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10061
	_class: 'Gradient',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10062
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10063
	initialize: function Gradient(stops, radial) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 10064
		this._id = UID.get();
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10065
		if (stops && this._set(stops))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10066
			stops = radial = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10067
		if (!this._stops)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10068
			this.setStops(stops || ['white', 'black']);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10069
		if (this._radial == null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10070
			this.setRadial(typeof radial === 'string' && radial === 'radial'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10071
					|| radial || false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10072
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10073
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10074
	_serialize: function(options, dictionary) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10075
		return dictionary.add(this, function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10076
			return Base.serialize([this._stops, this._radial],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10077
					options, true, dictionary);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10078
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10079
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10080
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10081
	_changed: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10082
		for (var i = 0, l = this._owners && this._owners.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10083
			this._owners[i]._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10084
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10085
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10086
	_addOwner: function(color) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10087
		if (!this._owners)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10088
			this._owners = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10089
		this._owners.push(color);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10090
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10091
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10092
	_removeOwner: function(color) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10093
		var index = this._owners ? this._owners.indexOf(color) : -1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10094
		if (index != -1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10095
			this._owners.splice(index, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10096
			if (this._owners.length === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10097
				this._owners = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10098
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10099
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10100
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10101
	clone: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10102
		var stops = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10103
		for (var i = 0, l = this._stops.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10104
			stops[i] = this._stops[i].clone();
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 10105
		return new Gradient(stops, this._radial);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10106
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10107
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10108
	getStops: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10109
		return this._stops;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10110
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10111
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10112
	setStops: function(stops) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10113
		if (this.stops) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10114
			for (var i = 0, l = this._stops.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10115
				this._stops[i]._owner = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10116
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10117
		if (stops.length < 2)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10118
			throw new Error(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10119
					'Gradient stop list needs to contain at least two stops.');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10120
		this._stops = GradientStop.readAll(stops, 0, { clone: true });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10121
		for (var i = 0, l = this._stops.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10122
			var stop = this._stops[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10123
			stop._owner = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10124
			if (stop._defaultRamp)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10125
				stop.setRampPoint(i / (l - 1));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10126
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10127
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10128
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10129
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10130
	getRadial: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10131
		return this._radial;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10132
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10133
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10134
	setRadial: function(radial) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10135
		this._radial = radial;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10136
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10137
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10138
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10139
	equals: function(gradient) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10140
		if (gradient === this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10141
			return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10142
		if (gradient && this._class === gradient._class
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10143
				&& this._stops.length === gradient._stops.length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10144
			for (var i = 0, l = this._stops.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10145
				if (!this._stops[i].equals(gradient._stops[i]))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10146
					return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10147
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10148
			return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10149
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10150
		return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10151
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10152
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10153
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10154
var GradientStop = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10155
	_class: 'GradientStop',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10156
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10157
	initialize: function GradientStop(arg0, arg1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10158
		if (arg0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10159
			var color, rampPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10160
			if (arg1 === undefined && Array.isArray(arg0)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10161
				color = arg0[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10162
				rampPoint = arg0[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10163
			} else if (arg0.color) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10164
				color = arg0.color;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10165
				rampPoint = arg0.rampPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10166
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10167
				color = arg0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10168
				rampPoint = arg1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10169
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10170
			this.setColor(color);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10171
			this.setRampPoint(rampPoint);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10172
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10173
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10174
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10175
	clone: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10176
		return new GradientStop(this._color.clone(), this._rampPoint);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10177
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10178
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10179
	_serialize: function(options, dictionary) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10180
		return Base.serialize([this._color, this._rampPoint], options, true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10181
				dictionary);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10182
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10183
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10184
	_changed: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10185
		if (this._owner)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10186
			this._owner._changed(65);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10187
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10188
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10189
	getRampPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10190
		return this._rampPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10191
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10192
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10193
	setRampPoint: function(rampPoint) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10194
		this._defaultRamp = rampPoint == null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10195
		this._rampPoint = rampPoint || 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10196
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10197
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10198
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10199
	getColor: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10200
		return this._color;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10201
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10202
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10203
	setColor: function(color) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10204
		this._color = Color.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10205
		if (this._color === color)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10206
			this._color = color.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10207
		this._color._owner = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10208
		this._changed();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10209
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10210
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10211
	equals: function(stop) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10212
		return stop === this || stop && this._class === stop._class
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10213
				&& this._color.equals(stop._color)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10214
				&& this._rampPoint == stop._rampPoint
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10215
				|| false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10216
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10217
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10218
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10219
var Style = Base.extend(new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10220
	var defaults = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10221
		fillColor: undefined,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10222
		strokeColor: undefined,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10223
		strokeWidth: 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10224
		strokeCap: 'butt',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10225
		strokeJoin: 'miter',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10226
		strokeScaling: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10227
		miterLimit: 10,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10228
		dashOffset: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10229
		dashArray: [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10230
		windingRule: 'nonzero',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10231
		shadowColor: undefined,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10232
		shadowBlur: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10233
		shadowOffset: new Point(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10234
		selectedColor: undefined,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10235
		fontFamily: 'sans-serif',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10236
		fontWeight: 'normal',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10237
		fontSize: 12,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10238
		font: 'sans-serif',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10239
		leading: null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10240
		justification: 'left'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10241
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10242
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10243
	var flags = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10244
		strokeWidth: 97,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10245
		strokeCap: 97,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10246
		strokeJoin: 97,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10247
		strokeScaling: 105,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10248
		miterLimit: 97,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10249
		fontFamily: 9,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10250
		fontWeight: 9,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10251
		fontSize: 9,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10252
		font: 9,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10253
		leading: 9,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10254
		justification: 9
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10255
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10256
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10257
	var item = { beans: true },
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10258
		fields = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10259
			_defaults: defaults,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10260
			_textDefaults: new Base(defaults, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10261
				fillColor: new Color()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10262
			}),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10263
			beans: true
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10264
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10265
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10266
	Base.each(defaults, function(value, key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10267
		var isColor = /Color$/.test(key),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10268
			isPoint = key === 'shadowOffset',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10269
			part = Base.capitalize(key),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10270
			flag = flags[key],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10271
			set = 'set' + part,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10272
			get = 'get' + part;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10273
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10274
		fields[set] = function(value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10275
			var owner = this._owner,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10276
				children = owner && owner._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10277
			if (children && children.length > 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10278
					&& !(owner instanceof CompoundPath)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10279
				for (var i = 0, l = children.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10280
					children[i]._style[set](value);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10281
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10282
				var old = this._values[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10283
				if (old !== value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10284
					if (isColor) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10285
						if (old)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10286
							old._owner = undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10287
						if (value && value.constructor === Color) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10288
							if (value._owner)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10289
								value = value.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10290
							value._owner = owner;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10291
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10292
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10293
					this._values[key] = value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10294
					if (owner)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10295
						owner._changed(flag || 65);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10296
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10297
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10298
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10299
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10300
		fields[get] = function(_dontMerge) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10301
			var owner = this._owner,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10302
				children = owner && owner._children,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10303
				value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10304
			if (!children || children.length === 0 || _dontMerge
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10305
					|| owner instanceof CompoundPath) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10306
				var value = this._values[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10307
				if (value === undefined) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10308
					value = this._defaults[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10309
					if (value && value.clone)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10310
						value = value.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10311
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10312
					var ctor = isColor ? Color : isPoint ? Point : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10313
					if (ctor && !(value && value.constructor === ctor)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10314
						this._values[key] = value = ctor.read([value], 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10315
								{ readNull: true, clone: true });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10316
						if (value && isColor)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10317
							value._owner = owner;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10318
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10319
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10320
				return value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10321
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10322
			for (var i = 0, l = children.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10323
				var childValue = children[i]._style[get]();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10324
				if (i === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10325
					value = childValue;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10326
				} else if (!Base.equals(value, childValue)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10327
					return undefined;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10328
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10329
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10330
			return value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10331
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10332
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10333
		item[get] = function(_dontMerge) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10334
			return this._style[get](_dontMerge);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10335
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10336
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10337
		item[set] = function(value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10338
			this._style[set](value);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10339
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10340
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10341
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10342
	Item.inject(item);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10343
	return fields;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10344
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10345
	_class: 'Style',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10346
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10347
	initialize: function Style(style, _owner, _project) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10348
		this._values = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10349
		this._owner = _owner;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10350
		this._project = _owner && _owner._project || _project || paper.project;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10351
		if (_owner instanceof TextItem)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10352
			this._defaults = this._textDefaults;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10353
		if (style)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10354
			this.set(style);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10355
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10356
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10357
	set: function(style) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10358
		var isStyle = style instanceof Style,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10359
			values = isStyle ? style._values : style;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10360
		if (values) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10361
			for (var key in values) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10362
				if (key in this._defaults) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10363
					var value = values[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10364
					this[key] = value && isStyle && value.clone
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10365
							? value.clone() : value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10366
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10367
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10368
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10369
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10370
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10371
	equals: function(style) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10372
		return style === this || style && this._class === style._class
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10373
				&& Base.equals(this._values, style._values)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10374
				|| false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10375
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10376
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10377
	hasFill: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10378
		return !!this.getFillColor();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10379
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10380
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10381
	hasStroke: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10382
		return !!this.getStrokeColor() && this.getStrokeWidth() > 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10383
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10384
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10385
	hasShadow: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10386
		return !!this.getShadowColor() && this.getShadowBlur() > 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10387
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10388
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10389
	getView: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10390
		return this._project.getView();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10391
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10392
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10393
	getFontStyle: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10394
		var fontSize = this.getFontSize();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10395
		return this.getFontWeight()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10396
				+ ' ' + fontSize + (/[a-z]/i.test(fontSize + '') ? ' ' : 'px ')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10397
				+ this.getFontFamily();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10398
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10399
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10400
	getFont: '#getFontFamily',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10401
	setFont: '#setFontFamily',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10402
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10403
	getLeading: function getLeading() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10404
		var leading = getLeading.base.call(this),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10405
			fontSize = this.getFontSize();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10406
		if (/pt|em|%|px/.test(fontSize))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10407
			fontSize = this.getView().getPixelSize(fontSize);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10408
		return leading != null ? leading : fontSize * 1.2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10409
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10410
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10411
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10412
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10413
var DomElement = new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10414
	function handlePrefix(el, name, set, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10415
		var prefixes = ['', 'webkit', 'moz', 'Moz', 'ms', 'o'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10416
			suffix = name[0].toUpperCase() + name.substring(1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10417
		for (var i = 0; i < 6; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10418
			var prefix = prefixes[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10419
				key = prefix ? prefix + suffix : name;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10420
			if (key in el) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10421
				if (set) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10422
					el[key] = value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10423
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10424
					return el[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10425
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10426
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10427
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10428
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10429
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10430
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10431
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10432
		getStyles: function(el) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10433
			var doc = el && el.nodeType !== 9 ? el.ownerDocument : el,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10434
				view = doc && doc.defaultView;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10435
			return view && view.getComputedStyle(el, '');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10436
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10437
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10438
		getBounds: function(el, viewport) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10439
			var doc = el.ownerDocument,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10440
				body = doc.body,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10441
				html = doc.documentElement,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10442
				rect;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10443
			try {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10444
				rect = el.getBoundingClientRect();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10445
			} catch (e) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10446
				rect = { left: 0, top: 0, width: 0, height: 0 };
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10447
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10448
			var x = rect.left - (html.clientLeft || body.clientLeft || 0),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10449
				y = rect.top - (html.clientTop || body.clientTop || 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10450
			if (!viewport) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10451
				var view = doc.defaultView;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10452
				x += view.pageXOffset || html.scrollLeft || body.scrollLeft;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10453
				y += view.pageYOffset || html.scrollTop || body.scrollTop;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10454
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10455
			return new Rectangle(x, y, rect.width, rect.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10456
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10457
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10458
		getViewportBounds: function(el) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10459
			var doc = el.ownerDocument,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10460
				view = doc.defaultView,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10461
				html = doc.documentElement;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10462
			return new Rectangle(0, 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10463
				view.innerWidth || html.clientWidth,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10464
				view.innerHeight || html.clientHeight
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10465
			);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10466
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10467
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10468
		getOffset: function(el, viewport) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10469
			return DomElement.getBounds(el, viewport).getPoint();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10470
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10471
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10472
		getSize: function(el) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10473
			return DomElement.getBounds(el, true).getSize();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10474
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10475
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10476
		isInvisible: function(el) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10477
			return DomElement.getSize(el).equals(new Size(0, 0));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10478
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10479
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10480
		isInView: function(el) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10481
			return !DomElement.isInvisible(el)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10482
					&& DomElement.getViewportBounds(el).intersects(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10483
						DomElement.getBounds(el, true));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10484
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10485
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10486
		getPrefixed: function(el, name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10487
			return handlePrefix(el, name);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10488
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10489
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10490
		setPrefixed: function(el, name, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10491
			if (typeof name === 'object') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10492
				for (var key in name)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10493
					handlePrefix(el, key, true, name[key]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10494
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10495
				handlePrefix(el, name, true, value);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10496
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10497
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10498
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10499
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10500
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10501
var DomEvent = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10502
	add: function(el, events) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10503
		for (var type in events) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10504
			var func = events[type],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10505
				parts = type.split(/[\s,]+/g);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10506
			for (var i = 0, l = parts.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10507
				el.addEventListener(parts[i], func, false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10508
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10509
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10510
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10511
	remove: function(el, events) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10512
		for (var type in events) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10513
			var func = events[type],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10514
				parts = type.split(/[\s,]+/g);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10515
			for (var i = 0, l = parts.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10516
				el.removeEventListener(parts[i], func, false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10517
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10518
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10519
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10520
	getPoint: function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10521
		var pos = event.targetTouches
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10522
				? event.targetTouches.length
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10523
					? event.targetTouches[0]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10524
					: event.changedTouches[0]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10525
				: event;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10526
		return new Point(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10527
			pos.pageX || pos.clientX + document.documentElement.scrollLeft,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10528
			pos.pageY || pos.clientY + document.documentElement.scrollTop
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10529
		);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10530
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10531
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10532
	getTarget: function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10533
		return event.target || event.srcElement;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10534
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10535
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10536
	getRelatedTarget: function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10537
		return event.relatedTarget || event.toElement;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10538
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10539
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10540
	getOffset: function(event, target) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10541
		return DomEvent.getPoint(event).subtract(DomElement.getOffset(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10542
				target || DomEvent.getTarget(event)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10543
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10544
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10545
	stop: function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10546
		event.stopPropagation();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10547
		event.preventDefault();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10548
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10549
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10550
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10551
DomEvent.requestAnimationFrame = new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10552
	var nativeRequest = DomElement.getPrefixed(window, 'requestAnimationFrame'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10553
		requested = false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10554
		callbacks = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10555
		focused = true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10556
		timer;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10557
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10558
	DomEvent.add(window, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10559
		focus: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10560
			focused = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10561
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10562
		blur: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10563
			focused = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10564
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10565
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10566
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10567
	function handleCallbacks() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10568
		for (var i = callbacks.length - 1; i >= 0; i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10569
			var entry = callbacks[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10570
				func = entry[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10571
				el = entry[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10572
			if (!el || (PaperScope.getAttribute(el, 'keepalive') == 'true'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10573
					|| focused) && DomElement.isInView(el)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10574
				callbacks.splice(i, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10575
				func();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10576
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10577
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10578
		if (nativeRequest) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10579
			if (callbacks.length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10580
				nativeRequest(handleCallbacks);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10581
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10582
				requested = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10583
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10584
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10585
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10586
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10587
	return function(callback, element) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10588
		callbacks.push([callback, element]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10589
		if (nativeRequest) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10590
			if (!requested) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10591
				nativeRequest(handleCallbacks);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10592
				requested = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10593
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10594
		} else if (!timer) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10595
			timer = setInterval(handleCallbacks, 1000 / 60);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10596
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10597
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10598
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10599
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10600
var View = Base.extend(Emitter, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10601
	_class: 'View',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10602
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10603
	initialize: function View(project, element) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10604
		this._project = project;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10605
		this._scope = project._scope;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10606
		this._element = element;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10607
		var size;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10608
		if (!this._pixelRatio)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10609
			this._pixelRatio = window.devicePixelRatio || 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10610
		this._id = element.getAttribute('id');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10611
		if (this._id == null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10612
			element.setAttribute('id', this._id = 'view-' + View._id++);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10613
		DomEvent.add(element, this._viewEvents);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10614
		var none = 'none';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10615
		DomElement.setPrefixed(element.style, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10616
			userSelect: none,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10617
			touchAction: none,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10618
			touchCallout: none,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10619
			contentZooming: none,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10620
			userDrag: none,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10621
			tapHighlightColor: 'rgba(0,0,0,0)'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10622
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10623
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10624
		function getSize(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10625
			return element[name] || parseInt(element.getAttribute(name), 10);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10626
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10627
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10628
		function getCanvasSize() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10629
			var size = DomElement.getSize(element);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10630
			return size.isNaN() || size.isZero()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10631
					? new Size(getSize('width'), getSize('height'))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10632
					: size;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10633
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10634
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10635
		if (PaperScope.hasAttribute(element, 'resize')) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10636
			var that = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10637
			DomEvent.add(window, this._windowEvents = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10638
				resize: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10639
					that.setViewSize(getCanvasSize());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10640
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10641
			});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10642
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10643
		this._setViewSize(size = getCanvasSize());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10644
		if (PaperScope.hasAttribute(element, 'stats')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10645
				&& typeof Stats !== 'undefined') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10646
			this._stats = new Stats();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10647
			var stats = this._stats.domElement,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10648
				style = stats.style,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10649
				offset = DomElement.getOffset(element);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10650
			style.position = 'absolute';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10651
			style.left = offset.x + 'px';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10652
			style.top = offset.y + 'px';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10653
			document.body.appendChild(stats);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10654
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10655
		View._views.push(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10656
		View._viewsById[this._id] = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10657
		this._viewSize = size;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10658
		(this._matrix = new Matrix())._owner = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10659
		this._zoom = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10660
		if (!View._focused)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10661
			View._focused = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10662
		this._frameItems = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10663
		this._frameItemCount = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10664
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10665
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10666
	remove: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10667
		if (!this._project)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10668
			return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10669
		if (View._focused === this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10670
			View._focused = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10671
		View._views.splice(View._views.indexOf(this), 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10672
		delete View._viewsById[this._id];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10673
		if (this._project._view === this)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10674
			this._project._view = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10675
		DomEvent.remove(this._element, this._viewEvents);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10676
		DomEvent.remove(window, this._windowEvents);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10677
		this._element = this._project = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10678
		this.off('frame');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10679
		this._animate = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10680
		this._frameItems = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10681
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10682
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10683
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10684
	_events: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10685
		onFrame: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10686
			install: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10687
				this.play();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10688
			},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10689
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10690
			uninstall: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10691
				this.pause();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10692
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10693
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10694
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10695
		onResize: {}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10696
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10697
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10698
	_animate: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10699
	_time: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10700
	_count: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10701
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10702
	_requestFrame: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10703
		var that = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10704
		DomEvent.requestAnimationFrame(function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10705
			that._requested = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10706
			if (!that._animate)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10707
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10708
			that._requestFrame();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10709
			that._handleFrame();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10710
		}, this._element);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10711
		this._requested = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10712
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10713
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10714
	_handleFrame: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10715
		paper = this._scope;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10716
		var now = Date.now() / 1000,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10717
			delta = this._before ? now - this._before : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10718
		this._before = now;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10719
		this._handlingFrame = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10720
		this.emit('frame', new Base({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10721
			delta: delta,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10722
			time: this._time += delta,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10723
			count: this._count++
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10724
		}));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10725
		if (this._stats)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10726
			this._stats.update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10727
		this._handlingFrame = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10728
		this.update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10729
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10730
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10731
	_animateItem: function(item, animate) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10732
		var items = this._frameItems;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10733
		if (animate) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10734
			items[item._id] = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10735
				item: item,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10736
				time: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10737
				count: 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10738
			};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10739
			if (++this._frameItemCount === 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10740
				this.on('frame', this._handleFrameItems);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10741
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10742
			delete items[item._id];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10743
			if (--this._frameItemCount === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10744
				this.off('frame', this._handleFrameItems);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10745
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10746
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10747
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10748
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10749
	_handleFrameItems: function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10750
		for (var i in this._frameItems) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10751
			var entry = this._frameItems[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10752
			entry.item.emit('frame', new Base(event, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10753
				time: entry.time += event.delta,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10754
				count: entry.count++
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10755
			}));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10756
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10757
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10758
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10759
	_update: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10760
		this._project._needsUpdate = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10761
		if (this._handlingFrame)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10762
			return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10763
		if (this._animate) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10764
			this._handleFrame();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10765
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10766
			this.update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10767
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10768
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10769
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10770
	_changed: function(flags) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10771
		if (flags & 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10772
			this._project._needsUpdate = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10773
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10774
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10775
	_transform: function(matrix) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10776
		this._matrix.concatenate(matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10777
		this._bounds = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10778
		this._update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10779
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10780
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10781
	getElement: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10782
		return this._element;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10783
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10784
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10785
	getPixelRatio: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10786
		return this._pixelRatio;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10787
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10788
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10789
	getResolution: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10790
		return this._pixelRatio * 72;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10791
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10792
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10793
	getViewSize: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10794
		var size = this._viewSize;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10795
		return new LinkedSize(size.width, size.height, this, 'setViewSize');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10796
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10797
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10798
	setViewSize: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10799
		var size = Size.read(arguments),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10800
			delta = size.subtract(this._viewSize);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10801
		if (delta.isZero())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10802
			return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10803
		this._viewSize.set(size.width, size.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10804
		this._setViewSize(size);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10805
		this._bounds = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10806
		this.emit('resize', {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10807
			size: size,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10808
			delta: delta
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10809
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10810
		this._update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10811
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10812
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10813
	_setViewSize: function(size) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10814
		var element = this._element;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10815
		element.width = size.width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10816
		element.height = size.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10817
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10818
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10819
	getBounds: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10820
		if (!this._bounds)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10821
			this._bounds = this._matrix.inverted()._transformBounds(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10822
					new Rectangle(new Point(), this._viewSize));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10823
		return this._bounds;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10824
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10825
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10826
	getSize: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10827
		return this.getBounds().getSize();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10828
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10829
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10830
	getCenter: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10831
		return this.getBounds().getCenter();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10832
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10833
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10834
	setCenter: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10835
		var center = Point.read(arguments);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10836
		this.scrollBy(center.subtract(this.getCenter()));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10837
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10838
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10839
	getZoom: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10840
		return this._zoom;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10841
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10842
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10843
	setZoom: function(zoom) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10844
		this._transform(new Matrix().scale(zoom / this._zoom,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10845
			this.getCenter()));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10846
		this._zoom = zoom;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10847
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10848
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10849
	isVisible: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10850
		return DomElement.isInView(this._element);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10851
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10852
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10853
	scrollBy: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10854
		this._transform(new Matrix().translate(Point.read(arguments).negate()));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10855
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10856
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10857
	play: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10858
		this._animate = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10859
		if (!this._requested)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10860
			this._requestFrame();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10861
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10862
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10863
	pause: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10864
		this._animate = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10865
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10866
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10867
	draw: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10868
		this.update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10869
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10870
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10871
	projectToView: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10872
		return this._matrix._transformPoint(Point.read(arguments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10873
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10874
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10875
	viewToProject: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10876
		return this._matrix._inverseTransform(Point.read(arguments));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10877
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10878
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10879
}, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10880
	statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10881
		_views: [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10882
		_viewsById: {},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10883
		_id: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10884
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10885
		create: function(project, element) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10886
			if (typeof element === 'string')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10887
				element = document.getElementById(element);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10888
			return new CanvasView(project, element);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10889
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10890
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10891
}, new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10892
	var tool,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10893
		prevFocus,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10894
		tempFocus,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10895
		dragging = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10896
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10897
	function getView(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10898
		var target = DomEvent.getTarget(event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10899
		return target.getAttribute && View._viewsById[target.getAttribute('id')];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10900
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10901
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10902
	function viewToProject(view, event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10903
		return view.viewToProject(DomEvent.getOffset(event, view._element));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10904
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10905
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10906
	function updateFocus() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10907
		if (!View._focused || !View._focused.isVisible()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10908
			for (var i = 0, l = View._views.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10909
				var view = View._views[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10910
				if (view && view.isVisible()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10911
					View._focused = tempFocus = view;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10912
					break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10913
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10914
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10915
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10916
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10917
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10918
	function handleMouseMove(view, point, event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10919
		view._handleEvent('mousemove', point, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10920
		var tool = view._scope.tool;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10921
		if (tool) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10922
			tool._handleEvent(dragging && tool.responds('mousedrag')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10923
					? 'mousedrag' : 'mousemove', point, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10924
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10925
		view.update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10926
		return tool;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10927
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10928
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10929
	var navigator = window.navigator,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10930
		mousedown, mousemove, mouseup;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10931
	if (navigator.pointerEnabled || navigator.msPointerEnabled) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10932
		mousedown = 'pointerdown MSPointerDown';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10933
		mousemove = 'pointermove MSPointerMove';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10934
		mouseup = 'pointerup pointercancel MSPointerUp MSPointerCancel';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10935
	} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10936
		mousedown = 'touchstart';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10937
		mousemove = 'touchmove';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10938
		mouseup = 'touchend touchcancel';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10939
		if (!('ontouchstart' in window && navigator.userAgent.match(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10940
				/mobile|tablet|ip(ad|hone|od)|android|silk/i))) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10941
			mousedown += ' mousedown';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10942
			mousemove += ' mousemove';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10943
			mouseup += ' mouseup';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10944
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10945
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10946
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10947
	var viewEvents = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10948
		'selectstart dragstart': function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10949
			if (dragging)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10950
				event.preventDefault();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10951
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10952
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10953
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10954
	var docEvents = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10955
		mouseout: function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10956
			var view = View._focused,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10957
				target = DomEvent.getRelatedTarget(event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10958
			if (view && (!target || target.nodeName === 'HTML'))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10959
				handleMouseMove(view, viewToProject(view, event), event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10960
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10961
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10962
		scroll: updateFocus
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10963
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10964
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10965
	viewEvents[mousedown] = function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10966
		var view = View._focused = getView(event),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10967
			point = viewToProject(view, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10968
		dragging = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10969
		view._handleEvent('mousedown', point, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10970
		if (tool = view._scope.tool)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10971
			tool._handleEvent('mousedown', point, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10972
		view.update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10973
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10974
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10975
	docEvents[mousemove] = function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10976
		var view = View._focused;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10977
		if (!dragging) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10978
			var target = getView(event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10979
			if (target) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10980
				if (view !== target)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10981
					handleMouseMove(view, viewToProject(view, event), event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10982
				prevFocus = view;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10983
				view = View._focused = tempFocus = target;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10984
			} else if (tempFocus && tempFocus === view) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10985
				view = View._focused = prevFocus;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10986
				updateFocus();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10987
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10988
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10989
		if (view) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10990
			var point = viewToProject(view, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10991
			if (dragging || view.getBounds().contains(point))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10992
				tool = handleMouseMove(view, point, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10993
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10994
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10995
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10996
	docEvents[mouseup] = function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10997
		var view = View._focused;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10998
		if (!view || !dragging)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 10999
			return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11000
		var point = viewToProject(view, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11001
		dragging = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11002
		view._handleEvent('mouseup', point, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11003
		if (tool)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11004
			tool._handleEvent('mouseup', point, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11005
		view.update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11006
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11007
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11008
	DomEvent.add(document, docEvents);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11009
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11010
	DomEvent.add(window, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11011
		load: updateFocus
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11012
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11013
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11014
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11015
		_viewEvents: viewEvents,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11016
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11017
		_handleEvent: function() {},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11018
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11019
		statics: {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11020
			updateFocus: updateFocus
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11021
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11022
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11023
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11024
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11025
var CanvasView = View.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11026
	_class: 'CanvasView',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11027
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11028
	initialize: function CanvasView(project, canvas) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11029
		if (!(canvas instanceof HTMLCanvasElement)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11030
			var size = Size.read(arguments, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11031
			if (size.isZero())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11032
				throw new Error(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11033
						'Cannot create CanvasView with the provided argument: '
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11034
						+ [].slice.call(arguments, 1));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11035
			canvas = CanvasProvider.getCanvas(size);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11036
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11037
		this._context = canvas.getContext('2d');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11038
		this._eventCounters = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11039
		this._pixelRatio = 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11040
		if (!/^off|false$/.test(PaperScope.getAttribute(canvas, 'hidpi'))) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11041
			var deviceRatio = window.devicePixelRatio || 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11042
				backingStoreRatio = DomElement.getPrefixed(this._context,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11043
						'backingStorePixelRatio') || 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11044
			this._pixelRatio = deviceRatio / backingStoreRatio;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11045
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11046
		View.call(this, project, canvas);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11047
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11048
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11049
	_setViewSize: function(size) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11050
		var element = this._element,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11051
			pixelRatio = this._pixelRatio,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11052
			width = size.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11053
			height = size.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11054
		element.width = width * pixelRatio;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11055
		element.height = height * pixelRatio;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11056
		if (pixelRatio !== 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11057
			if (!PaperScope.hasAttribute(element, 'resize')) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11058
				var style = element.style;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11059
				style.width = width + 'px';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11060
				style.height = height + 'px';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11061
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11062
			this._context.scale(pixelRatio, pixelRatio);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11063
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11064
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11065
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11066
	getPixelSize: function(size) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11067
		var browser = paper.browser,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11068
			pixels;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11069
		if (browser && browser.firefox) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11070
			var parent = this._element.parentNode,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11071
				temp = document.createElement('div');
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11072
			temp.style.fontSize = size;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11073
			parent.appendChild(temp);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11074
			pixels = parseFloat(DomElement.getStyles(temp).fontSize);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11075
			parent.removeChild(temp);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11076
		} else {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11077
			var ctx = this._context,
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11078
				prevFont = ctx.font;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11079
			ctx.font = size + ' serif';
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11080
			pixels = parseFloat(ctx.font);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11081
			ctx.font = prevFont;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11082
		}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11083
		return pixels;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11084
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11085
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11086
	getTextWidth: function(font, lines) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11087
		var ctx = this._context,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11088
			prevFont = ctx.font,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11089
			width = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11090
		ctx.font = font;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11091
		for (var i = 0, l = lines.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11092
			width = Math.max(width, ctx.measureText(lines[i]).width);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11093
		ctx.font = prevFont;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11094
		return width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11095
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11096
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11097
	update: function(force) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11098
		var project = this._project;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11099
		if (!project || !force && !project._needsUpdate)
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11100
			return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11101
		var ctx = this._context,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11102
			size = this._viewSize;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11103
		ctx.clearRect(0, 0, size.width + 1, size.height + 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11104
		project.draw(ctx, this._matrix, this._pixelRatio);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11105
		project._needsUpdate = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11106
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11107
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11108
}, new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11109
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11110
	var downPoint,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11111
		lastPoint,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11112
		overPoint,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11113
		downItem,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11114
		lastItem,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11115
		overItem,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11116
		dragItem,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11117
		dblClick,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11118
		clickTime;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11119
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11120
	function callEvent(view, type, event, point, target, lastPoint) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11121
		var item = target,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11122
			mouseEvent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11123
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11124
		function call(obj) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11125
			if (obj.responds(type)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11126
				if (!mouseEvent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11127
					mouseEvent = new MouseEvent(type, event, point, target,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11128
							lastPoint ? point.subtract(lastPoint) : null);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11129
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11130
				if (obj.emit(type, mouseEvent) && mouseEvent.isStopped) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11131
					event.preventDefault();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11132
					return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11133
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11134
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11135
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11136
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11137
		while (item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11138
			if (call(item))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11139
				return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11140
			item = item.getParent();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11141
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11142
		if (call(view))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11143
			return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11144
		return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11145
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11146
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11147
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11148
		_handleEvent: function(type, point, event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11149
			if (!this._eventCounters[type])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11150
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11151
			var project = this._project,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11152
				hit = project.hitTest(point, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11153
					tolerance: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11154
					fill: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11155
					stroke: true
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11156
				}),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11157
				item = hit && hit.item,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11158
				stopped = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11159
			switch (type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11160
			case 'mousedown':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11161
				stopped = callEvent(this, type, event, point, item);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11162
				dblClick = lastItem == item && (Date.now() - clickTime < 300);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11163
				downItem = lastItem = item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11164
				downPoint = lastPoint = overPoint = point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11165
				dragItem = !stopped && item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11166
				while (dragItem && !dragItem.responds('mousedrag'))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11167
					dragItem = dragItem._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11168
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11169
			case 'mouseup':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11170
				stopped = callEvent(this, type, event, point, item, downPoint);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11171
				if (dragItem) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11172
					if (lastPoint && !lastPoint.equals(point))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11173
						callEvent(this, 'mousedrag', event, point, dragItem,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11174
								lastPoint);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11175
					if (item !== dragItem) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11176
						overPoint = point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11177
						callEvent(this, 'mousemove', event, point, item,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11178
								overPoint);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11179
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11180
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11181
				if (!stopped && item && item === downItem) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11182
					clickTime = Date.now();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11183
					callEvent(this, dblClick && downItem.responds('doubleclick')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11184
							? 'doubleclick' : 'click', event, downPoint, item);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11185
					dblClick = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11186
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11187
				downItem = dragItem = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11188
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11189
			case 'mousemove':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11190
				if (dragItem)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11191
					stopped = callEvent(this, 'mousedrag', event, point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11192
							dragItem, lastPoint);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11193
				if (!stopped) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11194
					if (item !== overItem)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11195
						overPoint = point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11196
					stopped = callEvent(this, type, event, point, item,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11197
							overPoint);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11198
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11199
				lastPoint = overPoint = point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11200
				if (item !== overItem) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11201
					callEvent(this, 'mouseleave', event, point, overItem);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11202
					overItem = item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11203
					callEvent(this, 'mouseenter', event, point, item);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11204
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11205
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11206
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11207
			return stopped;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11208
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11209
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11210
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11211
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11212
var Event = Base.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11213
	_class: 'Event',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11214
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11215
	initialize: function Event(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11216
		this.event = event;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11217
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11218
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11219
	isPrevented: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11220
	isStopped: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11221
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11222
	preventDefault: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11223
		this.isPrevented = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11224
		this.event.preventDefault();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11225
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11226
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11227
	stopPropagation: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11228
		this.isStopped = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11229
		this.event.stopPropagation();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11230
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11231
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11232
	stop: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11233
		this.stopPropagation();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11234
		this.preventDefault();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11235
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11236
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11237
	getModifiers: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11238
		return Key.modifiers;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11239
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11240
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11241
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11242
var KeyEvent = Event.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11243
	_class: 'KeyEvent',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11244
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11245
	initialize: function KeyEvent(down, key, character, event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11246
		Event.call(this, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11247
		this.type = down ? 'keydown' : 'keyup';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11248
		this.key = key;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11249
		this.character = character;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11250
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11251
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11252
	toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11253
		return "{ type: '" + this.type
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11254
				+ "', key: '" + this.key
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11255
				+ "', character: '" + this.character
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11256
				+ "', modifiers: " + this.getModifiers()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11257
				+ " }";
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11258
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11259
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11260
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11261
var Key = new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11262
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11263
	var specialKeys = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11264
		8: 'backspace',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11265
		9: 'tab',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11266
		13: 'enter',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11267
		16: 'shift',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11268
		17: 'control',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11269
		18: 'option',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11270
		19: 'pause',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11271
		20: 'caps-lock',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11272
		27: 'escape',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11273
		32: 'space',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11274
		35: 'end',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11275
		36: 'home',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11276
		37: 'left',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11277
		38: 'up',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11278
		39: 'right',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11279
		40: 'down',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11280
		46: 'delete',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11281
		91: 'command',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11282
		93: 'command',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11283
		224: 'command'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11284
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11285
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11286
	specialChars = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11287
		9: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11288
		13: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11289
		32: true
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11290
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11291
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11292
	modifiers = new Base({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11293
		shift: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11294
		control: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11295
		option: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11296
		command: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11297
		capsLock: false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11298
		space: false
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11299
	}),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11300
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11301
	charCodeMap = {},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11302
	keyMap = {},
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11303
	commandFixMap,
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11304
	downCode;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11305
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11306
	function handleKey(down, keyCode, charCode, event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11307
		var character = charCode ? String.fromCharCode(charCode) : '',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11308
			specialKey = specialKeys[keyCode],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11309
			key = specialKey || character.toLowerCase(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11310
			type = down ? 'keydown' : 'keyup',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11311
			view = View._focused,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11312
			scope = view && view.isVisible() && view._scope,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11313
			tool = scope && scope.tool,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11314
			name;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11315
		keyMap[key] = down;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11316
		if (down) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11317
			charCodeMap[keyCode] = charCode;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11318
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11319
			delete charCodeMap[keyCode];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11320
		}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11321
		if (specialKey && (name = Base.camelize(specialKey)) in modifiers) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11322
			modifiers[name] = down;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11323
			var browser = paper.browser;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11324
			if (name === 'command' && browser && browser.mac) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11325
				if (down) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11326
					commandFixMap = {};
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11327
				} else {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11328
					for (var code in commandFixMap) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11329
						if (code in charCodeMap)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11330
							handleKey(false, code, commandFixMap[code], event);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11331
					}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11332
					commandFixMap = null;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11333
				}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11334
			}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11335
		} else if (down && commandFixMap) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11336
			commandFixMap[keyCode] = charCode;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11337
		}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11338
		if (tool && tool.responds(type)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11339
			paper = scope;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11340
			tool.emit(type, new KeyEvent(down, key, character, event));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11341
			if (view)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11342
				view.update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11343
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11344
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11345
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11346
	DomEvent.add(document, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11347
		keydown: function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11348
			var code = event.which || event.keyCode;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11349
			if (code in specialKeys || modifiers.command) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11350
				handleKey(true, code,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11351
						code in specialChars || modifiers.command ? code : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11352
						event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11353
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11354
				downCode = code;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11355
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11356
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11357
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11358
		keypress: function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11359
			if (downCode != null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11360
				handleKey(true, downCode, event.which || event.keyCode, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11361
				downCode = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11362
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11363
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11364
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11365
		keyup: function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11366
			var code = event.which || event.keyCode;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11367
			if (code in charCodeMap)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11368
				handleKey(false, code, charCodeMap[code], event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11369
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11370
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11371
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11372
	DomEvent.add(window, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11373
		blur: function(event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11374
			for (var code in charCodeMap)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11375
				handleKey(false, code, charCodeMap[code], event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11376
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11377
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11378
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11379
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11380
		modifiers: modifiers,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11381
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11382
		isDown: function(key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11383
			return !!keyMap[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11384
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11385
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11386
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11387
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11388
var MouseEvent = Event.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11389
	_class: 'MouseEvent',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11390
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11391
	initialize: function MouseEvent(type, event, point, target, delta) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11392
		Event.call(this, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11393
		this.type = type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11394
		this.point = point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11395
		this.target = target;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11396
		this.delta = delta;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11397
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11398
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11399
	toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11400
		return "{ type: '" + this.type
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11401
				+ "', point: " + this.point
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11402
				+ ', target: ' + this.target
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11403
				+ (this.delta ? ', delta: ' + this.delta : '')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11404
				+ ', modifiers: ' + this.getModifiers()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11405
				+ ' }';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11406
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11407
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11408
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11409
var ToolEvent = Event.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11410
	_class: 'ToolEvent',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11411
	_item: null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11412
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11413
	initialize: function ToolEvent(tool, type, event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11414
		this.tool = tool;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11415
		this.type = type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11416
		this.event = event;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11417
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11418
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11419
	_choosePoint: function(point, toolPoint) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11420
		return point ? point : toolPoint ? toolPoint.clone() : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11421
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11422
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11423
	getPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11424
		return this._choosePoint(this._point, this.tool._point);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11425
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11426
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11427
	setPoint: function(point) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11428
		this._point = point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11429
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11430
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11431
	getLastPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11432
		return this._choosePoint(this._lastPoint, this.tool._lastPoint);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11433
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11434
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11435
	setLastPoint: function(lastPoint) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11436
		this._lastPoint = lastPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11437
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11438
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11439
	getDownPoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11440
		return this._choosePoint(this._downPoint, this.tool._downPoint);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11441
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11443
	setDownPoint: function(downPoint) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11444
		this._downPoint = downPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11445
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11446
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11447
	getMiddlePoint: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11448
		if (!this._middlePoint && this.tool._lastPoint) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11449
			return this.tool._point.add(this.tool._lastPoint).divide(2);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11450
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11451
		return this._middlePoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11452
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11453
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11454
	setMiddlePoint: function(middlePoint) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11455
		this._middlePoint = middlePoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11456
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11457
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11458
	getDelta: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11459
		return !this._delta && this.tool._lastPoint
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11460
				? this.tool._point.subtract(this.tool._lastPoint)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11461
				: this._delta;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11462
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11463
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11464
	setDelta: function(delta) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11465
		this._delta = delta;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11466
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11467
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11468
	getCount: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11469
		return /^mouse(down|up)$/.test(this.type)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11470
				? this.tool._downCount
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11471
				: this.tool._count;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11472
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11473
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11474
	setCount: function(count) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11475
		this.tool[/^mouse(down|up)$/.test(this.type) ? 'downCount' : 'count']
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11476
			= count;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11477
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11478
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11479
	getItem: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11480
		if (!this._item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11481
			var result = this.tool._scope.project.hitTest(this.getPoint());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11482
			if (result) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11483
				var item = result.item,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11484
					parent = item._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11485
				while (/^(Group|CompoundPath)$/.test(parent._class)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11486
					item = parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11487
					parent = parent._parent;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11488
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11489
				this._item = item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11490
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11491
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11492
		return this._item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11493
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11494
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11495
	setItem: function(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11496
		this._item = item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11497
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11498
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11499
	toString: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11500
		return '{ type: ' + this.type
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11501
				+ ', point: ' + this.getPoint()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11502
				+ ', count: ' + this.getCount()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11503
				+ ', modifiers: ' + this.getModifiers()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11504
				+ ' }';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11505
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11506
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11507
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11508
var Tool = PaperScopeItem.extend({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11509
	_class: 'Tool',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11510
	_list: 'tools',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11511
	_reference: 'tool',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11512
	_events: [ 'onActivate', 'onDeactivate', 'onEditOptions',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11513
			'onMouseDown', 'onMouseUp', 'onMouseDrag', 'onMouseMove',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11514
			'onKeyDown', 'onKeyUp' ],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11515
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11516
	initialize: function Tool(props) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11517
		PaperScopeItem.call(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11518
		this._firstMove = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11519
		this._count = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11520
		this._downCount = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11521
		this._set(props);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11522
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11523
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11524
	getMinDistance: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11525
		return this._minDistance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11526
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11527
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11528
	setMinDistance: function(minDistance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11529
		this._minDistance = minDistance;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11530
		if (minDistance != null && this._maxDistance != null
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11531
				&& minDistance > this._maxDistance) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11532
			this._maxDistance = minDistance;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11533
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11534
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11535
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11536
	getMaxDistance: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11537
		return this._maxDistance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11538
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11539
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11540
	setMaxDistance: function(maxDistance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11541
		this._maxDistance = maxDistance;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11542
		if (this._minDistance != null && maxDistance != null
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11543
				&& maxDistance < this._minDistance) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11544
			this._minDistance = maxDistance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11545
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11546
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11547
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11548
	getFixedDistance: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11549
		return this._minDistance == this._maxDistance
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11550
			? this._minDistance : null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11551
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11552
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11553
	setFixedDistance: function(distance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11554
		this._minDistance = distance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11555
		this._maxDistance = distance;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11556
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11557
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11558
	_updateEvent: function(type, point, minDistance, maxDistance, start,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11559
			needsChange, matchMaxDistance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11560
		if (!start) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11561
			if (minDistance != null || maxDistance != null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11562
				var minDist = minDistance != null ? minDistance : 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11563
					vector = point.subtract(this._point),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11564
					distance = vector.getLength();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11565
				if (distance < minDist)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11566
					return false;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11567
				if (maxDistance != null && maxDistance != 0) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11568
					if (distance > maxDistance) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11569
						point = this._point.add(vector.normalize(maxDistance));
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11570
					} else if (matchMaxDistance) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11571
						return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11572
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11573
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11574
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11575
			if (needsChange && point.equals(this._point))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11576
				return false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11577
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11578
		this._lastPoint = start && type == 'mousemove' ? point : this._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11579
		this._point = point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11580
		switch (type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11581
		case 'mousedown':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11582
			this._lastPoint = this._downPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11583
			this._downPoint = this._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11584
			this._downCount++;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11585
			break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11586
		case 'mouseup':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11587
			this._lastPoint = this._downPoint;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11588
			break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11589
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11590
		this._count = start ? 0 : this._count + 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11591
		return true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11592
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11593
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11594
	_fireEvent: function(type, event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11595
		var sets = paper.project._removeSets;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11596
		if (sets) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11597
			if (type === 'mouseup')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11598
				sets.mousedrag = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11599
			var set = sets[type];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11600
			if (set) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11601
				for (var id in set) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11602
					var item = set[id];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11603
					for (var key in sets) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11604
						var other = sets[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11605
						if (other && other != set)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11606
							delete other[item._id];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11607
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11608
					item.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11609
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11610
				sets[type] = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11611
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11612
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11613
		return this.responds(type)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11614
				&& this.emit(type, new ToolEvent(this, type, event));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11615
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11616
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11617
	_handleEvent: function(type, point, event) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11618
		paper = this._scope;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11619
		var called = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11620
		switch (type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11621
		case 'mousedown':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11622
			this._updateEvent(type, point, null, null, true, false, false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11623
			called = this._fireEvent(type, event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11624
			break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11625
		case 'mousedrag':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11626
			var needsChange = false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11627
				matchMaxDistance = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11628
			while (this._updateEvent(type, point, this.minDistance,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11629
					this.maxDistance, false, needsChange, matchMaxDistance)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11630
				called = this._fireEvent(type, event) || called;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11631
				needsChange = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11632
				matchMaxDistance = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11633
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11634
			break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11635
		case 'mouseup':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11636
			if (!point.equals(this._point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11637
					&& this._updateEvent('mousedrag', point, this.minDistance,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11638
							this.maxDistance, false, false, false)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11639
				called = this._fireEvent('mousedrag', event);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11640
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11641
			this._updateEvent(type, point, null, this.maxDistance, false,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11642
					false, false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11643
			called = this._fireEvent(type, event) || called;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11644
			this._updateEvent(type, point, null, null, true, false, false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11645
			this._firstMove = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11646
			break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11647
		case 'mousemove':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11648
			while (this._updateEvent(type, point, this.minDistance,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11649
					this.maxDistance, this._firstMove, true, false)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11650
				called = this._fireEvent(type, event) || called;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11651
				this._firstMove = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11652
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11653
			break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11654
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11655
		if (called)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11656
			event.preventDefault();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11657
		return called;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11658
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11659
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11660
});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11661
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11662
var Http = {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11663
	request: function(method, url, callback, async) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11664
		async = (async === undefined) ? true : async;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11665
		var xhr = new (window.ActiveXObject || XMLHttpRequest)(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11666
					'Microsoft.XMLHTTP');
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 11667
		xhr.open(method.toUpperCase(), url, async);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11668
		if ('overrideMimeType' in xhr)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11669
			xhr.overrideMimeType('text/plain');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11670
		xhr.onreadystatechange = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11671
			if (xhr.readyState === 4) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11672
				var status = xhr.status;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11673
				if (status === 0 || status === 200) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11674
					callback.call(xhr, xhr.responseText);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11675
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11676
					throw new Error('Could not load ' + url + ' (Error '
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11677
							+ status + ')');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11678
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11679
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11680
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11681
		return xhr.send(null);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11682
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11683
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11684
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11685
var CanvasProvider = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11686
	canvases: [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11687
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11688
	getCanvas: function(width, height) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11689
		var canvas,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11690
			clear = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11691
		if (typeof width === 'object') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11692
			height = width.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11693
			width = width.width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11694
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11695
		if (this.canvases.length) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11696
			canvas = this.canvases.pop();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11697
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11698
			canvas = document.createElement('canvas');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11699
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11700
		var ctx = canvas.getContext('2d');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11701
		if (canvas.width === width && canvas.height === height) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11702
			if (clear)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11703
				ctx.clearRect(0, 0, width + 1, height + 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11704
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11705
			canvas.width = width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11706
			canvas.height = height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11707
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11708
		ctx.save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11709
		return canvas;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11710
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11711
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11712
	getContext: function(width, height) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11713
		return this.getCanvas(width, height).getContext('2d');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11714
	},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11715
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11716
	release: function(obj) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11717
		var canvas = obj.canvas ? obj.canvas : obj;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11718
		canvas.getContext('2d').restore();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11719
		this.canvases.push(canvas);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11720
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11721
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11722
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11723
var BlendMode = new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11724
	var min = Math.min,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11725
		max = Math.max,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11726
		abs = Math.abs,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11727
		sr, sg, sb, sa,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11728
		br, bg, bb, ba,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11729
		dr, dg, db;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11730
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11731
	function getLum(r, g, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11732
		return 0.2989 * r + 0.587 * g + 0.114 * b;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11733
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11734
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11735
	function setLum(r, g, b, l) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11736
		var d = l - getLum(r, g, b);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11737
		dr = r + d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11738
		dg = g + d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11739
		db = b + d;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11740
		var l = getLum(dr, dg, db),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11741
			mn = min(dr, dg, db),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11742
			mx = max(dr, dg, db);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11743
		if (mn < 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11744
			var lmn = l - mn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11745
			dr = l + (dr - l) * l / lmn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11746
			dg = l + (dg - l) * l / lmn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11747
			db = l + (db - l) * l / lmn;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11748
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11749
		if (mx > 255) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11750
			var ln = 255 - l,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11751
				mxl = mx - l;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11752
			dr = l + (dr - l) * ln / mxl;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11753
			dg = l + (dg - l) * ln / mxl;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11754
			db = l + (db - l) * ln / mxl;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11755
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11756
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11757
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11758
	function getSat(r, g, b) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11759
		return max(r, g, b) - min(r, g, b);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11760
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11761
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11762
	function setSat(r, g, b, s) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11763
		var col = [r, g, b],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11764
			mx = max(r, g, b),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11765
			mn = min(r, g, b),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11766
			md;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11767
		mn = mn === r ? 0 : mn === g ? 1 : 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11768
		mx = mx === r ? 0 : mx === g ? 1 : 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11769
		md = min(mn, mx) === 0 ? max(mn, mx) === 1 ? 2 : 1 : 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11770
		if (col[mx] > col[mn]) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11771
			col[md] = (col[md] - col[mn]) * s / (col[mx] - col[mn]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11772
			col[mx] = s;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11773
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11774
			col[md] = col[mx] = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11775
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11776
		col[mn] = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11777
		dr = col[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11778
		dg = col[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11779
		db = col[2];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11780
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11781
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11782
	var modes = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11783
		multiply: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11784
			dr = br * sr / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11785
			dg = bg * sg / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11786
			db = bb * sb / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11787
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11788
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11789
		screen: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11790
			dr = br + sr - (br * sr / 255);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11791
			dg = bg + sg - (bg * sg / 255);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11792
			db = bb + sb - (bb * sb / 255);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11793
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11794
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11795
		overlay: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11796
			dr = br < 128 ? 2 * br * sr / 255 : 255 - 2 * (255 - br) * (255 - sr) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11797
			dg = bg < 128 ? 2 * bg * sg / 255 : 255 - 2 * (255 - bg) * (255 - sg) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11798
			db = bb < 128 ? 2 * bb * sb / 255 : 255 - 2 * (255 - bb) * (255 - sb) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11799
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11800
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11801
		'soft-light': function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11802
			var t = sr * br / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11803
			dr = t + br * (255 - (255 - br) * (255 - sr) / 255 - t) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11804
			t = sg * bg / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11805
			dg = t + bg * (255 - (255 - bg) * (255 - sg) / 255 - t) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11806
			t = sb * bb / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11807
			db = t + bb * (255 - (255 - bb) * (255 - sb) / 255 - t) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11808
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11809
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11810
		'hard-light': function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11811
			dr = sr < 128 ? 2 * sr * br / 255 : 255 - 2 * (255 - sr) * (255 - br) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11812
			dg = sg < 128 ? 2 * sg * bg / 255 : 255 - 2 * (255 - sg) * (255 - bg) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11813
			db = sb < 128 ? 2 * sb * bb / 255 : 255 - 2 * (255 - sb) * (255 - bb) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11814
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11815
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11816
		'color-dodge': function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11817
			dr = br === 0 ? 0 : sr === 255 ? 255 : min(255, 255 * br / (255 - sr));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11818
			dg = bg === 0 ? 0 : sg === 255 ? 255 : min(255, 255 * bg / (255 - sg));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11819
			db = bb === 0 ? 0 : sb === 255 ? 255 : min(255, 255 * bb / (255 - sb));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11820
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11821
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11822
		'color-burn': function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11823
			dr = br === 255 ? 255 : sr === 0 ? 0 : max(0, 255 - (255 - br) * 255 / sr);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11824
			dg = bg === 255 ? 255 : sg === 0 ? 0 : max(0, 255 - (255 - bg) * 255 / sg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11825
			db = bb === 255 ? 255 : sb === 0 ? 0 : max(0, 255 - (255 - bb) * 255 / sb);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11826
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11827
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11828
		darken: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11829
			dr = br < sr ? br : sr;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11830
			dg = bg < sg ? bg : sg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11831
			db = bb < sb ? bb : sb;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11832
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11833
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11834
		lighten: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11835
			dr = br > sr ? br : sr;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11836
			dg = bg > sg ? bg : sg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11837
			db = bb > sb ? bb : sb;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11838
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11839
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11840
		difference: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11841
			dr = br - sr;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11842
			if (dr < 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11843
				dr = -dr;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11844
			dg = bg - sg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11845
			if (dg < 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11846
				dg = -dg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11847
			db = bb - sb;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11848
			if (db < 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11849
				db = -db;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11850
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11851
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11852
		exclusion: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11853
			dr = br + sr * (255 - br - br) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11854
			dg = bg + sg * (255 - bg - bg) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11855
			db = bb + sb * (255 - bb - bb) / 255;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11856
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11857
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11858
		hue: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11859
			setSat(sr, sg, sb, getSat(br, bg, bb));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11860
			setLum(dr, dg, db, getLum(br, bg, bb));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11861
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11862
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11863
		saturation: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11864
			setSat(br, bg, bb, getSat(sr, sg, sb));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11865
			setLum(dr, dg, db, getLum(br, bg, bb));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11866
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11867
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11868
		luminosity: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11869
			setLum(br, bg, bb, getLum(sr, sg, sb));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11870
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11871
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11872
		color: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11873
			setLum(sr, sg, sb, getLum(br, bg, bb));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11874
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11875
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11876
		add: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11877
			dr = min(br + sr, 255);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11878
			dg = min(bg + sg, 255);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11879
			db = min(bb + sb, 255);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11880
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11881
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11882
		subtract: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11883
			dr = max(br - sr, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11884
			dg = max(bg - sg, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11885
			db = max(bb - sb, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11886
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11887
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11888
		average: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11889
			dr = (br + sr) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11890
			dg = (bg + sg) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11891
			db = (bb + sb) / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11892
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11893
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11894
		negation: function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11895
			dr = 255 - abs(255 - sr - br);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11896
			dg = 255 - abs(255 - sg - bg);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11897
			db = 255 - abs(255 - sb - bb);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11898
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11899
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11900
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11901
	var nativeModes = this.nativeModes = Base.each([
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11902
		'source-over', 'source-in', 'source-out', 'source-atop',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11903
		'destination-over', 'destination-in', 'destination-out',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11904
		'destination-atop', 'lighter', 'darker', 'copy', 'xor'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11905
	], function(mode) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11906
		this[mode] = true;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11907
	}, {});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11908
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11909
	var ctx = CanvasProvider.getContext(1, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11910
	Base.each(modes, function(func, mode) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11911
		var darken = mode === 'darken',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11912
			ok = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11913
		ctx.save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11914
		try {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11915
			ctx.fillStyle = darken ? '#300' : '#a00';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11916
			ctx.fillRect(0, 0, 1, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11917
			ctx.globalCompositeOperation = mode;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11918
			if (ctx.globalCompositeOperation === mode) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11919
				ctx.fillStyle = darken ? '#a00' : '#300';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11920
				ctx.fillRect(0, 0, 1, 1);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11921
				ok = ctx.getImageData(0, 0, 1, 1).data[0] !== darken ? 170 : 51;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11922
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11923
		} catch (e) {}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11924
		ctx.restore();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11925
		nativeModes[mode] = ok;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11926
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11927
	CanvasProvider.release(ctx);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11928
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11929
	this.process = function(mode, srcContext, dstContext, alpha, offset) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11930
		var srcCanvas = srcContext.canvas,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11931
			normal = mode === 'normal';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11932
		if (normal || nativeModes[mode]) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11933
			dstContext.save();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11934
			dstContext.setTransform(1, 0, 0, 1, 0, 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11935
			dstContext.globalAlpha = alpha;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11936
			if (!normal)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11937
				dstContext.globalCompositeOperation = mode;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11938
			dstContext.drawImage(srcCanvas, offset.x, offset.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11939
			dstContext.restore();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11940
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11941
			var process = modes[mode];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11942
			if (!process)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11943
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11944
			var dstData = dstContext.getImageData(offset.x, offset.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11945
					srcCanvas.width, srcCanvas.height),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11946
				dst = dstData.data,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11947
				src = srcContext.getImageData(0, 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11948
					srcCanvas.width, srcCanvas.height).data;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11949
			for (var i = 0, l = dst.length; i < l; i += 4) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11950
				sr = src[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11951
				br = dst[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11952
				sg = src[i + 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11953
				bg = dst[i + 1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11954
				sb = src[i + 2];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11955
				bb = dst[i + 2];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11956
				sa = src[i + 3];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11957
				ba = dst[i + 3];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11958
				process();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11959
				var a1 = sa * alpha / 255,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11960
					a2 = 1 - a1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11961
				dst[i] = a1 * dr + a2 * br;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11962
				dst[i + 1] = a1 * dg + a2 * bg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11963
				dst[i + 2] = a1 * db + a2 * bb;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11964
				dst[i + 3] = sa * alpha + a2 * ba;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11965
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11966
			dstContext.putImageData(dstData, offset.x, offset.y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11967
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11968
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11969
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11970
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11971
var SVGStyles = Base.each({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11972
	fillColor: ['fill', 'color'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11973
	strokeColor: ['stroke', 'color'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11974
	strokeWidth: ['stroke-width', 'number'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11975
	strokeCap: ['stroke-linecap', 'string'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11976
	strokeJoin: ['stroke-linejoin', 'string'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11977
	strokeScaling: ['vector-effect', 'lookup', {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11978
		true: 'none',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11979
		false: 'non-scaling-stroke'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11980
	}, function(item, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11981
		return !value
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11982
				&& (item instanceof PathItem
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11983
					|| item instanceof Shape
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11984
					|| item instanceof TextItem);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11985
	}],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11986
	miterLimit: ['stroke-miterlimit', 'number'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11987
	dashArray: ['stroke-dasharray', 'array'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11988
	dashOffset: ['stroke-dashoffset', 'number'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11989
	fontFamily: ['font-family', 'string'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11990
	fontWeight: ['font-weight', 'string'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11991
	fontSize: ['font-size', 'number'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11992
	justification: ['text-anchor', 'lookup', {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11993
		left: 'start',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11994
		center: 'middle',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11995
		right: 'end'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11996
	}],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11997
	opacity: ['opacity', 'number'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11998
	blendMode: ['mix-blend-mode', 'string']
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 11999
}, function(entry, key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12000
	var part = Base.capitalize(key),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12001
		lookup = entry[2];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12002
	this[key] = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12003
		type: entry[1],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12004
		property: key,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12005
		attribute: entry[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12006
		toSVG: lookup,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12007
		fromSVG: lookup && Base.each(lookup, function(value, name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12008
			this[value] = name;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12009
		}, {}),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12010
		exportFilter: entry[3],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12011
		get: 'get' + part,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12012
		set: 'set' + part
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12013
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12014
}, {});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12015
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12016
var SVGNamespaces = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12017
	href: 'http://www.w3.org/1999/xlink',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12018
	xlink: 'http://www.w3.org/2000/xmlns'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12019
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12020
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12021
new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12022
	var formatter;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12023
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12024
	function setAttributes(node, attrs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12025
		for (var key in attrs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12026
			var val = attrs[key],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12027
				namespace = SVGNamespaces[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12028
			if (typeof val === 'number')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12029
				val = formatter.number(val);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12030
			if (namespace) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12031
				node.setAttributeNS(namespace, key, val);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12032
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12033
				node.setAttribute(key, val);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12034
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12035
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12036
		return node;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12037
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12038
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12039
	function createElement(tag, attrs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12040
		return setAttributes(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12041
			document.createElementNS('http://www.w3.org/2000/svg', tag), attrs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12042
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12043
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12044
	function getTransform(matrix, coordinates, center) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12045
		var attrs = new Base(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12046
			trans = matrix.getTranslation();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12047
		if (coordinates) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12048
			matrix = matrix.shiftless();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12049
			var point = matrix._inverseTransform(trans);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12050
			attrs[center ? 'cx' : 'x'] = point.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12051
			attrs[center ? 'cy' : 'y'] = point.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12052
			trans = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12053
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12054
		if (!matrix.isIdentity()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12055
			var decomposed = matrix.decompose();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12056
			if (decomposed && !decomposed.shearing) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12057
				var parts = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12058
					angle = decomposed.rotation,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12059
					scale = decomposed.scaling;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12060
				if (trans && !trans.isZero())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12061
					parts.push('translate(' + formatter.point(trans) + ')');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12062
				if (!Numerical.isZero(scale.x - 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12063
						|| !Numerical.isZero(scale.y - 1))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12064
					parts.push('scale(' + formatter.point(scale) +')');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12065
				if (angle)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12066
					parts.push('rotate(' + formatter.number(angle) + ')');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12067
				attrs.transform = parts.join(' ');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12068
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12069
				attrs.transform = 'matrix(' + matrix.getValues().join(',') + ')';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12070
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12071
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12072
		return attrs;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12073
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12074
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12075
	function exportGroup(item, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12076
		var attrs = getTransform(item._matrix),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12077
			children = item._children;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12078
		var node = createElement('g', attrs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12079
		for (var i = 0, l = children.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12080
			var child = children[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12081
			var childNode = exportSVG(child, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12082
			if (childNode) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12083
				if (child.isClipMask()) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12084
					var clip = createElement('clipPath');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12085
					clip.appendChild(childNode);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12086
					setDefinition(child, clip, 'clip');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12087
					setAttributes(node, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12088
						'clip-path': 'url(#' + clip.id + ')'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12089
					});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12090
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12091
					node.appendChild(childNode);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12092
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12093
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12094
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12095
		return node;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12096
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12097
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12098
	function exportRaster(item, options) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12099
		var attrs = getTransform(item._matrix, true),
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12100
			size = item.getSize(),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12101
			image = item.getImage();
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12102
		attrs.x -= size.width / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12103
		attrs.y -= size.height / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12104
		attrs.width = size.width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12105
		attrs.height = size.height;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12106
		attrs.href = options.embedImages === false && image && image.src
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12107
				|| item.toDataURL();
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12108
		return createElement('image', attrs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12109
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12110
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12111
	function exportPath(item, options) {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12112
		var matchShapes = options.matchShapes;
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12113
		if (matchShapes) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12114
			var shape = item.toShape(false);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12115
			if (shape)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12116
				return exportShape(shape, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12117
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12118
		var segments = item._segments,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12119
			type,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12120
			attrs = getTransform(item._matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12121
		if (segments.length === 0)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12122
			return null;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12123
		if (matchShapes && !item.hasHandles()) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12124
			if (segments.length >= 3) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12125
				type = item._closed ? 'polygon' : 'polyline';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12126
				var parts = [];
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12127
				for(var i = 0, l = segments.length; i < l; i++)
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12128
					parts.push(formatter.point(segments[i]._point));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12129
				attrs.points = parts.join(' ');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12130
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12131
				type = 'line';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12132
				var first = segments[0]._point,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12133
					last = segments[segments.length - 1]._point;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12134
				attrs.set({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12135
					x1: first.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12136
					y1: first.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12137
					x2: last.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12138
					y2: last.y
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12139
				});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12140
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12141
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12142
			type = 'path';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12143
			attrs.d = item.getPathData(null, options.precision);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12144
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12145
		return createElement(type, attrs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12146
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12147
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12148
	function exportShape(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12149
		var type = item._type,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12150
			radius = item._radius,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12151
			attrs = getTransform(item._matrix, true, type !== 'rectangle');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12152
		if (type === 'rectangle') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12153
			type = 'rect';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12154
			var size = item._size,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12155
				width = size.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12156
				height = size.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12157
			attrs.x -= width / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12158
			attrs.y -= height / 2;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12159
			attrs.width = width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12160
			attrs.height = height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12161
			if (radius.isZero())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12162
				radius = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12163
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12164
		if (radius) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12165
			if (type === 'circle') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12166
				attrs.r = radius;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12167
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12168
				attrs.rx = radius.width;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12169
				attrs.ry = radius.height;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12170
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12171
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12172
		return createElement(type, attrs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12173
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12174
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12175
	function exportCompoundPath(item, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12176
		var attrs = getTransform(item._matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12177
		var data = item.getPathData(null, options.precision);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12178
		if (data)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12179
			attrs.d = data;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12180
		return createElement('path', attrs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12181
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12182
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12183
	function exportPlacedSymbol(item, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12184
		var attrs = getTransform(item._matrix, true),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12185
			symbol = item.getSymbol(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12186
			symbolNode = getDefinition(symbol, 'symbol'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12187
			definition = symbol.getDefinition(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12188
			bounds = definition.getBounds();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12189
		if (!symbolNode) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12190
			symbolNode = createElement('symbol', {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12191
				viewBox: formatter.rectangle(bounds)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12192
			});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12193
			symbolNode.appendChild(exportSVG(definition, options));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12194
			setDefinition(symbol, symbolNode, 'symbol');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12195
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12196
		attrs.href = '#' + symbolNode.id;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12197
		attrs.x += bounds.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12198
		attrs.y += bounds.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12199
		attrs.width = formatter.number(bounds.width);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12200
		attrs.height = formatter.number(bounds.height);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12201
		attrs.overflow = 'visible';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12202
		return createElement('use', attrs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12203
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12204
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12205
	function exportGradient(color) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12206
		var gradientNode = getDefinition(color, 'color');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12207
		if (!gradientNode) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12208
			var gradient = color.getGradient(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12209
				radial = gradient._radial,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12210
				origin = color.getOrigin().transform(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12211
				destination = color.getDestination().transform(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12212
				attrs;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12213
			if (radial) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12214
				attrs = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12215
					cx: origin.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12216
					cy: origin.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12217
					r: origin.getDistance(destination)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12218
				};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12219
				var highlight = color.getHighlight();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12220
				if (highlight) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12221
					highlight = highlight.transform();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12222
					attrs.fx = highlight.x;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12223
					attrs.fy = highlight.y;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12224
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12225
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12226
				attrs = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12227
					x1: origin.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12228
					y1: origin.y,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12229
					x2: destination.x,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12230
					y2: destination.y
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12231
				};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12232
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12233
			attrs.gradientUnits = 'userSpaceOnUse';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12234
			gradientNode = createElement(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12235
					(radial ? 'radial' : 'linear') + 'Gradient', attrs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12236
			var stops = gradient._stops;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12237
			for (var i = 0, l = stops.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12238
				var stop = stops[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12239
					stopColor = stop._color,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12240
					alpha = stopColor.getAlpha();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12241
				attrs = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12242
					offset: stop._rampPoint,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12243
					'stop-color': stopColor.toCSS(true)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12244
				};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12245
				if (alpha < 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12246
					attrs['stop-opacity'] = alpha;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12247
				gradientNode.appendChild(createElement('stop', attrs));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12248
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12249
			setDefinition(color, gradientNode, 'color');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12250
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12251
		return 'url(#' + gradientNode.id + ')';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12252
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12253
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12254
	function exportText(item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12255
		var node = createElement('text', getTransform(item._matrix, true));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12256
		node.textContent = item._content;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12257
		return node;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12258
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12259
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12260
	var exporters = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12261
		Group: exportGroup,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12262
		Layer: exportGroup,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12263
		Raster: exportRaster,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12264
		Path: exportPath,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12265
		Shape: exportShape,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12266
		CompoundPath: exportCompoundPath,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12267
		PlacedSymbol: exportPlacedSymbol,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12268
		PointText: exportText
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12269
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12270
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12271
	function applyStyle(item, node, isRoot) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12272
		var attrs = {},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12273
			parent = !isRoot && item.getParent();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12274
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12275
		if (item._name != null)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12276
			attrs.id = item._name;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12277
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12278
		Base.each(SVGStyles, function(entry) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12279
			var get = entry.get,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12280
				type = entry.type,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12281
				value = item[get]();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12282
			if (entry.exportFilter
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12283
					? entry.exportFilter(item, value)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12284
					: !parent || !Base.equals(parent[get](), value)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12285
				if (type === 'color' && value != null) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12286
					var alpha = value.getAlpha();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12287
					if (alpha < 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12288
						attrs[entry.attribute + '-opacity'] = alpha;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12289
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12290
				attrs[entry.attribute] = value == null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12291
					? 'none'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12292
					: type === 'number'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12293
						? formatter.number(value)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12294
						: type === 'color'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12295
							? value.gradient
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12296
								? exportGradient(value, item)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12297
								: value.toCSS(true)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12298
							: type === 'array'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12299
								? value.join(',')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12300
								: type === 'lookup'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12301
									? entry.toSVG[value]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12302
									: value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12303
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12304
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12305
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12306
		if (attrs.opacity === 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12307
			delete attrs.opacity;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12308
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12309
		if (!item._visible)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12310
			attrs.visibility = 'hidden';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12311
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12312
		return setAttributes(node, attrs);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12313
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12314
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12315
	var definitions;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12316
	function getDefinition(item, type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12317
		if (!definitions)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12318
			definitions = { ids: {}, svgs: {} };
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12319
		return item && definitions.svgs[type + '-' + item._id];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12320
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12321
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12322
	function setDefinition(item, node, type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12323
		if (!definitions)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12324
			getDefinition();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12325
		var id = definitions.ids[type] = (definitions.ids[type] || 0) + 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12326
		node.id = type + '-' + id;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12327
		definitions.svgs[type + '-' + item._id] = node;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12328
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12329
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12330
	function exportDefinitions(node, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12331
		var svg = node,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12332
			defs = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12333
		if (definitions) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12334
			svg = node.nodeName.toLowerCase() === 'svg' && node;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12335
			for (var i in definitions.svgs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12336
				if (!defs) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12337
					if (!svg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12338
						svg = createElement('svg');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12339
						svg.appendChild(node);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12340
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12341
					defs = svg.insertBefore(createElement('defs'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12342
							svg.firstChild);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12343
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12344
				defs.appendChild(definitions.svgs[i]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12345
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12346
			definitions = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12347
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12348
		return options.asString
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12349
				? new XMLSerializer().serializeToString(svg)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12350
				: svg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12351
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12352
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12353
	function exportSVG(item, options, isRoot) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12354
		var exporter = exporters[item._class],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12355
			node = exporter && exporter(item, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12356
		if (node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12357
			var onExport = options.onExport;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12358
			if (onExport)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12359
				node = onExport(item, node, options) || node;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12360
			var data = JSON.stringify(item._data);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12361
			if (data && data !== '{}' && data !== 'null')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12362
				node.setAttribute('data-paper-data', data);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12363
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12364
		return node && applyStyle(item, node, isRoot);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12365
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12366
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12367
	function setOptions(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12368
		if (!options)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12369
			options = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12370
		formatter = new Formatter(options.precision);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12371
		return options;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12372
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12373
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12374
	Item.inject({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12375
		exportSVG: function(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12376
			options = setOptions(options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12377
			return exportDefinitions(exportSVG(this, options, true), options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12378
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12379
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12380
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12381
	Project.inject({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12382
		exportSVG: function(options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12383
			options = setOptions(options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12384
			var layers = this.layers,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12385
				view = this.getView(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12386
				size = view.getViewSize(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12387
				node = createElement('svg', {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12388
					x: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12389
					y: 0,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12390
					width: size.width,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12391
					height: size.height,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12392
					version: '1.1',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12393
					xmlns: 'http://www.w3.org/2000/svg',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12394
					'xmlns:xlink': 'http://www.w3.org/1999/xlink'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12395
				}),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12396
				parent = node,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12397
				matrix = view._matrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12398
			if (!matrix.isIdentity())
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12399
				parent = node.appendChild(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12400
						createElement('g', getTransform(matrix)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12401
			for (var i = 0, l = layers.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12402
				parent.appendChild(exportSVG(layers[i], options, true));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12403
			return exportDefinitions(node, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12404
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12405
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12406
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12407
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12408
new function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12409
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12410
	function getValue(node, name, isString, allowNull) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12411
		var namespace = SVGNamespaces[name],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12412
			value = namespace
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12413
				? node.getAttributeNS(namespace, name)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12414
				: node.getAttribute(name);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12415
		if (value === 'null')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12416
			value = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12417
		return value == null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12418
				? allowNull
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12419
					? null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12420
					: isString
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12421
						? ''
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12422
						: 0
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12423
				: isString
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12424
					? value
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12425
					: parseFloat(value);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12426
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12427
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12428
	function getPoint(node, x, y, allowNull) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12429
		x = getValue(node, x, false, allowNull);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12430
		y = getValue(node, y, false, allowNull);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12431
		return allowNull && (x == null || y == null) ? null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12432
				: new Point(x, y);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12433
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12434
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12435
	function getSize(node, w, h, allowNull) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12436
		w = getValue(node, w, false, allowNull);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12437
		h = getValue(node, h, false, allowNull);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12438
		return allowNull && (w == null || h == null) ? null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12439
				: new Size(w, h);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12440
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12441
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12442
	function convertValue(value, type, lookup) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12443
		return value === 'none'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12444
				? null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12445
				: type === 'number'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12446
					? parseFloat(value)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12447
					: type === 'array'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12448
						? value ? value.split(/[\s,]+/g).map(parseFloat) : []
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12449
						: type === 'color'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12450
							? getDefinition(value) || value
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12451
							: type === 'lookup'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12452
								? lookup[value]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12453
								: value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12454
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12455
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12456
	function importGroup(node, type, options, isRoot) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12457
		var nodes = node.childNodes,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12458
			isClip = type === 'clippath',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12459
			item = new Group(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12460
			project = item._project,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12461
			currentStyle = project._currentStyle,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12462
			children = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12463
		if (!isClip) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12464
			item = applyAttributes(item, node, isRoot);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12465
			project._currentStyle = item._style.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12466
		}
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12467
		if (isRoot) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12468
			var defs = node.querySelectorAll('defs');
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12469
			for (var i = 0, l = defs.length; i < l; i++) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12470
				importSVG(defs[i], options, false);
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12471
			}
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12472
		}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12473
		for (var i = 0, l = nodes.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12474
			var childNode = nodes[i],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12475
				child;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12476
			if (childNode.nodeType === 1
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12477
					&& childNode.nodeName.toLowerCase() !== 'defs'
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12478
					&& (child = importSVG(childNode, options, false))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12479
					&& !(child instanceof Symbol))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12480
				children.push(child);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12481
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12482
		item.addChildren(children);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12483
		if (isClip)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12484
			item = applyAttributes(item.reduce(), node, isRoot);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12485
		project._currentStyle = currentStyle;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12486
		if (isClip || type === 'defs') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12487
			item.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12488
			item = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12489
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12490
		return item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12491
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12492
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12493
	function importPoly(node, type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12494
		var coords = node.getAttribute('points').match(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12495
					/[+-]?(?:\d*\.\d+|\d+\.?)(?:[eE][+-]?\d+)?/g),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12496
			points = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12497
		for (var i = 0, l = coords.length; i < l; i += 2)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12498
			points.push(new Point(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12499
					parseFloat(coords[i]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12500
					parseFloat(coords[i + 1])));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12501
		var path = new Path(points);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12502
		if (type === 'polygon')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12503
			path.closePath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12504
		return path;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12505
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12506
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12507
	function importPath(node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12508
		var data = node.getAttribute('d'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12509
			param = { pathData: data };
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12510
		return (data.match(/m/gi) || []).length > 1 || /z\S+/i.test(data)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12511
				? new CompoundPath(param)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12512
				: new Path(param);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12513
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12514
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12515
	function importGradient(node, type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12516
		var id = (getValue(node, 'href', true) || '').substring(1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12517
			isRadial = type === 'radialgradient',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12518
			gradient;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12519
		if (id) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12520
			gradient = definitions[id].getGradient();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12521
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12522
			var nodes = node.childNodes,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12523
				stops = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12524
			for (var i = 0, l = nodes.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12525
				var child = nodes[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12526
				if (child.nodeType === 1)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12527
					stops.push(applyAttributes(new GradientStop(), child));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12528
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12529
			gradient = new Gradient(stops, isRadial);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12530
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12531
		var origin, destination, highlight;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12532
		if (isRadial) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12533
			origin = getPoint(node, 'cx', 'cy');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12534
			destination = origin.add(getValue(node, 'r'), 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12535
			highlight = getPoint(node, 'fx', 'fy', true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12536
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12537
			origin = getPoint(node, 'x1', 'y1');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12538
			destination = getPoint(node, 'x2', 'y2');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12539
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12540
		applyAttributes(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12541
			new Color(gradient, origin, destination, highlight), node);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12542
		return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12543
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12544
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12545
	var importers = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12546
		'#document': function (node, type, options, isRoot) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12547
			var nodes = node.childNodes;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12548
			for (var i = 0, l = nodes.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12549
				var child = nodes[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12550
				if (child.nodeType === 1) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12551
					var next = child.nextSibling;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12552
					document.body.appendChild(child);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12553
					var item = importSVG(child, options, isRoot);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12554
					if (next) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12555
						node.insertBefore(child, next);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12556
					} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12557
						node.appendChild(child);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12558
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12559
					return item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12560
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12561
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12562
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12563
		g: importGroup,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12564
		svg: importGroup,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12565
		clippath: importGroup,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12566
		polygon: importPoly,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12567
		polyline: importPoly,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12568
		path: importPath,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12569
		lineargradient: importGradient,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12570
		radialgradient: importGradient,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12571
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12572
		image: function (node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12573
			var raster = new Raster(getValue(node, 'href', true));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12574
			raster.on('load', function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12575
				var size = getSize(node, 'width', 'height');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12576
				this.setSize(size);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12577
				var center = this._matrix._transformPoint(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12578
						getPoint(node, 'x', 'y').add(size.divide(2)));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12579
				this.translate(center);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12580
			});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12581
			return raster;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12582
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12583
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12584
		symbol: function(node, type, options, isRoot) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12585
			return new Symbol(importGroup(node, type, options, isRoot), true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12586
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12587
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12588
		defs: importGroup,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12589
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12590
		use: function(node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12591
			var id = (getValue(node, 'href', true) || '').substring(1),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12592
				definition = definitions[id],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12593
				point = getPoint(node, 'x', 'y');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12594
			return definition
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12595
					? definition instanceof Symbol
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12596
						? definition.place(point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12597
						: definition.clone().translate(point)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12598
					: null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12599
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12600
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12601
		circle: function(node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12602
			return new Shape.Circle(getPoint(node, 'cx', 'cy'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12603
					getValue(node, 'r'));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12604
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12605
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12606
		ellipse: function(node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12607
			return new Shape.Ellipse({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12608
				center: getPoint(node, 'cx', 'cy'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12609
				radius: getSize(node, 'rx', 'ry')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12610
			});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12611
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12612
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12613
		rect: function(node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12614
			var point = getPoint(node, 'x', 'y'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12615
				size = getSize(node, 'width', 'height'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12616
				radius = getSize(node, 'rx', 'ry');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12617
			return new Shape.Rectangle(new Rectangle(point, size), radius);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12618
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12619
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12620
		line: function(node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12621
			return new Path.Line(getPoint(node, 'x1', 'y1'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12622
					getPoint(node, 'x2', 'y2'));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12623
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12624
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12625
		text: function(node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12626
			var text = new PointText(getPoint(node, 'x', 'y')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12627
					.add(getPoint(node, 'dx', 'dy')));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12628
			text.setContent(node.textContent.trim() || '');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12629
			return text;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12630
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12631
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12632
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12633
	function applyTransform(item, value, name, node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12634
		var transforms = (node.getAttribute(name) || '').split(/\)\s*/g),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12635
			matrix = new Matrix();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12636
		for (var i = 0, l = transforms.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12637
			var transform = transforms[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12638
			if (!transform)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12639
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12640
			var parts = transform.split(/\(\s*/),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12641
				command = parts[0],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12642
				v = parts[1].split(/[\s,]+/g);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12643
			for (var j = 0, m = v.length; j < m; j++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12644
				v[j] = parseFloat(v[j]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12645
			switch (command) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12646
			case 'matrix':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12647
				matrix.concatenate(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12648
						new Matrix(v[0], v[1], v[2], v[3], v[4], v[5]));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12649
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12650
			case 'rotate':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12651
				matrix.rotate(v[0], v[1], v[2]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12652
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12653
			case 'translate':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12654
				matrix.translate(v[0], v[1]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12655
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12656
			case 'scale':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12657
				matrix.scale(v);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12658
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12659
			case 'skewX':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12660
				matrix.skew(v[0], 0);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12661
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12662
			case 'skewY':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12663
				matrix.skew(0, v[0]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12664
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12665
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12666
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12667
		item.transform(matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12668
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12669
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12670
	function applyOpacity(item, value, name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12671
		var color = item[name === 'fill-opacity' ? 'getFillColor'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12672
				: 'getStrokeColor']();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12673
		if (color)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12674
			color.setAlpha(parseFloat(value));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12675
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12676
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12677
	var attributes = Base.set(Base.each(SVGStyles, function(entry) {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12678
		this[entry.attribute] = function(item, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12679
			item[entry.set](convertValue(value, entry.type, entry.fromSVG));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12680
			if (entry.type === 'color' && item instanceof Shape) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12681
				var color = item[entry.get]();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12682
				if (color)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12683
					color.transform(new Matrix().translate(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12684
							item.getPosition(true).negate()));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12685
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12686
		};
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12687
	}, {}), {
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12688
		id: function(item, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12689
			definitions[value] = item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12690
			if (item.setName)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12691
				item.setName(value);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12692
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12693
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12694
		'clip-path': function(item, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12695
			var clip = getDefinition(value);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12696
			if (clip) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12697
				clip = clip.clone();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12698
				clip.setClipMask(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12699
				if (item instanceof Group) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12700
					item.insertChild(0, clip);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12701
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12702
					return new Group(clip, item);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12703
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12704
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12705
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12706
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12707
		gradientTransform: applyTransform,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12708
		transform: applyTransform,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12709
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12710
		'fill-opacity': applyOpacity,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12711
		'stroke-opacity': applyOpacity,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12712
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12713
		visibility: function(item, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12714
			item.setVisible(value === 'visible');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12715
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12716
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12717
		display: function(item, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12718
			item.setVisible(value !== null);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12719
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12720
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12721
		'stop-color': function(item, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12722
			if (item.setColor)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12723
				item.setColor(value);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12724
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12725
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12726
		'stop-opacity': function(item, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12727
			if (item._color)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12728
				item._color.setAlpha(parseFloat(value));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12729
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12730
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12731
		offset: function(item, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12732
			var percentage = value.match(/(.*)%$/);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12733
			item.setRampPoint(percentage
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12734
					? percentage[1] / 100
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12735
					: parseFloat(value));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12736
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12737
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12738
		viewBox: function(item, value, name, node, styles) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12739
			var rect = new Rectangle(convertValue(value, 'array')),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12740
				size = getSize(node, 'width', 'height', true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12741
			if (item instanceof Group) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12742
				var scale = size ? rect.getSize().divide(size) : 1,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12743
					matrix = new Matrix().translate(rect.getPoint()).scale(scale);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12744
				item.transform(matrix.inverted());
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12745
			} else if (item instanceof Symbol) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12746
				if (size)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12747
					rect.setSize(size);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12748
				var clip = getAttribute(node, 'overflow', styles) != 'visible',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12749
					group = item._definition;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12750
				if (clip && !rect.contains(group.getBounds())) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12751
					clip = new Shape.Rectangle(rect).transform(group._matrix);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12752
					clip.setClipMask(true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12753
					group.addChild(clip);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12754
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12755
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12756
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12757
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12758
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12759
	function getAttribute(node, name, styles) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12760
		var attr = node.attributes[name],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12761
			value = attr && attr.value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12762
		if (!value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12763
			var style = Base.camelize(name);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12764
			value = node.style[style];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12765
			if (!value && styles.node[style] !== styles.parent[style])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12766
				value = styles.node[style];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12767
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12768
		return !value
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12769
				? undefined
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12770
				: value === 'none'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12771
					? null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12772
					: value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12773
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12774
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12775
	function applyAttributes(item, node, isRoot) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12776
		var styles = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12777
			node: DomElement.getStyles(node) || {},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12778
			parent: !isRoot && DomElement.getStyles(node.parentNode) || {}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12779
		};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12780
		Base.each(attributes, function(apply, name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12781
			var value = getAttribute(node, name, styles);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12782
			if (value !== undefined)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12783
				item = Base.pick(apply(item, value, name, node, styles), item);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12784
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12785
		return item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12786
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12787
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12788
	var definitions = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12789
	function getDefinition(value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12790
		var match = value && value.match(/\((?:#|)([^)']+)/);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12791
		return match && definitions[match[1]];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12792
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12793
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12794
	function importSVG(source, options, isRoot) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12795
		if (!source)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12796
			return null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12797
		if (!options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12798
			options = {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12799
		} else if (typeof options === 'function') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12800
			options = { onLoad: options };
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12801
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12802
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12803
		var node = source,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12804
			scope = paper;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12805
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12806
		function onLoadCallback(svg) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12807
			paper = scope;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12808
			var item = importSVG(svg, options, isRoot),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12809
				onLoad = options.onLoad,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12810
				view = scope.project && scope.getView();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12811
			if (onLoad)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12812
				onLoad.call(this, item);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12813
			view.update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12814
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12815
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12816
		if (isRoot) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12817
			if (typeof source === 'string' && !/^.*</.test(source)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12818
				node = document.getElementById(source);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12819
				if (node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12820
					source = null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12821
				} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12822
					return Http.request('get', source, onLoadCallback);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12823
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12824
			} else if (typeof File !== 'undefined' && source instanceof File) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12825
				var reader = new FileReader();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12826
				reader.onload = function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12827
					onLoadCallback(reader.result);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12828
				};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12829
				return reader.readAsText(source);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12830
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12831
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12832
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12833
		if (typeof source === 'string')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12834
			node = new DOMParser().parseFromString(source, 'image/svg+xml');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12835
		if (!node.nodeName)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12836
			throw new Error('Unsupported SVG source: ' + source);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12837
		var type = node.nodeName.toLowerCase(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12838
			importer = importers[type],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12839
			item,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12840
			data = node.getAttribute && node.getAttribute('data-paper-data'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12841
			settings = scope.settings,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12842
			applyMatrix = settings.applyMatrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12843
		settings.applyMatrix = false;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12844
		item = importer && importer(node, type, options, isRoot) || null;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12845
		settings.applyMatrix = applyMatrix;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12846
		if (item) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12847
			if (type !== '#document' && !(item instanceof Group))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12848
				item = applyAttributes(item, node, isRoot);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12849
			var onImport = options.onImport;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12850
			if (onImport)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12851
				item = onImport(node, item, options) || item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12852
			if (options.expandShapes && item instanceof Shape) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12853
				item.remove();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12854
				item = item.toPath();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12855
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12856
			if (data)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12857
				item._data = JSON.parse(data);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12858
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12859
		if (isRoot) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12860
			definitions = {};
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 12861
			if (item && Base.pick(options.applyMatrix, applyMatrix))
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12862
				item.matrix.apply(true, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12863
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12864
		return item;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12865
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12866
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12867
	Item.inject({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12868
		importSVG: function(node, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12869
			return this.addChild(importSVG(node, options, true));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12870
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12871
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12872
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12873
	Project.inject({
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12874
		importSVG: function(node, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12875
			this.activate();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12876
			return importSVG(node, options, true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12877
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12878
	});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12879
};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12880
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12881
Base.exports.PaperScript = (function() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12882
	var exports, define,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12883
		scope = this;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12884
!function(e,r){return"object"==typeof exports&&"object"==typeof module?r(exports):"function"==typeof define&&define.amd?define(["exports"],r):(r(e.acorn||(e.acorn={})),void 0)}(this,function(e){"use strict";function r(e){fr=e||{};for(var r in mr)Object.prototype.hasOwnProperty.call(fr,r)||(fr[r]=mr[r]);hr=fr.sourceFile||null}function t(e,r){var t=vr(dr,e);r+=" ("+t.line+":"+t.column+")";var n=new SyntaxError(r);throw n.pos=e,n.loc=t,n.raisedAt=br,n}function n(e){function r(e){if(1==e.length)return t+="return str === "+JSON.stringify(e[0])+";";t+="switch(str){";for(var r=0;r<e.length;++r)t+="case "+JSON.stringify(e[r])+":";t+="return true}return false;"}e=e.split(" ");var t="",n=[];e:for(var a=0;a<e.length;++a){for(var o=0;o<n.length;++o)if(n[o][0].length==e[a].length){n[o].push(e[a]);continue e}n.push([e[a]])}if(n.length>3){n.sort(function(e,r){return r.length-e.length}),t+="switch(str.length){";for(var a=0;a<n.length;++a){var i=n[a];t+="case "+i[0].length+":",r(i)}t+="}"}else r(e);return new Function("str",t)}function a(){this.line=Ar,this.column=br-Sr}function o(){Ar=1,br=Sr=0,Er=!0,u()}function i(e,r){gr=br,fr.locations&&(kr=new a),wr=e,u(),Cr=r,Er=e.beforeExpr}function s(){var e=fr.onComment&&fr.locations&&new a,r=br,n=dr.indexOf("*/",br+=2);if(-1===n&&t(br-2,"Unterminated comment"),br=n+2,fr.locations){Kt.lastIndex=r;for(var o;(o=Kt.exec(dr))&&o.index<br;)++Ar,Sr=o.index+o[0].length}fr.onComment&&fr.onComment(!0,dr.slice(r+2,n),r,br,e,fr.locations&&new a)}function c(){for(var e=br,r=fr.onComment&&fr.locations&&new a,t=dr.charCodeAt(br+=2);pr>br&&10!==t&&13!==t&&8232!==t&&8233!==t;)++br,t=dr.charCodeAt(br);fr.onComment&&fr.onComment(!1,dr.slice(e+2,br),e,br,r,fr.locations&&new a)}function u(){for(;pr>br;){var e=dr.charCodeAt(br);if(32===e)++br;else if(13===e){++br;var r=dr.charCodeAt(br);10===r&&++br,fr.locations&&(++Ar,Sr=br)}else if(10===e||8232===e||8233===e)++br,fr.locations&&(++Ar,Sr=br);else if(e>8&&14>e)++br;else if(47===e){var r=dr.charCodeAt(br+1);if(42===r)s();else{if(47!==r)break;c()}}else if(160===e)++br;else{if(!(e>=5760&&Jt.test(String.fromCharCode(e))))break;++br}}}function l(){var e=dr.charCodeAt(br+1);return e>=48&&57>=e?E(!0):(++br,i(xt))}function f(){var e=dr.charCodeAt(br+1);return Er?(++br,k()):61===e?x(Et,2):x(wt,1)}function d(){var e=dr.charCodeAt(br+1);return 61===e?x(Et,2):x(Dt,1)}function p(e){var r=dr.charCodeAt(br+1);return r===e?x(124===e?Lt:Ut,2):61===r?x(Et,2):x(124===e?Rt:Tt,1)}function h(){var e=dr.charCodeAt(br+1);return 61===e?x(Et,2):x(Vt,1)}function m(e){var r=dr.charCodeAt(br+1);return r===e?45==r&&62==dr.charCodeAt(br+2)&&Gt.test(dr.slice(Lr,br))?(br+=3,c(),u(),g()):x(St,2):61===r?x(Et,2):x(At,1)}function v(e){var r=dr.charCodeAt(br+1),t=1;return r===e?(t=62===e&&62===dr.charCodeAt(br+2)?3:2,61===dr.charCodeAt(br+t)?x(Et,t+1):x(jt,t)):33==r&&60==e&&45==dr.charCodeAt(br+2)&&45==dr.charCodeAt(br+3)?(br+=4,c(),u(),g()):(61===r&&(t=61===dr.charCodeAt(br+2)?3:2),x(Ot,t))}function b(e){var r=dr.charCodeAt(br+1);return 61===r?x(qt,61===dr.charCodeAt(br+2)?3:2):x(61===e?Ct:It,1)}function y(e){switch(e){case 46:return l();case 40:return++br,i(mt);case 41:return++br,i(vt);case 59:return++br,i(yt);case 44:return++br,i(bt);case 91:return++br,i(ft);case 93:return++br,i(dt);case 123:return++br,i(pt);case 125:return++br,i(ht);case 58:return++br,i(gt);case 63:return++br,i(kt);case 48:var r=dr.charCodeAt(br+1);if(120===r||88===r)return C();case 49:case 50:case 51:case 52:case 53:case 54:case 55:case 56:case 57:return E(!1);case 34:case 39:return A(e);case 47:return f(e);case 37:case 42:return d();case 124:case 38:return p(e);case 94:return h();case 43:case 45:return m(e);case 60:case 62:return v(e);case 61:case 33:return b(e);case 126:return x(It,1)}return!1}function g(e){if(e?br=yr+1:yr=br,fr.locations&&(xr=new a),e)return k();if(br>=pr)return i(Br);var r=dr.charCodeAt(br);if(Qt(r)||92===r)return L();var n=y(r);if(n===!1){var o=String.fromCharCode(r);if("\\"===o||$t.test(o))return L();t(br,"Unexpected character '"+o+"'")}return n}function x(e,r){var t=dr.slice(br,br+r);br+=r,i(e,t)}function k(){for(var e,r,n="",a=br;;){br>=pr&&t(a,"Unterminated regular expression");var o=dr.charAt(br);if(Gt.test(o)&&t(a,"Unterminated regular expression"),e)e=!1;else{if("["===o)r=!0;else if("]"===o&&r)r=!1;else if("/"===o&&!r)break;e="\\"===o}++br}var n=dr.slice(a,br);++br;var s=I();return s&&!/^[gmsiy]*$/.test(s)&&t(a,"Invalid regexp flag"),i(jr,new RegExp(n,s))}function w(e,r){for(var t=br,n=0,a=0,o=null==r?1/0:r;o>a;++a){var i,s=dr.charCodeAt(br);if(i=s>=97?s-97+10:s>=65?s-65+10:s>=48&&57>=s?s-48:1/0,i>=e)break;++br,n=n*e+i}return br===t||null!=r&&br-t!==r?null:n}function C(){br+=2;var e=w(16);return null==e&&t(yr+2,"Expected hexadecimal number"),Qt(dr.charCodeAt(br))&&t(br,"Identifier directly after number"),i(Or,e)}function E(e){var r=br,n=!1,a=48===dr.charCodeAt(br);e||null!==w(10)||t(r,"Invalid number"),46===dr.charCodeAt(br)&&(++br,w(10),n=!0);var o=dr.charCodeAt(br);(69===o||101===o)&&(o=dr.charCodeAt(++br),(43===o||45===o)&&++br,null===w(10)&&t(r,"Invalid number"),n=!0),Qt(dr.charCodeAt(br))&&t(br,"Identifier directly after number");var s,c=dr.slice(r,br);return n?s=parseFloat(c):a&&1!==c.length?/[89]/.test(c)||Tr?t(r,"Invalid number"):s=parseInt(c,8):s=parseInt(c,10),i(Or,s)}function A(e){br++;for(var r="";;){br>=pr&&t(yr,"Unterminated string constant");var n=dr.charCodeAt(br);if(n===e)return++br,i(Dr,r);if(92===n){n=dr.charCodeAt(++br);var a=/^[0-7]+/.exec(dr.slice(br,br+3));for(a&&(a=a[0]);a&&parseInt(a,8)>255;)a=a.slice(0,a.length-1);if("0"===a&&(a=null),++br,a)Tr&&t(br-2,"Octal literal in strict mode"),r+=String.fromCharCode(parseInt(a,8)),br+=a.length-1;else switch(n){case 110:r+="\n";break;case 114:r+="\r";break;case 120:r+=String.fromCharCode(S(2));break;case 117:r+=String.fromCharCode(S(4));break;case 85:r+=String.fromCharCode(S(8));break;case 116:r+="	";break;case 98:r+="\b";break;case 118:r+="";break;case 102:r+="\f";break;case 48:r+="\0";break;case 13:10===dr.charCodeAt(br)&&++br;case 10:fr.locations&&(Sr=br,++Ar);break;default:r+=String.fromCharCode(n)}}else(13===n||10===n||8232===n||8233===n)&&t(yr,"Unterminated string constant"),r+=String.fromCharCode(n),++br}}function S(e){var r=w(16,e);return null===r&&t(yr,"Bad character escape sequence"),r}function I(){Bt=!1;for(var e,r=!0,n=br;;){var a=dr.charCodeAt(br);if(Yt(a))Bt&&(e+=dr.charAt(br)),++br;else{if(92!==a)break;Bt||(e=dr.slice(n,br)),Bt=!0,117!=dr.charCodeAt(++br)&&t(br,"Expecting Unicode escape sequence \\uXXXX"),++br;var o=S(4),i=String.fromCharCode(o);i||t(br-1,"Invalid Unicode escape"),(r?Qt(o):Yt(o))||t(br-4,"Invalid Unicode escape"),e+=i}r=!1}return Bt?e:dr.slice(n,br)}function L(){var e=I(),r=Fr;return Bt||(Wt(e)?r=lt[e]:(fr.forbidReserved&&(3===fr.ecmaVersion?Mt:zt)(e)||Tr&&Xt(e))&&t(yr,"The keyword '"+e+"' is reserved")),i(r,e)}function U(){Ir=yr,Lr=gr,Ur=kr,g()}function R(e){if(Tr=e,br=Lr,fr.locations)for(;Sr>br;)Sr=dr.lastIndexOf("\n",Sr-2)+1,--Ar;u(),g()}function V(){this.type=null,this.start=yr,this.end=null}function T(){this.start=xr,this.end=null,null!==hr&&(this.source=hr)}function q(){var e=new V;return fr.locations&&(e.loc=new T),fr.ranges&&(e.range=[yr,0]),e}function O(e){var r=new V;return r.start=e.start,fr.locations&&(r.loc=new T,r.loc.start=e.loc.start),fr.ranges&&(r.range=[e.range[0],0]),r}function j(e,r){return e.type=r,e.end=Lr,fr.locations&&(e.loc.end=Ur),fr.ranges&&(e.range[1]=Lr),e}function D(e){return fr.ecmaVersion>=5&&"ExpressionStatement"===e.type&&"Literal"===e.expression.type&&"use strict"===e.expression.value}function F(e){return wr===e?(U(),!0):void 0}function B(){return!fr.strictSemicolons&&(wr===Br||wr===ht||Gt.test(dr.slice(Lr,yr)))}function M(){F(yt)||B()||X()}function z(e){wr===e?U():X()}function X(){t(yr,"Unexpected token")}function N(e){"Identifier"!==e.type&&"MemberExpression"!==e.type&&t(e.start,"Assigning to rvalue"),Tr&&"Identifier"===e.type&&Nt(e.name)&&t(e.start,"Assigning to "+e.name+" in strict mode")}function W(e){Ir=Lr=br,fr.locations&&(Ur=new a),Rr=Tr=null,Vr=[],g();var r=e||q(),t=!0;for(e||(r.body=[]);wr!==Br;){var n=J();r.body.push(n),t&&D(n)&&R(!0),t=!1}return j(r,"Program")}function J(){(wr===wt||wr===Et&&"/="==Cr)&&g(!0);var e=wr,r=q();switch(e){case Mr:case Nr:U();var n=e===Mr;F(yt)||B()?r.label=null:wr!==Fr?X():(r.label=lr(),M());for(var a=0;a<Vr.length;++a){var o=Vr[a];if(null==r.label||o.name===r.label.name){if(null!=o.kind&&(n||"loop"===o.kind))break;if(r.label&&n)break}}return a===Vr.length&&t(r.start,"Unsyntactic "+e.keyword),j(r,n?"BreakStatement":"ContinueStatement");case Wr:return U(),M(),j(r,"DebuggerStatement");case Pr:return U(),Vr.push(Zt),r.body=J(),Vr.pop(),z(tt),r.test=P(),M(),j(r,"DoWhileStatement");case _r:if(U(),Vr.push(Zt),z(mt),wr===yt)return $(r,null);if(wr===rt){var i=q();return U(),G(i,!0),j(i,"VariableDeclaration"),1===i.declarations.length&&F(ut)?_(r,i):$(r,i)}var i=K(!1,!0);return F(ut)?(N(i),_(r,i)):$(r,i);case Gr:return U(),cr(r,!0);case Kr:return U(),r.test=P(),r.consequent=J(),r.alternate=F(Hr)?J():null,j(r,"IfStatement");case Qr:return Rr||t(yr,"'return' outside of function"),U(),F(yt)||B()?r.argument=null:(r.argument=K(),M()),j(r,"ReturnStatement");case Yr:U(),r.discriminant=P(),r.cases=[],z(pt),Vr.push(en);for(var s,c;wr!=ht;)if(wr===zr||wr===Jr){var u=wr===zr;s&&j(s,"SwitchCase"),r.cases.push(s=q()),s.consequent=[],U(),u?s.test=K():(c&&t(Ir,"Multiple default clauses"),c=!0,s.test=null),z(gt)}else s||X(),s.consequent.push(J());return s&&j(s,"SwitchCase"),U(),Vr.pop(),j(r,"SwitchStatement");case Zr:return U(),Gt.test(dr.slice(Lr,yr))&&t(Lr,"Illegal newline after throw"),r.argument=K(),M(),j(r,"ThrowStatement");case et:if(U(),r.block=H(),r.handler=null,wr===Xr){var l=q();U(),z(mt),l.param=lr(),Tr&&Nt(l.param.name)&&t(l.param.start,"Binding "+l.param.name+" in strict mode"),z(vt),l.guard=null,l.body=H(),r.handler=j(l,"CatchClause")}return r.guardedHandlers=qr,r.finalizer=F($r)?H():null,r.handler||r.finalizer||t(r.start,"Missing catch or finally clause"),j(r,"TryStatement");case rt:return U(),G(r),M(),j(r,"VariableDeclaration");case tt:return U(),r.test=P(),Vr.push(Zt),r.body=J(),Vr.pop(),j(r,"WhileStatement");case nt:return Tr&&t(yr,"'with' in strict mode"),U(),r.object=P(),r.body=J(),j(r,"WithStatement");case pt:return H();case yt:return U(),j(r,"EmptyStatement");default:var f=Cr,d=K();if(e===Fr&&"Identifier"===d.type&&F(gt)){for(var a=0;a<Vr.length;++a)Vr[a].name===f&&t(d.start,"Label '"+f+"' is already declared");var p=wr.isLoop?"loop":wr===Yr?"switch":null;return Vr.push({name:f,kind:p}),r.body=J(),Vr.pop(),r.label=d,j(r,"LabeledStatement")}return r.expression=d,M(),j(r,"ExpressionStatement")}}function P(){z(mt);var e=K();return z(vt),e}function H(e){var r,t=q(),n=!0,a=!1;for(t.body=[],z(pt);!F(ht);){var o=J();t.body.push(o),n&&e&&D(o)&&(r=a,R(a=!0)),n=!1}return a&&!r&&R(!1),j(t,"BlockStatement")}function $(e,r){return e.init=r,z(yt),e.test=wr===yt?null:K(),z(yt),e.update=wr===vt?null:K(),z(vt),e.body=J(),Vr.pop(),j(e,"ForStatement")}function _(e,r){return e.left=r,e.right=K(),z(vt),e.body=J(),Vr.pop(),j(e,"ForInStatement")}function G(e,r){for(e.declarations=[],e.kind="var";;){var n=q();if(n.id=lr(),Tr&&Nt(n.id.name)&&t(n.id.start,"Binding "+n.id.name+" in strict mode"),n.init=F(Ct)?K(!0,r):null,e.declarations.push(j(n,"VariableDeclarator")),!F(bt))break}return e}function K(e,r){var t=Q(r);if(!e&&wr===bt){var n=O(t);for(n.expressions=[t];F(bt);)n.expressions.push(Q(r));return j(n,"SequenceExpression")}return t}function Q(e){var r=Y(e);if(wr.isAssign){var t=O(r);return t.operator=Cr,t.left=r,U(),t.right=Q(e),N(r),j(t,"AssignmentExpression")}return r}function Y(e){var r=Z(e);if(F(kt)){var t=O(r);return t.test=r,t.consequent=K(!0),z(gt),t.alternate=K(!0,e),j(t,"ConditionalExpression")}return r}function Z(e){return er(rr(),-1,e)}function er(e,r,t){var n=wr.binop;if(null!=n&&(!t||wr!==ut)&&n>r){var a=O(e);a.left=e,a.operator=Cr,U(),a.right=er(rr(),n,t);var o=j(a,/&&|\|\|/.test(a.operator)?"LogicalExpression":"BinaryExpression");return er(o,r,t)}return e}function rr(){if(wr.prefix){var e=q(),r=wr.isUpdate;return e.operator=Cr,e.prefix=!0,Er=!0,U(),e.argument=rr(),r?N(e.argument):Tr&&"delete"===e.operator&&"Identifier"===e.argument.type&&t(e.start,"Deleting local variable in strict mode"),j(e,r?"UpdateExpression":"UnaryExpression")}for(var n=tr();wr.postfix&&!B();){var e=O(n);e.operator=Cr,e.prefix=!1,e.argument=n,N(n),U(),n=j(e,"UpdateExpression")}return n}function tr(){return nr(ar())}function nr(e,r){if(F(xt)){var t=O(e);return t.object=e,t.property=lr(!0),t.computed=!1,nr(j(t,"MemberExpression"),r)}if(F(ft)){var t=O(e);return t.object=e,t.property=K(),t.computed=!0,z(dt),nr(j(t,"MemberExpression"),r)}if(!r&&F(mt)){var t=O(e);return t.callee=e,t.arguments=ur(vt,!1),nr(j(t,"CallExpression"),r)}return e}function ar(){switch(wr){case ot:var e=q();return U(),j(e,"ThisExpression");case Fr:return lr();case Or:case Dr:case jr:var e=q();return e.value=Cr,e.raw=dr.slice(yr,gr),U(),j(e,"Literal");case it:case st:case ct:var e=q();return e.value=wr.atomValue,e.raw=wr.keyword,U(),j(e,"Literal");case mt:var r=xr,t=yr;U();var n=K();return n.start=t,n.end=gr,fr.locations&&(n.loc.start=r,n.loc.end=kr),fr.ranges&&(n.range=[t,gr]),z(vt),n;case ft:var e=q();return U(),e.elements=ur(dt,!0,!0),j(e,"ArrayExpression");case pt:return ir();case Gr:var e=q();return U(),cr(e,!1);case at:return or();default:X()}}function or(){var e=q();return U(),e.callee=nr(ar(),!0),e.arguments=F(mt)?ur(vt,!1):qr,j(e,"NewExpression")}function ir(){var e=q(),r=!0,n=!1;for(e.properties=[],U();!F(ht);){if(r)r=!1;else if(z(bt),fr.allowTrailingCommas&&F(ht))break;var a,o={key:sr()},i=!1;if(F(gt)?(o.value=K(!0),a=o.kind="init"):fr.ecmaVersion>=5&&"Identifier"===o.key.type&&("get"===o.key.name||"set"===o.key.name)?(i=n=!0,a=o.kind=o.key.name,o.key=sr(),wr!==mt&&X(),o.value=cr(q(),!1)):X(),"Identifier"===o.key.type&&(Tr||n))for(var s=0;s<e.properties.length;++s){var c=e.properties[s];if(c.key.name===o.key.name){var u=a==c.kind||i&&"init"===c.kind||"init"===a&&("get"===c.kind||"set"===c.kind);u&&!Tr&&"init"===a&&"init"===c.kind&&(u=!1),u&&t(o.key.start,"Redefinition of property")}}e.properties.push(o)}return j(e,"ObjectExpression")}function sr(){return wr===Or||wr===Dr?ar():lr(!0)}function cr(e,r){wr===Fr?e.id=lr():r?X():e.id=null,e.params=[];var n=!0;for(z(mt);!F(vt);)n?n=!1:z(bt),e.params.push(lr());var a=Rr,o=Vr;if(Rr=!0,Vr=[],e.body=H(!0),Rr=a,Vr=o,Tr||e.body.body.length&&D(e.body.body[0]))for(var i=e.id?-1:0;i<e.params.length;++i){var s=0>i?e.id:e.params[i];if((Xt(s.name)||Nt(s.name))&&t(s.start,"Defining '"+s.name+"' in strict mode"),i>=0)for(var c=0;i>c;++c)s.name===e.params[c].name&&t(s.start,"Argument name clash in strict mode")}return j(e,r?"FunctionDeclaration":"FunctionExpression")}function ur(e,r,t){for(var n=[],a=!0;!F(e);){if(a)a=!1;else if(z(bt),r&&fr.allowTrailingCommas&&F(e))break;t&&wr===bt?n.push(null):n.push(K(!0))}return n}function lr(e){var r=q();return r.name=wr===Fr?Cr:e&&!fr.forbidReserved&&wr.keyword||X(),Er=!1,U(),j(r,"Identifier")}e.version="0.4.0";var fr,dr,pr,hr;e.parse=function(e,t){return dr=String(e),pr=dr.length,r(t),o(),W(fr.program)};var mr=e.defaultOptions={ecmaVersion:5,strictSemicolons:!1,allowTrailingCommas:!0,forbidReserved:!1,locations:!1,onComment:null,ranges:!1,program:null,sourceFile:null},vr=e.getLineInfo=function(e,r){for(var t=1,n=0;;){Kt.lastIndex=n;var a=Kt.exec(e);if(!(a&&a.index<r))break;++t,n=a.index+a[0].length}return{line:t,column:r-n}};e.tokenize=function(e,t){function n(e){return g(e),a.start=yr,a.end=gr,a.startLoc=xr,a.endLoc=kr,a.type=wr,a.value=Cr,a}dr=String(e),pr=dr.length,r(t),o();var a={};return n.jumpTo=function(e,r){if(br=e,fr.locations){Ar=1,Sr=Kt.lastIndex=0;for(var t;(t=Kt.exec(dr))&&t.index<e;)++Ar,Sr=t.index+t[0].length}Er=r,u()},n};var br,yr,gr,xr,kr,wr,Cr,Er,Ar,Sr,Ir,Lr,Ur,Rr,Vr,Tr,qr=[],Or={type:"num"},jr={type:"regexp"},Dr={type:"string"},Fr={type:"name"},Br={type:"eof"},Mr={keyword:"break"},zr={keyword:"case",beforeExpr:!0},Xr={keyword:"catch"},Nr={keyword:"continue"},Wr={keyword:"debugger"},Jr={keyword:"default"},Pr={keyword:"do",isLoop:!0},Hr={keyword:"else",beforeExpr:!0},$r={keyword:"finally"},_r={keyword:"for",isLoop:!0},Gr={keyword:"function"},Kr={keyword:"if"},Qr={keyword:"return",beforeExpr:!0},Yr={keyword:"switch"},Zr={keyword:"throw",beforeExpr:!0},et={keyword:"try"},rt={keyword:"var"},tt={keyword:"while",isLoop:!0},nt={keyword:"with"},at={keyword:"new",beforeExpr:!0},ot={keyword:"this"},it={keyword:"null",atomValue:null},st={keyword:"true",atomValue:!0},ct={keyword:"false",atomValue:!1},ut={keyword:"in",binop:7,beforeExpr:!0},lt={"break":Mr,"case":zr,"catch":Xr,"continue":Nr,"debugger":Wr,"default":Jr,"do":Pr,"else":Hr,"finally":$r,"for":_r,"function":Gr,"if":Kr,"return":Qr,"switch":Yr,"throw":Zr,"try":et,"var":rt,"while":tt,"with":nt,"null":it,"true":st,"false":ct,"new":at,"in":ut,"instanceof":{keyword:"instanceof",binop:7,beforeExpr:!0},"this":ot,"typeof":{keyword:"typeof",prefix:!0,beforeExpr:!0},"void":{keyword:"void",prefix:!0,beforeExpr:!0},"delete":{keyword:"delete",prefix:!0,beforeExpr:!0}},ft={type:"[",beforeExpr:!0},dt={type:"]"},pt={type:"{",beforeExpr:!0},ht={type:"}"},mt={type:"(",beforeExpr:!0},vt={type:")"},bt={type:",",beforeExpr:!0},yt={type:";",beforeExpr:!0},gt={type:":",beforeExpr:!0},xt={type:"."},kt={type:"?",beforeExpr:!0},wt={binop:10,beforeExpr:!0},Ct={isAssign:!0,beforeExpr:!0},Et={isAssign:!0,beforeExpr:!0},At={binop:9,prefix:!0,beforeExpr:!0},St={postfix:!0,prefix:!0,isUpdate:!0},It={prefix:!0,beforeExpr:!0},Lt={binop:1,beforeExpr:!0},Ut={binop:2,beforeExpr:!0},Rt={binop:3,beforeExpr:!0},Vt={binop:4,beforeExpr:!0},Tt={binop:5,beforeExpr:!0},qt={binop:6,beforeExpr:!0},Ot={binop:7,beforeExpr:!0},jt={binop:8,beforeExpr:!0},Dt={binop:10,beforeExpr:!0};e.tokTypes={bracketL:ft,bracketR:dt,braceL:pt,braceR:ht,parenL:mt,parenR:vt,comma:bt,semi:yt,colon:gt,dot:xt,question:kt,slash:wt,eq:Ct,name:Fr,eof:Br,num:Or,regexp:jr,string:Dr};for(var Ft in lt)e.tokTypes["_"+Ft]=lt[Ft];var Bt,Mt=n("abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile"),zt=n("class enum extends super const export import"),Xt=n("implements interface let package private protected public static yield"),Nt=n("eval arguments"),Wt=n("break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this"),Jt=/[\u1680\u180e\u2000-\u200a\u202f\u205f\u3000\ufeff]/,Pt="\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc",Ht="\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u0620-\u0649\u0672-\u06d3\u06e7-\u06e8\u06fb-\u06fc\u0730-\u074a\u0800-\u0814\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0840-\u0857\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962-\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09d7\u09df-\u09e0\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2-\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b5f-\u0b60\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62-\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2-\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d46-\u0d48\u0d57\u0d62-\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e34-\u0e3a\u0e40-\u0e45\u0e50-\u0e59\u0eb4-\u0eb9\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f41-\u0f47\u0f71-\u0f84\u0f86-\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u1000-\u1029\u1040-\u1049\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u170e-\u1710\u1720-\u1730\u1740-\u1750\u1772\u1773\u1780-\u17b2\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u1920-\u192b\u1930-\u193b\u1951-\u196d\u19b0-\u19c0\u19c8-\u19c9\u19d0-\u19d9\u1a00-\u1a15\u1a20-\u1a53\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b46-\u1b4b\u1b50-\u1b59\u1b6b-\u1b73\u1bb0-\u1bb9\u1be6-\u1bf3\u1c00-\u1c22\u1c40-\u1c49\u1c5b-\u1c7d\u1cd0-\u1cd2\u1d00-\u1dbe\u1e01-\u1f15\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2d81-\u2d96\u2de0-\u2dff\u3021-\u3028\u3099\u309a\ua640-\ua66d\ua674-\ua67d\ua69f\ua6f0-\ua6f1\ua7f8-\ua800\ua806\ua80b\ua823-\ua827\ua880-\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8f3-\ua8f7\ua900-\ua909\ua926-\ua92d\ua930-\ua945\ua980-\ua983\ua9b3-\ua9c0\uaa00-\uaa27\uaa40-\uaa41\uaa4c-\uaa4d\uaa50-\uaa59\uaa7b\uaae0-\uaae9\uaaf2-\uaaf3\uabc0-\uabe1\uabec\uabed\uabf0-\uabf9\ufb20-\ufb28\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f",$t=new RegExp("["+Pt+"]"),_t=new RegExp("["+Pt+Ht+"]"),Gt=/[\n\r\u2028\u2029]/,Kt=/\r\n|[\n\r\u2028\u2029]/g,Qt=e.isIdentifierStart=function(e){return 65>e?36===e:91>e?!0:97>e?95===e:123>e?!0:e>=170&&$t.test(String.fromCharCode(e))},Yt=e.isIdentifierChar=function(e){return 48>e?36===e:58>e?!0:65>e?!1:91>e?!0:97>e?95===e:123>e?!0:e>=170&&_t.test(String.fromCharCode(e))},Zt={kind:"loop"},en={kind:"switch"}});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12885
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12886
	var binaryOperators = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12887
		'+': '__add',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12888
		'-': '__subtract',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12889
		'*': '__multiply',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12890
		'/': '__divide',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12891
		'%': '__modulo',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12892
		'==': 'equals',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12893
		'!=': 'equals'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12894
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12895
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12896
	var unaryOperators = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12897
		'-': '__negate',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12898
		'+': null
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12899
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12900
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12901
	var fields = Base.each(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12902
		['add', 'subtract', 'multiply', 'divide', 'modulo', 'negate'],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12903
		function(name) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12904
			this['__' + name] = '#' + name;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12905
		},
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12906
		{}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12907
	);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12908
	Point.inject(fields);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12909
	Size.inject(fields);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12910
	Color.inject(fields);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12911
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12912
	function __$__(left, operator, right) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12913
		var handler = binaryOperators[operator];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12914
		if (left && left[handler]) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12915
			var res = left[handler](right);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12916
			return operator === '!=' ? !res : res;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12917
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12918
		switch (operator) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12919
		case '+': return left + right;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12920
		case '-': return left - right;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12921
		case '*': return left * right;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12922
		case '/': return left / right;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12923
		case '%': return left % right;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12924
		case '==': return left == right;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12925
		case '!=': return left != right;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12926
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12927
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12928
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12929
	function $__(operator, value) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12930
		var handler = unaryOperators[operator];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12931
		if (handler && value && value[handler])
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12932
			return value[handler]();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12933
		switch (operator) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12934
		case '+': return +value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12935
		case '-': return -value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12936
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12937
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12938
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12939
	function parse(code, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12940
		return scope.acorn.parse(code, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12941
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12942
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12943
	function compile(code, url, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12944
		if (!code)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12945
			return '';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12946
		options = options || {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12947
		url = url || '';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12948
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12949
		var insertions = [];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12950
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12951
		function getOffset(offset) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12952
			for (var i = 0, l = insertions.length; i < l; i++) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12953
				var insertion = insertions[i];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12954
				if (insertion[0] >= offset)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12955
					break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12956
				offset += insertion[1];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12957
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12958
			return offset;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12959
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12960
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12961
		function getCode(node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12962
			return code.substring(getOffset(node.range[0]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12963
					getOffset(node.range[1]));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12964
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12965
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12966
		function getBetween(left, right) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12967
			return code.substring(getOffset(left.range[1]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12968
					getOffset(right.range[0]));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12969
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12970
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12971
		function replaceCode(node, str) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12972
			var start = getOffset(node.range[0]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12973
				end = getOffset(node.range[1]),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12974
				insert = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12975
			for (var i = insertions.length - 1; i >= 0; i--) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12976
				if (start > insertions[i][0]) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12977
					insert = i + 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12978
					break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12979
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12980
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12981
			insertions.splice(insert, 0, [start, str.length - end + start]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12982
			code = code.substring(0, start) + str + code.substring(end);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12983
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12984
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12985
		function walkAST(node, parent) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12986
			if (!node)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12987
				return;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12988
			for (var key in node) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12989
				if (key === 'range' || key === 'loc')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12990
					continue;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12991
				var value = node[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12992
				if (Array.isArray(value)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12993
					for (var i = 0, l = value.length; i < l; i++)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12994
						walkAST(value[i], node);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12995
				} else if (value && typeof value === 'object') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12996
					walkAST(value, node);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12997
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12998
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 12999
			switch (node.type) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13000
			case 'UnaryExpression':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13001
				if (node.operator in unaryOperators
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13002
						&& node.argument.type !== 'Literal') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13003
					var arg = getCode(node.argument);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13004
					replaceCode(node, '$__("' + node.operator + '", '
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13005
							+ arg + ')');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13006
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13007
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13008
			case 'BinaryExpression':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13009
				if (node.operator in binaryOperators
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13010
						&& node.left.type !== 'Literal') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13011
					var left = getCode(node.left),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13012
						right = getCode(node.right),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13013
						between = getBetween(node.left, node.right),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13014
						operator = node.operator;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13015
					replaceCode(node, '__$__(' + left + ','
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13016
							+ between.replace(new RegExp('\\' + operator),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13017
								'"' + operator + '"')
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13018
							+ ', ' + right + ')');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13019
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13020
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13021
			case 'UpdateExpression':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13022
			case 'AssignmentExpression':
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13023
				var parentType = parent && parent.type;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13024
				if (!(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13025
						parentType === 'ForStatement'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13026
						|| parentType === 'BinaryExpression'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13027
							&& /^[=!<>]/.test(parent.operator)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13028
						|| parentType === 'MemberExpression' && parent.computed
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13029
				)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13030
					if (node.type === 'UpdateExpression') {
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 13031
						var arg = getCode(node.argument),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 13032
							exp = '__$__(' + arg + ', "' + node.operator[0]
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 13033
									+ '", 1)',
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 13034
							str = arg + ' = ' + exp;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13035
						if (!node.prefix
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13036
								&& (parentType === 'AssignmentExpression'
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 13037
									|| parentType === 'VariableDeclarator')) {
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 13038
							if (getCode(parent.left || parent.id) === arg)
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 13039
								str = exp;
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13040
							str = arg + '; ' + str;
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 13041
						}
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13042
						replaceCode(node, str);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13043
					} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13044
						if (/^.=$/.test(node.operator)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13045
								&& node.left.type !== 'Literal') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13046
							var left = getCode(node.left),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13047
								right = getCode(node.right);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13048
							replaceCode(node, left + ' = __$__(' + left + ', "'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13049
									+ node.operator[0] + '", ' + right + ')');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13050
						}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13051
					}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13052
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13053
				break;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13054
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13055
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13056
		var sourceMap = null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13057
			browser = paper.browser,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13058
			version = browser.versionNumber,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13059
			lineBreaks = /\r\n|\n|\r/mg;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13060
		if (browser.chrome && version >= 30
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13061
				|| browser.webkit && version >= 537.76
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13062
				|| browser.firefox && version >= 23) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13063
			var offset = 0;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13064
			if (window.location.href.indexOf(url) === 0) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13065
				var html = document.getElementsByTagName('html')[0].innerHTML;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13066
				offset = html.substr(0, html.indexOf(code) + 1).match(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13067
						lineBreaks).length + 1;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13068
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13069
			var mappings = ['AAAA'];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13070
			mappings.length = (code.match(lineBreaks) || []).length + 1 + offset;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13071
			sourceMap = {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13072
				version: 3,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13073
				file: url,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13074
				names:[],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13075
				mappings: mappings.join(';AACA'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13076
				sourceRoot: '',
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13077
				sources: [url]
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13078
			};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13079
			var source = options.source || !url && code;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13080
			if (source)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13081
				sourceMap.sourcesContent = [source];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13082
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13083
		walkAST(parse(code, { ranges: true }));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13084
		if (sourceMap) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13085
			code = new Array(offset + 1).join('\n') + code
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13086
					+ "\n//# sourceMappingURL=data:application/json;base64,"
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13087
					+ (btoa(unescape(encodeURIComponent(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13088
						JSON.stringify(sourceMap)))))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13089
					+ "\n//# sourceURL=" + (url || 'paperscript');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13090
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13091
		return code;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13092
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13093
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13094
	function execute(code, scope, url, options) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13095
		paper = scope;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13096
		var view = scope.getView(),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13097
			tool = /\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\b/.test(code)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13098
					? new Tool()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13099
					: null,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13100
			toolHandlers = tool ? tool._events : [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13101
			handlers = ['onFrame', 'onResize'].concat(toolHandlers),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13102
			params = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13103
			args = [],
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13104
			func;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13105
		code = compile(code, url, options);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13106
		function expose(scope, hidden) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13107
			for (var key in scope) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13108
				if ((hidden || !/^_/.test(key)) && new RegExp('([\\b\\s\\W]|^)'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13109
						+ key.replace(/\$/g, '\\$') + '\\b').test(code)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13110
					params.push(key);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13111
					args.push(scope[key]);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13112
				}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13113
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13114
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13115
		expose({ __$__: __$__, $__: $__, paper: scope, view: view, tool: tool },
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13116
				true);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13117
		expose(scope);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13118
		handlers = Base.each(handlers, function(key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13119
			if (new RegExp('\\s+' + key + '\\b').test(code)) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13120
				params.push(key);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13121
				this.push(key + ': ' + key);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13122
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13123
		}, []).join(', ');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13124
		if (handlers)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13125
			code += '\nreturn { ' + handlers + ' };';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13126
		var browser = paper.browser;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13127
		if (browser.chrome || browser.firefox) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13128
			var script = document.createElement('script'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13129
				head = document.head || document.getElementsByTagName('head')[0];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13130
			if (browser.firefox)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13131
				code = '\n' + code;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13132
			script.appendChild(document.createTextNode(
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13133
				'paper._execute = function(' + params + ') {' + code + '\n}'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13134
			));
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13135
			head.appendChild(script);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13136
			func = paper._execute;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13137
			delete paper._execute;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13138
			head.removeChild(script);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13139
		} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13140
			func = Function(params, code);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13141
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13142
		var res = func.apply(scope, args) || {};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13143
		Base.each(toolHandlers, function(key) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13144
			var value = res[key];
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13145
			if (value)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13146
				tool[key] = value;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13147
		});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13148
		if (view) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13149
			if (res.onResize)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13150
				view.setOnResize(res.onResize);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13151
			view.emit('resize', {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13152
				size: view.size,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13153
				delta: new Point()
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13154
			});
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13155
			if (res.onFrame)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13156
				view.setOnFrame(res.onFrame);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13157
			view.update();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13158
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13159
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13160
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13161
	function loadScript(script) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13162
		if (/^text\/(?:x-|)paperscript$/.test(script.type)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13163
				&& PaperScope.getAttribute(script, 'ignore') !== 'true') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13164
			var canvasId = PaperScope.getAttribute(script, 'canvas'),
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13165
				canvas = document.getElementById(canvasId),
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 13166
				src = script.src || script.getAttribute('data-src'),
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 13167
				async = PaperScope.hasAttribute(script, 'async'),
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13168
				scopeAttribute = 'data-paper-scope';
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13169
			if (!canvas)
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13170
				throw new Error('Unable to find canvas with id "'
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13171
						+ canvasId + '"');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13172
			var scope = PaperScope.get(canvas.getAttribute(scopeAttribute))
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13173
						|| new PaperScope().setup(canvas);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13174
			canvas.setAttribute(scopeAttribute, scope._id);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13175
			if (src) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13176
				Http.request('get', src, function(code) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13177
					execute(code, scope, src);
495
444b80998255 update client version + small correction in dojoConfig to load ckeditor jquery adapter
ymh <ymh.work@gmail.com>
parents: 442
diff changeset
 13178
				}, async);
442
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13179
			} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13180
				execute(script.innerHTML, scope, script.baseURI);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13181
			}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13182
			script.setAttribute('data-paper-ignore', 'true');
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13183
			return scope;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13184
		}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13185
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13186
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13187
	function loadAll() {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13188
		Base.each(document.getElementsByTagName('script'), loadScript);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13189
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13190
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13191
	function load(script) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13192
		return script ? loadScript(script) : loadAll();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13193
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13194
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13195
	if (document.readyState === 'complete') {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13196
		setTimeout(loadAll);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13197
	} else {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13198
		DomEvent.add(window, { load: loadAll });
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13199
	}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13200
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13201
	return {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13202
		compile: compile,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13203
		execute: execute,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13204
		load: load,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13205
		parse: parse
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13206
	};
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13207
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13208
}).call(this);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13209
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13210
paper = new (PaperScope.inject(Base.exports, {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13211
	enumerable: true,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13212
	Base: Base,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13213
	Numerical: Numerical,
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13214
	Key: Key
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13215
}))();
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13216
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13217
if (typeof define === 'function' && define.amd) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13218
	define('paper', paper);
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13219
} else if (typeof module === 'object' && module) {
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13220
	module.exports = paper;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13221
}
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13222
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13223
return paper;
adb907bba956 add server php example
ymh <ymh.work@gmail.com>
parents:
diff changeset
 13224
};