forked from fanruan/fineui
guy
8 years ago
37 changed files with 31026 additions and 30316 deletions
@ -0,0 +1,32 @@ |
|||||||
|
Demo.Func = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "demo-func" |
||||||
|
}, |
||||||
|
render: function () { |
||||||
|
var svg = BI.createWidget({ |
||||||
|
type: "bi.svg", |
||||||
|
width: 500, |
||||||
|
height: 600 |
||||||
|
}); |
||||||
|
|
||||||
|
var circle = svg.circle(100, 100, 10); |
||||||
|
circle.animate({fill: "#223fa3", stroke: "#000", "stroke-width": 80, "stroke-opacity": 0.5}, 2000); |
||||||
|
|
||||||
|
var el = svg.rect(10, 200, 300, 200); |
||||||
|
el.transform("t100,100r45t-100,0"); |
||||||
|
|
||||||
|
svg.path("M10,10L50,50M50,10L10,50") |
||||||
|
.attr({stroke: "red"}); |
||||||
|
|
||||||
|
BI.createWidget({ |
||||||
|
type: "bi.absolute", |
||||||
|
element: this, |
||||||
|
items: [{ |
||||||
|
el: svg, |
||||||
|
left: 100, |
||||||
|
top: 50 |
||||||
|
}] |
||||||
|
}) |
||||||
|
} |
||||||
|
}); |
||||||
|
$.shortcut("demo.svg", Demo.Func); |
@ -0,0 +1,96 @@ |
|||||||
|
Demo.Func = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "demo-func" |
||||||
|
}, |
||||||
|
_createNav: function(v){ |
||||||
|
var m = this.MONTH, y = this.YEAR; |
||||||
|
m += v; |
||||||
|
while(m < 0){ |
||||||
|
y--; |
||||||
|
m += 12; |
||||||
|
} |
||||||
|
while(m > 11){ |
||||||
|
y++; |
||||||
|
m -= 12; |
||||||
|
} |
||||||
|
var calendar = BI.createWidget({ |
||||||
|
type: "bi.calendar", |
||||||
|
logic: { |
||||||
|
dynamic: false |
||||||
|
}, |
||||||
|
year: y, |
||||||
|
month: m, |
||||||
|
day: this.DAY |
||||||
|
}) |
||||||
|
calendar.setValue(this.selectedTime); |
||||||
|
return calendar; |
||||||
|
}, |
||||||
|
|
||||||
|
_stringfyTimeObject: function(timeOb){ |
||||||
|
return timeOb.year + "-" + (timeOb.month + 1) + "-" + timeOb.day; |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var self = this; |
||||||
|
var combo1 = BI.createWidget({ |
||||||
|
type: "bi.bubble_combo", |
||||||
|
el: { |
||||||
|
type: "bi.button", |
||||||
|
text: "测试", |
||||||
|
height: 25 |
||||||
|
}, |
||||||
|
popup: { |
||||||
|
el: { |
||||||
|
type: "bi.button_group", |
||||||
|
items: BI.makeArray(100, { |
||||||
|
type: "bi.text_item", |
||||||
|
height: 25, |
||||||
|
text: "item" |
||||||
|
}), |
||||||
|
layouts: [{ |
||||||
|
type: "bi.vertical" |
||||||
|
}] |
||||||
|
}, |
||||||
|
maxHeight: 200 |
||||||
|
} |
||||||
|
}) |
||||||
|
var combo2 = BI.createWidget({ |
||||||
|
type: "bi.bubble_combo", |
||||||
|
el: { |
||||||
|
type: "bi.button", |
||||||
|
text: "测试", |
||||||
|
height: 25 |
||||||
|
}, |
||||||
|
popup: { |
||||||
|
type: "bi.bubble_bar_popup_view", |
||||||
|
el: { |
||||||
|
type: "bi.button_group", |
||||||
|
items: BI.makeArray(100, { |
||||||
|
type: "bi.text_item", |
||||||
|
height: 25, |
||||||
|
text: "item" |
||||||
|
}), |
||||||
|
layouts: [{ |
||||||
|
type: "bi.vertical" |
||||||
|
}] |
||||||
|
}, |
||||||
|
maxHeight: 200, |
||||||
|
minWidth: 600 |
||||||
|
} |
||||||
|
}) |
||||||
|
BI.createWidget({ |
||||||
|
type: "bi.absolute", |
||||||
|
element: this, |
||||||
|
items: [{ |
||||||
|
el: combo1, |
||||||
|
left: 100, |
||||||
|
top: 100 |
||||||
|
}, { |
||||||
|
el: combo2, |
||||||
|
left: 100, |
||||||
|
bottom: 100 |
||||||
|
}] |
||||||
|
}) |
||||||
|
} |
||||||
|
}); |
||||||
|
$.shortcut("demo.bubble_combo", Demo.Func); |
@ -0,0 +1,21 @@ |
|||||||
|
Demo.Func = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "demo-func" |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
return { |
||||||
|
type: "bi.absolute", |
||||||
|
items: [{ |
||||||
|
el: { |
||||||
|
type: "bi.color_chooser", |
||||||
|
width: 30, |
||||||
|
height: 30 |
||||||
|
}, |
||||||
|
left: 100, |
||||||
|
top: 250 |
||||||
|
}] |
||||||
|
} |
||||||
|
} |
||||||
|
}); |
||||||
|
$.shortcut("demo.color_chooser", Demo.Func); |
@ -0,0 +1,35 @@ |
|||||||
|
Demo.Func = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "demo-func" |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var canvas = BI.createWidget({ |
||||||
|
type: "bi.complex_canvas", |
||||||
|
width: 500, |
||||||
|
height: 600 |
||||||
|
}); |
||||||
|
canvas.branch(55, 100, 10, 10, 100, 10, 200, 10, { |
||||||
|
offset: 20, |
||||||
|
strokeStyle: "red", |
||||||
|
lineWidth: 2 |
||||||
|
}); |
||||||
|
|
||||||
|
canvas.branch(220, 155, 120, 110, 150, 200, { |
||||||
|
offset: 40 |
||||||
|
}); |
||||||
|
|
||||||
|
canvas.stroke(); |
||||||
|
|
||||||
|
BI.createWidget({ |
||||||
|
type: "bi.absolute", |
||||||
|
element: this, |
||||||
|
items: [{ |
||||||
|
el: canvas, |
||||||
|
left: 100, |
||||||
|
top: 50 |
||||||
|
}] |
||||||
|
}) |
||||||
|
} |
||||||
|
}); |
||||||
|
$.shortcut("demo.complex_canvas", Demo.Func); |
@ -0,0 +1,42 @@ |
|||||||
|
Demo.Func = BI.inherit(BI.Widget, { |
||||||
|
props: { |
||||||
|
baseCls: "demo-func" |
||||||
|
}, |
||||||
|
|
||||||
|
render: function () { |
||||||
|
var editor = BI.createWidget({ |
||||||
|
type: "bi.text_editor", |
||||||
|
width: 200, |
||||||
|
height: 30, |
||||||
|
value: "这是复制的内容" |
||||||
|
}); |
||||||
|
var zclip = BI.createWidget({ |
||||||
|
type: 'bi.zero_clip', |
||||||
|
width: 100, |
||||||
|
height: 100, |
||||||
|
cls: 'layout-bg1', |
||||||
|
copy: function () { |
||||||
|
return editor.getValue(); |
||||||
|
}, |
||||||
|
|
||||||
|
afterCopy: function () { |
||||||
|
BI.Msg.toast(editor.getValue()); |
||||||
|
} |
||||||
|
}); |
||||||
|
|
||||||
|
BI.createWidget({ |
||||||
|
type: "bi.absolute", |
||||||
|
element: this, |
||||||
|
items: [{ |
||||||
|
el: editor, |
||||||
|
left: 100, |
||||||
|
top: 50, |
||||||
|
}, { |
||||||
|
el: zclip, |
||||||
|
left: 100, |
||||||
|
top: 100 |
||||||
|
}] |
||||||
|
}) |
||||||
|
} |
||||||
|
}); |
||||||
|
$.shortcut("demo.zclip", Demo.Func); |
@ -1,44 +0,0 @@ |
|||||||
/** |
|
||||||
* Created by GUY on 2017/2/8. |
|
||||||
* |
|
||||||
* @class BI.BubblePopupBarView |
|
||||||
* @extends BI.BubblePopupView |
|
||||||
*/ |
|
||||||
BI.BubblePopupBarView = BI.inherit(BI.BubblePopupView, { |
|
||||||
_defaultConfig: function () { |
|
||||||
return BI.extend(BI.BubblePopupBarView.superclass._defaultConfig.apply(this, arguments), { |
|
||||||
extraCls: "bi-bubble-bar-popup-view", |
|
||||||
buttons: [{value: BI.i18nText(BI.i18nText("BI-Basic_Sure"))}, {value: BI.i18nText("BI-Basic_Cancel"), level: "ignore"}] |
|
||||||
}) |
|
||||||
}, |
|
||||||
_init: function () { |
|
||||||
BI.BubblePopupBarView.superclass._init.apply(this, arguments); |
|
||||||
}, |
|
||||||
_createToolBar: function () { |
|
||||||
var o = this.options, self = this; |
|
||||||
|
|
||||||
var items = []; |
|
||||||
BI.each(o.buttons.reverse(), function (i, buttonOpt) { |
|
||||||
if(BI.isWidget(buttonOpt)){ |
|
||||||
items.push(buttonOpt); |
|
||||||
}else{ |
|
||||||
items.push(BI.extend({ |
|
||||||
type: 'bi.button', |
|
||||||
height: 30, |
|
||||||
handler: function (v) { |
|
||||||
self.fireEvent(BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON, v); |
|
||||||
} |
|
||||||
}, buttonOpt)) |
|
||||||
} |
|
||||||
}); |
|
||||||
return BI.createWidget({ |
|
||||||
type: 'bi.right_vertical_adapt', |
|
||||||
height: 40, |
|
||||||
hgap: 10, |
|
||||||
bgap: 10, |
|
||||||
items: items |
|
||||||
}); |
|
||||||
} |
|
||||||
}); |
|
||||||
BI.BubblePopupBarView.EVENT_CLICK_TOOLBAR_BUTTON = "EVENT_CLICK_TOOLBAR_BUTTON"; |
|
||||||
$.shortcut("bi.bubble_bar_popup_view", BI.BubblePopupBarView); |
|
@ -1,242 +0,0 @@ |
|||||||
/** |
|
||||||
* Created by Young's on 2016/8/30. |
|
||||||
*/ |
|
||||||
BI.LoginTimeOut = BI.inherit(BI.BarPopoverSection, { |
|
||||||
_defaultConfig: function () { |
|
||||||
return BI.extend(BI.LoginTimeOut.superclass._defaultConfig.apply(this, arguments), {}) |
|
||||||
}, |
|
||||||
|
|
||||||
_init: function () { |
|
||||||
BI.LoginTimeOut.superclass._init.apply(this, arguments); |
|
||||||
}, |
|
||||||
|
|
||||||
rebuildNorth: function (north) { |
|
||||||
BI.createWidget({ |
|
||||||
type: "bi.label", |
|
||||||
element: north, |
|
||||||
text: BI.i18nText("BI-Login_Timeout"), |
|
||||||
height: 50, |
|
||||||
textAlign: "left" |
|
||||||
}) |
|
||||||
}, |
|
||||||
|
|
||||||
rebuildCenter: function (center) { |
|
||||||
var self = this, o = this.options; |
|
||||||
var userNameInput = BI.createWidget({ |
|
||||||
type: "bi.editor", |
|
||||||
watermark: BI.i18nText("BI-Username"), |
|
||||||
cls: "login-input", |
|
||||||
allowBlank: true, |
|
||||||
width: 300, |
|
||||||
height: 30 |
|
||||||
}); |
|
||||||
var userNameMask = BI.createWidget({ |
|
||||||
type: "bi.text_button", |
|
||||||
width: 330, |
|
||||||
height: 56, |
|
||||||
cls: "error-mask" |
|
||||||
}); |
|
||||||
userNameMask.setVisible(false); |
|
||||||
userNameMask.on(BI.TextButton.EVENT_CHANGE, function () { |
|
||||||
userNameInput.focus(); |
|
||||||
this.element.fadeOut(); |
|
||||||
}); |
|
||||||
|
|
||||||
var userNameWrapper = BI.createWidget({ |
|
||||||
type: "bi.absolute", |
|
||||||
cls: "input-wrapper login-username-icon", |
|
||||||
items: [{ |
|
||||||
el: { |
|
||||||
type: "bi.icon", |
|
||||||
width: 26, |
|
||||||
height: 26 |
|
||||||
}, |
|
||||||
top: 10, |
|
||||||
left: 0 |
|
||||||
}, { |
|
||||||
el: userNameInput, |
|
||||||
top: 8, |
|
||||||
left: 30 |
|
||||||
}, { |
|
||||||
el: userNameMask, |
|
||||||
top: 0, |
|
||||||
left: 0 |
|
||||||
}], |
|
||||||
width: 330, |
|
||||||
height: 56 |
|
||||||
}); |
|
||||||
|
|
||||||
|
|
||||||
var passwordInput = BI.createWidget({ |
|
||||||
type: "bi.editor", |
|
||||||
inputType: "password", |
|
||||||
cls: "login-input", |
|
||||||
allowBlank: true, |
|
||||||
watermark: BI.i18nText("BI-Basic_Password"), |
|
||||||
width: 300, |
|
||||||
height: 30 |
|
||||||
}); |
|
||||||
var passwordMask = BI.createWidget({ |
|
||||||
type: "bi.text_button", |
|
||||||
width: 330, |
|
||||||
height: 56, |
|
||||||
cls: "error-mask" |
|
||||||
}); |
|
||||||
passwordMask.setVisible(false); |
|
||||||
passwordMask.on(BI.TextButton.EVENT_CHANGE, function () { |
|
||||||
passwordInput.focus(); |
|
||||||
this.element.fadeOut(); |
|
||||||
}); |
|
||||||
|
|
||||||
var passwordWrapper = BI.createWidget({ |
|
||||||
type: "bi.absolute", |
|
||||||
cls: "input-wrapper login-password-icon", |
|
||||||
items: [{ |
|
||||||
el: { |
|
||||||
type: "bi.icon", |
|
||||||
width: 26, |
|
||||||
height: 26 |
|
||||||
}, |
|
||||||
top: 10, |
|
||||||
left: 0 |
|
||||||
}, { |
|
||||||
el: passwordInput, |
|
||||||
top: 8, |
|
||||||
left: 30 |
|
||||||
}, { |
|
||||||
el: passwordMask, |
|
||||||
top: 0, |
|
||||||
left: 0 |
|
||||||
}], |
|
||||||
width: 330, |
|
||||||
height: 56 |
|
||||||
}); |
|
||||||
|
|
||||||
var loginButton = BI.createWidget({ |
|
||||||
type: "bi.text_button", |
|
||||||
text: BI.i18nText("BI-Basic_Login"), |
|
||||||
cls: "login-button", |
|
||||||
width: 330, |
|
||||||
height: 50 |
|
||||||
}); |
|
||||||
loginButton.on(BI.TextButton.EVENT_CHANGE, function () { |
|
||||||
if (BI.isEmptyString(userNameInput.getValue())) { |
|
||||||
self._showMes(userNameMask, BI.i18nText("BI-Username_Not_Null")); |
|
||||||
return; |
|
||||||
} |
|
||||||
if (BI.isEmptyString(passwordInput.getValue())) { |
|
||||||
self._showMes(passwordMask, BI.i18nText("BI-Password_Not_Null")); |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
//反正是登录直接用FR的登录了
|
|
||||||
BI.ajax({ |
|
||||||
url: BI.servletURL + '?op=fs_load&cmd=login', |
|
||||||
data: BI.cjkEncodeDO({ |
|
||||||
fr_username: encodeURIComponent(userNameInput.getValue()), |
|
||||||
fr_password: encodeURIComponent(passwordInput.getValue()), |
|
||||||
fr_remember: self.keepLoginState.isSelected() |
|
||||||
}), |
|
||||||
type: 'POST', |
|
||||||
async: false, |
|
||||||
error: function () { |
|
||||||
BI.Msg.toast("Error!"); |
|
||||||
}, |
|
||||||
complete: function (res, status) { |
|
||||||
if (BI.isEmptyString(res.responseText)) { |
|
||||||
self._showMes(userNameMask, BI.i18nText("BI-Authentication_Failed")); |
|
||||||
return; |
|
||||||
} |
|
||||||
var signResult = BI.jsonDecode(res.responseText); |
|
||||||
if (signResult.fail) { |
|
||||||
//用户名和密码不匹配
|
|
||||||
self._showMes(userNameMask, BI.i18nText("BI-Username_Password_Not_Correct")); |
|
||||||
} else if (signResult.url) { |
|
||||||
self.fireEvent(BI.LoginTimeOut.EVENT_LOGIN); |
|
||||||
} |
|
||||||
} |
|
||||||
}); |
|
||||||
}); |
|
||||||
|
|
||||||
var logo; |
|
||||||
if (BI.isNotNull(window.top.FS)) { |
|
||||||
logo = window.top.FS.config.logoImageID4FS; |
|
||||||
} |
|
||||||
BI.createWidget({ |
|
||||||
type: "bi.absolute", |
|
||||||
element: center, |
|
||||||
cls: "bi-login-timeout-center", |
|
||||||
items: [{ |
|
||||||
el: { |
|
||||||
type: "bi.center_adapt", |
|
||||||
items: [{ |
|
||||||
type: "bi.img", |
|
||||||
src: BI.servletURL + (logo ? |
|
||||||
'?op=fr_attach&cmd=ah_image&id=' + logo + '&isAdjust=false' : |
|
||||||
'?op=resource&resource=/com/fr/bi/web/images/login/bi_logo.png'), |
|
||||||
width: 120, |
|
||||||
height: 120 |
|
||||||
}], |
|
||||||
width: 200, |
|
||||||
height: 300 |
|
||||||
}, |
|
||||||
left: 0, |
|
||||||
top: 0 |
|
||||||
}, { |
|
||||||
el: userNameWrapper, |
|
||||||
top: 30, |
|
||||||
left: 230 |
|
||||||
}, { |
|
||||||
el: passwordWrapper, |
|
||||||
top: 100, |
|
||||||
left: 230 |
|
||||||
}, { |
|
||||||
el: loginButton, |
|
||||||
top: 200, |
|
||||||
left: 230 |
|
||||||
}] |
|
||||||
}); |
|
||||||
}, |
|
||||||
|
|
||||||
_showMes: function (widget, mes) { |
|
||||||
widget.setText(mes); |
|
||||||
widget.element.fadeIn(); |
|
||||||
setTimeout(function () { |
|
||||||
if (widget.element.isVisible()) { |
|
||||||
widget.element.fadeOut(); |
|
||||||
} |
|
||||||
}, 5000); |
|
||||||
}, |
|
||||||
|
|
||||||
rebuildSouth: function (south) { |
|
||||||
this.keepLoginState = BI.createWidget({ |
|
||||||
type: "bi.checkbox", |
|
||||||
width: 16, |
|
||||||
height: 16 |
|
||||||
}); |
|
||||||
BI.createWidget({ |
|
||||||
type: "bi.absolute", |
|
||||||
element: south, |
|
||||||
cls: "bi-login-timeout-south", |
|
||||||
items: [{ |
|
||||||
el: this.keepLoginState, |
|
||||||
top: 0, |
|
||||||
left: 230 |
|
||||||
}, { |
|
||||||
el: { |
|
||||||
type: "bi.label", |
|
||||||
text: BI.i18nText("BI-Keep_Login_State"), |
|
||||||
cls: "keep-state", |
|
||||||
height: 30 |
|
||||||
}, |
|
||||||
top: -7, |
|
||||||
left: 260 |
|
||||||
}] |
|
||||||
}) |
|
||||||
} |
|
||||||
}); |
|
||||||
BI.extend(BI.LoginTimeOut, { |
|
||||||
POPOVER_ID: "___popover__id___" |
|
||||||
}); |
|
||||||
BI.LoginTimeOut.EVENT_LOGIN = "EVENT_LOGIN"; |
|
||||||
$.shortcut("bi.login_timeout", BI.LoginTimeOut); |
|
@ -0,0 +1,495 @@ |
|||||||
|
/* |
||||||
|
* zClip :: jQuery ZeroClipboard v1.1.1 |
||||||
|
* http://steamdev.com/zclip
|
||||||
|
* |
||||||
|
* Copyright 2011, SteamDev |
||||||
|
* Released under the MIT license. |
||||||
|
* http://www.opensource.org/licenses/mit-license.php
|
||||||
|
* |
||||||
|
* Date: Wed Jun 01, 2011 |
||||||
|
*/ |
||||||
|
|
||||||
|
|
||||||
|
(function ($) { |
||||||
|
|
||||||
|
$.fn.zclip = function (params) { |
||||||
|
|
||||||
|
if (typeof params == "object" && !params.length) { |
||||||
|
|
||||||
|
var settings = $.extend({ |
||||||
|
|
||||||
|
path: 'ZeroClipboard.swf', |
||||||
|
copy: null, |
||||||
|
beforeCopy: null, |
||||||
|
afterCopy: null, |
||||||
|
clickAfter: true, |
||||||
|
setHandCursor: true, |
||||||
|
setCSSEffects: true |
||||||
|
|
||||||
|
}, params); |
||||||
|
|
||||||
|
|
||||||
|
return this.each(function () { |
||||||
|
|
||||||
|
var o = $(this); |
||||||
|
|
||||||
|
if (o.is(':visible') && (typeof settings.copy == 'string' || $.isFunction(settings.copy))) { |
||||||
|
|
||||||
|
ZeroClipboard.setMoviePath(settings.path); |
||||||
|
var clip = new ZeroClipboard.Client(); |
||||||
|
|
||||||
|
if($.isFunction(settings.copy)){ |
||||||
|
o.bind('zClip_copy',settings.copy); |
||||||
|
} |
||||||
|
if($.isFunction(settings.beforeCopy)){ |
||||||
|
o.bind('zClip_beforeCopy',settings.beforeCopy); |
||||||
|
} |
||||||
|
if($.isFunction(settings.afterCopy)){ |
||||||
|
o.bind('zClip_afterCopy',settings.afterCopy); |
||||||
|
}
|
||||||
|
|
||||||
|
clip.setHandCursor(settings.setHandCursor); |
||||||
|
clip.setCSSEffects(settings.setCSSEffects); |
||||||
|
clip.addEventListener('mouseOver', function (client) { |
||||||
|
o.trigger('mouseenter'); |
||||||
|
}); |
||||||
|
clip.addEventListener('mouseOut', function (client) { |
||||||
|
o.trigger('mouseleave'); |
||||||
|
}); |
||||||
|
clip.addEventListener('mouseDown', function (client) { |
||||||
|
|
||||||
|
o.trigger('mousedown'); |
||||||
|
|
||||||
|
if(!$.isFunction(settings.copy)){ |
||||||
|
clip.setText(settings.copy); |
||||||
|
} else { |
||||||
|
clip.setText(o.triggerHandler('zClip_copy')); |
||||||
|
}
|
||||||
|
|
||||||
|
if ($.isFunction(settings.beforeCopy)) { |
||||||
|
o.trigger('zClip_beforeCopy');
|
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
clip.addEventListener('complete', function (client, text) { |
||||||
|
|
||||||
|
if ($.isFunction(settings.afterCopy)) { |
||||||
|
|
||||||
|
o.trigger('zClip_afterCopy'); |
||||||
|
|
||||||
|
} else { |
||||||
|
if (text.length > 500) { |
||||||
|
text = text.substr(0, 500) + "...\n\n(" + (text.length - 500) + " characters not shown)"; |
||||||
|
} |
||||||
|
|
||||||
|
o.removeClass('hover'); |
||||||
|
alert("Copied text to clipboard:\n\n " + text); |
||||||
|
} |
||||||
|
|
||||||
|
if (settings.clickAfter) { |
||||||
|
o.trigger('click'); |
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
|
||||||
|
clip.glue(o[0], o.parent()[0]); |
||||||
|
|
||||||
|
$(window).bind('load resize',function(){clip.reposition();}); |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
} else if (typeof params == "string") { |
||||||
|
|
||||||
|
return this.each(function () { |
||||||
|
|
||||||
|
var o = $(this); |
||||||
|
|
||||||
|
params = params.toLowerCase(); |
||||||
|
var zclipId = o.data('zclipId'); |
||||||
|
var clipElm = $('#' + zclipId + '.zclip'); |
||||||
|
|
||||||
|
if (params == "remove") { |
||||||
|
|
||||||
|
clipElm.remove(); |
||||||
|
o.removeClass('active hover'); |
||||||
|
|
||||||
|
} else if (params == "hide") { |
||||||
|
|
||||||
|
clipElm.hide(); |
||||||
|
o.removeClass('active hover'); |
||||||
|
|
||||||
|
} else if (params == "show") { |
||||||
|
|
||||||
|
clipElm.show(); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
}); |
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
})(jQuery); |
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
// ZeroClipboard
|
||||||
|
// Simple Set Clipboard System
|
||||||
|
// Author: Joseph Huckaby
|
||||||
|
var ZeroClipboard = { |
||||||
|
|
||||||
|
version: "1.0.7", |
||||||
|
clients: {}, |
||||||
|
// registered upload clients on page, indexed by id
|
||||||
|
moviePath: 'ZeroClipboard.swf', |
||||||
|
// URL to movie
|
||||||
|
nextId: 1, |
||||||
|
// ID of next movie
|
||||||
|
$: function (thingy) { |
||||||
|
// simple DOM lookup utility function
|
||||||
|
if (typeof(thingy) == 'string') thingy = document.getElementById(thingy); |
||||||
|
if (!thingy.addClass) { |
||||||
|
// extend element with a few useful methods
|
||||||
|
thingy.hide = function () { |
||||||
|
this.style.display = 'none'; |
||||||
|
}; |
||||||
|
thingy.show = function () { |
||||||
|
this.style.display = ''; |
||||||
|
}; |
||||||
|
thingy.addClass = function (name) { |
||||||
|
this.removeClass(name); |
||||||
|
this.className += ' ' + name; |
||||||
|
}; |
||||||
|
thingy.removeClass = function (name) { |
||||||
|
var classes = this.className.split(/\s+/); |
||||||
|
var idx = -1; |
||||||
|
for (var k = 0; k < classes.length; k++) { |
||||||
|
if (classes[k] == name) { |
||||||
|
idx = k; |
||||||
|
k = classes.length; |
||||||
|
} |
||||||
|
} |
||||||
|
if (idx > -1) { |
||||||
|
classes.splice(idx, 1); |
||||||
|
this.className = classes.join(' '); |
||||||
|
} |
||||||
|
return this; |
||||||
|
}; |
||||||
|
thingy.hasClass = function (name) { |
||||||
|
return !!this.className.match(new RegExp("\\s*" + name + "\\s*")); |
||||||
|
}; |
||||||
|
} |
||||||
|
return thingy; |
||||||
|
}, |
||||||
|
|
||||||
|
setMoviePath: function (path) { |
||||||
|
// set path to ZeroClipboard.swf
|
||||||
|
this.moviePath = path; |
||||||
|
}, |
||||||
|
|
||||||
|
dispatch: function (id, eventName, args) { |
||||||
|
// receive event from flash movie, send to client
|
||||||
|
var client = this.clients[id]; |
||||||
|
if (client) { |
||||||
|
client.receiveEvent(eventName, args); |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
register: function (id, client) { |
||||||
|
// register new client to receive events
|
||||||
|
this.clients[id] = client; |
||||||
|
}, |
||||||
|
|
||||||
|
getDOMObjectPosition: function (obj, stopObj) { |
||||||
|
// get absolute coordinates for dom element
|
||||||
|
var info = { |
||||||
|
left: 0, |
||||||
|
top: 0, |
||||||
|
width: obj.width ? obj.width : obj.offsetWidth, |
||||||
|
height: obj.height ? obj.height : obj.offsetHeight |
||||||
|
}; |
||||||
|
|
||||||
|
if (obj && (obj != stopObj)) { |
||||||
|
info.left += obj.offsetLeft; |
||||||
|
info.top += obj.offsetTop; |
||||||
|
} |
||||||
|
|
||||||
|
return info; |
||||||
|
}, |
||||||
|
|
||||||
|
Client: function (elem) { |
||||||
|
// constructor for new simple upload client
|
||||||
|
this.handlers = {}; |
||||||
|
|
||||||
|
// unique ID
|
||||||
|
this.id = ZeroClipboard.nextId++; |
||||||
|
this.movieId = 'ZeroClipboardMovie_' + this.id; |
||||||
|
|
||||||
|
// register client with singleton to receive flash events
|
||||||
|
ZeroClipboard.register(this.id, this); |
||||||
|
|
||||||
|
// create movie
|
||||||
|
if (elem) this.glue(elem); |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
ZeroClipboard.Client.prototype = { |
||||||
|
|
||||||
|
id: 0, |
||||||
|
// unique ID for us
|
||||||
|
ready: false, |
||||||
|
// whether movie is ready to receive events or not
|
||||||
|
movie: null, |
||||||
|
// reference to movie object
|
||||||
|
clipText: '', |
||||||
|
// text to copy to clipboard
|
||||||
|
handCursorEnabled: true, |
||||||
|
// whether to show hand cursor, or default pointer cursor
|
||||||
|
cssEffects: true, |
||||||
|
// enable CSS mouse effects on dom container
|
||||||
|
handlers: null, |
||||||
|
// user event handlers
|
||||||
|
glue: function (elem, appendElem, stylesToAdd) { |
||||||
|
// glue to DOM element
|
||||||
|
// elem can be ID or actual DOM element object
|
||||||
|
this.domElement = ZeroClipboard.$(elem); |
||||||
|
|
||||||
|
// float just above object, or zIndex 99 if dom element isn't set
|
||||||
|
var zIndex = 99; |
||||||
|
if (this.domElement.style.zIndex) { |
||||||
|
zIndex = parseInt(this.domElement.style.zIndex, 10) + 1; |
||||||
|
} |
||||||
|
|
||||||
|
if (typeof(appendElem) == 'string') { |
||||||
|
appendElem = ZeroClipboard.$(appendElem); |
||||||
|
} else if (typeof(appendElem) == 'undefined') { |
||||||
|
appendElem = document.getElementsByTagName('body')[0]; |
||||||
|
} |
||||||
|
|
||||||
|
// find X/Y position of domElement
|
||||||
|
var box = ZeroClipboard.getDOMObjectPosition(this.domElement, appendElem); |
||||||
|
|
||||||
|
// create floating DIV above element
|
||||||
|
this.div = document.createElement('div'); |
||||||
|
this.div.className = "zclip"; |
||||||
|
this.div.id = "zclip-" + this.movieId; |
||||||
|
$(this.domElement).data('zclipId', 'zclip-' + this.movieId); |
||||||
|
var style = this.div.style; |
||||||
|
style.position = 'absolute'; |
||||||
|
style.left = '' + box.left + 'px'; |
||||||
|
style.top = '' + box.top + 'px'; |
||||||
|
style.width = '' + box.width + 'px'; |
||||||
|
style.height = '' + box.height + 'px'; |
||||||
|
style.zIndex = zIndex; |
||||||
|
|
||||||
|
if (typeof(stylesToAdd) == 'object') { |
||||||
|
for (addedStyle in stylesToAdd) { |
||||||
|
style[addedStyle] = stylesToAdd[addedStyle]; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// style.backgroundColor = '#f00'; // debug
|
||||||
|
appendElem.appendChild(this.div); |
||||||
|
|
||||||
|
this.div.innerHTML = this.getHTML(box.width, box.height); |
||||||
|
}, |
||||||
|
|
||||||
|
getHTML: function (width, height) { |
||||||
|
// return HTML for movie
|
||||||
|
var html = ''; |
||||||
|
var flashvars = 'id=' + this.id + '&width=' + width + '&height=' + height; |
||||||
|
|
||||||
|
if (navigator.userAgent.match(/MSIE/)) { |
||||||
|
// IE gets an OBJECT tag
|
||||||
|
var protocol = location.href.match(/^https/i) ? 'https://' : 'http://'; |
||||||
|
html += '<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="' + protocol + 'download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,0,0" width="' + width + '" height="' + height + '" id="' + this.movieId + '" align="middle"><param name="allowScriptAccess" value="always" /><param name="allowFullScreen" value="false" /><param name="movie" value="' + ZeroClipboard.moviePath + '" /><param name="loop" value="false" /><param name="menu" value="false" /><param name="quality" value="best" /><param name="bgcolor" value="#ffffff" /><param name="flashvars" value="' + flashvars + '"/><param name="wmode" value="transparent"/></object>'; |
||||||
|
} else { |
||||||
|
// all other browsers get an EMBED tag
|
||||||
|
html += '<embed id="' + this.movieId + '" src="' + ZeroClipboard.moviePath + '" loop="false" menu="false" quality="best" bgcolor="#ffffff" width="' + width + '" height="' + height + '" name="' + this.movieId + '" align="middle" allowScriptAccess="always" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" flashvars="' + flashvars + '" wmode="transparent" />'; |
||||||
|
} |
||||||
|
return html; |
||||||
|
}, |
||||||
|
|
||||||
|
hide: function () { |
||||||
|
// temporarily hide floater offscreen
|
||||||
|
if (this.div) { |
||||||
|
this.div.style.left = '-2000px'; |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
show: function () { |
||||||
|
// show ourselves after a call to hide()
|
||||||
|
this.reposition(); |
||||||
|
}, |
||||||
|
|
||||||
|
destroy: function () { |
||||||
|
// destroy control and floater
|
||||||
|
if (this.domElement && this.div) { |
||||||
|
this.hide(); |
||||||
|
this.div.innerHTML = ''; |
||||||
|
|
||||||
|
var body = document.getElementsByTagName('body')[0]; |
||||||
|
try { |
||||||
|
body.removeChild(this.div); |
||||||
|
} catch (e) {; |
||||||
|
} |
||||||
|
|
||||||
|
this.domElement = null; |
||||||
|
this.div = null; |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
reposition: function (elem) { |
||||||
|
// reposition our floating div, optionally to new container
|
||||||
|
// warning: container CANNOT change size, only position
|
||||||
|
if (elem) { |
||||||
|
this.domElement = ZeroClipboard.$(elem); |
||||||
|
if (!this.domElement) this.hide(); |
||||||
|
} |
||||||
|
|
||||||
|
if (this.domElement && this.div) { |
||||||
|
var box = ZeroClipboard.getDOMObjectPosition(this.domElement); |
||||||
|
var style = this.div.style; |
||||||
|
style.left = '' + box.left + 'px'; |
||||||
|
style.top = '' + box.top + 'px'; |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
setText: function (newText) { |
||||||
|
// set text to be copied to clipboard
|
||||||
|
this.clipText = newText; |
||||||
|
if (this.ready) { |
||||||
|
this.movie.setText(newText); |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
addEventListener: function (eventName, func) { |
||||||
|
// add user event listener for event
|
||||||
|
// event types: load, queueStart, fileStart, fileComplete, queueComplete, progress, error, cancel
|
||||||
|
eventName = eventName.toString().toLowerCase().replace(/^on/, ''); |
||||||
|
if (!this.handlers[eventName]) { |
||||||
|
this.handlers[eventName] = []; |
||||||
|
} |
||||||
|
this.handlers[eventName].push(func); |
||||||
|
}, |
||||||
|
|
||||||
|
setHandCursor: function (enabled) { |
||||||
|
// enable hand cursor (true), or default arrow cursor (false)
|
||||||
|
this.handCursorEnabled = enabled; |
||||||
|
if (this.ready) { |
||||||
|
this.movie.setHandCursor(enabled); |
||||||
|
} |
||||||
|
}, |
||||||
|
|
||||||
|
setCSSEffects: function (enabled) { |
||||||
|
// enable or disable CSS effects on DOM container
|
||||||
|
this.cssEffects = !! enabled; |
||||||
|
}, |
||||||
|
|
||||||
|
receiveEvent: function (eventName, args) { |
||||||
|
// receive event from flash
|
||||||
|
eventName = eventName.toString().toLowerCase().replace(/^on/, ''); |
||||||
|
|
||||||
|
// special behavior for certain events
|
||||||
|
switch (eventName) { |
||||||
|
case 'load': |
||||||
|
// movie claims it is ready, but in IE this isn't always the case...
|
||||||
|
// bug fix: Cannot extend EMBED DOM elements in Firefox, must use traditional function
|
||||||
|
this.movie = document.getElementById(this.movieId); |
||||||
|
if (!this.movie) { |
||||||
|
var self = this; |
||||||
|
setTimeout(function () { |
||||||
|
self.receiveEvent('load', null); |
||||||
|
}, 1); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
// firefox on pc needs a "kick" in order to set these in certain cases
|
||||||
|
if (!this.ready && navigator.userAgent.match(/Firefox/) && navigator.userAgent.match(/Windows/)) { |
||||||
|
var self = this; |
||||||
|
setTimeout(function () { |
||||||
|
self.receiveEvent('load', null); |
||||||
|
}, 100); |
||||||
|
this.ready = true; |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
this.ready = true; |
||||||
|
try { |
||||||
|
this.movie.setText(this.clipText); |
||||||
|
} catch (e) {} |
||||||
|
try { |
||||||
|
this.movie.setHandCursor(this.handCursorEnabled); |
||||||
|
} catch (e) {} |
||||||
|
break; |
||||||
|
|
||||||
|
case 'mouseover': |
||||||
|
if (this.domElement && this.cssEffects) { |
||||||
|
this.domElement.addClass('hover'); |
||||||
|
if (this.recoverActive) { |
||||||
|
this.domElement.addClass('active'); |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
break; |
||||||
|
|
||||||
|
case 'mouseout': |
||||||
|
if (this.domElement && this.cssEffects) { |
||||||
|
this.recoverActive = false; |
||||||
|
if (this.domElement.hasClass('active')) { |
||||||
|
this.domElement.removeClass('active'); |
||||||
|
this.recoverActive = true; |
||||||
|
} |
||||||
|
this.domElement.removeClass('hover'); |
||||||
|
|
||||||
|
} |
||||||
|
break; |
||||||
|
|
||||||
|
case 'mousedown': |
||||||
|
if (this.domElement && this.cssEffects) { |
||||||
|
this.domElement.addClass('active'); |
||||||
|
} |
||||||
|
break; |
||||||
|
|
||||||
|
case 'mouseup': |
||||||
|
if (this.domElement && this.cssEffects) { |
||||||
|
this.domElement.removeClass('active'); |
||||||
|
this.recoverActive = false; |
||||||
|
} |
||||||
|
break; |
||||||
|
} // switch eventName
|
||||||
|
if (this.handlers[eventName]) { |
||||||
|
for (var idx = 0, len = this.handlers[eventName].length; idx < len; idx++) { |
||||||
|
var func = this.handlers[eventName][idx]; |
||||||
|
|
||||||
|
if (typeof(func) == 'function') { |
||||||
|
// actual function reference
|
||||||
|
func(this, args); |
||||||
|
} else if ((typeof(func) == 'object') && (func.length == 2)) { |
||||||
|
// PHP style object + method, i.e. [myObject, 'myMethod']
|
||||||
|
func[0][func[1]](this, args); |
||||||
|
} else if (typeof(func) == 'string') { |
||||||
|
// name of function
|
||||||
|
window[func](this, args); |
||||||
|
} |
||||||
|
} // foreach event handler defined
|
||||||
|
} // user defined handler for event
|
||||||
|
} |
||||||
|
|
||||||
|
};
|
||||||
|
|
Loading…
Reference in new issue