?? silverna-packs.js
字號:
this.activeActionList[actionIdx].push($pointer.addEventListener(action.type, action.handler));
}
else{
this.knobs.each(function(knob, i){
var active = knob.addEventListener(action.type, action.handler, false, $pointer,{knob:knob, panel:panel});
active.knob = knob;
$pointer.activeActionList[actionIdx].push(active);
});
}
}
}
else
{
this.actionList.each(function(x, i){
$pointer.active(i);
});
}
}
//停止Behavior的活動
Behavior.prototype.stop = function(actionIdx)
{
var $pointer = this;
if(actionIdx != null)
{
var action = this.actionList[actionIdx];
var active = this.activeActionList[actionIdx];
if(active)
{
active.each(function(active){
if(action.userAction)
{
$pointer.removeEventListener(action.type, active);
}
else if(active.knob)
active.knob.removeEventListener(action.type, active, false);
});
this.activeActionList[actionIdx].length = 0;
}
}
else
{
this.actionList.each(function(x, i){
$pointer.stop(i);
});
}
}
ClickBehavior = function()
{
Behavior.call(this);
this.addAction("click", "onclick");
this.addAction("dblclick", "ondblclick");
this.addUserAction("disable", "ondisable");
this.addUserAction("enable", "onenable");
}
ClickBehavior.prototype = new Behavior();
ClickBehavior.prototype.ondisable = function(evt)
{
var knob = this.knobs[evt.index];
this.activeColor = knob.el.style.color;
knob.setFontColor("#808080");
this.stop(0);
}
ClickBehavior.prototype.onenable = function(evt)
{
var knob = this.knobs[evt.index];
knob.setFontColor(this.activeColor);
this.active(0);
}
HoverBehavior = function()
{
Behavior.call(this);
this.addAction("mouseover", "hoverIn");
this.addAction("mouseout", "hoverOut");
this.addAction("mousedown", "hoverDown");
this.addAction("mousedown", "hoverUp");
}
HoverBehavior.prototype = new Behavior();
SelectBehavior = function()
{
Behavior.call(this);
this.addAction("select", "onselect");
this.addAction("change", "onchange");
this.addUserAction("disable", "ondisable");
this.addUserAction("enable", "onenable");
}
SelectBehavior.prototype = new Behavior();
SelectBehavior.prototype.ondisable = function(evt)
{
var knob = this.knobs[evt.index];
this.activeColor = knob.el.style.color;
knob.setFontColor("#808080");
this.stop(0);
}
SelectBehavior.prototype.onenable = function(evt)
{
var knob = this.knobs[evt.index];
knob.setFontColor(this.activeColor);
this.active(0);
}
DragBehavior = function()
{
Behavior.call(this);
this.addAction("mousedown", "dragstart");
this.addAction("mouseup", "dragend");
this.addAction("mousemove", "drag");
this._shadow = null; //拖動時復制的“影子”knob
this.shadow = 0; //拖動時是否有“影子” 0 - 100 影子的深度
this.droppable = true; //是否可以放置在當前位置
//拖動模式,分為實模式real和虛模式virtual
//虛模式下,拖動的物件只顯示出外框
this.dragMode = "real";
}
DragBehavior._iframe = null; //用來覆蓋select框的iframe
DragBehavior.prototype = new Behavior();
DragBehavior.prototype.rangeX = {
start: 0, end: Infinity
}
DragBehavior.prototype.rangeY = {
start: 0, end: Infinity
}
DragBehavior.prototype.precision = 1;
DragBehavior.prototype.floating = {x : 0, y : 0}; //浮動偏移量
DragBehavior.prototype.setRangeX = function(startX, endX)
{
this.rangeX = {start:startX, end: endX};
}
DragBehavior.prototype.setRangeY = function(startY, endY)
{
this.rangeY = {start:startY, end: endY};
}
DragBehavior.prototype.setRangeXBy = function(startX, endX)
{
var panel = this.panel || this.knobs[0];
var pos = panel.getAbsPosition();
this.rangeX = {start:pos.x + startX, end: pos.x + endX};
}
DragBehavior.prototype.setRangeYBy = function(startY, endY)
{
var panel = this.panel || this.knobs[0];
var pos = panel.getAbsPosition();
this.rangeY = {start:pos.y + startY, end: pos.y + endY};
}
DragBehavior.prototype.setGrid = function(precision)
{
this.precision = precision;
}
DragBehavior.prototype.getFloatingPos = function()
{
return this.floating;
}
DragBehavior.prototype.tempIFM = function()
{
if(!DragBehavior._iframe)
{
DragBehavior._iframe = $html("iframe");
DragBehavior._iframe.el.id = "temp_iframe" + Math.random();
DragBehavior._iframe.setAttribute("name",DragBehavior._iframe.el.id);
DragBehavior._iframe.el.style.filter="alpha(opacity=0)";
DragBehavior._iframe.el.style.opacity = "0";
DragBehavior._iframe.el.style.position = "absolute";
DragBehavior._iframe.el.style.top = "0px";
DragBehavior._iframe.el.style.left = "0px";
DragBehavior._iframe.el.style.width = "100%";
DragBehavior._iframe.el.style.height = "100%";
DragBehavior._iframe.setAttribute("frameborder",0);
DragBehavior._iframe.setAttribute("border",0);
}
DragBehavior._iframe.focus();
return DragBehavior._iframe.el;
}
//分派ondragend事件,layerX,layerY是drag的時候的鼠標相對于被拖動對象坐標
//pageX、pageY是drag的時候鼠標相對于頁面文檔的坐標
//panel是拖動的dom對象,shadow是“影子”
DragBehavior.prototype.dragstart = function(evt)
{
if(evt.leftButton())
{
var knob = evt.knob;
var panel = evt.panel || knob;
var pos = panel.getAbsPosition();
if(!$isIE7()) $body().appendChild(this.tempIFM());
panel.focus();
if(!this._shadow && this.shadow > 0)
{
this._shadow = panel.el.cloneNode(true);
this._shadow.id = "";
this._shadow.style.filter="alpha(opacity="+this.shadow+")";
this._shadow.style.opacity = this.shadow;
if(!this._position) this._position = this._shadow.style.position;
panel.el.parentNode.insertBefore(this._shadow,panel.el);
}
knob.setCapture();
panel.setAbsPosition(pos.x, pos.y);
//MK-Shadow
this.offsetX = evt.pageX - pos.x;
this.offsetY = evt.pageY - pos.y;
this.posX = pos.x;
this.posY = pos.y;
this.offsetLeft = this.offsetX;
this.offsetTop = this.offsetY;
this.offsetRight = parseInt(panel.el.clientWidth) - evt.pageX;
this.offsetBottom = parseInt(panel.el.clientHeight) - evt.pageY;
this.active(1);
this.active(2);
var mousePos = core.web.HTMLElement.getMousePosition(evt);
var eventArgs = {knob:knob, layerX:this.offsetX, layerY:this.offsetY, pageX:evt.pageX, pageY:evt.pageY, target:panel.el, shadow:this._shadow}
this.dispatchEvent("dragstart",eventArgs);
}
}
//分派ondragend事件,layerX,layerY是drag的時候的鼠標相對于被拖動對象坐標
//pageX、pageY是drag的時候鼠標相對于頁面文檔的坐標
//panel是拖動的dom對象,shadow是“影子”
DragBehavior.prototype.dragend = function(evt)
{
if(evt.leftButton())
{
var knob = evt.knob;
var panel = evt.panel || knob;
if(this._shadow)
{
if(!this.droppable)
{
var pos = $html(this._shadow).getAbsPosition();
panel.setAbsPosition(pos.x, pos.y);
panel.el.style.position = this._position;
this._shadow.parentNode.insertBefore(panel.el,this._shadow);
}
this._shadow.parentNode.removeChild(this._shadow);
$trash(this._shadow = null);
}
if(this.dragMode == "virtual")
{
panel.showChildren();
if(panel.getAttribute("borderStyle")!=null)
panel.el.style.border = panel.getAttribute("borderStyle");
panel.setAttribute("borderStyle",null);
}
var _tempIFM = $id(this.tempIFM().id);
if(_tempIFM){
$body().removeChild(_tempIFM);
$trash(_tempIFM == null);
}
knob.releaseCapture();
this.stop(2);
var mousePos = core.web.HTMLElement.getMousePosition(evt);
var eventArgs = {knob:knob, layerX:this.offsetX, layerY:this.offsetY, pageX:evt.pageX, pageY:evt.pageY, target:panel.el, shadow:this._shadow}
this.dispatchEvent("dragend",eventArgs);
}
}
//分派ondrag事件,layerX,layerY是drag的時候的鼠標相對于被拖動對象坐標
//pageX、pageY是drag的時候鼠標相對于頁面文檔的坐標
//panel是拖動的dom對象,shadow是“影子”
DragBehavior.prototype.drag = function(evt)
{
var knob = evt.knob;
var panel = evt.panel || knob;
var lx = evt.pageX - this.offsetX;
var ly = evt.pageY - this.offsetY;
if(this.dragMode == "virtual" && panel.hideChildren())
{
if(!panel.getAttribute("borderStyle"))
panel.setAttribute("borderStyle", panel.el.style.border || '');
panel.el.style.border = "dotted 1px #999999";
}
lx = lx > this.rangeX.start ? lx : this.rangeX.start;
lx = lx < this.rangeX.end ? lx : this.rangeX.end;
ly = ly > this.rangeY.start ? ly : this.rangeY.start;
ly = ly < this.rangeY.end ? ly : this.rangeY.end;
lx = lx > 0?lx: 0;
ly = ly > 0?ly: 0;
lx = Math.round(lx / this.precision) * this.precision;
ly = Math.round(ly / this.precision) * this.precision;
var eventArgs = {knob:knob, layerX:this.offsetX, layerY:this.offsetY, pageX:evt.pageX, pageY:evt.pageY, target:panel.el, shadow:this._shadow}
eventArgs.defaultOp = function(){
panel.setAbsPosition(lx, ly);
}
this.dispatchEvent("drag",eventArgs);
}
DragBehavior.prototype.activeIdx = DragBehavior.prototype.active;
DragBehavior.prototype.active = function(idx)
{
if(idx) this.activeIdx(idx);
else{
this.activeIdx(0);
}
}
}
with(adorners)
{
//Adorner 是一個抽象的“裝飾”原型,它抽象的是頁面上的“外觀”,或者我們叫它“控制區域”、“熱點”
//Adorner構造函數
Adorner = function()
{
this.behaviorList = [];
core.events.EventManager.apply(this);
}
//得到某種外部資源的路徑,例如圖片等
Adorner.prototype.resource = function(name){
if(name)
return $root() + "_resource/" + name;
return null;
}
//顯示裝飾件
Adorner.prototype.show = $abstract;
//隱藏裝飾件
Adorner.prototype.hide = $abstract;
//裝載裝飾件 · Widget.setupAll的時候將會自動調用此方法
Adorner.prototype.load = $abstract;
//裝載完成之后將會觸發onload事件
Adorner.prototype.onload = $void;
Adorner.prototype.addBehaviors = function()
{
return this.behaviorList.push.apply(this.behaviorList, arguments);
}
Adorner.prototype.addBehavior = function(behavior, behaviorHdl, evtArgs)
{
var $pointer = this;
this.behaviorList.push(behavior);
if(behaviorHdl)
{
setTimeout(function(){
behaviorHdl.call($pointer, evtArgs)}, 1);
}
return behavior;
}
Adorner.prototype.activeAll = function()
{
this.behaviorList.each(function(b){
b.active();
});
}
Adorner.prototype.stopAll = function()
{
this.behaviorList.each(function(b){
b.stop();
});
}
}
//提供可擴展的Widget接口,一個Widget由一組Adorners組成
//Widget的基類構造函數,構造一個Widget,擴展Widget類型,調用這個構造函數
Widget = function()
{
this.adornerList = []; //adornerList,一個Widget由多個adorners組成
core.events.EventManager.apply(this); //Event通用原型
}
//將Adorner添加到Widget列表
Widget.prototype.addAdorner = function(adorner)
{
this.adornerList.push.apply(this.adornerList, arguments);
}
//獲得第一個Adorner引用
Widget.prototype.firstAdorner = function()
{
return this.adornerList[this.adornerList.length - 1];
}
//裝載Widget的Adorners外觀·不建議重載此方法
Widget.prototype.load = function(face){
var faces = face.getElementsByTagName("face");
if(!faces.length)
faces = face.getElementsByTagName("silverna:face");
var $pointer = this;
if(faces.length > 0)
{
for(var i = this.adornerList.length - 1; i >= 0; i--)
{
var _f = faces[i];
this.adornerList[i].skin = this.adornerList[i].load(_f, face);
//restore trashes
$trash(_f);
}
}
else
{
if(this.firstAdorner())
{
this.adornerList[0].skin = this.firstAdorner().load(face);
//restore trashes
$trash(face);
}
}
}
//獲取并解析頁面上所有的Widgets
Widget.setupAll = function()
{
var widgets = $(document.getElementsByTagName("widget"));
if(!widgets.length)
widgets = document.getElementsByTagName("silverna:widget");
for(var i = 0; i < widgets.length; i++)
{
Widget.setup(widgets[i].id);
}
}
//根據ID獲取并解析頁面上的Widget
Widget.setup = function(id)
{
var wf = $(id);
var widgetType = $require(wf.getAttribute("type"));
var widget = new widgetType();
widget.load(wf);
return widget;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -