123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161 |
- define("dojox/data/CssClassStore", ["dojo/_base/declare","dojox/data/CssRuleStore"],
- function(declare, CssRuleStore) {
- /*===== var CssRuleStore = dojox.data.CssRuleStore =====*/
- return declare("dojox.data.CssClassStore", CssRuleStore, {
- // summary:
- // Basic store to display CSS information.
- // description:
- // The CssClassStore allows users to get information about active Css classes in the page running the CssClassStore.
- // It can also filter out classes from specific stylesheets. The attributes it exposes on classes are as follows:
- // class: The classname, including the '.'.
- // classSans: The classname without the '.'.
- _labelAttribute: 'class', // text representation of the Item [label and identifier may need to stay due to method names]
- _idAttribute: 'class',
- _cName: "dojox.data.CssClassStore",
- getFeatures: function(){
- // summary:
- // See dojo.data.api.Read.getFeatures()
- return {
- "dojo.data.api.Read" : true,
- "dojo.data.api.Identity" : true
- };
- },
- getAttributes: function(item){
- // summary:
- // See dojo.data.api.Read.getAttributes()
- this._assertIsItem(item);
- return ['class', 'classSans'];
- },
- getValue: function(item, attribute, defaultValue){
- // summary:
- // See dojo.data.api.Read.getValue()
- var values = this.getValues(item, attribute);
- if(values && values.length > 0){
- return values[0];
- }
- return defaultValue;
- },
- getValues: function(item, attribute){
- // summary:
- // See dojo.data.api.Read.getValues()
- this._assertIsItem(item);
- this._assertIsAttribute(attribute);
- var value = [];
- if(attribute === "class"){
- value = [item.className];
- }else if(attribute === "classSans"){
- value = [item.className.replace(/\./g,'')];
- }
- return value;
- },
- _handleRule: function(rule, styleSheet, href){
- // summary:
- // Handles the creation of an item based on the passed rule. In this store, this implies
- // parsing out all available class names.
- var obj = {};
- var s = rule['selectorText'].split(" ");
- for(var j=0; j<s.length; j++){
- var tmp = s[j];
- var first = tmp.indexOf('.');
- if(tmp && tmp.length > 0 && first !== -1){
- var last = tmp.indexOf(',') || tmp.indexOf('[');
- tmp = tmp.substring(first, ((last !== -1 && last > first)?last:tmp.length));
- obj[tmp] = true;
- }
- }
- for(var key in obj){
- if(!this._allItems[key]){
- var item = {};
- item.className = key;
- item[this._storeRef] = this;
- this._allItems[key] = item;
- }
- }
- },
- _handleReturn: function(){
- // summary:
- // Handles the return from a fetching action. Delegates requests to act on the resulting
- // item set to eitehr the _handleFetchReturn or _handleFetchByIdentityReturn depending on
- // where the request originated.
- var _inProgress = [];
-
- var items = {};
- for(var i in this._allItems){
- items[i] = this._allItems[i];
- }
- var requestInfo;
- // One-level deep clone (can't use dojo.clone, since we don't want to clone all those store refs!)
- while(this._pending.length){
- requestInfo = this._pending.pop();
- requestInfo.request._items = items;
- _inProgress.push(requestInfo);
- }
- while(_inProgress.length){
- requestInfo = _inProgress.pop();
- if(requestInfo.fetch){
- this._handleFetchReturn(requestInfo.request);
- }else{
- this._handleFetchByIdentityReturn(requestInfo.request);
- }
- }
- },
- _handleFetchByIdentityReturn: function(request){
- // summary:
- // Handles a fetchByIdentity request by finding the correct item.
- var items = request._items;
- // Per https://bugs.webkit.org/show_bug.cgi?id=17935 , Safari 3.x always returns the selectorText
- // of a rule in full lowercase.
- var item = items[request.identity];
- if(!this.isItem(item)){
- item = null;
- }
- if(request.onItem){
- var scope = request.scope || dojo.global;
- request.onItem.call(scope, item);
- }
- },
- /* Identity API */
- getIdentity: function(/* item */ item){
- // summary:
- // See dojo.data.api.Identity.getIdentity()
- this._assertIsItem(item);
- return this.getValue(item, this._idAttribute);
- },
- getIdentityAttributes: function(/* item */ item){
- // summary:
- // See dojo.data.api.Identity.getIdentityAttributes()
- this._assertIsItem(item);
- return [this._idAttribute];
- },
- fetchItemByIdentity: function(/* request */ request){
- // summary:
- // See dojo.data.api.Identity.fetchItemByIdentity()
- request = request || {};
- if(!request.store){
- request.store = this;
- }
- if(this._pending && this._pending.length > 0){
- this._pending.push({request: request});
- }else{
- this._pending = [{request: request}];
- this._fetch(request);
- }
- return request;
- }
- });
- });
|