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