61 unsigned _changeCount;
64 WebScriptObject _nativePasteboard;
79 if (typeof window.cpPasteboardWithName !==
"undefined")
86 + (id)generalPasteboard
98 var pasteboard = [CPPasteboards objectForKey: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];
189 var count = _types.length;
192 [_owners setObject:anOwner forKey:_types[count]];
194 if (_nativePasteboard && shouldUpdate)
196 var nativeTypes = [types
copy];
200 _nativePasteboard.declareTypes_(nativeTypes);
201 _changeCount = _nativePasteboard.changeCount();
203 return ++_changeCount;
214 [_provided setObject:aData forKey:aType];
216 if (aType === CPStringPboardType)
228 - (BOOL)setPropertyList:(
id)aPropertyList forType:(
CPString)aType
261 [
self _synchronizePasteboard];
269 - (unsigned)changeCount
281 var data = [_provided objectForKey:aType];
286 var owner = [_owners objectForKey:aType];
290 [owner pasteboard:self provideDataForType:aType];
291 return [_provided objectForKey:aType];
300 - (void)_synchronizePasteboard
302 if (_nativePasteboard && _nativePasteboard.changeCount() > _changeCount)
304 var nativeTypes = [_nativePasteboard.types() copy];
308 [
self _declareTypes:nativeTypes owner:self updateNativePasteboard:NO];
310 _changeCount = _nativePasteboard.changeCount();
321 var
string = _nativePasteboard.stringForType_(UTF8PboardType);
363 _stateUID += FLOOR(RAND() * 16.0).toString(16).toUpperCase();
378 var DOMDataTransferPasteboard = nil;
380 @implementation _CPDOMDataTransferPasteboard :
CPPasteboard
382 DataTransfer _dataTransfer;
385 + (_CPDOMDataTransferPasteboard)DOMDataTransferPasteboard
387 if (!DOMDataTransferPasteboard)
388 DOMDataTransferPasteboard = [[_CPDOMDataTransferPasteboard alloc] init];
390 return DOMDataTransferPasteboard;
393 - (void)_setDataTransfer:(DataTransfer)aDataTransfer
395 _dataTransfer = aDataTransfer;
400 _dataTransfer.clearData();
402 var types = [aPasteboard
types],
403 count = types.length;
407 var type = types[count];
410 _dataTransfer.setData(type, [aPasteboard stringForType:type]);
412 _dataTransfer.setData(type, [[aPasteboard dataForType:type] rawString]);
418 return Array.prototype.slice.apply(_dataTransfer.types);
423 var dataString = _dataTransfer.getData(aType);
426 return [
CPData dataFromPropertyList:dataString format:kCFPropertyList280NorthFormat_v1_0];
431 - (id)propertyListForType:(
CPString)aType
434 return _dataTransfer.getData(aType);