62 unsigned _changeCount;
80 if (typeof window.cpPasteboardWithName !==
"undefined")
87 + (id)generalPasteboard
99 var pasteboard = [CPPasteboards objectForKey:aName];
105 [CPPasteboards setObject:pasteboard forKey:aName];
127 _nativePasteboard = window.cpPasteboardWithName(aName);
128 [
self _synchronizePasteboard];
141 - (unsigned)addTypes:(CPArray)types owner:(
id)anOwner
144 count = types.length;
146 for (; i < count; ++i)
150 if (![_owners objectForKey:type])
152 [_types addObject:type];
153 [_provided removeObjectForKey:type];
156 [_owners setObject:anOwner forKey:type];
159 if (_nativePasteboard)
161 var nativeTypes = [types copy];
165 _nativePasteboard.addTypes_(nativeTypes);
168 return ++_changeCount;
177 - (unsigned)declareTypes:(CPArray)types owner:(
id)anOwner
179 [
self _declareTypes:types owner:anOwner updateNativePasteboard:YES];
183 - (unsigned)_declareTypes:(CPArray)types owner:(
id)anOwner updateNativePasteboard:(BOOL)shouldUpdate
185 [_types setArray:types];
192 var count = _types.length;
194 [_owners setObject:anOwner forKey:_types[count]];
197 if (_nativePasteboard && shouldUpdate)
199 var nativeTypes = [types copy];
203 _nativePasteboard.declareTypes_(nativeTypes);
204 _changeCount = _nativePasteboard.changeCount();
207 return ++_changeCount;
218 [_provided setObject:aData forKey:aType];
220 if (aType === CPStringPboardType)
232 - (BOOL)setPropertyList:(
id)aPropertyList forType:(
CPString)aType
246 if (aString && aString.isa && ![aString isKindOfClass:
CPString])
247 [
CPException raise:CPInvalidArgumentException
reason:"CPPasteboard setString:forType: must be called with a string."];
259 - (
CPString)availableTypeFromArray:(CPArray)anArray
261 return [anArray firstObjectCommonWithArray:[
self types]];
269 [
self _synchronizePasteboard];
277 - (unsigned)changeCount
289 var data = [_provided objectForKey:aType];
294 var owner = [_owners objectForKey:aType];
298 [owner pasteboard:self provideDataForType:aType];
299 return [_provided objectForKey:aType];
308 - (void)_synchronizePasteboard
310 if (_nativePasteboard && _nativePasteboard.changeCount() > _changeCount)
312 var nativeTypes = [_nativePasteboard.types() copy];
316 [
self _declareTypes:nativeTypes owner:self updateNativePasteboard:NO];
318 _changeCount = _nativePasteboard.changeCount();
329 var
string = _nativePasteboard.stringForType_(UTF8PboardType);
371 _stateUID += FLOOR(RAND() * 16.0).
toString(16).toUpperCase();
386 var DOMDataTransferPasteboard = nil;
388 @implementation _CPDOMDataTransferPasteboard :
CPPasteboard
390 DataTransfer _dataTransfer;
393 + (_CPDOMDataTransferPasteboard)DOMDataTransferPasteboard
395 if (!DOMDataTransferPasteboard)
396 DOMDataTransferPasteboard = [[_CPDOMDataTransferPasteboard alloc] init];
398 return DOMDataTransferPasteboard;
401 - (void)_setDataTransfer:(DataTransfer)aDataTransfer
403 _dataTransfer = aDataTransfer;
408 _dataTransfer.clearData();
410 var types = [aPasteboard
types],
411 count = types.length;
415 var type = types[count];
418 _dataTransfer.setData(type, [aPasteboard stringForType:type]);
420 _dataTransfer.setData(type, [[aPasteboard dataForType:type] rawString]);
426 return Array.prototype.slice.apply(_dataTransfer.types);
431 var dataString = _dataTransfer.getData(aType);
434 return [
CPData dataFromPropertyList:dataString format:kCFPropertyList280NorthFormat_v1_0];
439 - (id)propertyListForType:(
CPString)aType
442 return _dataTransfer.getData(aType);