behavior.js
资源名称:oa.rar [点击查看]
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:4k
源码类别:
OA系统
开发平台:
Java
- /*
- Copyright (c) 2004-2006, The Dojo Foundation
- All Rights Reserved.
- Licensed under the Academic Free License version 2.1 or above OR the
- modified BSD license. For more information on Dojo licensing, see:
- http://dojotoolkit.org/community/licensing.shtml
- */
- dojo.provide("dojo.behavior");
- dojo.require("dojo.event.*");
- dojo.require("dojo.experimental");
- dojo.experimental("dojo.behavior");
- dojo.behavior = new function () {
- function arrIn(obj, name) {
- if (!obj[name]) {
- obj[name] = [];
- }
- return obj[name];
- }
- function forIn(obj, scope, func) {
- var tmpObj = {};
- for (var x in obj) {
- if (typeof tmpObj[x] == "undefined") {
- if (!func) {
- scope(obj[x], x);
- } else {
- func.call(scope, obj[x], x);
- }
- }
- }
- }
- this.behaviors = {};
- this.add = function (behaviorObj) {
- var tmpObj = {};
- forIn(behaviorObj, this, function (behavior, name) {
- var tBehavior = arrIn(this.behaviors, name);
- if ((dojo.lang.isString(behavior)) || (dojo.lang.isFunction(behavior))) {
- behavior = {found:behavior};
- }
- forIn(behavior, function (rule, ruleName) {
- arrIn(tBehavior, ruleName).push(rule);
- });
- });
- };
- this.apply = function () {
- dojo.profile.start("dojo.behavior.apply");
- var r = dojo.render.html;
- var safariGoodEnough = (!r.safari);
- if (r.safari) {
- var uas = r.UA.split("AppleWebKit/")[1];
- if (parseInt(uas.match(/[0-9.]{3,}/)) >= 420) {
- safariGoodEnough = true;
- }
- }
- if ((dj_undef("behaviorFastParse", djConfig) ? (safariGoodEnough) : djConfig["behaviorFastParse"])) {
- this.applyFast();
- } else {
- this.applySlow();
- }
- dojo.profile.end("dojo.behavior.apply");
- };
- this.matchCache = {};
- this.elementsById = function (id, handleRemoved) {
- var removed = [];
- var added = [];
- arrIn(this.matchCache, id);
- if (handleRemoved) {
- var nodes = this.matchCache[id];
- for (var x = 0; x < nodes.length; x++) {
- if (nodes[x].id != "") {
- removed.push(nodes[x]);
- nodes.splice(x, 1);
- x--;
- }
- }
- }
- var tElem = dojo.byId(id);
- while (tElem) {
- if (!tElem["idcached"]) {
- added.push(tElem);
- }
- tElem.id = "";
- tElem = dojo.byId(id);
- }
- this.matchCache[id] = this.matchCache[id].concat(added);
- dojo.lang.forEach(this.matchCache[id], function (node) {
- node.id = id;
- node.idcached = true;
- });
- return {"removed":removed, "added":added, "match":this.matchCache[id]};
- };
- this.applyToNode = function (node, action, ruleSetName) {
- if (typeof action == "string") {
- dojo.event.topic.registerPublisher(action, node, ruleSetName);
- } else {
- if (typeof action == "function") {
- if (ruleSetName == "found") {
- action(node);
- } else {
- dojo.event.connect(node, ruleSetName, action);
- }
- } else {
- action.srcObj = node;
- action.srcFunc = ruleSetName;
- dojo.event.kwConnect(action);
- }
- }
- };
- this.applyFast = function () {
- dojo.profile.start("dojo.behavior.applyFast");
- forIn(this.behaviors, function (tBehavior, id) {
- var elems = dojo.behavior.elementsById(id);
- dojo.lang.forEach(elems.added, function (elem) {
- forIn(tBehavior, function (ruleSet, ruleSetName) {
- if (dojo.lang.isArray(ruleSet)) {
- dojo.lang.forEach(ruleSet, function (action) {
- dojo.behavior.applyToNode(elem, action, ruleSetName);
- });
- }
- });
- });
- });
- dojo.profile.end("dojo.behavior.applyFast");
- };
- this.applySlow = function () {
- dojo.profile.start("dojo.behavior.applySlow");
- var all = document.getElementsByTagName("*");
- var allLen = all.length;
- for (var x = 0; x < allLen; x++) {
- var elem = all[x];
- if ((elem.id) && (!elem["behaviorAdded"]) && (this.behaviors[elem.id])) {
- elem["behaviorAdded"] = true;
- forIn(this.behaviors[elem.id], function (ruleSet, ruleSetName) {
- if (dojo.lang.isArray(ruleSet)) {
- dojo.lang.forEach(ruleSet, function (action) {
- dojo.behavior.applyToNode(elem, action, ruleSetName);
- });
- }
- });
- }
- }
- dojo.profile.end("dojo.behavior.applySlow");
- };
- };
- dojo.addOnLoad(dojo.behavior, "apply");