示例#1
0
文件: sector.js 项目: Fazich/kcharts
    draw:function(){
      var r = this.get('r')
        , paper = this.get('paper')
        , pathcfg = this.get('pathcfg')
        , framedata = this.get('framedata')
        , sectorcfg = (framedata && framedata.sectorcfg) || {}
        , $path = paper.path();

      pathcfg = Util.merge({
        stroke:"#fff"
      },pathcfg)
      if(sectorcfg){
        pathcfg = Util.merge(pathcfg,{
          stroke:sectorcfg.stroke,
          "stroke-width":sectorcfg.strokeWidth
        })
      }
      $path.attr(pathcfg);
      this.set('$path',$path)

      if(Util.isArray(r) && r.length == 2){
        this._drawDonut();
      }else{
        this._drawSector();
      }
    },
示例#2
0
文件: Game.js 项目: easco/c3tr
 function handleKey(keydown) {
   window.removeEventListener('keydown', handleKey);
   model = Util.merge(model, { state: Util.merge(model.state, { keydown }) });
   model = update(model);
   renderViews(model);
   window.requestAnimationFrame(() => {
     window.addEventListener('keydown', handleKey);
   });
 }
示例#3
0
function removeInternal(currentTarget, type, cfg) {
    // copy
    cfg = util.merge(cfg);

    var customEvent;

    type = fixType(cfg, type);

    var domEventObservablesHolder = DomEventObservable.getDomEventObservablesHolder(currentTarget),
        domEventObservables = (domEventObservablesHolder || {}).observables;

    if (!domEventObservablesHolder || !domEventObservables) {
        return;
    }

    // remove all types of event
    if (!type) {
        for (type in domEventObservables) {
            domEventObservables[type].detach(cfg);
        }
        return;
    }

    customEvent = domEventObservables[type];

    if (customEvent) {
        customEvent.detach(cfg);
    }
}
示例#4
0
文件: index.js 项目: Fazich/kcharts
		renderLegend: function() {
			if (!this._cfg.legend.isShow) return;
			var self = this,
				legendCfg = self._cfg.legend,
				container = (legendCfg.container && $(legendCfg.container)[0]) ? $(legendCfg.container) : self._$ctnNode;

			var innerContainer = self._innerContainer;
			var colors = self.color._colors, //legend icon 的颜色表,循环
				len = colors.length,
				cfg = self._cfg,
				series = self._cfg.series
			var barconfig = Util.map(series, function(serie, i) {
				i = i % len;
				var item = {},
					color = colors[i]
					item.text = serie.text;
				item.DEFAULT = color.DEFAULT;
				item.HOVER = color.HOVER;
				return item;
			});
			var globalConfig = Util.merge({
				// icontype:"circle",
				// iconsize:10,
				interval: 20, //legend之间的间隔
				iconright: 5, //icon后面的空白
				showicon: true //默认为true. 是否显示legend前面的小icon——可能用户有自定义的需求
			}, cfg.legend.globalConfig);

			self.legend = new Legend({
				container: container,
				paper: self.paper,
				bbox: {
					width: innerContainer.width,
					height: innerContainer.height,
					left: innerContainer.x,
					top: innerContainer.y
				},
				align: cfg.legend.align || "bc",
				offset: cfg.legend.offset || [0, 30],
				globalConfig: globalConfig,
				config: barconfig
			});

			self.legend.on("click", function(evt) {
				var i = evt.index,
					$text = evt.text,
					$icon = evt.icon,
					el = evt.el
				if (el.hide != 1) {
					this.hidePoints(i);
					el.hide = 1;
					el.disable();
				} else {
					this.showPoints(i);
					el.hide = 0;
					el.enable();
				}
			}, this);
			return self.legend;
		},
示例#5
0
 function removeInternal(currentTarget, type, cfg) {
   _$jscoverage['/base/dom-event.js'].functionData[4]++;
   _$jscoverage['/base/dom-event.js'].lineData[90]++;
   cfg = util.merge(cfg);
   _$jscoverage['/base/dom-event.js'].lineData[92]++;
   var customEvent;
   _$jscoverage['/base/dom-event.js'].lineData[94]++;
   type = fixType(cfg, type);
   _$jscoverage['/base/dom-event.js'].lineData[96]++;
   var domEventObservablesHolder = DomEventObservable.getDomEventObservablesHolder(currentTarget), domEventObservables = (visit10_97_1(domEventObservablesHolder || {})).observables;
   _$jscoverage['/base/dom-event.js'].lineData[99]++;
   if (visit11_99_1(!domEventObservablesHolder || !domEventObservables)) {
     _$jscoverage['/base/dom-event.js'].lineData[100]++;
     return;
   }
   _$jscoverage['/base/dom-event.js'].lineData[104]++;
   if (visit12_104_1(!type)) {
     _$jscoverage['/base/dom-event.js'].lineData[105]++;
     for (type in domEventObservables) {
       _$jscoverage['/base/dom-event.js'].lineData[106]++;
       domEventObservables[type].detach(cfg);
     }
     _$jscoverage['/base/dom-event.js'].lineData[108]++;
     return;
   }
   _$jscoverage['/base/dom-event.js'].lineData[111]++;
   customEvent = domEventObservables[type];
   _$jscoverage['/base/dom-event.js'].lineData[113]++;
   if (visit13_113_1(customEvent)) {
     _$jscoverage['/base/dom-event.js'].lineData[114]++;
     customEvent.detach(cfg);
   }
 }
示例#6
0
  function addInternal(currentTarget, type, cfg) {
    _$jscoverage['/base/dom-event.js'].functionData[2]++;
    _$jscoverage['/base/dom-event.js'].lineData[33]++;
    var domEventObservablesHolder, domEventObservable, domEventObservables, handle;
    _$jscoverage['/base/dom-event.js'].lineData[38]++;
    cfg = util.merge(cfg);
    _$jscoverage['/base/dom-event.js'].lineData[39]++;
    type = fixType(cfg, type);
    _$jscoverage['/base/dom-event.js'].lineData[42]++;
    domEventObservablesHolder = DomEventObservable.getDomEventObservablesHolder(currentTarget, 1);
    _$jscoverage['/base/dom-event.js'].lineData[44]++;
    if (visit3_44_1(!(handle = domEventObservablesHolder.handle))) {
      _$jscoverage['/base/dom-event.js'].lineData[45]++;
      handle = domEventObservablesHolder.handle = function(event) {
  _$jscoverage['/base/dom-event.js'].functionData[3]++;
  _$jscoverage['/base/dom-event.js'].lineData[49]++;
  var type = event.type, domEventObservable, currentTarget = handle.currentTarget;
  _$jscoverage['/base/dom-event.js'].lineData[52]++;
  if (visit4_52_1(visit5_52_2(DomEventObservable.triggeredEvent === type) || visit6_53_1(typeof KISSY === 'undefined'))) {
    _$jscoverage['/base/dom-event.js'].lineData[54]++;
    return undefined;
  }
  _$jscoverage['/base/dom-event.js'].lineData[56]++;
  domEventObservable = DomEventObservable.getDomEventObservable(currentTarget, type);
  _$jscoverage['/base/dom-event.js'].lineData[57]++;
  if (visit7_57_1(domEventObservable)) {
    _$jscoverage['/base/dom-event.js'].lineData[58]++;
    event.currentTarget = currentTarget;
    _$jscoverage['/base/dom-event.js'].lineData[59]++;
    event = new DomEventObject(event);
    _$jscoverage['/base/dom-event.js'].lineData[60]++;
    return domEventObservable.notify(event);
  }
  _$jscoverage['/base/dom-event.js'].lineData[62]++;
  return undefined;
};
      _$jscoverage['/base/dom-event.js'].lineData[64]++;
      handle.currentTarget = currentTarget;
    }
    _$jscoverage['/base/dom-event.js'].lineData[67]++;
    if (visit8_67_1(!(domEventObservables = domEventObservablesHolder.observables))) {
      _$jscoverage['/base/dom-event.js'].lineData[68]++;
      domEventObservables = domEventObservablesHolder.observables = {};
    }
    _$jscoverage['/base/dom-event.js'].lineData[72]++;
    domEventObservable = domEventObservables[type];
    _$jscoverage['/base/dom-event.js'].lineData[74]++;
    if (visit9_74_1(!domEventObservable)) {
      _$jscoverage['/base/dom-event.js'].lineData[75]++;
      domEventObservable = domEventObservables[type] = new DomEventObservable({
  type: type, 
  currentTarget: currentTarget});
      _$jscoverage['/base/dom-event.js'].lineData[80]++;
      domEventObservable.setup();
    }
    _$jscoverage['/base/dom-event.js'].lineData[83]++;
    domEventObservable.on(cfg);
    _$jscoverage['/base/dom-event.js'].lineData[85]++;
    currentTarget = null;
  }
示例#7
0
  beforeResume: function() {
  _$jscoverage['/transition.js'].functionData[11]++;
  _$jscoverage['/transition.js'].lineData[115]++;
  var self = this, propsData = self._propsData, tmpPropsData = util.merge(propsData), runTime = self._runTime / 1000;
  _$jscoverage['/transition.js'].lineData[119]++;
  util.each(tmpPropsData, function(propData, prop) {
  _$jscoverage['/transition.js'].functionData[12]++;
  _$jscoverage['/transition.js'].lineData[120]++;
  var tRunTime = runTime;
  _$jscoverage['/transition.js'].lineData[121]++;
  if (visit8_121_1(propData.delay >= tRunTime)) {
    _$jscoverage['/transition.js'].lineData[122]++;
    propData.delay -= tRunTime;
  } else {
    _$jscoverage['/transition.js'].lineData[124]++;
    tRunTime -= propData.delay;
    _$jscoverage['/transition.js'].lineData[125]++;
    propData.delay = 0;
    _$jscoverage['/transition.js'].lineData[126]++;
    if (visit9_126_1(propData.duration >= tRunTime)) {
      _$jscoverage['/transition.js'].lineData[127]++;
      propData.duration -= tRunTime;
    } else {
      _$jscoverage['/transition.js'].lineData[129]++;
      delete propsData[prop];
    }
  }
});
}, 
示例#8
0
文件: index.js 项目: Fazich/kcharts
define('kg/kcharts/5.0.0/tools/graphtool/index',["util","kg/kcharts/5.0.0/raphael/index"],function(require, exports, module) {

	var Util = require("util"),
		Raphael = require("kg/kcharts/5.0.0/raphael/index");
	var sqrt = Math.sqrt;
	var graphTool = {};
	
	var triangle = function(paper,x,y,r,deg){
		var	path = [
				"M" + [x,y-r].join(","),
				"L" + [x - r * sqrt(3)/2,y - 0 + r * 1/2].join(","),
				[x - 0 + r * sqrt(3)/2,y - 0 + r * 1/2].join(","),
				"Z"
			].join(" "),
			el;

		if(paper && paper.path){
			el = paper.path(path);
			
			el.rotate(deg,x,y);
			return el;
		}
	};
	
	var rhomb = function(paper,x,y,w,h,deg){
		var path = [
				"M" + [x,y-h/2].join(","),
				"L" + [x - 0 + w/2,y].join(","),
				[x,y - 0 + h/2].join(","),
				[x - w/2,y].join(","),
				"Z"
			].join(","),
			el;
		if(paper && paper.path){
			el = paper.path(path);
			
			el.rotate(deg,x,y);
			return el;
		}
	};

	var square = function(paper,x,y,w,h){
		var path = [
			["M",x-w/2,",",y-h/2].join(""),
			[" L",x/1+w/2,",",y-h/2," v",h," h",-w,'z'].join("")
		],el;
		if(paper && paper.path){
			el = paper.path(path);
			return el;
		}
	}

	graphTool = Util.merge(graphTool,{
		triangle:triangle,
		rhomb:rhomb,
		square:square
	});

	return graphTool;
});
示例#9
0
文件: index.js 项目: Fazich/kcharts
		tipHandler: function(barGroup, barIndex) {
			var self = this,
				_cfg = self._cfg,
				tip = self.tip,
				isY = _cfg.zoomType == "y" ? true : false,
				$bar = self._bars[barGroup]['bars'][barIndex],
				defaultColor = $bar.attr("defaultColor"),
				tpl = self._cfg.tip.template,
				posx = isY ? $bar.attr("x") / 1 + $bar.attr("width") / 1 : $bar.attr("x"),
				posy = $bar.attr("y"),
				tipData = Util.merge(self._points[barGroup][barIndex].dataInfo, _cfg.series[barGroup]);
			//删除data 避免不必要的数据
			delete tipData.data;
			self._points[barGroup][barIndex]["dataInfo"],
			self.barChange(barGroup, barIndex);
			if (!tpl) return;
			Util.mix(tipData, {
				groupindex: barGroup,
				barindex: barIndex
			});
			tip && tip.fire("setcontent", {
				data: tipData
			})
			tip && tip.fire("move", {
				x: posx,
				y: posy,
				style: self.processAttr(_cfg.tip.css, defaultColor)
			});
		},
示例#10
0
文件: index.js 项目: Fazich/kcharts
		tipHandler: function(lineIndex, stockIndex) {
			var self = this;
			if (lineIndex === undefined || stockIndex === undefined) return;
			var tip = self.tip,
				_cfg = self._cfg,
				series = _cfg.series,
				tpl = _cfg.tip.template,
				currentPoints = self._points[lineIndex],
				currentStocks = self._stocks[lineIndex],
				curPoint = currentPoints[stockIndex],
				color = self._lines[lineIndex]['color']['DEFAULT'], //获取当前直线的填充色
				tipData;
			if (!tpl || !_cfg.tip.isShow || self.curStockIndex === undefined) return;
			// 如果tip需要展示多组数据 则存放数组
			if (self._cfg.comparable) {
				var tipAllDatas = {datas: {}};
				var tmpArray = [];
				for (var i in self._points)
					if (self._stocks[i]['stocks']) {
						if (self._points[i][stockIndex].dataInfo) {
							self._points[i][stockIndex].dataInfo.color = self._stocks[i]['color']['DEFAULT']
							var tmp = Util.merge(self._points[i][stockIndex].dataInfo, series[i]);
							delete tmp.data;
							tipAllDatas.datas[i] = tmp;
						}
					}
				for (var i in tipAllDatas.datas) {
					tmpArray.push(tipAllDatas.datas[i]);
				}
				tipAllDatas.datas = BaseChart.prototype.arraySort(tmpArray, true, "y");
				tipData = tipAllDatas;
			} else {
				tipData = Util.merge(self._points[lineIndex][stockIndex].dataInfo, series[lineIndex]);
				delete tipData['data'];
			}
			self.stockChange(lineIndex,stockIndex);
			if (!self.isEmptyPoint(currentPoints[stockIndex])) {
				tipData['lineindex'] = lineIndex;
				tipData['pointindex'] = stockIndex;
				tip.fire("setcontent", {data: tipData});
				tip.fire("move", {
					x: curPoint.x,
					y: curPoint.y,
					style: self.processAttr(_cfg.tip.css, color)
				});
			}
		},
示例#11
0
 util.each(origin, function (val, sh) {
     // 如果分属性没有显式设置过,得到期待的分属性最后值
     if (!(sh in _propsData)) {
         _propsData[sh] = util.merge(_propData, { value: Dom.css(node, sh) });
     }    // 还原
     // 还原
     Dom.css(node, sh, val);
 });    // 删除复合属性
示例#12
0
Attribute.extend = function extend(px, sx) {
    var SubClass,
        self = this;
    sx = util.merge(sx);
    // px is shared among classes
    px = util.merge(px);
    var hooks,
        sxHooks = sx.__hooks__;
    if ((hooks = self.__hooks__)) {
        sxHooks = sx.__hooks__ = sx.__hooks__ || {};
        util.mix(sxHooks, hooks, false);
    }
    var name = sx.name || 'AttributeDerived';
    if (px.hasOwnProperty('constructor')) {
        SubClass = px.constructor;
    } else {
        // debug mode, give the right name for constructor
        if ('@DEBUG@') {
            /*jshint evil: true*/
            SubClass = new Function('return function ' + util.camelCase(name) + '(){ ' +
                'this.callSuper.apply(this, arguments);' +
                '}')();
        } else {
            SubClass = function () {
                this.callSuper.apply(this, arguments);
            };
        }
    }
    px.constructor = SubClass;
    SubClass.__hooks__ = sxHooks;
    wrapProtoForSuper(px, SubClass);
    var inheritedStatics,
        sxInheritedStatics = sx.inheritedStatics;
    if ((inheritedStatics = self.inheritedStatics)) {
        sxInheritedStatics = sx.inheritedStatics = sx.inheritedStatics || {};
        util.mix(sxInheritedStatics, inheritedStatics, false);
    }
    util.extend(SubClass, self, px, sx);
    if (sxInheritedStatics) {
        util.mix(SubClass, sxInheritedStatics);
    }
    SubClass.extend = sx.extend || extend;
    SubClass.addMembers = addMembers;
    return SubClass;
};
示例#13
0
 load: function(param){
     // this.$body.addClass('laoding');
     var c = this.config;
     if (param){
         c.param = util.merge(c.param, param);
     }
     this.$tagBox.addClass('M-tagLabelsloading');
     app.data.get(c.url, c.param, this);
 },
示例#14
0
文件: Game.js 项目: easco/c3tr
function update(model) {
  model = Util.merge(model, {
    state: Util.merge(model.state, { messages: [] })
  });
  let state = UserActionSystem.run(model);

  if (model.state.focus === Focus.GAME) {
    // state = LogicSystem.run(Util.merge(model, { state }));
    state = MovementSystem.run(Util.merge(model, { state }));
    // state = CombatSystem.run(Util.merge(model, { state }));
  }

  state = LogSystem.run(Util.merge(model, { state }));

  return {
    state: Util.merge(model.state, state),
    world: model.world
  };
}
示例#15
0
文件: container.js 项目: Gumpg/kissy
 children.each(function (c) {
     var ChildUI = self.getComponentConstructorByNode(prefixCls, c) ||
         defaultChildXClass &&
         Manager.getConstructorByXClass(defaultChildXClass);
     if (ChildUI) {
         childrenComponents.push(new ChildUI(util.merge(defaultChildCfg, {
             srcNode: c
         })));
     }
 });
示例#16
0
 function pauseOrResumeQueue(node, queue, action) {
     var allAnims = Dom.data(node, action === 'resume' ? pausedKey : runningKey),
         // can not stop in for/in , stop will modified allRunning too
         anims = util.merge(allAnims);
     util.each(anims, function (anim) {
         if (queue === undefined || anim.config.queue === queue) {
             anim[action]();
         }
     });
 }
示例#17
0
    function addInternal(currentTarget, type, cfg) {
        var domEventObservablesHolder,
            domEventObservable,
            domEventObservables,
            handle;

        cfg = util.merge(cfg);
        type = fixType(cfg, type);

        // 获取事件描述
        domEventObservablesHolder = DomEventObservable.getDomEventObservablesHolder(currentTarget, 1);

        if (!(handle = domEventObservablesHolder.handle)) {
            handle = domEventObservablesHolder.handle = function (event) {
                // 是经过 fire 手动调用而浏览器同步触发导致的,就不要再次触发了,
                // 已经在 fire 中 bubble 过一次了
                // in case after page has unloaded
                var type = event.type,
                    domEventObservable,
                    currentTarget = handle.currentTarget;
                if (DomEventObservable.triggeredEvent === type ||
                    typeof KISSY === 'undefined') {
                    return undefined;
                }
                domEventObservable = DomEventObservable.getDomEventObservable(currentTarget, type);
                if (domEventObservable) {
                    event.currentTarget = currentTarget;
                    event = new DomEventObject(event);
                    return domEventObservable.notify(event);
                }
                return undefined;
            };
            handle.currentTarget = currentTarget;
        }

        if (!(domEventObservables = domEventObservablesHolder.observables)) {
            domEventObservables = domEventObservablesHolder.observables = {};
        }

        //事件 listeners , similar to eventListeners in Dom3 Events
        domEventObservable = domEventObservables[type];

        if (!domEventObservable) {
            domEventObservable = domEventObservables[type] = new DomEventObservable({
                type: type,
                currentTarget: currentTarget
            });

            domEventObservable.setup();
        }

        domEventObservable.on(cfg);

        currentTarget = null;
    }
示例#18
0
 addAttr: function (name, attrConfig, override) {
     var self = this, attrs = self.getAttrs(), attr,
         // shadow clone
         cfg = util.merge(attrConfig);
     if (cfg.value && typeof cfg.value === 'object') {
         cfg.value = util.clone(cfg.value);
         LoggerManger.log('please use valueFn instead of value for ' + name + ' attribute', 'warn');
     }
     if (attr = attrs[name]) {
         util.mix(attr, cfg, override);
     } else {
         attrs[name] = cfg;
     }
     return self;
 },
示例#19
0
exports.createServer = function(options, listener) {
  var opt, fn;
  var args = match(
    [[Function], function(f) {
      [opt, fn] = [{}, f];
    }],
    [[Object, Function], function(o, f) {
      [opt, fn] = [o, f];
    }]
  );

  args.call(this, Array.prototype.slice.call(arguments));
  util.merge(opt, {'handler': WebSocketHandler});

  return new Server(opt, fn);
};
示例#20
0
 stopEl: function (node, end, clearQueue, queue) {
     if (clearQueue) {
         if (queue === undefined) {
             Q.clearQueues(node);
         } else if (queue !== false) {
             Q.clearQueue(node, queue);
         }
     }
     var allRunning = Dom.data(node, runningKey),
         // can not stop in for/in , stop will modified allRunning too
         anims = util.merge(allRunning);
     util.each(anims, function (anim) {
         if (queue === undefined || anim.config.queue === queue) {
             anim.stop(end);
         }
     });
 }
示例#21
0
文件: base.js 项目: jiang-nan/kissy
 normalizeParam: function (type, fn, context) {
     var cfg = fn || {};
     if (typeof fn === 'function') {
         cfg = {
             fn: fn,
             context: context
         };
     } else {
         // copy
         cfg = util.merge(cfg);
     }
     var typedGroups = getTypedGroups(type);
     type = typedGroups[0];
     cfg.groups = typedGroups[1];
     cfg.type = type;
     return cfg;
 },
示例#22
0
 beforeResume: function () {
     // note: pause/resume in css transition is not smooth as js timer
     // already run time before pause
     var self = this, propsData = self._propsData, tmpPropsData = util.merge(propsData), runTime = self._runTime / 1000;
     util.each(tmpPropsData, function (propData, prop) {
         var tRunTime = runTime;
         if (propData.delay >= tRunTime) {
             propData.delay -= tRunTime;
         } else {
             tRunTime -= propData.delay;
             propData.delay = 0;
             if (propData.duration >= tRunTime) {
                 propData.duration -= tRunTime;
             } else {
                 delete propsData[prop];
             }
         }
     });
 },
示例#23
0
文件: index.js 项目: Fazich/kcharts
 Icons[x] = function(cx,cy,opt){
   var ret = shape.call(_Icons,cx,cy,opt);
   if(opt.size){
     if(!isArray(opt.size)){
       opt.size = [opt.size,opt.size];
     }
     ret.scale(opt.size[0],opt.size[1]);
   }
   var _item,
       _$line,
       attrs = opt.attrs || {}
   if(ret.clear){
     _item = ret[0]
     _$line = ret[1];
     _$line.attr({"stroke":attrs.fill || "#000","stroke-width":2*opt.size[1]});
   }else{
     _item = ret;
   }
   _item.attr(Util.merge({"stroke-width":0},opt.attrs));
   return ret;
 }
示例#24
0
文件: index.js 项目: FredGreen/kissy
            it('ok with flashvars', function () {
                var config = util.merge(util.clone(defaultConfig), {
                    src: '../assets/flashvars.swf',
                    params: {
                        bgcolor: '#038C3C',
                        flashvars: {
                            name1: 'http://taobao.com/?x=1&z=2',
                            name2: {
                                s: 'string',
                                b: false,
                                n: 1,
                                url: 'http://taobao.com/?x=1&z=2',
                                cpx: {
                                    s: 'string',
                                    b: false,
                                    n: 1,
                                    url: 'http://taobao.com/?x=1&z=2'
                                }
                            },
                            name3: 'string'
                        }
                    },
                    attrs: {
                        id: 'test-flash-vars'
                    }
                });

                var swf = new SWF(config);
                var flashvars = getFlashVars(swf.get('el'));
                expect(flashvars.name1).toBe('http://taobao.com/?x=1&z=2');
                expect(util.parseJson(flashvars.name2).cpx.s).toBe('string');
                expect(swf.get('el').id).toEqual('test-flash-vars');

                swf.destroy();

                waits(1000);
            });
示例#25
0
文件: index.js 项目: Snger/kissy
        it('util.merge', function () {
            var a = {
                    'bool': false,
                    'num': 0,
                    'nul': null,
                    'undef': undefined,
                    'str': 'blabber'
                },
                b = {
                    'bool': 'oops',
                    'num': 'oops',
                    'nul': 'oops',
                    'undef': 'oops',
                    'str': 'oops'
                };

            var c = util.merge(a, b);

            expect(c.bool).toBe('oops');
            expect(c.num).toBe('oops');
            expect(c.nul).toBe('oops');
            expect(c.undef).toBe('oops');
            expect(c.str).toBe('oops');
        });
示例#26
0
 _4eIsBlockBoundary: function (el, customNodeNames) {
     var nodeNameMatches = util.merge(blockBoundaryNodeNameMatch, customNodeNames);
     return !!(blockBoundaryDisplayMatch[Dom.css(el, 'display')] || nodeNameMatches[Dom.nodeName(el)]);
 },
示例#27
0
 align: function (refNode, points, offset, overflow) {
     refNode = $(refNode || win);
     offset = offset && [].concat(offset) || [
         0,
         0
     ];
     overflow = overflow || {};
     var self = this, el = self.$el, fail = 0;    // 当前节点可以被放置的显示区域
     // 当前节点可以被放置的显示区域
     var visibleRect = getVisibleRectForElement(el[0]);    // 当前节点所占的区域, left/top/width/height
     // 当前节点所占的区域, left/top/width/height
     var elRegion = getRegion(el);    // 参照节点所占的区域, left/top/width/height
     // 参照节点所占的区域, left/top/width/height
     var refNodeRegion = getRegion(refNode);    // 当前节点将要被放置的位置
     // 当前节点将要被放置的位置
     var elFuturePos = getElFuturePos(elRegion, refNodeRegion, points, offset);    // 当前节点将要所处的区域
     // 当前节点将要所处的区域
     var newElRegion = util.merge(elRegion, elFuturePos);    // 如果可视区域不能完全放置当前节点时允许调整
     // 如果可视区域不能完全放置当前节点时允许调整
     if (visibleRect && (overflow.adjustX || overflow.adjustY)) {
         // 如果横向不能放下
         if (isFailX(elFuturePos, elRegion, visibleRect)) {
             fail = 1;    // 对齐位置反下
             // 对齐位置反下
             points = flip(points, /[lr]/gi, {
                 l: 'r',
                 r: 'l'
             });    // 偏移量也反下
             // 偏移量也反下
             offset = flipOffset(offset, 0);
         }    // 如果纵向不能放下
         // 如果纵向不能放下
         if (isFailY(elFuturePos, elRegion, visibleRect)) {
             fail = 1;    // 对齐位置反下
             // 对齐位置反下
             points = flip(points, /[tb]/gi, {
                 t: 'b',
                 b: 't'
             });    // 偏移量也反下
             // 偏移量也反下
             offset = flipOffset(offset, 1);
         }    // 如果失败,重新计算当前节点将要被放置的位置
         // 如果失败,重新计算当前节点将要被放置的位置
         if (fail) {
             elFuturePos = getElFuturePos(elRegion, refNodeRegion, points, offset);
             util.mix(newElRegion, elFuturePos);
         }
         var newOverflowCfg = {};    // 检查反下后的位置是否可以放下了
                                     // 如果仍然放不下只有指定了可以调整当前方向才调整
         // 检查反下后的位置是否可以放下了
         // 如果仍然放不下只有指定了可以调整当前方向才调整
         newOverflowCfg.adjustX = overflow.adjustX && isFailX(elFuturePos, elRegion, visibleRect);
         newOverflowCfg.adjustY = overflow.adjustY && isFailY(elFuturePos, elRegion, visibleRect);    // 确实要调整,甚至可能会调整高度宽度
         // 确实要调整,甚至可能会调整高度宽度
         if (newOverflowCfg.adjustX || newOverflowCfg.adjustY) {
             newElRegion = adjustForViewport(elFuturePos, elRegion, visibleRect, newOverflowCfg);
         }
     }    // https://github.com/kissyteam/kissy/issues/190
          // http://localhost:8888/kissy/src/overlay/demo/other/relative_align/align.html
          // 相对于屏幕位置没变,而 left/top 变了
          // 例如 <div 'relative'><el absolute></div>
     // https://github.com/kissyteam/kissy/issues/190
     // http://localhost:8888/kissy/src/overlay/demo/other/relative_align/align.html
     // 相对于屏幕位置没变,而 left/top 变了
     // 例如 <div 'relative'><el absolute></div>
     self.set({
         x: newElRegion.left,
         y: newElRegion.top
     }, { force: 1 });    // need judge to in case set fixed with in css on height auto element
     // need judge to in case set fixed with in css on height auto element
     if (newElRegion.width !== elRegion.width) {
         self.set('width', el.width() + newElRegion.width - elRegion.width);
     }
     if (newElRegion.height !== elRegion.height) {
         self.set('height', el.height() + newElRegion.height - elRegion.height);
     }
     return self;
 },
(function () {
    var blockLike = util.merge(dtd.$block, dtd.$listItem, dtd.$tableContent),
        falsyFilter = filters.falsyFilter,
        stylesFilter = filters.stylesFilter,
        createListBulletMarker = utils.createListBulletMarker,
        flattenList = filters.flattenList,
        assembleList = filters.assembleList,
        isListBulletIndicator = utils.isListBulletIndicator,
        containsNothingButSpaces = utils.isContainingOnlySpaces,
        resolveListItem = utils.resolveList,
        convertToPxStr = function (value) {
            value = convertToPx(value);
            return isNaN(value) ? value : value + 'px';
        },
        getStyleComponents = utils.getStyleComponents,
        listDtdParents = utils.listDtdParents;

    wordFilter.addRules({

        tagNames: [
            // Remove script, meta and link elements.
            [ ( /meta|link|script/ ), '' ]
        ],

        root: function (element) {
            element.filterChildren();
            assembleList(element);
        },

        tags: {
            '^': function (element) {
                // Transform CSS style declaration to inline style.
                var applyStyleFilter;
                if (UA.gecko && ( applyStyleFilter = filters.applyStyleFilter )) {
                    applyStyleFilter(element);
                }
            },

            $: function (element) {
                var tagName = element.nodeName || '';

                // Convert length unit of width/height on blocks to
                // a more editor-friendly way (px).
                if (tagName in blockLike && element.getAttribute('style')) {
                    setStyle(element, stylesFilter(
                        [
                            [ ( /^(:?width|height)$/ ), null, convertToPxStr ]
                        ])(element.getAttribute('style')));
                }

                // Processing headings.
                if (tagName.match(/h\d/)) {
                    element.filterChildren();
                    // Is the heading actually a list item?
                    if (resolveListItem(element)) {
                        return;
                    }
                }
                // Remove inline elements which contain only empty spaces.
                else if (tagName in dtd.$inline) {
                    element.filterChildren();
                    if (containsNothingButSpaces(element)) {
                        element.setTagName(null);
                    }
                }
                // Remove element with ms-office namespace,
                // with it's content preserved, e.g. 'o:p'.
                else if (tagName.indexOf(':') !== -1 && tagName.indexOf('ke') === -1) {
                    element.filterChildren();

                    // Restore image real link from vml.
                    if (tagName === 'v:imagedata') {
                        var href = element.getAttribute('o:href');
                        if (href) {
                            element.setAttribute('src', href);
                        }
                        element.setTagName('img');
                        return;
                    }
                    element.setTagName(null);
                }

                // Assembling list items into a whole list.
                if (tagName in listDtdParents) {
                    element.filterChildren();
                    assembleList(element);
                }
            },

            // We'll drop any style sheet, but Firefox conclude
            // certain styles in a single style element, which are
            // required to be changed into inline ones.
            'style': function (element) {
                if (UA.gecko) {
                    // Grab only the style definition section.
                    var styleDefSection = onlyChild(element).nodeValue
                            .match(/\/\* Style Definitions \*\/([\s\S]*?)\/\*/),
                        styleDefText = styleDefSection && styleDefSection[ 1 ],
                        rules = {}; // Storing the parsed result.

                    if (styleDefText) {
                        styleDefText
                            // Remove line-breaks.
                            .replace(/[\n\r]/g, '')
                            // Extract selectors and style properties.
                            .replace(/(.+?)\{(.+?)\}/g,
                            function (rule, selectors, styleBlock) {
                                selectors = selectors.split(',');
                                var length = selectors.length;
                                for (var i = 0; i < length; i++) {
                                    // Assume MS-Word mostly generate only simple
                                    // selector( [Type selector][Class selector]).
                                    util.trim(selectors[ i ])
                                        .replace(/^(\w+)(\.[\w-]+)?$/g,
                                        function (match, tagName, className) {
                                            tagName = tagName || '*';
                                            className = className.substring(1, className.length);

                                            // Reject MS-Word Normal styles.
                                            if (className.match(/MsoNormal/)) {
                                                return;
                                            }

                                            if (!rules[ tagName ]) {
                                                rules[ tagName ] = {};
                                            }
                                            if (className) {
                                                rules[ tagName ][ className ] = styleBlock;
                                            } else {
                                                rules[ tagName ] = styleBlock;
                                            }
                                        });
                                }
                            });

                        filters.applyStyleFilter = function (element) {
                            var name = rules[ '*' ] ? '*' : element.nodeName,
                                className = element.getAttribute('class'),
                                style;
                            if (name in rules) {
                                style = rules[ name ];
                                if (typeof style === 'object') {
                                    style = style[ className ];
                                }
                                // Maintain style rules priorities.
                                if (style) {
                                    addStyle(element, style, true);
                                }
                            }
                        };
                    }
                }
                return false;
            },

            'p': function (element) {
                // This's a fall-back approach to recognize list item in FF3.6,
                // as it's not perfect as not all list style (e.g. 'heading list') is shipped
                // with this pattern. (#6662)
                if (/MsoListParagraph/.exec(element.getAttribute('class'))) {
                    var bulletText = firstChild(element, function (node) {
                        return node.nodeType === 3 && !containsNothingButSpaces(node.parentNode);
                    });
                    var bullet = bulletText && bulletText.parentNode;
                    if (bullet && !bullet.getAttribute('style')) {
                        bullet.setAttribute('style', 'mso-list: Ignore;');
                    }
                }

                element.filterChildren();
                // Is the paragraph actually a list item?
                resolveListItem(element);
            },

            'div': function (element) {
                // Aligned table with no text surrounded is represented by a wrapper div, from which
                // table cells inherit as text-align styles, which is wrong.
                // Instead we use a clear-float div after the table to properly achieve the same layout.
                var singleChild = onlyChild(element);
                if (singleChild && singleChild.nodeName === 'table') {
                    var attrs = element.attributes;

                    util.each(attrs, function (attr) {
                        singleChild.setAttribute(attr.name, attr.value);
                    });

                    if (element.getAttribute('style')) {
                        addStyle(singleChild, element.getAttribute('style'));
                    }

                    var clearFloatDiv = new HtmlParser.Tag('div');
                    addStyle(clearFloatDiv, 'clear', 'both');
                    element.appendChild(clearFloatDiv);
                    element.setTagName(null);
                }
            },

            'td': function (element) {
                // 'td' in 'thead' is actually <th>.
                if (getAncestor(element, 'thead')) {
                    element.setTagName('th');
                }
            },

            // MS-Word sometimes present list as a mixing of normal list
            // and pseudo-list, normalize the previous ones into pseudo form.
            'ol': flattenList,
            'ul': flattenList,
            'dl': flattenList,

            'font': function (element) {
                // Drop the font tag if it comes from list bullet text.
                if (isListBulletIndicator(element.parentNode)) {
                    element.setTagName(null);
                    return;
                }

                element.filterChildren();

                var styleText = element.getAttribute('style'),
                    parent = element.parentNode;

                if ('font' === parent.name)     // Merge nested <font> tags.
                {
                    util.each(element.attributes, function (attr) {
                        parent.setAttribute(attr.name, attr.value);
                    });
                    if (styleText) {
                        addStyle(parent, styleText);
                    }
                    element.setTagName(null);
                }
                // Convert the merged into a span with all attributes preserved.
                else {
                    styleText = styleText || '';
                    // IE's having those deprecated attributes, normalize them.
                    if (element.getAttribute('color')) {
                        if (element.getAttribute('color') !== '#000000') {
                            styleText += 'color:' + element.getAttribute('color') + ';';
                        }
                        element.removeAttribute('color');
                    }
                    if (element.getAttribute('face')) {
                        styleText += 'font-family:' + element.getAttribute('face') + ';';
                        element.removeAttribute('face');
                    }
                    var size = element.getAttribute('size');
                    // TODO: Mapping size in ranges of xx-small,
                    // x-small, small, medium, large, x-large, xx-large.
                    if (size) {
                        styleText += 'font-size:' +
                            (size > 3 ? 'large'
                                : ( size < 3 ? 'small' : 'medium' ) ) + ';';
                        element.removeAttribute('size');
                    }
                    element.setTagName('span');
                    addStyle(element, styleText);
                }
            },

            'span': function (element) {
                // Remove the span if it comes from list bullet text.
                if (isListBulletIndicator(element.parentNode)) {
                    return false;
                }
                element.filterChildren();
                if (containsNothingButSpaces(element)) {
                    element.setTagName(null);
                    return null;
                }

                // List item bullet type is supposed to be indicated by
                // the text of a span with style 'mso-list : Ignore' or an image.
                if (isListBulletIndicator(element)) {
                    var listSymbolNode = firstChild(element, function (node) {
                        return node.nodeValue || node.nodeName === 'img';
                    });

                    var listSymbol = listSymbolNode && ( listSymbolNode.nodeValue || 'l.' ),
                        listType = listSymbol && listSymbol.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);

                    if (listType) {
                        var marker = createListBulletMarker(listType, listSymbol);
                        // Some non-existed list items might be carried by an inconsequential list,
                        // indicate by 'mso-hide:all/display:none',
                        // those are to be removed later, now mark it with 'ke:ignored'.
                        var ancestor = getAncestor(element, 'span');
                        if (ancestor && (/ mso-hide:\s*all|display:\s*none /).
                            test(ancestor.getAttribute('style'))) {
                            marker.setAttribute('ke:ignored', 1);
                        }
                        return marker;
                    }
                }

                // Update the src attribute of image element with href.
                var styleText = element.getAttribute('style');

                // Assume MS-Word mostly carry font related styles on <span>,
                // adapting them to editor's convention.
                if (styleText) {

                    setStyle(element, stylesFilter(
                        [
                            // Drop 'inline-height' style which make lines overlapping.
                            [ /^line-height$/ ],
                            [  /^font-family$/  ] ,
                            [  /^font-size$/  ] ,
                            [  /^color$/  ] ,
                            [  /^background-color$/  ]
                        ]
                    )(styleText, element));
                }
            },
            // Editor doesn't support anchor with content currently (#3582),
            // drop such anchors with content preserved.
            'a': function (element) {
                var href;
                if (!(href = element.getAttribute('href')) && element.getAttribute('name')) {
                    element.setTagName(null);
                } else if (UA.webkit && href && href.match(/file:\/\/\/[\S]+#/i)) {
                    element.setAttribute('href', href.replace(/file:\/\/\/[^#]+/i, ''));
                }
            },
            'ke:listbullet': function (element) {
                if (getAncestor(element, /h\d/)) {
                    element.setTagName(null);
                }
            }
        },

        attributeNames: [
            // Remove onmouseover and onmouseout events (from MS Word comments effect)
            [ ( /^onmouse(:?out|over)/ ), '' ],
            // Onload on image element.
            [ ( /^onload$/ ), '' ],
            // Remove office and vml attribute from elements.
            [ ( /(?:v|o):\w+/ ), '' ],
            // Remove lang/language attributes.
            [ ( /^lang/ ), '' ]
        ],

        attributes: {
            // Provide a white-list of styles that we preserve, those should
            // be the ones that could later be altered with editor tools.
            'style': stylesFilter([
                    [ ( /^list-style-type$/ ) ],

                    // Preserve margin-left/right which used as default indent style in the editor.
                    [ ( /^margin$|^margin-(?!bottom|top)/ ), null, function (value, element, name) {
                        if (element.nodeName in { p: 1, div: 1 }) {
                            var indentStyleName = 'margin-left';

                            // Extract component value from 'margin' shorthand.
                            if (name === 'margin') {
                                value = getStyleComponents(name, value,
                                    [ indentStyleName ])[ indentStyleName ];
                            } else if (name !== indentStyleName) {
                                return null;
                            }

                            if (value && !emptyMarginRegex.test(value)) {
                                return [ indentStyleName, value ];
                            }
                        }

                        return null;
                    } ],

                    // Preserve clear float style.
                    [ ( /^clear$/ ) ],

                    [ ( /^border.*|margin.*|vertical-align|float$/ ), null,
                        function (value, element) {
                            if (element.nodeName === 'img') {
                                return value;
                            }
                        } ],

                    [ (/^width|height$/ ), null,
                        function (value, element) {
                            if (element.nodeName in { table: 1, td: 1, th: 1, img: 1 }) {
                                return value;
                            }
                        } ]
                ],
                1),

            // Prefer width styles over 'width' attributes.
            'width': function (value, element) {
                if (element.nodeName in dtd.$tableContent) {
                    return false;
                }
            },
            // Prefer border styles over table 'border' attributes.
            'border': function (value, element) {
                if (element.nodeName in dtd.$tableContent) {
                    return false;
                }
            },

            // Only Firefox carry style sheet from MS-Word, which
            // will be applied by us manually. For other browsers
            // the css className is useless.
            'class': falsyFilter,

            // MS-Word always generate 'background-color' along with 'bgcolor',
            // simply drop the deprecated attributes.
            'bgcolor': falsyFilter,

            // Deprecate 'valign' attribute in favor of 'vertical-align'.
            'valign': function (value, element) {
                addStyle(element, 'vertical-align', value);
                return false;
            }
        },


        // Fore none-IE, some useful data might be buried under these IE-conditional
        // comments where RegExp were the right approach to dig them out where usual approach
        // is transform it into a fake element node which hold the desired data.
        comment: UA.ie ?
            function (value, node) {
                var imageInfo = value.match(/<img.*?>/),
                    listInfo = value.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);

                // Seek for list bullet indicator.
                if (listInfo) {
                    // Bullet symbol could be either text or an image.
                    var listSymbol = listInfo[ 1 ] || ( imageInfo && 'l.' ),
                        listType = listSymbol && listSymbol.match(/>(?:[(]?)([^\s]+?)([.)]?)</);
                    return createListBulletMarker(listType, listSymbol);
                }

                // Reveal the <img> element in conditional comments for Firefox.
                if (UA.gecko && imageInfo) {
                    var img = new HtmlParser.Parser(imageInfo[0]).parse().childNodes[ 0 ],
                        previousComment = node.previousSibling,
                    // Try to dig the real image link from vml markup from previous comment text.
                        imgSrcInfo = previousComment && previousComment.toHtml().match(/<v:imagedata[^>]*o:href=[''](.*?)['']/),
                        imgSrc = imgSrcInfo && imgSrcInfo[ 1 ];

                    // Is there a real 'src' url to be used?
                    if (imgSrc) {
                        ( img.setAttribute('src', imgSrc) );
                    }
                    return img;
                }

                return false;
            }
            : falsyFilter
    });
})();
KISSY.add('editor-plugins/lib/word-filter',["html-parser","util","node","ua"],function(S ,require, exports, module) {function e(e){e=e.toUpperCase();for(var t=w.length,i=0,r=0;t>r;++r)for(var n=w[r],l=n[1].length;e.substr(0,l)===n[1];e=e.substr(l))i+=n[0];return i}function t(e){e=e.toUpperCase();for(var t=x.length,i=1,r=1;e.length>0;r*=t)i+=x.indexOf(e.charAt(e.length-1))*r,e=e.substr(0,e.length-1);return i}function i(e,t){t?e.setAttribute("style",t):e.removeAttribute("style")}function r(e){var t=e.childNodes||[],i=t.length,r=1===i&&t[0];return r||null}function n(e,t){for(var i,r=e.childNodes||[],l=[],a=0;a<r.length;a++)i=r[a],i.nodeName&&(i.nodeName===t&&(l.push(i),r.splice(a--,1)),l=l.concat(n(i,t)));return l}function l(e,t){for(var i=e.parentNode;i&&(!i.nodeName||!i.nodeName.match(t));)i=i.parentNode;return i}function a(e,t){var i,r,n=e.childNodes||[];for(r=0;r<n.length;r++){if(i=n[r],t(i))return i;if(i.nodeName&&(i=a(i,t)))return i}return null}function s(e,t,r,n){var l,a,s="";if("string"==typeof r)s+=t+":"+r+";";else{if("object"==typeof t)for(a in t)s+=a+":"+t[a]+";";else s+=t;n=r}l=e.getAttribute("style"),l=(n?[s,l]:[l,s]).join(";"),i(e,l.replace(/^;|;(?=;)/,""))}function o(e){var t,i={};for(t in p)-1===t.indexOf("$")&&p[t][e]&&(i[t]=1);return i}function u(e){var t,r,n,l=e.childNodes||[],a=l.length,o=/list-style-type:(.*?)(?:;|$)/,u=S.stylesFilter;if(!o.exec(e.getAttribute("style"))){for(var c=0;a>c;c++)if(t=l[c],t.getAttribute("value")&&Number(t.getAttribute("value"))===c+1&&t.removeAttribute("value"),r=o.exec(t.getAttribute("style"))){if(r[1]!==n&&n){n=null;break}n=r[1]}if(n){for(c=0;a>c;c++){var f=l[c].getAttribute("style");f&&(f=u([["list-style-type"]])(f),i(l[c],f))}s(e,"list-style-type",n)}}}var c,f=require("html-parser"),d=require("util"),m=require("node"),g=require("ua"),p=f.DTD,h=new f.Filter,b=/^([.\d]*)+(em|ex|px|gd|rem|vw|vh|vm|ch|mm|cm|in|pt|pc|deg|rad|ms|s|hz|khz){1}?/i,v=/^(?:\b0[^\s]*\s*){1,4}$/,y="^m{0,4}(cm|cd|d?c{0,3})(xc|xl|l?x{0,3})(ix|iv|v?i{0,3})$",A=new RegExp(y),N=new RegExp(y.toUpperCase()),k={decimal:/\d+/,"lower-roman":A,"upper-roman":N,"lower-alpha":/^[a-z]+$/,"upper-alpha":/^[A-Z]+$/},$={disc:/[l\u00B7\u2002]/,circle:/[\u006F\u00D8]/,square:/[\u006E\u25C6]/},C={ol:k,ul:$},w=[[1e3,"M"],[900,"CM"],[500,"D"],[400,"CD"],[100,"C"],[90,"XC"],[50,"L"],[40,"XL"],[10,"X"],[9,"IX"],[5,"V"],[4,"IV"],[1,"I"]],x="ABCDEFGHIJKLMNOPQRSTUVWXYZ",T=function(){var e;return function(t){return e||(e=m('<div style="position:absolute;left:-9999px;top:-9999px;margin:0px;padding:0px;border:0px;"></div>').prependTo("body")),/%$/.test(t)?t:(e.css("width",t),e[0].clientWidth)}}(),L=0,F=null,S={flattenList:function(e,t){t="number"==typeof t?t:1;var i;switch(e.getAttribute("type")){case"a":i="lower-alpha";break;case"1":i="decimal"}for(var r,n=e.childNodes||[],l=0;l<n.length;l++)if(r=n[l],r.nodeName in p.$listItem){var a=r.childNodes||[],s=a.length,o=a[s-1];o.nodeName in p.$list&&(e.insertAfter(r),--a.length||e.removeChild(n[l--])),r.setTagName("ke:li"),e.getAttribute("start")&&!l&&e.setAttribute("value",e.getAttribute("start")),S.stylesFilter([["tab-stops",null,function(e){var t=e.split(" ")[1].match(b);t&&(F=T(t[0]))}],1===t?["mso-list",null,function(e){e=e.split(" ");var t=Number(e[0].match(/\d+/));t!==c&&r.setAttribute("ke:reset",1),c=t}]:null])(r.getAttribute("style")),r.setAttribute("ke:indent",t),r.setAttribute("ke:listtype",e.nodeName),r.setAttribute("ke:list-style-type",i)}else if(r.nodeName in p.$list){arguments.callee.apply(this,[r,t+1]),n=n.slice(0,l).concat(r.childNodes).concat(n.slice(l+1)),e.empty();for(var u=0,f=n.length;f>u;u++)e.appendChild(n[u])}e.nodeName=e.tagName=null,e.setAttribute("ke:list",1)},assembleList:function(i){for(var r,n,l,a,o,c,m,g,p,h,b,v,y=i.childNodes||[],A=[],N=0;N<y.length;N++)if(r=y[N],"ke:li"===r.nodeName){if(r.setTagName("li"),n=r,p=n.getAttribute("ke:listsymbol"),p=p&&p.match(/^(?:[(]?)([^\s]+?)([.)]?)$/),h=b=v=null,n.getAttribute("ke:ignored")){y.splice(N--,1);continue}if(n.getAttribute("ke:reset")&&(c=a=o=null),l=Number(n.getAttribute("ke:indent")),l!==a&&(g=m=null),p){if(g&&C[g][m].test(p[1]))h=g,b=m;else for(var k in C)for(var $ in C[k])if(C[k][$].test(p[1])){if("ol"!==k||!/alpha|roman/.test($)){h=k,b=$;break}var w=/roman/.test($)?e(p[1]):t(p[1]);(!v||v>w)&&(v=w,h=k,b=$)}h||(h=p[2]?"ol":"ul")}else h=n.getAttribute("ke:listtype")||"ol",b=n.getAttribute("ke:list-style-type");if(g=h,m=b||("ol"===h?"decimal":"disc"),b&&b!==("ol"===h?"decimal":"disc")&&s(n,"list-style-type",b),"ol"===h&&p){switch(b){case"decimal":v=Number(p[1]);break;case"lower-roman":case"upper-roman":v=e(p[1]);break;case"lower-alpha":case"upper-alpha":v=t(p[1])}n.setAttribute("value",v)}if(c){if(l>a)A.push(c=new f.Tag(h)),c.appendChild(n),o.appendChild(c);else if(a>l){for(var x,T=a-l;T--&&(x=c.parentNode);)c=x.parentNode;c.appendChild(n)}else c.appendChild(n);y.splice(N--,1)}else A.push(c=new f.Tag(h)),c.appendChild(n),i.replaceChild(c,y[N]);o=n,a=l}else c&&(3!==r.nodeType||d.trim(r.nodeValue))&&(c=a=o=null);for(N=0;N<A.length;N++)u(A[N])},falsyFilter:function(){return!1},stylesFilter:function(e,t){return function(i,r){var n=[];(i||"").replace(/&quot;/g,'"').replace(/\s*([^ :;]+)\s*:\s*([^;]+)\s*(?=;|$)/g,function(i,l,a){l=l.toLowerCase(),"font-family"===l&&(a=a.replace(/['']/g,""));for(var s,o,u,c,f=0;f<e.length;f++)if(e[f]&&(s=e[f][0],o=e[f][1],u=e[f][2],c=e[f][3],l.match(s)&&(!o||a.match(o))))return l=c||l,t&&(u=u||a),"function"==typeof u&&(u=u(a,r,l)),u&&u.push&&(l=u[0],u=u[1]),void("string"==typeof u&&n.push([l,u]));t||n.push([l,a])});for(var l=0;l<n.length;l++)n[l]=n[l].join(":");return n.length?n.join(";")+";":!1}},applyStyleFilter:null},D={createListBulletMarker:function(e,t){var i=new f.Tag("ke:listbullet");return i.setAttribute("ke:listsymbol",e[0]),i.appendChild(new f.Text(t)),i},isListBulletIndicator:function(e){var t=e.getAttribute("style");return/mso-list\s*:\s*Ignore/i.test(t)?!0:void 0},isContainingOnlySpaces:function(e){var t;return(t=r(e))&&/^(:?\s|&nbsp;)+$/.test(t.nodeValue)},resolveList:function(e){var t;if((t=n(e,"ke:listbullet"))&&t.length&&(t=t[0])){if(e.setTagName("ke:li"),e.getAttribute("style")){var r=S.stylesFilter([["text-indent"],["line-height"],[/^margin(:?-left)?$/,null,function(t){var i=t.split(" ");t=T(i[3]||i[1]||i[0]),!L&&null!==F&&t>F&&(L=t-F),F=t,L&&e.setAttribute("ke:indent",L&&Math.ceil(t/L)+1||1)}],[/^mso-list$/,null,function(t){t=t.split(" ");var i=Number(t[0].match(/\d+/)),r=Number(t[1].match(/\d+/));1===r&&(i!==c&&e.setAttribute("ke:reset",1),c=i),e.setAttribute("ke:indent",r)}]])(e.getAttribute("style"),e);i(e,r)}return e.getAttribute("ke:indent")||(F=0,e.setAttribute("ke:indent",1)),d.each(t.attributes,function(t){e.setAttribute(t.name,t.value)}),!0}return c=F=L=null,!1},getStyleComponents:function(){var e=m('<div style="position:absolute;left:-9999px;top:-9999px;"></div>').prependTo("body");return function(t,i,r){e.css(t,i);for(var n={},l=r.length,a=0;l>a;a++)n[r[a]]=e.css(r[a]);return n}}(),listDtdParents:o("ol")};!function(){var e=d.merge(p.$block,p.$listItem,p.$tableContent),t=S.falsyFilter,n=S.stylesFilter,o=D.createListBulletMarker,u=S.flattenList,c=S.assembleList,m=D.isListBulletIndicator,b=D.isContainingOnlySpaces,y=D.resolveList,A=function(e){return e=T(e),isNaN(e)?e:e+"px"},N=D.getStyleComponents,k=D.listDtdParents;h.addRules({tagNames:[[/meta|link|script/,""]],root:function(e){e.filterChildren(),c(e)},tags:{"^":function(e){var t;g.gecko&&(t=S.applyStyleFilter)&&t(e)},$:function(t){var r=t.nodeName||"";if(r in e&&t.getAttribute("style")&&i(t,n([[/^(:?width|height)$/,null,A]])(t.getAttribute("style"))),r.match(/h\d/)){if(t.filterChildren(),y(t))return}else if(r in p.$inline)t.filterChildren(),b(t)&&t.setTagName(null);else if(-1!==r.indexOf(":")&&-1===r.indexOf("ke")){if(t.filterChildren(),"v:imagedata"===r){var l=t.getAttribute("o:href");return l&&t.setAttribute("src",l),void t.setTagName("img")}t.setTagName(null)}r in k&&(t.filterChildren(),c(t))},style:function(e){if(g.gecko){var t=r(e).nodeValue.match(/\/\* Style Definitions \*\/([\s\S]*?)\/\*/),i=t&&t[1],n={};i&&(i.replace(/[\n\r]/g,"").replace(/(.+?)\{(.+?)\}/g,function(e,t,i){t=t.split(",");for(var r=t.length,l=0;r>l;l++)d.trim(t[l]).replace(/^(\w+)(\.[\w-]+)?$/g,function(e,t,r){t=t||"*",r=r.substring(1,r.length),r.match(/MsoNormal/)||(n[t]||(n[t]={}),r?n[t][r]=i:n[t]=i)})}),S.applyStyleFilter=function(e){var t,i=n["*"]?"*":e.nodeName,r=e.getAttribute("class");i in n&&(t=n[i],"object"==typeof t&&(t=t[r]),t&&s(e,t,!0))})}return!1},p:function(e){if(/MsoListParagraph/.exec(e.getAttribute("class"))){var t=a(e,function(e){return 3===e.nodeType&&!b(e.parentNode)}),i=t&&t.parentNode;i&&!i.getAttribute("style")&&i.setAttribute("style","mso-list: Ignore;")}e.filterChildren(),y(e)},div:function(e){var t=r(e);if(t&&"table"===t.nodeName){var i=e.attributes;d.each(i,function(e){t.setAttribute(e.name,e.value)}),e.getAttribute("style")&&s(t,e.getAttribute("style"));var n=new f.Tag("div");s(n,"clear","both"),e.appendChild(n),e.setTagName(null)}},td:function(e){l(e,"thead")&&e.setTagName("th")},ol:u,ul:u,dl:u,font:function(e){if(m(e.parentNode))return void e.setTagName(null);e.filterChildren();var t=e.getAttribute("style"),i=e.parentNode;if("font"===i.name)d.each(e.attributes,function(e){i.setAttribute(e.name,e.value)}),t&&s(i,t),e.setTagName(null);else{t=t||"",e.getAttribute("color")&&("#000000"!==e.getAttribute("color")&&(t+="color:"+e.getAttribute("color")+";"),e.removeAttribute("color")),e.getAttribute("face")&&(t+="font-family:"+e.getAttribute("face")+";",e.removeAttribute("face"));var r=e.getAttribute("size");r&&(t+="font-size:"+(r>3?"large":3>r?"small":"medium")+";",e.removeAttribute("size")),e.setTagName("span"),s(e,t)}},span:function(e){if(m(e.parentNode))return!1;if(e.filterChildren(),b(e))return e.setTagName(null),null;if(m(e)){var t=a(e,function(e){return e.nodeValue||"img"===e.nodeName}),r=t&&(t.nodeValue||"l."),s=r&&r.match(/^(?:[(]?)([^\s]+?)([.)]?)$/);if(s){var u=o(s,r),c=l(e,"span");return c&&/ mso-hide:\s*all|display:\s*none /.test(c.getAttribute("style"))&&u.setAttribute("ke:ignored",1),u}}var f=e.getAttribute("style");f&&i(e,n([[/^line-height$/],[/^font-family$/],[/^font-size$/],[/^color$/],[/^background-color$/]])(f,e))},a:function(e){var t;!(t=e.getAttribute("href"))&&e.getAttribute("name")?e.setTagName(null):g.webkit&&t&&t.match(/file:\/\/\/[\S]+#/i)&&e.setAttribute("href",t.replace(/file:\/\/\/[^#]+/i,""))},"ke:listbullet":function(e){l(e,/h\d/)&&e.setTagName(null)}},attributeNames:[[/^onmouse(:?out|over)/,""],[/^onload$/,""],[/(?:v|o):\w+/,""],[/^lang/,""]],attributes:{style:n([[/^list-style-type$/],[/^margin$|^margin-(?!bottom|top)/,null,function(e,t,i){if(t.nodeName in{p:1,div:1}){var r="margin-left";if("margin"===i)e=N(i,e,[r])[r];else if(i!==r)return null;if(e&&!v.test(e))return[r,e]}return null}],[/^clear$/],[/^border.*|margin.*|vertical-align|float$/,null,function(e,t){return"img"===t.nodeName?e:void 0}],[/^width|height$/,null,function(e,t){return t.nodeName in{table:1,td:1,th:1,img:1}?e:void 0}]],1),width:function(e,t){return t.nodeName in p.$tableContent?!1:void 0},border:function(e,t){return t.nodeName in p.$tableContent?!1:void 0},"class":t,bgcolor:t,valign:function(e,t){return s(t,"vertical-align",e),!1}},comment:g.ie?function(e,t){var i=e.match(/<img.*?>/),r=e.match(/^\[if !supportLists\]([\s\S]*?)\[endif\]$/);if(r){var n=r[1]||i&&"l.",l=n&&n.match(/>(?:[(]?)([^\s]+?)([.)]?)</);return o(l,n)}if(g.gecko&&i){var a=new f.Parser(i[0]).parse().childNodes[0],s=t.previousSibling,u=s&&s.toHtml().match(/<v:imagedata[^>]*o:href=[''](.*?)['']/),c=u&&u[1];return c&&a.setAttribute("src",c),a}return!1}:t})}(),module.exports={toDataFormat:function(e,t){return g.gecko&&(e=e.replace(/(<!--\[if[^<]*?\])-->([\S\s]*?)<!--(\[endif\]-->)/gi,"$1$2$3")),e=t.htmlDataProcessor.toDataFormat(e,h)}};});
示例#30
0
    }    /**
 * @class KISSY.Anim
 * A class for constructing animation instances.
 *
 *      @example
 *      KISSY.use('dom,anim',function(S,Dom,Anim){
     *          var d=Dom.create('<div style="width:50px;height:50px;border:1px solid red;">running</div>');
     *          document.body.appendChild(d);
     *          new Anim({
     *              node: d,
     *              to: {width:100,height:100}
     *          }).run().then(function(){
     *              d.innerHTML='completed';
     *          });
     *      });
 *
 * @extend KISSY.Promise
 * @cfg {HTMLElement|Window} node html dom node or window
 * (window can only animate scrollTop/scrollLeft)
 * @cfg {Object} to end css style value.
 * @cfg {Number} [duration=1] duration(second) or anim config
 * @cfg {String|Function} [easing='easeNone'] easing fn or string
 * @cfg {Function} [complete] callback function when this animation is complete
 * @cfg {String|Boolean} [queue] current animation's queue, if false then no queue
 */
    /**
 * @class KISSY.Anim
 * A class for constructing animation instances.
 *
 *      @example
 *      KISSY.use('dom,anim',function(S,Dom,Anim){
     *          var d=Dom.create('<div style="width:50px;height:50px;border:1px solid red;">running</div>');
     *          document.body.appendChild(d);
     *          new Anim({
     *              node: d,
     *              to: {width:100,height:100}
     *          }).run().then(function(){
     *              d.innerHTML='completed';
     *          });
     *      });
 *
 * @extend KISSY.Promise
 * @cfg {HTMLElement|Window} node html dom node or window
 * (window can only animate scrollTop/scrollLeft)
 * @cfg {Object} to end css style value.
 * @cfg {Number} [duration=1] duration(second) or anim config
 * @cfg {String|Function} [easing='easeNone'] easing fn or string
 * @cfg {Function} [complete] callback function when this animation is complete
 * @cfg {String|Boolean} [queue] current animation's queue, if false then no queue
 */
    function AnimBase(node, to, duration, easing, complete) {
        var self = this;
        var config;
        if (node.node) {
            config = node;
        } else {
            // the transition properties
            if (typeof to === 'string') {
                to = querystring.parse(String(to), ';', ':');
                util.each(to, function (value, prop) {
                    var trimProp = util.trim(prop);
                    if (trimProp) {
                        to[trimProp] = util.trim(value);
                    }
                    if (!trimProp || trimProp !== prop) {
                        delete to[prop];
                    }
                });
            }    // animation config
            // animation config
            if (util.isPlainObject(duration)) {
                config = util.clone(duration);
            } else {
                config = { complete: complete };
                if (duration) {
                    config.duration = duration;
                }
                if (easing) {
                    config.easing = easing;
                }
            }
            config.node = node;
            config.to = to;
        }
        config = util.merge(defaultConfig, config);    // Promise.call(self);
        // Promise.call(self);
        AnimBase.superclass.constructor.call(self);
        Promise.Defer(self);    /**
     * config object of current anim instance
     * @type {Object}
     */
        /**
     * config object of current anim instance
     * @type {Object}
     */
        self.config = config;
        node = config.node;
        if (!util.isPlainObject(node)) {
            node = Dom.get(config.node);
        }
        self.node = self.el = node;
        self._backupProps = {};
        self._propsData = {};    // camel case uniformity
        // camel case uniformity
        var newTo = {};
        to = config.to;
        for (var prop in to) {
            newTo[camelCase(prop)] = to[prop];
        }
        config.to = newTo;
    }