61 unsigned _changeCount;
64 WebScriptObject _nativePasteboard;
75 [
self setVersion:1.0];
79 if (typeof window.cpPasteboardWithName !==
"undefined")
86 + (id)generalPasteboard
98 var pasteboard = [CPPasteboards objectForKey:aName];
103 pasteboard = [[
CPPasteboard alloc] _initWithName:aName];
104 [CPPasteboards setObject:pasteboard forKey:aName];
126 _nativePasteboard = window.cpPasteboardWithName(aName);
127 [
self _synchronizePasteboard];
140 - (unsigned)addTypes:(CPArray)types owner:(
id)anOwner
143 count = types.length;
145 for (; i < count; ++i)
149 if (![_owners objectForKey:type])
151 [_types addObject:type];
152 [_provided removeObjectForKey:type];
155 [_owners setObject:anOwner forKey:type];
158 if (_nativePasteboard)
160 var nativeTypes = [types copy];
164 _nativePasteboard.addTypes_(nativeTypes);
167 return ++_changeCount;
176 - (unsigned)declareTypes:(CPArray)types owner:(
id)anOwner
178 [
self _declareTypes:types owner:anOwner updateNativePasteboard:YES];
182 - (unsigned)_declareTypes:(CPArray)types owner:(
id)anOwner updateNativePasteboard:(BOOL)shouldUpdate
184 [_types setArray:types];
191 var count = _types.length;
193 [_owners setObject:anOwner forKey:_types[count]];
196 if (_nativePasteboard && shouldUpdate)
198 var nativeTypes = [types copy];
202 _nativePasteboard.declareTypes_(nativeTypes);
203 _changeCount = _nativePasteboard.changeCount();
206 return ++_changeCount;
217 [_provided setObject:aData forKey:aType];
219 if (aType === CPStringPboardType)
231 - (BOOL)setPropertyList:(
id)aPropertyList forType:(
CPString)aType
245 if (aString && aString.isa && ![aString isKindOfClass:
CPString])
246 [
CPException raise:CPInvalidArgumentException
reason:"CPPasteboard setString:forType: must be called with a string."];
258 - (
CPString)availableTypeFromArray:(CPArray)anArray
260 return [anArray firstObjectCommonWithArray:[
self types]];
268 [
self _synchronizePasteboard];
276 - (unsigned)changeCount
288 var data = [_provided objectForKey:aType];
293 var owner = [_owners objectForKey:aType];
297 [owner pasteboard:self provideDataForType:aType];
298 return [_provided objectForKey:aType];
307 - (void)_synchronizePasteboard
309 if (_nativePasteboard && _nativePasteboard.changeCount() > _changeCount)
311 var nativeTypes = [_nativePasteboard.types() copy];
315 [
self _declareTypes:nativeTypes owner:self updateNativePasteboard:NO];
317 _changeCount = _nativePasteboard.changeCount();
328 var
string = _nativePasteboard.stringForType_(UTF8PboardType);
370 _stateUID += FLOOR(RAND() * 16.0).toString(16).toUpperCase();
385 var DOMDataTransferPasteboard = nil;
387 @implementation _CPDOMDataTransferPasteboard :
CPPasteboard
389 DataTransfer _dataTransfer;
392 + (_CPDOMDataTransferPasteboard)DOMDataTransferPasteboard
394 if (!DOMDataTransferPasteboard)
395 DOMDataTransferPasteboard = [[_CPDOMDataTransferPasteboard alloc] init];
397 return DOMDataTransferPasteboard;
400 - (void)_setDataTransfer:(DataTransfer)aDataTransfer
402 _dataTransfer = aDataTransfer;
407 _dataTransfer.clearData();
409 var types = [aPasteboard
types],
410 count = types.length;
414 var type = types[count];
417 _dataTransfer.setData(type, [aPasteboard stringForType:type]);
419 _dataTransfer.setData(type, [[aPasteboard dataForType:type] rawString]);
425 return Array.prototype.slice.apply(_dataTransfer.types);
430 var dataString = _dataTransfer.getData(aType);
433 return [
CPData dataFromPropertyList:dataString format:kCFPropertyList280NorthFormat_v1_0];
438 - (id)propertyListForType:(
CPString)aType
441 return _dataTransfer.getData(aType);