OpmlStore.js
资源名称:oa.rar [点击查看]
上传用户:kimgenplus
上传日期:2016-06-05
资源大小:20877k
文件大小:5k
源码类别:
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.data.OpmlStore");
- dojo.require("dojo.data.core.Read");
- dojo.require("dojo.data.core.Result");
- dojo.require("dojo.lang.assert");
- dojo.require("dojo.json");
- dojo.require("dojo.experimental");
- dojo.experimental("dojo.data.OpmlStore");
- dojo.declare("dojo.data.OpmlStore", dojo.data.core.Read, {initializer:function (keywordParameters) {
- this._arrayOfTopLevelItems = [];
- this._metadataNodes = null;
- this._loadFinished = false;
- this._opmlFileUrl = keywordParameters["url"];
- }, _assertIsItem:function (item) {
- if (!this.isItem(item)) {
- throw new Error("dojo.data.OpmlStore: a function was passed an item argument that was not an item");
- }
- }, _removeChildNodesThatAreNotElementNodes:function (node, recursive) {
- var childNodes = node.childNodes;
- if (childNodes.length == 0) {
- return;
- }
- var nodesToRemove = [];
- var i, childNode;
- for (i = 0; i < childNodes.length; ++i) {
- childNode = childNodes[i];
- if (childNode.nodeType != Node.ELEMENT_NODE) {
- nodesToRemove.push(childNode);
- }
- }
- for (i = 0; i < nodesToRemove.length; ++i) {
- childNode = nodesToRemove[i];
- node.removeChild(childNode);
- }
- if (recursive) {
- for (i = 0; i < childNodes.length; ++i) {
- childNode = childNodes[i];
- this._removeChildNodesThatAreNotElementNodes(childNode, recursive);
- }
- }
- }, _processRawXmlTree:function (rawXmlTree) {
- var headNodes = rawXmlTree.getElementsByTagName("head");
- var headNode = headNodes[0];
- this._removeChildNodesThatAreNotElementNodes(headNode);
- this._metadataNodes = headNode.childNodes;
- var bodyNodes = rawXmlTree.getElementsByTagName("body");
- var bodyNode = bodyNodes[0];
- this._removeChildNodesThatAreNotElementNodes(bodyNode, true);
- var bodyChildNodes = bodyNodes[0].childNodes;
- for (var i = 0; i < bodyChildNodes.length; ++i) {
- var node = bodyChildNodes[i];
- if (node.tagName == "outline") {
- this._arrayOfTopLevelItems.push(node);
- }
- }
- }, get:function (item, attribute, defaultValue) {
- this._assertIsItem(item);
- if (attribute == "children") {
- return (item.firstChild || defaultValue);
- } else {
- var value = item.getAttribute(attribute);
- value = (value != undefined) ? value : defaultValue;
- return value;
- }
- }, getValues:function (item, attribute) {
- this._assertIsItem(item);
- if (attribute == "children") {
- var array = [];
- for (var i = 0; i < item.childNodes.length; ++i) {
- array.push(item.childNodes[i]);
- }
- return array;
- } else {
- return [item.getAttribute(attribute)];
- }
- }, getAttributes:function (item) {
- this._assertIsItem(item);
- var attributes = [];
- var xmlNode = item;
- var xmlAttributes = xmlNode.attributes;
- for (var i = 0; i < xmlAttributes.length; ++i) {
- var xmlAttribute = xmlAttributes.item(i);
- attributes.push(xmlAttribute.nodeName);
- }
- if (xmlNode.childNodes.length > 0) {
- attributes.push("children");
- }
- return attributes;
- }, hasAttribute:function (item, attribute) {
- return (this.getValues(item, attribute).length > 0);
- }, containsValue:function (item, attribute, value) {
- var values = this.getValues(item, attribute);
- for (var i = 0; i < values.length; ++i) {
- var possibleValue = values[i];
- if (value == possibleValue) {
- return true;
- }
- }
- return false;
- }, isItem:function (something) {
- return (something && something.nodeType == Node.ELEMENT_NODE && something.tagName == "outline");
- }, isItemAvailable:function (something) {
- return this.isItem(something);
- }, find:function (keywordArgs) {
- var result = null;
- if (keywordArgs instanceof dojo.data.core.Result) {
- result = keywordArgs;
- result.store = this;
- } else {
- result = new dojo.data.core.Result(keywordArgs, this);
- }
- var self = this;
- var bindHandler = function (type, data, evt) {
- var scope = result.scope || dj_global;
- if (type == "load") {
- self._processRawXmlTree(data);
- if (result.saveResult) {
- result.items = self._arrayOfTopLevelItems;
- }
- if (result.onbegin) {
- result.onbegin.call(scope, result);
- }
- for (var i = 0; i < self._arrayOfTopLevelItems.length; i++) {
- var item = self._arrayOfTopLevelItems[i];
- if (result.onnext && !result._aborted) {
- result.onnext.call(scope, item, result);
- }
- }
- if (result.oncompleted && !result._aborted) {
- result.oncompleted.call(scope, result);
- }
- } else {
- if (type == "error" || type == "timeout") {
- var errorObject = data;
- if (result.onerror) {
- result.onerror.call(scope, data);
- }
- }
- }
- };
- if (!this._loadFinished) {
- if (this._opmlFileUrl) {
- var bindRequest = dojo.io.bind({url:this._opmlFileUrl, handle:bindHandler, mimetype:"text/xml", sync:(result.sync || false)});
- result._abortFunc = bindRequest.abort;
- }
- }
- return result;
- }, getIdentity:function (item) {
- dojo.unimplemented("dojo.data.OpmlStore.getIdentity()");
- return null;
- }, findByIdentity:function (identity) {
- dojo.unimplemented("dojo.data.OpmlStore.findByIdentity()");
- return null;
- }});