Template Upload

This commit is contained in:
SOUTHERNCO\x2mjbyrn
2017-05-17 13:45:25 -04:00
parent 415b9c25f3
commit 7efe7605b8
11476 changed files with 2170865 additions and 34 deletions

4
node_modules/weinre/.npmignore generated vendored Normal file
View File

@ -0,0 +1,4 @@
.DS_Store
.git*
Makefile
test/

544
node_modules/weinre/LICENSE generated vendored Normal file
View File

@ -0,0 +1,544 @@
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright [yyyy] [name of copyright owner]
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
==============================================================
This product also include the following software:
==============================================================
------------------------------------------
WebKit Web Inspector
http://webkit.org
------------------------------------------
Copyright (C) 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserved.
Copyright (C) 2007, 2008 Matt Lilek (pe...@gmail.com).
Copyright (C) 2008, 2009 Anthony Ricaud <ri...@webkit.org>
Copyright (C) 2008 Nokia Inc. All rights reserved.
Copyright (C) 2009 IBM Corp. All rights reserved.
Copyright (C) 2009, 2010, 2011 Google Inc. All rights reserved.
Copyright (C) 2009, 2010 Joseph Pecoraro
Copyright (C) 2009 280 North Inc. All Rights Reserved.
Copyright (C) 2010 Nikita Vasilyev. All rights reserved.
Note that although WebKit in general contains both BSD and LGPL
licensed code, the WebKit Web Inspector code is all BSD licensed
with no LGPL code.
The wording of the license comments in the source files is not consistent,
but corresponds to traditional BSD licenses. The license in some files also
include one of the following conditions:
* Neither the name of Google Inc. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
* Neither the name of Apple Computer, Inc. ("Apple") nor the names of
its contributors may be used to endorse or promote products derived
from this software without specific prior written permission.
* Neither the name of IBM Corp. nor the names of its
contributors may be used to endorse or promote products derived from
this software without specific prior written permission.
------------------------------------------
UglifyJS
https://github.com/mishoo/UglifyJS
------------------------------------------
Note that UglifyJS is shipped with WebKit Web Inspector.
Author: Mihai Bazon
<mihai.bazon@gmail.com>
http://mihai.bazon.net/blog
Distributed under the BSD license:
Copyright 2010 (c) Mihai Bazon <mihai.bazon@gmail.com>
Based on parse-js (http://marijn.haverbeke.nl/parse-js/).
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
* Redistributions of source code must retain the above
copyright notice, this list of conditions and the following
disclaimer.
* Redistributions in binary form must reproduce the above
copyright notice, this list of conditions and the following
disclaimer in the documentation and/or other materials
provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER “AS IS” AND ANY
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER BE
LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY,
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.
------------------------------------------
coffee-script 1.2.0 via npmjs.org
https://github.com/jashkenas/coffee-script
------------------------------------------
Copyright (c) 2011 Jeremy Ashkenas
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------
express 2.5.7 via npmjs.org
https://github.com/visionmedia/express
------------------------------------------
(The MIT License)
Copyright (c) 2009-2011 TJ Holowaychuk <tj@vision-media.ca>
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------
connect 1.8.5 via npmjs.org
https://github.com/senchalabs/connect
------------------------------------------
(The MIT License)
Copyright (c) 2010 Sencha Inc.
Copyright (c) 2011 LearnBoost
Copyright (c) 2011 TJ Holowaychuk
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------
formidable 1.0.9 via npmjs.org
https://github.com/felixge/node-formidable
------------------------------------------
According to the Readme.md file in the Formidable library:
"Formidable is licensed under the MIT license."
------------------------------------------
mime 1.2.5 via npmjs.org
https://github.com/bentomas/node-mime
------------------------------------------
Copyright (c) 2010 Benjamin Thomas, Robert Kieffer
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
------------------------------------------
mkdirp 0.0.7 via npmjs.org
https://github.com/substack/node-mkdirp
------------------------------------------
Copyright 2010 James Halliday (mail@substack.net)
This project is free software released under the MIT/X11 license:
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
------------------------------------------
qs 0.4.2 via npmjs.org
https://github.com/visionmedia/node-querystring
------------------------------------------
(The MIT License)
Copyright (c) 2010 TJ Holowaychuk &lt;tj@vision-media.ca&gt;
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
'Software'), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------
nopt 1.0.10 via npmjs.org
https://github.com/isaacs/nopt
------------------------------------------
Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
All rights reserved.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------
abbrev 1.0.3 via npmjs.org
https://github.com/isaacs/abbrev-js
------------------------------------------
Copyright 2009, 2010, 2011 Isaac Z. Schlueter.
All rights reserved.
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.
------------------------------------------
underscore 1.3.1 via npmjs.org
https://github.com/documentcloud/underscore
------------------------------------------
Copyright (c) 2009-2012 Jeremy Ashkenas, DocumentCloud
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

5
node_modules/weinre/NOTICE generated vendored Normal file
View File

@ -0,0 +1,5 @@
Apache Cordova weinre
Copyright 2012 The Apache Software Foundation
This product includes software developed at
The Apache Software Foundation (http://www.apache.org/).

59
node_modules/weinre/README.md generated vendored Normal file
View File

@ -0,0 +1,59 @@
<!--
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
-->
weinre is WEb INspector REmote.
Pronounced like the word "winery".
Or maybe like the word "weiner".
Who knows, really.
weinre is a debugger for web pages,
like FireBug (for FireFox) and Web Inspector (for WebKit-based browsers),
except it's designed to work remotely, and in particular,
to allow you debug web pages on a mobile device such as a phone.
For more information on weinre:
[http://people.apache.org/~pmuellr/weinre/](http://people.apache.org/~pmuellr/weinre/)
running
-------
For more information about running weinre, you can start the server
and browse the documentation online.
Start the server with the following command
node weinre
This will start the server, and display a message with the URL to the
server. Browse to that URL in your web browser, and then click on
'documentation' link, which will display weinre's online documentation.
From there click on the 'Running' page to get more information about
running weinre.
source
------
Follow the link for more information at the top of this file
for instructions on obtaining source.
If you're reading this file as part of the source distribution of weinre,
you will need to run a 'build' before being able to run weinre. See the
`README.md` file in the root directory of the weinre source distribution
for more information.

2
node_modules/weinre/build-info.txt generated vendored Normal file
View File

@ -0,0 +1,2 @@
weinre build 2.0.0-pre-I0Z7U9OV by Patrick Mueller
git: 6c1543bc63e75850d29f0bd08a4b5bd1894d972f update for release 2.0.0-pre-HZO3BMNG

View File

@ -0,0 +1,41 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// messages from the client to the server
module weinre {
interface WeinreClientCommands {
void registerClient(out string clientId);
void getTargets(out Object[] targets);
void getClients(out Object[] clients);
void connectTarget(in string clientId, in string targetId);
void disconnectTarget(in string clientId);
void getExtensions(out string[] extensions)
void logDebug( in string message );
void logInfo( in string message );
void logWarning( in string message );
void logError( in string message );
};
}

39
node_modules/weinre/interfaces/WeinreClientEvents.idl generated vendored Normal file
View File

@ -0,0 +1,39 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// messages from the server to the client
module weinre {
interface WeinreClientEvents {
void clientRegistered(Object client);
void targetRegistered(Object target);
void clientUnregistered(string clientId);
void targetUnregistered(string targetId);
void connectionCreated(string clientId, string targetId);
void connectionDestroyed(string clientId, string targetId);
void sendCallback(string callbackId, Object result);
void serverProperties(Object properties);
};
}

View File

@ -0,0 +1,29 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// extra messages from the client to the target
module weinre {
interface WeinreExtraClientCommands {
void getDatabases(out Object[] databaseRecords);
};
}

View File

@ -0,0 +1,29 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// extra messages from the target to the client
module weinre {
interface WeinreExtraTargetEvents {
void databaseOpened(in Object databaseRecord);
};
}

View File

@ -0,0 +1,35 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// messages from the target to the server
module weinre {
interface WeinreTargetCommands {
void registerTarget(int url, out string targetId);
void sendClientCallback(string callbackId, Object args);
void logDebug( in string message );
void logInfo( in string message );
void logWarning( in string message );
void logError( in string message );
};
}

32
node_modules/weinre/interfaces/WeinreTargetEvents.idl generated vendored Normal file
View File

@ -0,0 +1,32 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
// messages from the server to the target
module weinre {
interface WeinreTargetEvents {
void connectionCreated(string clientId, string targetId);
void connectionDestroyed(string clientId, string targetId);
void sendCallback(string callbackId, Object result);
};
}

118
node_modules/weinre/lib-src/Channel.coffee generated vendored Normal file
View File

@ -0,0 +1,118 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
_ = require 'underscore'
utils = require './utils'
channelManager = require './channelManager'
messageHandler = require './messageHandler'
MessageQueue = require './MessageQueue'
AnonymousId = 'anonymous'
#-------------------------------------------------------------------------------
module.exports = utils.registerClass class Channel
#---------------------------------------------------------------------------
constructor: (@pathPrefix, @id, @remoteAddress, @isClient) ->
prefix = if @isClient then 'c-' else 't-'
@name = "#{prefix}#{utils.getNextSequenceNumber()}"
@messageQueue = new MessageQueue
@isClosed = false
@connections = []
@isTarget = !@isClient
@readTimeout = utils.options.readTimeout * 1000
@id = AnonymousId if !@id
@description =
channel: @name
id: @id
hostName: @remoteAddress
remoteAddress: @remoteAddress
@updateLastRead()
channelManager.created @
#---------------------------------------------------------------------------
close: () ->
return if @isClosed
channelManager.destroyed @
@isClosed = true
@messageQueue.shutdown()
#---------------------------------------------------------------------------
sendCallback: (intfName, callbackId, args...) ->
return if !callbackId
args.unshift callbackId
@sendMessage intfName, 'sendCallback', args...
#---------------------------------------------------------------------------
sendMessage: (intfName, method, args...) ->
message = genJSON
interface: intfName
method: method
args: args
@messageQueue.push message
#---------------------------------------------------------------------------
handleMessages: (messages) ->
for message in messages
message = parseJSON(message)
continue if !message
messageHandler.handleMessage @, message
#---------------------------------------------------------------------------
getMessages: (callback) ->
@updateLastRead()
return callback.call(null, null) if @isClosed
@messageQueue.pullAll @readTimeout, callback
#---------------------------------------------------------------------------
updateLastRead: () ->
@lastRead = (new Date).valueOf()
#---------------------------------------------------------------------------
toString: () ->
connections = _.map(@connections, (val) -> val.name).join(',')
"Channel(#{@name}, closed:#{@isClosed}, connections:[#{connections}])"
#-------------------------------------------------------------------------------
parseJSON = (message) ->
try
return JSON.parse(message)
catch e
return null
#-------------------------------------------------------------------------------
genJSON = (message) ->
try
return JSON.stringify(message)
catch e
return null

154
node_modules/weinre/lib-src/HttpChannelHandler.coffee generated vendored Normal file
View File

@ -0,0 +1,154 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
_ = require 'underscore'
utils = require './utils'
Channel = require './Channel'
channelManager = require './channelManager'
#-------------------------------------------------------------------------------
module.exports = utils.registerClass class HttpChannelHandler
#---------------------------------------------------------------------------
constructor: (@pathPrefix) ->
if @pathPrefix == '/ws/client'
@isClient = true
else if @pathPrefix == '/ws/target'
@isClient = false
else
utils.pitch "invalid pathPrefix: #{@pathPrefix}"
@isTarget = !@isClient
#---------------------------------------------------------------------------
handle: (request, response, uri) ->
setCORSHeaders request, response
setCacheHeaders request, response
#-----------------
# * #{pathPrefix}a
if uri[0] != '/'
return handleError(request, response, 404)
#-----------------
if uri == '/'
# OPTIONS #{pathPrefix}/
if request.method == 'OPTIONS'
return handleOptions(request, response)
# POST #{pathPrefix}/
if request.method == 'POST'
return handleCreate(@pathPrefix, @isClient, request, response)
# * #{pathPrefix}/
return handleError(request, response, 405)
#-----------------
parts = uri.split('/')
# * #{pathPrefix}/x/y
if parts.length > 2
return handleError(request, response, 404)
#-----------------
channelName = parts[1]
# OPTIONS #{pathPrefix}/x
if request.method == 'OPTIONS'
return handleOptions(request, response)
# GET #{pathPrefix}/x
if request.method == 'GET'
return handleGet(request, response, channelName)
# POST #{pathPrefix}/x
if request.method == 'POST'
return handlePost(request, response, channelName)
# anything else
return handleError(request, response, 405)
#-------------------------------------------------------------------------------
handleCreate = (pathPrefix, isClient, request, response) ->
id = request.body?.id
remoteAddress = request.connection?.remoteAddress || ""
channel = new Channel(pathPrefix, id, remoteAddress, isClient)
response.contentType 'application/json'
response.send JSON.stringify
channel: channel.name
id: channel.id
#-------------------------------------------------------------------------------
handleGet = (request, response, channelName) ->
remoteAddress = request.connection?.remoteAddress || ""
channel = channelManager.getChannel(channelName, remoteAddress)
return handleError(request, response, 404) if !channel
channel.getMessages (messages) =>
return handleError(request, response, 404) if channel.isClosed
return handleError(request, response, 404) if !messages
response.contentType 'application/json'
response.send JSON.stringify(messages)
#-------------------------------------------------------------------------------
handlePost = (request, response, channelName) ->
remoteAddress = request.connection?.remoteAddress || ""
channel = channelManager.getChannel(channelName, remoteAddress)
return handleError(request, response, 404) if !channel
channel.handleMessages(request.body)
response.send('')
#-------------------------------------------------------------------------------
handleOptions = (request, response) ->
response.send('')
#-------------------------------------------------------------------------------
handleError = (request, response, status) ->
response.send(status)
#-------------------------------------------------------------------------------
setCORSHeaders = (request, response) ->
origin = request.header 'Origin'
return if !origin
response.header 'Access-Control-Allow-Origin', origin
response.header 'Access-Control-Max-Age', '600'
response.header 'Access-Control-Allow-Methods', 'GET, POST'
#-------------------------------------------------------------------------------
setCacheHeaders = (request, response) ->
response.header 'Pragma', 'no-cache'
response.header 'Expires', '0'
response.header 'Cache-Control', 'no-cache'
response.header 'Cache-Control', 'no-store'

87
node_modules/weinre/lib-src/MessageQueue.coffee generated vendored Normal file
View File

@ -0,0 +1,87 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
_ = require 'underscore'
utils = require './utils'
#-------------------------------------------------------------------------------
module.exports = utils.registerClass class MessageQueue
#---------------------------------------------------------------------------
constructor: () ->
@messages = []
@closed = false
@callback = null
@timer = null
_.bindAll @, '_timerExpired', '_updated'
#---------------------------------------------------------------------------
shutdown: () ->
return if @closed
@closed = true
clearTimeout @timer if @timer
@callback.call(null, @messages) if @callback
@callback = null
@messages = null
@timer = null
#---------------------------------------------------------------------------
push: (message) ->
return if @closed
@messages.push message
process.nextTick @_updated
#---------------------------------------------------------------------------
pullAll: (timeout, callback) ->
return callback.call(null, null) if @closed
return callback.call(null, []) if @callback
if @messages.length
callback.call(null, @messages)
@messages = []
return
@callback = callback
@timer = setTimeout @_timerExpired, timeout
#---------------------------------------------------------------------------
_timerExpired: () ->
@_updated()
#---------------------------------------------------------------------------
_updated: () ->
return if @closed
return if !@callback
callback = @callback
messages = @messages
clearTimeout @timer if @timer
@callback = null
@messages = []
@timer = null
callback.call(null, messages)

126
node_modules/weinre/lib-src/channelManager.coffee generated vendored Normal file
View File

@ -0,0 +1,126 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
_ = require 'underscore'
utils = require './utils'
serviceManager = require './serviceManager'
WeinreClientEvents = null
WeinreTargetEvents = null
channelManager = null
#-------------------------------------------------------------------------------
utils.registerClass class ChannelManager
#---------------------------------------------------------------------------
constructor: () ->
@channels = {}
#---------------------------------------------------------------------------
initialize: ->
WeinreClientEvents = serviceManager.get 'WeinreClientEvents'
WeinreTargetEvents = serviceManager.get 'WeinreTargetEvents'
if !WeinreClientEvents
utils.exit 'WeinreClientEvents service not registered'
if !WeinreTargetEvents
utils.exit 'WeinreTargetEvents service not registered'
#---------------------------------------------------------------------------
created: (channel) ->
@channels[channel.name] = channel
#---------------------------------------------------------------------------
destroyed: (channel) ->
if channel.isClient
for connection in channel.connections
@disconnectChannels(channel, connection)
else
for connection in channel.connections
@disconnectChannels(connection, channel)
clients = @getClientChannels(channel.id)
if channel.isClient
WeinreClientEvents.clientUnregistered(clients, channel.name)
else
WeinreClientEvents.targetUnregistered(clients, channel.name)
delete @channels[channel.name]
#---------------------------------------------------------------------------
getChannel: (name, remoteAddress) ->
return null if !_.has(@channels, name)
channel = @channels[name]
return null if !channel
# if remoteAddress
# return null if channel.remoteAddress != remoteAddress
channel
#---------------------------------------------------------------------------
connectChannels: (client, target) ->
return if client.isClosed or target.isClosed
if client.connections.length
@disconnectChannels(client, client.connections[0])
client.connections.push target
target.connections.push client
clients = @getClientChannels(client.id)
WeinreClientEvents.connectionCreated(clients, client.name, target.name)
WeinreTargetEvents.connectionCreated(target, client.name, target.name)
#---------------------------------------------------------------------------
disconnectChannels: (client, target) ->
clients = @getClientChannels(client.id)
WeinreClientEvents.connectionDestroyed(clients, client.name, target.name)
WeinreTargetEvents.connectionDestroyed(target, client.name, target.name)
client.connections = _.without(client.connections, target)
target.connections = _.without(target.connections, client)
#---------------------------------------------------------------------------
getChannels: (id) ->
if id?
_.filter(@channels, (item) -> item.id == id)
else
_.values(@channels)
#---------------------------------------------------------------------------
getClientChannels: (id) ->
_.filter(@channels, (item) -> item.isClient && item.id == id)
#---------------------------------------------------------------------------
getTargetChannels: (id) ->
_.filter(@channels, (item) -> item.isTarget && item.id == id)
#-------------------------------------------------------------------------------
module.exports = new ChannelManager

130
node_modules/weinre/lib-src/cli.coffee generated vendored Normal file
View File

@ -0,0 +1,130 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
fs = require 'fs'
path = require 'path'
_ = require 'underscore'
nopt = require 'nopt'
utils = require './utils'
weinre = require './weinre'
optionDefaults =
httpPort: 8080
boundHost: 'localhost'
verbose: false
debug: false
readTimeout: 5
#-------------------------------------------------------------------------------
exports.run = ->
knownOpts =
httpPort: Number
boundHost: String
verbose: Boolean
debug: Boolean
readTimeout: Number
deathTimeout: Number
help: Boolean
shortHands =
'?': ['--help']
'h': ['--help']
nopt.invalidHandler = printNoptError
parsedOpts = nopt(knownOpts, shortHands, process.argv, 2)
#----
printHelp() if parsedOpts.help
args = parsedOpts.argv.remain
printHelp() if args.length != 0
#----
delete parsedOpts.argv
opts = _.extend {}, optionDefaults, getDotWeinreServerProperties(), parsedOpts
if !opts.deathTimeout?
opts.deathTimeout = 3 * opts.readTimeout
utils.setOptions opts
weinre.run opts
#-------------------------------------------------------------------------------
printNoptError = (key, val, types) ->
utils.exit "error with option '#{key}', value '#{val}'"
#-------------------------------------------------------------------------------
printHelp = () ->
version = weinre.getVersion()
console.error """
usage: #{utils.Program} [options]
version: #{version}
options:
--httpPort port to run the http server on default: #{optionDefaults.httpPort}
--boundHost ip address to bind the server to default: #{optionDefaults.boundHost}
--verbose print more diagnostics default: #{optionDefaults.verbose}
--debug print even more diagnostics default: #{optionDefaults.debug}
--readTimeout seconds to wait for a client message default: #{optionDefaults.readTimeout}
--deathTimeout seconds to wait to kill client default: 3*readTimeout
--boundHost can be an ip address, hostname, or -all-, where -all-
means binding to all ip address on the current machine'
for more info see: http://people.apache.org/~pmuellr/weinre/
"""
process.exit()
#-------------------------------------------------------------------------------
getDotWeinreServerProperties = () ->
properties = {}
fileName = replaceTilde '~/.weinre/server.properties'
return properties if !utils.fileExistsSync(fileName)
contents = fs.readFileSync(fileName, 'utf8')
lines = contents.split('\n')
for line in lines
line = line.replace(/#.*/,'')
match = line.match /\s*(\w+)\s*:\s*(.+)\s*/
continue if !match
key = utils.trim match[1]
val = utils.trim match[2]
properties[key] = val
properties
#-------------------------------------------------------------------------------
replaceTilde = (fileName) ->
fileName.replace('~', getTildeReplacement())
#-------------------------------------------------------------------------------
getTildeReplacement = () ->
process.env["HOME"] || process.env["USERPROFILE"] || '.'

77
node_modules/weinre/lib-src/dumpingHandler.coffee generated vendored Normal file
View File

@ -0,0 +1,77 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
_ = require 'underscore'
utils = require './utils'
#-------------------------------------------------------------------------------
dumpingHandler = (request, response, uri) ->
originalSend = response.send
response.send = (body) ->
dumpResponse(originalSend, body, request, response, uri)
return if request.method != 'POST'
utils.logVerbose '--------------------------------------------------'
utils.logVerbose "#{request.method} #{uri} [request]"
if _.isArray(request.body)
for element in request.body
utils.logVerbose " #{enhance(JSON.parse(element))}"
else
utils.logVerbose " #{enhance(request.body)}"
#-------------------------------------------------------------------------------
dumpResponse = (originalSend, body, request, response, uri) ->
originalSend.call(response, body)
return if request.method not in ['GET', 'POST']
try
body = JSON.parse(body)
catch e
return
return if _.isArray(body) && (body.length == 0)
utils.logVerbose '--------------------------------------------------'
utils.logVerbose "#{request.method} #{uri} #{response.statusCode} [response]"
if _.isArray(body)
for element in body
utils.logVerbose " #{enhance(JSON.parse(element))}"
else
utils.logVerbose " #{enhance(body)}"
#-------------------------------------------------------------------------------
enhance = (object) ->
if !object.interface || !object.method || !object.args
return JSON.stringify(object)
signature = "#{object.interface}.#{object.method}"
args = JSON.stringify(object.args)
if args.length > 500
args = "#{args.substr(0,50)}..."
return "#{signature}(#{args})"
#-------------------------------------------------------------------------------
module.exports = dumpingHandler

30
node_modules/weinre/lib-src/extensionManager.coffee generated vendored Normal file
View File

@ -0,0 +1,30 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
utils = require './utils'
#-------------------------------------------------------------------------------
utils.registerClass class ExtensionManager
#---------------------------------------------------------------------------
constructor: () ->
@extensions = []
#-------------------------------------------------------------------------------
module.exports = new ExtensionManager

47
node_modules/weinre/lib-src/jsonBodyParser.coffee generated vendored Normal file
View File

@ -0,0 +1,47 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
#-------------------------------------------------------------------------------
jsonBodyParser = ->
return (request, response, next) -> parseBodyAsJSON(request, response, next)
#-------------------------------------------------------------------------------
parseBodyAsJSON = (request, response, next) ->
return next() if request.body
request.body = {}
return next() if request.method != 'POST'
request.setEncoding 'utf8'
buffer = ''
request.on 'data', (chunk) -> buffer += chunk
request.on 'end', ->
return next() if '' == buffer
try
request.body = JSON.parse(buffer)
next()
catch e
next(e)
#-------------------------------------------------------------------------------
module.exports = jsonBodyParser

59
node_modules/weinre/lib-src/messageHandler.coffee generated vendored Normal file
View File

@ -0,0 +1,59 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
utils = require './utils'
channelManager = require './channelManager'
serviceManager = require './serviceManager'
#-------------------------------------------------------------------------------
utils.registerClass class MessageHandler
#---------------------------------------------------------------------------
handleMessage: (channel, message) ->
@_serviceMethodInvoker(channel, message.interface, message.method, message.args)
#---------------------------------------------------------------------------
_serviceMethodInvoker: (channel, intfName, method, args) ->
methodSignature = "#{intfName}.#{method}()"
# utils.logVerbose "MessageHandler._serviceMethodInvoker(#{methodSignature})"
service = serviceManager.get(intfName)
if !service
return @_redirectToConnections(channel, intfName, method, args)
args = args.slice()
args.unshift channel
try
service[method].apply(service, args)
catch e
utils.log "error running service method #{methodSignature}: #{e}"
utils.log "stack:\n#{e.stack}"
#---------------------------------------------------------------------------
_redirectToConnections: (channel, intfName, method, args) ->
# utils.logVerbose "MessageHandler._redirectToConnections(#{channel.name}, #{intfName}, #{method})"
for connection in channel.connections
connection.sendMessage(intfName, method, args...)
#-------------------------------------------------------------------------------
module.exports = new MessageHandler

View File

@ -0,0 +1,126 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
_ = require('underscore')
weinre = require '../weinre'
utils = require '../utils'
channelManager = require '../channelManager'
serviceManager = require '../serviceManager'
extensionManager = require '../extensionManager'
WeinreClientEvents = serviceManager.get 'WeinreClientEvents'
#-------------------------------------------------------------------------------
module.exports = utils.registerClass class WeinreClientCommands
#---------------------------------------------------------------------------
registerClient: (channel, callbackId) ->
if callbackId
WeinreClientEvents.sendCallback(channel, callbackId, channel.description)
options = _.extend {}, utils.options
for own key, val of options
if typeof val in ['number', 'boolean']
options[key] = "#{val}"
options.version = weinre.getVersion()
WeinreClientEvents.serverProperties(channel, options)
clients = channelManager.getClientChannels(channel.id)
WeinreClientEvents.clientRegistered(clients, channel.description)
#---------------------------------------------------------------------------
getTargets: (channel, callbackId) ->
channels = channelManager.getTargetChannels(channel.id)
result = _.pluck(channels, 'description')
if callbackId
WeinreClientEvents.sendCallback(channel, callbackId, [result])
#---------------------------------------------------------------------------
getClients: (channel, callbackId) ->
channels = channelManager.getClientChannels(channel.id)
result = _.pluck(channels, 'description')
if callbackId
WeinreClientEvents.sendCallback(channel, callbackId, [result])
#---------------------------------------------------------------------------
getExtensions: (channel, callbackId) ->
result = for extension in extensionManager.extensions
{ startPage: "extensions/#{extension}/extension.html" }
if callbackId
WeinreClientEvents.sendCallback(channel, callbackId, [result])
#---------------------------------------------------------------------------
connectTarget: (channel, clientName, targetName, callbackId) ->
client = channelManager.getChannel(clientName)
return if !client
target = channelManager.getChannel(targetName)
return if !target
channelManager.connectChannels(client, target)
if callbackId
WeinreClientEvents.sendCallback(channel, callbackId)
#---------------------------------------------------------------------------
disconnectTarget: (channel, clientName, callbackId) ->
client = connectionManager.getClient(clientName)
return if !client
target = client.getConnectedTarget()
return if !target
connectionManager.disconnect(client, target)
if callbackId
WeinreClientEvents.sendCallback(channel, callbackId)
#---------------------------------------------------------------------------
logDebug: (channel, message, callbackId) ->
utils.logVerbose "client #{channel.name}: #{message}"
if callbackId
WeinreClientEvents.sendCallback(channel, callbackId)
#---------------------------------------------------------------------------
logInfo: (channel, message, callbackId) ->
utils.log "client #{channel.name}: #{message}"
if callbackId
WeinreClientEvents.sendCallback(channel, callbackId)
#---------------------------------------------------------------------------
logWarning: (channel, message, callbackId) ->
utils.log "client #{channel.name}: #{message}"
if callbackId
WeinreClientEvents.sendCallback(channel, callbackId)
#---------------------------------------------------------------------------
logError: (channel, message, callbackId) ->
utils.log "client #{channel.name}: #{message}"
if callbackId
WeinreClientEvents.sendCallback(channel, callbackId)

View File

@ -0,0 +1,90 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
utils = require '../utils'
channelManager = require '../channelManager'
serviceManager = require '../serviceManager'
WeinreClientEvents = serviceManager.get 'WeinreClientEvents'
WeinreTargetEvents = serviceManager.get 'WeinreTargetEvents'
#-------------------------------------------------------------------------------
module.exports = utils.registerClass class WeinreTargetCommands
#---------------------------------------------------------------------------
registerTarget: (channel, url, callbackId) ->
channel.description.url = url
clients = channelManager.getClientChannels(channel.id)
WeinreClientEvents.targetRegistered(clients, channel.description)
if callbackId
WeinreTargetEvents.sendCallback(channel, callbackId, channel.description)
#---------------------------------------------------------------------------
sendClientCallback: (channel, clientCallbackId, args, callbackId) ->
# the channel to send the callback to is embedded in the callbackId
callbackChannel = getCallbackChannel(clientCallbackId)
if !callbackChannel
return main.warn "#{@constructor.name}.sendClientCallback() sent with invalid callbackId: #{clientCallbackId}"
callbackChannel = channelManager.getChannel(callbackChannel)
if !callbackChannel
# indication that channel was closed; this message may generate a lot of noise
return main.warn "#{@constructor.name}.sendClientCallback() unable to find channel : #{clientCallbackId}"
WeinreClientEvents.sendCallback(callbackChannel, clientCallbackId, args)
if callbackId
WeinreTargetEvents.sendCallback(channel, callbackId, description)
#---------------------------------------------------------------------------
logDebug: (channel, message, callbackId) ->
utils.logVerbose "target #{channel.name}: #{message}"
if callbackId
WeinreTargetEvents.sendCallback(channel, callbackId, description)
#---------------------------------------------------------------------------
logInfo: (channel, message, callbackId) ->
utils.log "target #{channel.name}: #{message}"
if callbackId
WeinreTargetEvents.sendCallback(channel, callbackId, description)
#---------------------------------------------------------------------------
logWarning: (channel, message, callbackId) ->
utils.log "target #{channel.name}: #{message}"
if callbackId
WeinreTargetEvents.sendCallback(channel, callbackId, description)
#---------------------------------------------------------------------------
logError: (channel, message, callbackId) ->
utils.log "target #{channel.name}: #{message}"
if callbackId
WeinreTargetEvents.sendCallback(channel, callbackId, description)
#---------------------------------------------------------------------------
getCallbackChannel = (callbackId) ->
callbackId = callbackId.toString()
callbackId.split('::')[0]

95
node_modules/weinre/lib-src/serviceManager.coffee generated vendored Normal file
View File

@ -0,0 +1,95 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
path = require 'path'
fs = require 'fs'
_ = require 'underscore'
utils = require './utils'
Services = {}
#-------------------------------------------------------------------------------
utils.registerClass class ServiceManager
#---------------------------------------------------------------------------
constructor: ->
@services = {}
#---------------------------------------------------------------------------
get: (name) ->
return @services[name] if _.has(@services, name)
null
#---------------------------------------------------------------------------
registerLocalClass: (name) ->
serviceClass = null
try
serviceClass = require "./service/#{name}"
catch e
utils.log "local service class not found: #{name}"
throw e
@services[name] = new serviceClass
#---------------------------------------------------------------------------
registerProxyClass: (name) ->
intf = getServiceInterface(name)
if !intf
utils.exit "proxy service class not found: #{name}"
if intf.name != name
utils.exit "proxy interface '#{intf.name}' loaded when '#{name}' requested"
service = {}
for method in intf.methods
service[method.name] = getMethodProxy(name, method.name)
@services[name] = service
#-------------------------------------------------------------------------------
getMethodProxy = (intfName, methodName) ->
(channels, args...) ->
channels = [channels] if !_.isArray(channels)
for channel in channels
channel.sendMessage(intfName, methodName, args...)
#-------------------------------------------------------------------------------
getServiceInterface = (name) ->
jsonName = "#{name}.json"
fileName = path.join utils.options.staticWebDir, 'interfaces', jsonName
return null if !utils.fileExistsSync(fileName)
contents = fs.readFileSync(fileName, 'utf8')
serviceInterface = JSON.parse(contents)
return serviceInterface.interfaces[0]
#-------------------------------------------------------------------------------
module.exports = new ServiceManager

196
node_modules/weinre/lib-src/utils.coffee generated vendored Normal file
View File

@ -0,0 +1,196 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
fs = require 'fs'
path = require 'path'
utils = exports
utils.Program = Program = path.basename process.argv[1]
SequenceNumberMax = 100 * 1024 * 1024
SequenceNumber = 0
#-------------------------------------------------------------------------------
utils.getNextSequenceNumber = (g) ->
SequenceNumber++
if SequenceNumber > SequenceNumberMax
SequenceNumber = 0
SequenceNumber
#-------------------------------------------------------------------------------
utils.trim = (string) ->
string.replace(/(^\s+)|(\s+$)/g,'')
#-------------------------------------------------------------------------------
utils.log = log = (message) ->
date = new Date()
time = date.toISOString()
console.log "#{time} #{Program}: #{message}"
#-------------------------------------------------------------------------------
utils.logVerbose = (message) ->
return if !utils?.options?.verbose
log message
#-------------------------------------------------------------------------------
utils.logDebug = (message) ->
return if !utils?.options?.debug
log message
#-------------------------------------------------------------------------------
utils.exit = (message) ->
log message
process.exit 1
#-------------------------------------------------------------------------------
utils.pitch = (message) ->
log message
throw message
#-------------------------------------------------------------------------------
utils.setOptions = (options) ->
utils.options = options
#-------------------------------------------------------------------------------
utils.ensureInteger = (value, message) ->
newValue = parseInt value
if isNaN newValue
utils.exit "#{message}: '#{value}'"
newValue
#-------------------------------------------------------------------------------
utils.ensureString = (value, message) ->
if typeof value != 'string'
utils.exit "#{message}: '#{value}'"
value
#-------------------------------------------------------------------------------
utils.ensureBoolean = (value, message) ->
uValue = value.toString().toUpperCase()
newValue = null
switch uValue
when 'TRUE' then newValue = true
when 'FALSE' then newValue = false
if typeof(newValue) != 'boolean'
utils.exit "#{message}: '#{value}'"
newValue
#-------------------------------------------------------------------------------
utils.setNamesForClass = (aClass) ->
for own key, val of aClass
if typeof(val) is "function"
val.signature = "#{aClass.name}::#{key}"
val.displayName = val.signature
val.name = val.signature
for own key, val of aClass.prototype
if typeof(val) is "function"
val.signature = "#{aClass.name}.#{key}"
val.displayName = val.signature
val.name = val.signature
#-------------------------------------------------------------------------------
utils.registerClass = (aClass) ->
utils.setNamesForClass(aClass)
aClass
#-------------------------------------------------------------------------------
utils.alignLeft = (string, length) ->
while string.length < length
string = "#{string} "
string
#-------------------------------------------------------------------------------
utils.alignRight = (string, length) ->
while string.length < length
string = " #{string}"
string
#-------------------------------------------------------------------------------
utils.fileExistsSync = (name) ->
if fs.existsSync
return fs.existsSync name
return path.existsSync(name)
#-------------------------------------------------------------------------------
Error.prepareStackTrace = (error, structuredStackTrace) ->
result = []
result.push "---------------------------------------------------------"
result.push "error: #{error}"
result.push "---------------------------------------------------------"
result.push "stack: "
longestFile = 0
longestLine = 0
for callSite in structuredStackTrace
file = callSite.getFileName()
line = callSite.getLineNumber()
file = path.basename(file)
line = "#{line}"
if file.length > longestFile
longestFile = file.length
if line.length > longestLine
longestLine = line.length
for callSite in structuredStackTrace
func = callSite.getFunction()
file = callSite.getFileName()
line = callSite.getLineNumber()
file = path.basename(file)
line = "#{line}"
file = utils.alignRight(file, longestFile)
line = utils.alignLeft( line, longestLine)
funcName = func.displayName ||
func.name ||
callSite.getFunctionName()
callSite.getMethodName()
'???'
if funcName == "Module._compile"
result.pop()
result.pop()
break
result.push " #{file}:#{line} - #{funcName}()"
result.join "\n"

186
node_modules/weinre/lib-src/weinre.coffee generated vendored Normal file
View File

@ -0,0 +1,186 @@
#-------------------------------------------------------------------------------
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
#-------------------------------------------------------------------------------
fs = require 'fs'
net = require 'net'
dns = require 'dns'
path = require 'path'
_ = require 'underscore'
express = require 'express'
utils = require './utils'
jsonBodyParser = require './jsonBodyParser'
HttpChannelHandler = require './HttpChannelHandler'
dumpingHandler = require './dumpingHandler'
channelManager = require './channelManager'
serviceManager = require './serviceManager'
#-------------------------------------------------------------------------------
exports.run = (options) ->
processOptions(options, run2)
#-------------------------------------------------------------------------------
run2 = ->
options = utils.options
serviceManager.registerProxyClass 'WeinreClientEvents'
serviceManager.registerProxyClass 'WeinreTargetEvents'
serviceManager.registerLocalClass 'WeinreClientCommands'
serviceManager.registerLocalClass 'WeinreTargetCommands'
startDeathWatcher options.deathTimeout
startServer()
#-------------------------------------------------------------------------------
processOptions = (options, cb) ->
options.httpPort = utils.ensureInteger( options.httpPort, 'the value of the option httpPort is not a number')
options.boundHost = utils.ensureString( options.boundHost, 'the value of the option boundHost is not a string')
options.verbose = utils.ensureBoolean( options.verbose, 'the value of the option verbose is not a boolean')
options.debug = utils.ensureBoolean( options.debug, 'the value of the option debug is not a boolean')
options.readTimeout = utils.ensureInteger( options.readTimeout, 'the value of the option readTimeout is not a number')
options.deathTimeout = utils.ensureInteger( options.deathTimeout, 'the value of the option deathTimeout is not a number')
options.verbose = true if options.debug
options.staticWebDir = getStaticWebDir()
utils.logVerbose "pid: #{process.pid}"
utils.logVerbose "version: #{getVersion()}"
utils.logVerbose "node versions:"
names = _.keys(process.versions)
reducer = (memo, name) -> Math.max(memo, name.length)
nameLen = _.reduce(names, reducer, 0)
for name in names
utils.logVerbose " #{utils.alignLeft(name, nameLen)}: #{process.versions[name]}"
utils.logVerbose "options:"
utils.logVerbose " httpPort: #{options.httpPort}"
utils.logVerbose " boundHost: #{options.boundHost}"
utils.logVerbose " verbose: #{options.verbose}"
utils.logVerbose " debug: #{options.debug}"
utils.logVerbose " readTimeout: #{options.readTimeout}"
utils.logVerbose " deathTimeout: #{options.deathTimeout}"
utils.setOptions options
checkHost options.boundHost, (err) ->
if err
utils.exit "unable to resolve boundHost address: #{options.boundHost}"
cb()
#-------------------------------------------------------------------------------
checkHost = (hostName, cb) ->
return cb() if hostName == '-all-'
return cb() if hostName == 'localhost'
return cb() if net.isIP(hostName)
dns.lookup hostName, cb
#-------------------------------------------------------------------------------
deathTimeout = null
#-------------------------------------------------------------------------------
startDeathWatcher = (timeout) ->
deathTimeout = utils.options.deathTimeout * 1000
setInterval checkForDeath, 1000
#-------------------------------------------------------------------------------
checkForDeath = ->
now = (new Date).valueOf()
for channel in channelManager.getChannels()
if now - channel.lastRead > deathTimeout
channel.close()
#-------------------------------------------------------------------------------
startServer = () ->
options = utils.options
clientHandler = new HttpChannelHandler('/ws/client')
targetHandler = new HttpChannelHandler('/ws/target')
channelManager.initialize()
favIcon = "#{options.staticWebDir}/images/weinre-icon-32x32.png"
staticCacheOptions =
maxObjects: 500
maxLength: 32 * 1024 * 1024
app = express.createServer()
app.on 'error', (error) ->
utils.exit "error running server: #{error}"
app.use express.favicon(favIcon)
app.use jsonBodyParser()
app.all /^\/ws\/client(.*)/, (request, response, next) ->
uri = request.params[0]
uri = '/' if uri == ''
dumpingHandler(request, response, uri) if options.debug
clientHandler.handle(request, response, uri)
app.all /^\/ws\/target(.*)/, (request, response, next) ->
uri = request.params[0]
uri = '/' if uri == ''
dumpingHandler(request, response, uri) if options.debug
targetHandler.handle(request, response, uri)
app.use express.errorHandler(dumpExceptions: true)
app.use express.staticCache(staticCacheOptions)
app.use express.static(options.staticWebDir)
if options.boundHost == '-all-'
utils.log "starting server at http://localhost:#{options.httpPort}"
app.listen options.httpPort
else
utils.log "starting server at http://#{options.boundHost}:#{options.httpPort}"
app.listen options.httpPort, options.boundHost
#-------------------------------------------------------------------------------
getStaticWebDir = () ->
webDir = path.normalize path.join(__dirname,'../web')
return webDir if utils.fileExistsSync webDir
utils.exit 'unable to find static files to serve in #{webDir}; did you do a build?'
#-------------------------------------------------------------------------------
Version = null
getVersion = exports.getVersion = () ->
return Version if Version
packageJsonName = path.join(path.dirname(fs.realpathSync(__filename)), '../package.json')
json = fs.readFileSync(packageJsonName, 'utf8')
values = JSON.parse(json)
Version = values.version
return Version

130
node_modules/weinre/lib/Channel.js generated vendored Normal file
View File

@ -0,0 +1,130 @@
// Generated by CoffeeScript 1.8.0
var AnonymousId, Channel, MessageQueue, channelManager, genJSON, messageHandler, parseJSON, utils, _,
__slice = [].slice;
_ = require('underscore');
utils = require('./utils');
channelManager = require('./channelManager');
messageHandler = require('./messageHandler');
MessageQueue = require('./MessageQueue');
AnonymousId = 'anonymous';
module.exports = utils.registerClass(Channel = (function() {
function Channel(pathPrefix, id, remoteAddress, isClient) {
var prefix;
this.pathPrefix = pathPrefix;
this.id = id;
this.remoteAddress = remoteAddress;
this.isClient = isClient;
prefix = this.isClient ? 'c-' : 't-';
this.name = "" + prefix + (utils.getNextSequenceNumber());
this.messageQueue = new MessageQueue;
this.isClosed = false;
this.connections = [];
this.isTarget = !this.isClient;
this.readTimeout = utils.options.readTimeout * 1000;
if (!this.id) {
this.id = AnonymousId;
}
this.description = {
channel: this.name,
id: this.id,
hostName: this.remoteAddress,
remoteAddress: this.remoteAddress
};
this.updateLastRead();
channelManager.created(this);
}
Channel.prototype.close = function() {
if (this.isClosed) {
return;
}
channelManager.destroyed(this);
this.isClosed = true;
return this.messageQueue.shutdown();
};
Channel.prototype.sendCallback = function() {
var args, callbackId, intfName;
intfName = arguments[0], callbackId = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : [];
if (!callbackId) {
return;
}
args.unshift(callbackId);
return this.sendMessage.apply(this, [intfName, 'sendCallback'].concat(__slice.call(args)));
};
Channel.prototype.sendMessage = function() {
var args, intfName, message, method;
intfName = arguments[0], method = arguments[1], args = 3 <= arguments.length ? __slice.call(arguments, 2) : [];
message = genJSON({
"interface": intfName,
method: method,
args: args
});
return this.messageQueue.push(message);
};
Channel.prototype.handleMessages = function(messages) {
var message, _i, _len, _results;
_results = [];
for (_i = 0, _len = messages.length; _i < _len; _i++) {
message = messages[_i];
message = parseJSON(message);
if (!message) {
continue;
}
_results.push(messageHandler.handleMessage(this, message));
}
return _results;
};
Channel.prototype.getMessages = function(callback) {
this.updateLastRead();
if (this.isClosed) {
return callback.call(null, null);
}
return this.messageQueue.pullAll(this.readTimeout, callback);
};
Channel.prototype.updateLastRead = function() {
return this.lastRead = (new Date).valueOf();
};
Channel.prototype.toString = function() {
var connections;
connections = _.map(this.connections, function(val) {
return val.name;
}).join(',');
return "Channel(" + this.name + ", closed:" + this.isClosed + ", connections:[" + connections + "])";
};
return Channel;
})());
parseJSON = function(message) {
var e;
try {
return JSON.parse(message);
} catch (_error) {
e = _error;
return null;
}
};
genJSON = function(message) {
var e;
try {
return JSON.stringify(message);
} catch (_error) {
e = _error;
return null;
}
};

130
node_modules/weinre/lib/HttpChannelHandler.js generated vendored Normal file
View File

@ -0,0 +1,130 @@
// Generated by CoffeeScript 1.8.0
var Channel, HttpChannelHandler, channelManager, handleCreate, handleError, handleGet, handleOptions, handlePost, setCORSHeaders, setCacheHeaders, utils, _;
_ = require('underscore');
utils = require('./utils');
Channel = require('./Channel');
channelManager = require('./channelManager');
module.exports = utils.registerClass(HttpChannelHandler = (function() {
function HttpChannelHandler(pathPrefix) {
this.pathPrefix = pathPrefix;
if (this.pathPrefix === '/ws/client') {
this.isClient = true;
} else if (this.pathPrefix === '/ws/target') {
this.isClient = false;
} else {
utils.pitch("invalid pathPrefix: " + this.pathPrefix);
}
this.isTarget = !this.isClient;
}
HttpChannelHandler.prototype.handle = function(request, response, uri) {
var channelName, parts;
setCORSHeaders(request, response);
setCacheHeaders(request, response);
if (uri[0] !== '/') {
return handleError(request, response, 404);
}
if (uri === '/') {
if (request.method === 'OPTIONS') {
return handleOptions(request, response);
}
if (request.method === 'POST') {
return handleCreate(this.pathPrefix, this.isClient, request, response);
}
return handleError(request, response, 405);
}
parts = uri.split('/');
if (parts.length > 2) {
return handleError(request, response, 404);
}
channelName = parts[1];
if (request.method === 'OPTIONS') {
return handleOptions(request, response);
}
if (request.method === 'GET') {
return handleGet(request, response, channelName);
}
if (request.method === 'POST') {
return handlePost(request, response, channelName);
}
return handleError(request, response, 405);
};
return HttpChannelHandler;
})());
handleCreate = function(pathPrefix, isClient, request, response) {
var channel, id, remoteAddress, _ref, _ref1;
id = (_ref = request.body) != null ? _ref.id : void 0;
remoteAddress = ((_ref1 = request.connection) != null ? _ref1.remoteAddress : void 0) || "";
channel = new Channel(pathPrefix, id, remoteAddress, isClient);
response.contentType('application/json');
return response.send(JSON.stringify({
channel: channel.name,
id: channel.id
}));
};
handleGet = function(request, response, channelName) {
var channel, remoteAddress, _ref;
remoteAddress = ((_ref = request.connection) != null ? _ref.remoteAddress : void 0) || "";
channel = channelManager.getChannel(channelName, remoteAddress);
if (!channel) {
return handleError(request, response, 404);
}
return channel.getMessages((function(_this) {
return function(messages) {
if (channel.isClosed) {
return handleError(request, response, 404);
}
if (!messages) {
return handleError(request, response, 404);
}
response.contentType('application/json');
return response.send(JSON.stringify(messages));
};
})(this));
};
handlePost = function(request, response, channelName) {
var channel, remoteAddress, _ref;
remoteAddress = ((_ref = request.connection) != null ? _ref.remoteAddress : void 0) || "";
channel = channelManager.getChannel(channelName, remoteAddress);
if (!channel) {
return handleError(request, response, 404);
}
channel.handleMessages(request.body);
return response.send('');
};
handleOptions = function(request, response) {
return response.send('');
};
handleError = function(request, response, status) {
return response.send(status);
};
setCORSHeaders = function(request, response) {
var origin;
origin = request.header('Origin');
if (!origin) {
return;
}
response.header('Access-Control-Allow-Origin', origin);
response.header('Access-Control-Max-Age', '600');
return response.header('Access-Control-Allow-Methods', 'GET, POST');
};
setCacheHeaders = function(request, response) {
response.header('Pragma', 'no-cache');
response.header('Expires', '0');
response.header('Cache-Control', 'no-cache');
return response.header('Cache-Control', 'no-store');
};

82
node_modules/weinre/lib/MessageQueue.js generated vendored Normal file
View File

@ -0,0 +1,82 @@
// Generated by CoffeeScript 1.8.0
var MessageQueue, utils, _;
_ = require('underscore');
utils = require('./utils');
module.exports = utils.registerClass(MessageQueue = (function() {
function MessageQueue() {
this.messages = [];
this.closed = false;
this.callback = null;
this.timer = null;
_.bindAll(this, '_timerExpired', '_updated');
}
MessageQueue.prototype.shutdown = function() {
if (this.closed) {
return;
}
this.closed = true;
if (this.timer) {
clearTimeout(this.timer);
}
if (this.callback) {
this.callback.call(null, this.messages);
}
this.callback = null;
this.messages = null;
return this.timer = null;
};
MessageQueue.prototype.push = function(message) {
if (this.closed) {
return;
}
this.messages.push(message);
return process.nextTick(this._updated);
};
MessageQueue.prototype.pullAll = function(timeout, callback) {
if (this.closed) {
return callback.call(null, null);
}
if (this.callback) {
return callback.call(null, []);
}
if (this.messages.length) {
callback.call(null, this.messages);
this.messages = [];
return;
}
this.callback = callback;
return this.timer = setTimeout(this._timerExpired, timeout);
};
MessageQueue.prototype._timerExpired = function() {
return this._updated();
};
MessageQueue.prototype._updated = function() {
var callback, messages;
if (this.closed) {
return;
}
if (!this.callback) {
return;
}
callback = this.callback;
messages = this.messages;
if (this.timer) {
clearTimeout(this.timer);
}
this.callback = null;
this.messages = [];
this.timer = null;
return callback.call(null, messages);
};
return MessageQueue;
})());

122
node_modules/weinre/lib/channelManager.js generated vendored Normal file
View File

@ -0,0 +1,122 @@
// Generated by CoffeeScript 1.8.0
var ChannelManager, WeinreClientEvents, WeinreTargetEvents, channelManager, serviceManager, utils, _;
_ = require('underscore');
utils = require('./utils');
serviceManager = require('./serviceManager');
WeinreClientEvents = null;
WeinreTargetEvents = null;
channelManager = null;
utils.registerClass(ChannelManager = (function() {
function ChannelManager() {
this.channels = {};
}
ChannelManager.prototype.initialize = function() {
WeinreClientEvents = serviceManager.get('WeinreClientEvents');
WeinreTargetEvents = serviceManager.get('WeinreTargetEvents');
if (!WeinreClientEvents) {
utils.exit('WeinreClientEvents service not registered');
}
if (!WeinreTargetEvents) {
return utils.exit('WeinreTargetEvents service not registered');
}
};
ChannelManager.prototype.created = function(channel) {
return this.channels[channel.name] = channel;
};
ChannelManager.prototype.destroyed = function(channel) {
var clients, connection, _i, _j, _len, _len1, _ref, _ref1;
if (channel.isClient) {
_ref = channel.connections;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
connection = _ref[_i];
this.disconnectChannels(channel, connection);
}
} else {
_ref1 = channel.connections;
for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
connection = _ref1[_j];
this.disconnectChannels(connection, channel);
}
}
clients = this.getClientChannels(channel.id);
if (channel.isClient) {
WeinreClientEvents.clientUnregistered(clients, channel.name);
} else {
WeinreClientEvents.targetUnregistered(clients, channel.name);
}
return delete this.channels[channel.name];
};
ChannelManager.prototype.getChannel = function(name, remoteAddress) {
var channel;
if (!_.has(this.channels, name)) {
return null;
}
channel = this.channels[name];
if (!channel) {
return null;
}
return channel;
};
ChannelManager.prototype.connectChannels = function(client, target) {
var clients;
if (client.isClosed || target.isClosed) {
return;
}
if (client.connections.length) {
this.disconnectChannels(client, client.connections[0]);
}
client.connections.push(target);
target.connections.push(client);
clients = this.getClientChannels(client.id);
WeinreClientEvents.connectionCreated(clients, client.name, target.name);
return WeinreTargetEvents.connectionCreated(target, client.name, target.name);
};
ChannelManager.prototype.disconnectChannels = function(client, target) {
var clients;
clients = this.getClientChannels(client.id);
WeinreClientEvents.connectionDestroyed(clients, client.name, target.name);
WeinreTargetEvents.connectionDestroyed(target, client.name, target.name);
client.connections = _.without(client.connections, target);
return target.connections = _.without(target.connections, client);
};
ChannelManager.prototype.getChannels = function(id) {
if (id != null) {
return _.filter(this.channels, function(item) {
return item.id === id;
});
} else {
return _.values(this.channels);
}
};
ChannelManager.prototype.getClientChannels = function(id) {
return _.filter(this.channels, function(item) {
return item.isClient && item.id === id;
});
};
ChannelManager.prototype.getTargetChannels = function(id) {
return _.filter(this.channels, function(item) {
return item.isTarget && item.id === id;
});
};
return ChannelManager;
})());
module.exports = new ChannelManager;

97
node_modules/weinre/lib/cli.js generated vendored Normal file
View File

@ -0,0 +1,97 @@
// Generated by CoffeeScript 1.8.0
var fs, getDotWeinreServerProperties, getTildeReplacement, nopt, optionDefaults, path, printHelp, printNoptError, replaceTilde, utils, weinre, _;
fs = require('fs');
path = require('path');
_ = require('underscore');
nopt = require('nopt');
utils = require('./utils');
weinre = require('./weinre');
optionDefaults = {
httpPort: 8080,
boundHost: 'localhost',
verbose: false,
debug: false,
readTimeout: 5
};
exports.run = function() {
var args, knownOpts, opts, parsedOpts, shortHands;
knownOpts = {
httpPort: Number,
boundHost: String,
verbose: Boolean,
debug: Boolean,
readTimeout: Number,
deathTimeout: Number,
help: Boolean
};
shortHands = {
'?': ['--help'],
'h': ['--help']
};
nopt.invalidHandler = printNoptError;
parsedOpts = nopt(knownOpts, shortHands, process.argv, 2);
if (parsedOpts.help) {
printHelp();
}
args = parsedOpts.argv.remain;
if (args.length !== 0) {
printHelp();
}
delete parsedOpts.argv;
opts = _.extend({}, optionDefaults, getDotWeinreServerProperties(), parsedOpts);
if (opts.deathTimeout == null) {
opts.deathTimeout = 3 * opts.readTimeout;
}
utils.setOptions(opts);
return weinre.run(opts);
};
printNoptError = function(key, val, types) {
return utils.exit("error with option '" + key + "', value '" + val + "'");
};
printHelp = function() {
var version;
version = weinre.getVersion();
console.error("usage: " + utils.Program + " [options]\nversion: " + version + "\n\noptions:\n --httpPort port to run the http server on default: " + optionDefaults.httpPort + "\n --boundHost ip address to bind the server to default: " + optionDefaults.boundHost + "\n --verbose print more diagnostics default: " + optionDefaults.verbose + "\n --debug print even more diagnostics default: " + optionDefaults.debug + "\n --readTimeout seconds to wait for a client message default: " + optionDefaults.readTimeout + "\n --deathTimeout seconds to wait to kill client default: 3*readTimeout\n\n--boundHost can be an ip address, hostname, or -all-, where -all-\nmeans binding to all ip address on the current machine'\n\nfor more info see: http://people.apache.org/~pmuellr/weinre/");
return process.exit();
};
getDotWeinreServerProperties = function() {
var contents, fileName, key, line, lines, match, properties, val, _i, _len;
properties = {};
fileName = replaceTilde('~/.weinre/server.properties');
if (!utils.fileExistsSync(fileName)) {
return properties;
}
contents = fs.readFileSync(fileName, 'utf8');
lines = contents.split('\n');
for (_i = 0, _len = lines.length; _i < _len; _i++) {
line = lines[_i];
line = line.replace(/#.*/, '');
match = line.match(/\s*(\w+)\s*:\s*(.+)\s*/);
if (!match) {
continue;
}
key = utils.trim(match[1]);
val = utils.trim(match[2]);
properties[key] = val;
}
return properties;
};
replaceTilde = function(fileName) {
return fileName.replace('~', getTildeReplacement());
};
getTildeReplacement = function() {
return process.env["HOME"] || process.env["USERPROFILE"] || '.';
};

74
node_modules/weinre/lib/dumpingHandler.js generated vendored Normal file
View File

@ -0,0 +1,74 @@
// Generated by CoffeeScript 1.8.0
var dumpResponse, dumpingHandler, enhance, utils, _;
_ = require('underscore');
utils = require('./utils');
dumpingHandler = function(request, response, uri) {
var element, originalSend, _i, _len, _ref, _results;
originalSend = response.send;
response.send = function(body) {
return dumpResponse(originalSend, body, request, response, uri);
};
if (request.method !== 'POST') {
return;
}
utils.logVerbose('--------------------------------------------------');
utils.logVerbose("" + request.method + " " + uri + " [request]");
if (_.isArray(request.body)) {
_ref = request.body;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
element = _ref[_i];
_results.push(utils.logVerbose(" " + (enhance(JSON.parse(element)))));
}
return _results;
} else {
return utils.logVerbose(" " + (enhance(request.body)));
}
};
dumpResponse = function(originalSend, body, request, response, uri) {
var e, element, _i, _len, _ref, _results;
originalSend.call(response, body);
if ((_ref = request.method) !== 'GET' && _ref !== 'POST') {
return;
}
try {
body = JSON.parse(body);
} catch (_error) {
e = _error;
return;
}
if (_.isArray(body) && (body.length === 0)) {
return;
}
utils.logVerbose('--------------------------------------------------');
utils.logVerbose("" + request.method + " " + uri + " " + response.statusCode + " [response]");
if (_.isArray(body)) {
_results = [];
for (_i = 0, _len = body.length; _i < _len; _i++) {
element = body[_i];
_results.push(utils.logVerbose(" " + (enhance(JSON.parse(element)))));
}
return _results;
} else {
return utils.logVerbose(" " + (enhance(body)));
}
};
enhance = function(object) {
var args, signature;
if (!object["interface"] || !object.method || !object.args) {
return JSON.stringify(object);
}
signature = "" + object["interface"] + "." + object.method;
args = JSON.stringify(object.args);
if (args.length > 500) {
args = "" + (args.substr(0, 50)) + "...";
}
return "" + signature + "(" + args + ")";
};
module.exports = dumpingHandler;

15
node_modules/weinre/lib/extensionManager.js generated vendored Normal file
View File

@ -0,0 +1,15 @@
// Generated by CoffeeScript 1.8.0
var ExtensionManager, utils;
utils = require('./utils');
utils.registerClass(ExtensionManager = (function() {
function ExtensionManager() {
this.extensions = [];
}
return ExtensionManager;
})());
module.exports = new ExtensionManager;

39
node_modules/weinre/lib/jsonBodyParser.js generated vendored Normal file
View File

@ -0,0 +1,39 @@
// Generated by CoffeeScript 1.8.0
var jsonBodyParser, parseBodyAsJSON;
jsonBodyParser = function() {
return function(request, response, next) {
return parseBodyAsJSON(request, response, next);
};
};
parseBodyAsJSON = function(request, response, next) {
var buffer;
if (request.body) {
return next();
}
request.body = {};
if (request.method !== 'POST') {
return next();
}
request.setEncoding('utf8');
buffer = '';
request.on('data', function(chunk) {
return buffer += chunk;
});
return request.on('end', function() {
var e;
if ('' === buffer) {
return next();
}
try {
request.body = JSON.parse(buffer);
return next();
} catch (_error) {
e = _error;
return next(e);
}
});
};
module.exports = jsonBodyParser;

51
node_modules/weinre/lib/messageHandler.js generated vendored Normal file
View File

@ -0,0 +1,51 @@
// Generated by CoffeeScript 1.8.0
var MessageHandler, channelManager, serviceManager, utils,
__slice = [].slice;
utils = require('./utils');
channelManager = require('./channelManager');
serviceManager = require('./serviceManager');
utils.registerClass(MessageHandler = (function() {
function MessageHandler() {}
MessageHandler.prototype.handleMessage = function(channel, message) {
return this._serviceMethodInvoker(channel, message["interface"], message.method, message.args);
};
MessageHandler.prototype._serviceMethodInvoker = function(channel, intfName, method, args) {
var e, methodSignature, service;
methodSignature = "" + intfName + "." + method + "()";
service = serviceManager.get(intfName);
if (!service) {
return this._redirectToConnections(channel, intfName, method, args);
}
args = args.slice();
args.unshift(channel);
try {
return service[method].apply(service, args);
} catch (_error) {
e = _error;
utils.log("error running service method " + methodSignature + ": " + e);
return utils.log("stack:\n" + e.stack);
}
};
MessageHandler.prototype._redirectToConnections = function(channel, intfName, method, args) {
var connection, _i, _len, _ref, _results;
_ref = channel.connections;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
connection = _ref[_i];
_results.push(connection.sendMessage.apply(connection, [intfName, method].concat(__slice.call(args))));
}
return _results;
};
return MessageHandler;
})());
module.exports = new MessageHandler;

140
node_modules/weinre/lib/service/WeinreClientCommands.js generated vendored Normal file
View File

@ -0,0 +1,140 @@
// Generated by CoffeeScript 1.8.0
var WeinreClientCommands, WeinreClientEvents, channelManager, extensionManager, serviceManager, utils, weinre, _,
__hasProp = {}.hasOwnProperty;
_ = require('underscore');
weinre = require('../weinre');
utils = require('../utils');
channelManager = require('../channelManager');
serviceManager = require('../serviceManager');
extensionManager = require('../extensionManager');
WeinreClientEvents = serviceManager.get('WeinreClientEvents');
module.exports = utils.registerClass(WeinreClientCommands = (function() {
function WeinreClientCommands() {}
WeinreClientCommands.prototype.registerClient = function(channel, callbackId) {
var clients, key, options, val, _ref;
if (callbackId) {
WeinreClientEvents.sendCallback(channel, callbackId, channel.description);
}
options = _.extend({}, utils.options);
for (key in options) {
if (!__hasProp.call(options, key)) continue;
val = options[key];
if ((_ref = typeof val) === 'number' || _ref === 'boolean') {
options[key] = "" + val;
}
}
options.version = weinre.getVersion();
WeinreClientEvents.serverProperties(channel, options);
clients = channelManager.getClientChannels(channel.id);
return WeinreClientEvents.clientRegistered(clients, channel.description);
};
WeinreClientCommands.prototype.getTargets = function(channel, callbackId) {
var channels, result;
channels = channelManager.getTargetChannels(channel.id);
result = _.pluck(channels, 'description');
if (callbackId) {
return WeinreClientEvents.sendCallback(channel, callbackId, [result]);
}
};
WeinreClientCommands.prototype.getClients = function(channel, callbackId) {
var channels, result;
channels = channelManager.getClientChannels(channel.id);
result = _.pluck(channels, 'description');
if (callbackId) {
return WeinreClientEvents.sendCallback(channel, callbackId, [result]);
}
};
WeinreClientCommands.prototype.getExtensions = function(channel, callbackId) {
var extension, result;
result = (function() {
var _i, _len, _ref, _results;
_ref = extensionManager.extensions;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
extension = _ref[_i];
_results.push({
startPage: "extensions/" + extension + "/extension.html"
});
}
return _results;
})();
if (callbackId) {
return WeinreClientEvents.sendCallback(channel, callbackId, [result]);
}
};
WeinreClientCommands.prototype.connectTarget = function(channel, clientName, targetName, callbackId) {
var client, target;
client = channelManager.getChannel(clientName);
if (!client) {
return;
}
target = channelManager.getChannel(targetName);
if (!target) {
return;
}
channelManager.connectChannels(client, target);
if (callbackId) {
return WeinreClientEvents.sendCallback(channel, callbackId);
}
};
WeinreClientCommands.prototype.disconnectTarget = function(channel, clientName, callbackId) {
var client, target;
client = connectionManager.getClient(clientName);
if (!client) {
return;
}
target = client.getConnectedTarget();
if (!target) {
return;
}
connectionManager.disconnect(client, target);
if (callbackId) {
return WeinreClientEvents.sendCallback(channel, callbackId);
}
};
WeinreClientCommands.prototype.logDebug = function(channel, message, callbackId) {
utils.logVerbose("client " + channel.name + ": " + message);
if (callbackId) {
return WeinreClientEvents.sendCallback(channel, callbackId);
}
};
WeinreClientCommands.prototype.logInfo = function(channel, message, callbackId) {
utils.log("client " + channel.name + ": " + message);
if (callbackId) {
return WeinreClientEvents.sendCallback(channel, callbackId);
}
};
WeinreClientCommands.prototype.logWarning = function(channel, message, callbackId) {
utils.log("client " + channel.name + ": " + message);
if (callbackId) {
return WeinreClientEvents.sendCallback(channel, callbackId);
}
};
WeinreClientCommands.prototype.logError = function(channel, message, callbackId) {
utils.log("client " + channel.name + ": " + message);
if (callbackId) {
return WeinreClientEvents.sendCallback(channel, callbackId);
}
};
return WeinreClientCommands;
})());

View File

@ -0,0 +1,78 @@
// Generated by CoffeeScript 1.8.0
var WeinreClientEvents, WeinreTargetCommands, WeinreTargetEvents, channelManager, getCallbackChannel, serviceManager, utils;
utils = require('../utils');
channelManager = require('../channelManager');
serviceManager = require('../serviceManager');
WeinreClientEvents = serviceManager.get('WeinreClientEvents');
WeinreTargetEvents = serviceManager.get('WeinreTargetEvents');
module.exports = utils.registerClass(WeinreTargetCommands = (function() {
function WeinreTargetCommands() {}
WeinreTargetCommands.prototype.registerTarget = function(channel, url, callbackId) {
var clients;
channel.description.url = url;
clients = channelManager.getClientChannels(channel.id);
WeinreClientEvents.targetRegistered(clients, channel.description);
if (callbackId) {
return WeinreTargetEvents.sendCallback(channel, callbackId, channel.description);
}
};
WeinreTargetCommands.prototype.sendClientCallback = function(channel, clientCallbackId, args, callbackId) {
var callbackChannel;
callbackChannel = getCallbackChannel(clientCallbackId);
if (!callbackChannel) {
return main.warn("" + this.constructor.name + ".sendClientCallback() sent with invalid callbackId: " + clientCallbackId);
}
callbackChannel = channelManager.getChannel(callbackChannel);
if (!callbackChannel) {
return main.warn("" + this.constructor.name + ".sendClientCallback() unable to find channel : " + clientCallbackId);
}
WeinreClientEvents.sendCallback(callbackChannel, clientCallbackId, args);
if (callbackId) {
return WeinreTargetEvents.sendCallback(channel, callbackId, description);
}
};
WeinreTargetCommands.prototype.logDebug = function(channel, message, callbackId) {
utils.logVerbose("target " + channel.name + ": " + message);
if (callbackId) {
return WeinreTargetEvents.sendCallback(channel, callbackId, description);
}
};
WeinreTargetCommands.prototype.logInfo = function(channel, message, callbackId) {
utils.log("target " + channel.name + ": " + message);
if (callbackId) {
return WeinreTargetEvents.sendCallback(channel, callbackId, description);
}
};
WeinreTargetCommands.prototype.logWarning = function(channel, message, callbackId) {
utils.log("target " + channel.name + ": " + message);
if (callbackId) {
return WeinreTargetEvents.sendCallback(channel, callbackId, description);
}
};
WeinreTargetCommands.prototype.logError = function(channel, message, callbackId) {
utils.log("target " + channel.name + ": " + message);
if (callbackId) {
return WeinreTargetEvents.sendCallback(channel, callbackId, description);
}
};
return WeinreTargetCommands;
})());
getCallbackChannel = function(callbackId) {
callbackId = callbackId.toString();
return callbackId.split('::')[0];
};

90
node_modules/weinre/lib/serviceManager.js generated vendored Normal file
View File

@ -0,0 +1,90 @@
// Generated by CoffeeScript 1.8.0
var ServiceManager, Services, fs, getMethodProxy, getServiceInterface, path, utils, _,
__slice = [].slice;
path = require('path');
fs = require('fs');
_ = require('underscore');
utils = require('./utils');
Services = {};
utils.registerClass(ServiceManager = (function() {
function ServiceManager() {
this.services = {};
}
ServiceManager.prototype.get = function(name) {
if (_.has(this.services, name)) {
return this.services[name];
}
return null;
};
ServiceManager.prototype.registerLocalClass = function(name) {
var e, serviceClass;
serviceClass = null;
try {
serviceClass = require("./service/" + name);
} catch (_error) {
e = _error;
utils.log("local service class not found: " + name);
throw e;
}
return this.services[name] = new serviceClass;
};
ServiceManager.prototype.registerProxyClass = function(name) {
var intf, method, service, _i, _len, _ref;
intf = getServiceInterface(name);
if (!intf) {
utils.exit("proxy service class not found: " + name);
}
if (intf.name !== name) {
utils.exit("proxy interface '" + intf.name + "' loaded when '" + name + "' requested");
}
service = {};
_ref = intf.methods;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
method = _ref[_i];
service[method.name] = getMethodProxy(name, method.name);
}
return this.services[name] = service;
};
return ServiceManager;
})());
getMethodProxy = function(intfName, methodName) {
return function() {
var args, channel, channels, _i, _len, _results;
channels = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
if (!_.isArray(channels)) {
channels = [channels];
}
_results = [];
for (_i = 0, _len = channels.length; _i < _len; _i++) {
channel = channels[_i];
_results.push(channel.sendMessage.apply(channel, [intfName, methodName].concat(__slice.call(args))));
}
return _results;
};
};
getServiceInterface = function(name) {
var contents, fileName, jsonName, serviceInterface;
jsonName = "" + name + ".json";
fileName = path.join(utils.options.staticWebDir, 'interfaces', jsonName);
if (!utils.fileExistsSync(fileName)) {
return null;
}
contents = fs.readFileSync(fileName, 'utf8');
serviceInterface = JSON.parse(contents);
return serviceInterface.interfaces[0];
};
module.exports = new ServiceManager;

194
node_modules/weinre/lib/utils.js generated vendored Normal file
View File

@ -0,0 +1,194 @@
// Generated by CoffeeScript 1.8.0
var Program, SequenceNumber, SequenceNumberMax, fs, log, path, utils,
__hasProp = {}.hasOwnProperty;
fs = require('fs');
path = require('path');
utils = exports;
utils.Program = Program = path.basename(process.argv[1]);
SequenceNumberMax = 100 * 1024 * 1024;
SequenceNumber = 0;
utils.getNextSequenceNumber = function(g) {
SequenceNumber++;
if (SequenceNumber > SequenceNumberMax) {
SequenceNumber = 0;
}
return SequenceNumber;
};
utils.trim = function(string) {
return string.replace(/(^\s+)|(\s+$)/g, '');
};
utils.log = log = function(message) {
var date, time;
date = new Date();
time = date.toISOString();
return console.log("" + time + " " + Program + ": " + message);
};
utils.logVerbose = function(message) {
var _ref;
if (!(utils != null ? (_ref = utils.options) != null ? _ref.verbose : void 0 : void 0)) {
return;
}
return log(message);
};
utils.logDebug = function(message) {
var _ref;
if (!(utils != null ? (_ref = utils.options) != null ? _ref.debug : void 0 : void 0)) {
return;
}
return log(message);
};
utils.exit = function(message) {
log(message);
return process.exit(1);
};
utils.pitch = function(message) {
log(message);
throw message;
};
utils.setOptions = function(options) {
return utils.options = options;
};
utils.ensureInteger = function(value, message) {
var newValue;
newValue = parseInt(value);
if (isNaN(newValue)) {
utils.exit("" + message + ": '" + value + "'");
}
return newValue;
};
utils.ensureString = function(value, message) {
if (typeof value !== 'string') {
utils.exit("" + message + ": '" + value + "'");
}
return value;
};
utils.ensureBoolean = function(value, message) {
var newValue, uValue;
uValue = value.toString().toUpperCase();
newValue = null;
switch (uValue) {
case 'TRUE':
newValue = true;
break;
case 'FALSE':
newValue = false;
}
if (typeof newValue !== 'boolean') {
utils.exit("" + message + ": '" + value + "'");
}
return newValue;
};
utils.setNamesForClass = function(aClass) {
var key, val, _ref, _results;
for (key in aClass) {
if (!__hasProp.call(aClass, key)) continue;
val = aClass[key];
if (typeof val === "function") {
val.signature = "" + aClass.name + "::" + key;
val.displayName = val.signature;
val.name = val.signature;
}
}
_ref = aClass.prototype;
_results = [];
for (key in _ref) {
if (!__hasProp.call(_ref, key)) continue;
val = _ref[key];
if (typeof val === "function") {
val.signature = "" + aClass.name + "." + key;
val.displayName = val.signature;
_results.push(val.name = val.signature);
} else {
_results.push(void 0);
}
}
return _results;
};
utils.registerClass = function(aClass) {
utils.setNamesForClass(aClass);
return aClass;
};
utils.alignLeft = function(string, length) {
while (string.length < length) {
string = "" + string + " ";
}
return string;
};
utils.alignRight = function(string, length) {
while (string.length < length) {
string = " " + string;
}
return string;
};
utils.fileExistsSync = function(name) {
if (fs.existsSync) {
return fs.existsSync(name);
}
return path.existsSync(name);
};
Error.prepareStackTrace = function(error, structuredStackTrace) {
var callSite, file, func, funcName, line, longestFile, longestLine, result, _i, _j, _len, _len1;
result = [];
result.push("---------------------------------------------------------");
result.push("error: " + error);
result.push("---------------------------------------------------------");
result.push("stack: ");
longestFile = 0;
longestLine = 0;
for (_i = 0, _len = structuredStackTrace.length; _i < _len; _i++) {
callSite = structuredStackTrace[_i];
file = callSite.getFileName();
line = callSite.getLineNumber();
file = path.basename(file);
line = "" + line;
if (file.length > longestFile) {
longestFile = file.length;
}
if (line.length > longestLine) {
longestLine = line.length;
}
}
for (_j = 0, _len1 = structuredStackTrace.length; _j < _len1; _j++) {
callSite = structuredStackTrace[_j];
func = callSite.getFunction();
file = callSite.getFileName();
line = callSite.getLineNumber();
file = path.basename(file);
line = "" + line;
file = utils.alignRight(file, longestFile);
line = utils.alignLeft(line, longestLine);
funcName = func.displayName || func.name || callSite.getFunctionName();
callSite.getMethodName();
'???';
if (funcName === "Module._compile") {
result.pop();
result.pop();
break;
}
result.push(" " + file + ":" + line + " - " + funcName + "()");
}
return result.join("\n");
};

193
node_modules/weinre/lib/weinre.js generated vendored Normal file
View File

@ -0,0 +1,193 @@
// Generated by CoffeeScript 1.8.0
var HttpChannelHandler, Version, channelManager, checkForDeath, checkHost, deathTimeout, dns, dumpingHandler, express, fs, getStaticWebDir, getVersion, jsonBodyParser, net, path, processOptions, run2, serviceManager, startDeathWatcher, startServer, utils, _;
fs = require('fs');
net = require('net');
dns = require('dns');
path = require('path');
_ = require('underscore');
express = require('express');
utils = require('./utils');
jsonBodyParser = require('./jsonBodyParser');
HttpChannelHandler = require('./HttpChannelHandler');
dumpingHandler = require('./dumpingHandler');
channelManager = require('./channelManager');
serviceManager = require('./serviceManager');
exports.run = function(options) {
return processOptions(options, run2);
};
run2 = function() {
var options;
options = utils.options;
serviceManager.registerProxyClass('WeinreClientEvents');
serviceManager.registerProxyClass('WeinreTargetEvents');
serviceManager.registerLocalClass('WeinreClientCommands');
serviceManager.registerLocalClass('WeinreTargetCommands');
startDeathWatcher(options.deathTimeout);
return startServer();
};
processOptions = function(options, cb) {
var name, nameLen, names, reducer, _i, _len;
options.httpPort = utils.ensureInteger(options.httpPort, 'the value of the option httpPort is not a number');
options.boundHost = utils.ensureString(options.boundHost, 'the value of the option boundHost is not a string');
options.verbose = utils.ensureBoolean(options.verbose, 'the value of the option verbose is not a boolean');
options.debug = utils.ensureBoolean(options.debug, 'the value of the option debug is not a boolean');
options.readTimeout = utils.ensureInteger(options.readTimeout, 'the value of the option readTimeout is not a number');
options.deathTimeout = utils.ensureInteger(options.deathTimeout, 'the value of the option deathTimeout is not a number');
if (options.debug) {
options.verbose = true;
}
options.staticWebDir = getStaticWebDir();
utils.logVerbose("pid: " + process.pid);
utils.logVerbose("version: " + (getVersion()));
utils.logVerbose("node versions:");
names = _.keys(process.versions);
reducer = function(memo, name) {
return Math.max(memo, name.length);
};
nameLen = _.reduce(names, reducer, 0);
for (_i = 0, _len = names.length; _i < _len; _i++) {
name = names[_i];
utils.logVerbose(" " + (utils.alignLeft(name, nameLen)) + ": " + process.versions[name]);
}
utils.logVerbose("options:");
utils.logVerbose(" httpPort: " + options.httpPort);
utils.logVerbose(" boundHost: " + options.boundHost);
utils.logVerbose(" verbose: " + options.verbose);
utils.logVerbose(" debug: " + options.debug);
utils.logVerbose(" readTimeout: " + options.readTimeout);
utils.logVerbose(" deathTimeout: " + options.deathTimeout);
utils.setOptions(options);
return checkHost(options.boundHost, function(err) {
if (err) {
utils.exit("unable to resolve boundHost address: " + options.boundHost);
}
return cb();
});
};
checkHost = function(hostName, cb) {
if (hostName === '-all-') {
return cb();
}
if (hostName === 'localhost') {
return cb();
}
if (net.isIP(hostName)) {
return cb();
}
return dns.lookup(hostName, cb);
};
deathTimeout = null;
startDeathWatcher = function(timeout) {
deathTimeout = utils.options.deathTimeout * 1000;
return setInterval(checkForDeath, 1000);
};
checkForDeath = function() {
var channel, now, _i, _len, _ref, _results;
now = (new Date).valueOf();
_ref = channelManager.getChannels();
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
channel = _ref[_i];
if (now - channel.lastRead > deathTimeout) {
_results.push(channel.close());
} else {
_results.push(void 0);
}
}
return _results;
};
startServer = function() {
var app, clientHandler, favIcon, options, staticCacheOptions, targetHandler;
options = utils.options;
clientHandler = new HttpChannelHandler('/ws/client');
targetHandler = new HttpChannelHandler('/ws/target');
channelManager.initialize();
favIcon = "" + options.staticWebDir + "/images/weinre-icon-32x32.png";
staticCacheOptions = {
maxObjects: 500,
maxLength: 32 * 1024 * 1024
};
app = express.createServer();
app.on('error', function(error) {
return utils.exit("error running server: " + error);
});
app.use(express.favicon(favIcon));
app.use(jsonBodyParser());
app.all(/^\/ws\/client(.*)/, function(request, response, next) {
var uri;
uri = request.params[0];
if (uri === '') {
uri = '/';
}
if (options.debug) {
dumpingHandler(request, response, uri);
}
return clientHandler.handle(request, response, uri);
});
app.all(/^\/ws\/target(.*)/, function(request, response, next) {
var uri;
uri = request.params[0];
if (uri === '') {
uri = '/';
}
if (options.debug) {
dumpingHandler(request, response, uri);
}
return targetHandler.handle(request, response, uri);
});
app.use(express.errorHandler({
dumpExceptions: true
}));
app.use(express.staticCache(staticCacheOptions));
app.use(express["static"](options.staticWebDir));
if (options.boundHost === '-all-') {
utils.log("starting server at http://localhost:" + options.httpPort);
return app.listen(options.httpPort);
} else {
utils.log("starting server at http://" + options.boundHost + ":" + options.httpPort);
return app.listen(options.httpPort, options.boundHost);
}
};
getStaticWebDir = function() {
var webDir;
webDir = path.normalize(path.join(__dirname, '../web'));
if (utils.fileExistsSync(webDir)) {
return webDir;
}
return utils.exit('unable to find static files to serve in #{webDir}; did you do a build?');
};
Version = null;
getVersion = exports.getVersion = function() {
var json, packageJsonName, values;
if (Version) {
return Version;
}
packageJsonName = path.join(path.dirname(fs.realpathSync(__filename)), '../package.json');
json = fs.readFileSync(packageJsonName, 'utf8');
values = JSON.parse(json);
Version = values.version;
return Version;
};

89
node_modules/weinre/package.json generated vendored Normal file
View File

@ -0,0 +1,89 @@
{
"_args": [
[
"weinre@^2.0.0-pre-I0Z7U9OV",
"C:\\Users\\x2mjbyrn\\Source\\Repos\\Skeleton\\node_modules\\browser-sync-ui"
]
],
"_from": "weinre@>=2.0.0-pre-I0Z7U9OV <3.0.0-0",
"_id": "weinre@2.0.0-pre-I0Z7U9OV",
"_inCache": true,
"_location": "/weinre",
"_nodeVersion": "0.10.31",
"_npmUser": {
"email": "pmuellr@apache.org",
"name": "pmuellr"
},
"_npmVersion": "2.1.2",
"_phantomChildren": {},
"_requested": {
"name": "weinre",
"raw": "weinre@^2.0.0-pre-I0Z7U9OV",
"rawSpec": "^2.0.0-pre-I0Z7U9OV",
"scope": null,
"spec": ">=2.0.0-pre-I0Z7U9OV <3.0.0-0",
"type": "range"
},
"_requiredBy": [
"/browser-sync-ui"
],
"_resolved": "https://registry.npmjs.org/weinre/-/weinre-2.0.0-pre-I0Z7U9OV.tgz",
"_shasum": "fef8aa223921f7b40bbbbd4c3ed4302f6fd0a813",
"_shrinkwrap": null,
"_spec": "weinre@^2.0.0-pre-I0Z7U9OV",
"_where": "C:\\Users\\x2mjbyrn\\Source\\Repos\\Skeleton\\node_modules\\browser-sync-ui",
"author": {
"name": "apache.org"
},
"bin": {
"weinre": "./weinre"
},
"bugs": {
"url": "https://issues.apache.org/jira/secure/IssueNavigator!executeAdvanced.jspa?jqlQuery=project%3DCB+and+component%3Dweinre&runQuery=true&clear=true"
},
"dependencies": {
"express": "2.5.x",
"nopt": "3.0.x",
"underscore": "1.7.x"
},
"description": "WEb INspector REmote",
"devDependencies": {
"coffee-script": "1.8.x"
},
"directories": {
"lib": "./lib"
},
"dist": {
"shasum": "fef8aa223921f7b40bbbbd4c3ed4302f6fd0a813",
"tarball": "https://registry.npmjs.org/weinre/-/weinre-2.0.0-pre-I0Z7U9OV.tgz"
},
"engines": {
"node": ">=0.6.0"
},
"homepage": "http://people.apache.org/~pmuellr/weinre/",
"installable": true,
"licenses": [
{
"type": "Apache 2.0",
"url": "http://www.apache.org/licenses/LICENSE-2.0"
}
],
"main": "./lib/weinre",
"maintainers": [
{
"name": "pmuellr",
"email": "pmuellr@gmail.com"
}
],
"name": "weinre",
"optionalDependencies": {},
"repository": {
"type": "git",
"url": "https://git-wip-us.apache.org/repos/asf/cordova-weinre.git"
},
"scripts": {},
"tags": [
"debug"
],
"version": "2.0.0-pre-I0Z7U9OV"
}

View File

@ -0,0 +1,270 @@
/*
* Copyright (C) 2010 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
* BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
* THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.ApplicationCacheItemsView = function(treeElement, appcacheDomain)
{
WebInspector.View.call(this);
this.element.addStyleClass("storage-view");
this.element.addStyleClass("table");
// FIXME: Delete Button semantics are not yet defined.
// FIXME: Needs better tooltip. (Localized)
this.deleteButton = new WebInspector.StatusBarButton(WebInspector.UIString("Delete"), "delete-storage-status-bar-item");
this.deleteButton.visible = false;
this.deleteButton.addEventListener("click", this._deleteButtonClicked.bind(this), false);
// FIXME: Refresh Button semantics are not yet defined.
// FIXME: Needs better tooltip. (Localized)
this.refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item");
this.refreshButton.addEventListener("click", this._refreshButtonClicked.bind(this), false);
if (Preferences.onlineDetectionEnabled) {
this.connectivityIcon = document.createElement("img");
this.connectivityIcon.className = "storage-application-cache-connectivity-icon";
this.connectivityIcon.src = "";
this.connectivityMessage = document.createElement("span");
this.connectivityMessage.className = "storage-application-cache-connectivity";
this.connectivityMessage.textContent = "";
}
this.divider = document.createElement("span");
this.divider.className = "status-bar-item status-bar-divider";
this.statusIcon = document.createElement("img");
this.statusIcon.className = "storage-application-cache-status-icon";
this.statusIcon.src = "";
this.statusMessage = document.createElement("span");
this.statusMessage.className = "storage-application-cache-status";
this.statusMessage.textContent = "";
this._treeElement = treeElement;
this._appcacheDomain = appcacheDomain;
this._emptyMsgElement = document.createElement("div");
this._emptyMsgElement.className = "storage-empty-view";
this._emptyMsgElement.textContent = WebInspector.UIString("No Application Cache information available.");
this.element.appendChild(this._emptyMsgElement);
this.updateStatus(applicationCache.UNCACHED);
}
WebInspector.ApplicationCacheItemsView.prototype = {
get statusBarItems()
{
if (Preferences.onlineDetectionEnabled) {
return [
this.refreshButton.element, this.deleteButton.element,
this.connectivityIcon, this.connectivityMessage, this.divider,
this.statusIcon, this.statusMessage
];
} else {
return [
this.refreshButton.element, this.deleteButton.element, this.divider,
this.statusIcon, this.statusMessage
];
}
},
show: function(parentElement)
{
WebInspector.View.prototype.show.call(this, parentElement);
this.updateNetworkState(navigator.onLine);
this._update();
},
hide: function()
{
WebInspector.View.prototype.hide.call(this);
this.deleteButton.visible = false;
},
updateStatus: function(status)
{
var statusInformation = {};
statusInformation[applicationCache.UNCACHED] = { src: "Images/warningOrangeDot.png", text: "UNCACHED" };
statusInformation[applicationCache.IDLE] = { src: "Images/warningOrangeDot.png", text: "IDLE" };
statusInformation[applicationCache.CHECKING] = { src: "Images/successGreenDot.png", text: "CHECKING" };
statusInformation[applicationCache.DOWNLOADING] = { src: "Images/successGreenDot.png", text: "DOWNLOADING" };
statusInformation[applicationCache.UPDATEREADY] = { src: "Images/successGreenDot.png", text: "UPDATEREADY" };
statusInformation[applicationCache.OBSOLETE] = { src: "Images/errorRedDot.png", text: "OBSOLETE" };
var info = statusInformation[status];
if (!info) {
console.error("Unknown Application Cache Status was Not Handled: %d", status);
return;
}
this.statusIcon.src = info.src;
this.statusMessage.textContent = info.text;
},
updateNetworkState: function(isNowOnline)
{
if (Preferences.onlineDetectionEnabled) {
if (isNowOnline) {
this.connectivityIcon.src = "Images/successGreenDot.png";
this.connectivityMessage.textContent = WebInspector.UIString("Online");
} else {
this.connectivityIcon.src = "Images/errorRedDot.png";
this.connectivityMessage.textContent = WebInspector.UIString("Offline");
}
}
},
_update: function()
{
WebInspector.ApplicationCacheDispatcher.getApplicationCachesAsync(this._updateCallback.bind(this));
},
_updateCallback: function(applicationCaches)
{
// FIXME: applicationCaches is just one cache.
// FIXME: are these variables needed anywhere else?
this._manifest = applicationCaches.manifest;
this._creationTime = applicationCaches.creationTime;
this._updateTime = applicationCaches.updateTime;
this._size = applicationCaches.size;
this._resources = applicationCaches.resources;
var lastPathComponent = applicationCaches.lastPathComponent;
if (!this._manifest) {
this._emptyMsgElement.removeStyleClass("hidden");
this.deleteButton.visible = false;
if (this._dataGrid)
this._dataGrid.element.addStyleClass("hidden");
return;
}
if (!this._dataGrid)
this._createDataGrid();
this._populateDataGrid();
this._dataGrid.autoSizeColumns(20, 80);
this._dataGrid.element.removeStyleClass("hidden");
this._emptyMsgElement.addStyleClass("hidden");
this.deleteButton.visible = true;
var totalSizeString = Number.bytesToString(this._size);
this._treeElement.subtitle = WebInspector.UIString("%s (%s)", lastPathComponent, totalSizeString);
// FIXME: For Chrome, put creationTime and updateTime somewhere.
// NOTE: localizedString has not yet been added.
// WebInspector.UIString("(%s) Created: %s Updated: %s", this._size, this._creationTime, this._updateTime);
},
_createDataGrid: function()
{
var columns = { 0: {}, 1: {}, 2: {} };
columns[0].title = WebInspector.UIString("Resource");
columns[0].sort = "ascending";
columns[0].sortable = true;
columns[1].title = WebInspector.UIString("Type");
columns[1].sortable = true;
columns[2].title = WebInspector.UIString("Size");
columns[2].aligned = "right";
columns[2].sortable = true;
this._dataGrid = new WebInspector.DataGrid(columns);
this.element.appendChild(this._dataGrid.element);
this._dataGrid.addEventListener("sorting changed", this._populateDataGrid, this);
this._dataGrid.updateWidths();
},
_populateDataGrid: function()
{
var selectedResource = this._dataGrid.selectedNode ? this._dataGrid.selectedNode.resource : null;
var sortDirection = this._dataGrid.sortOrder === "ascending" ? 1 : -1;
function numberCompare(field, resource1, resource2)
{
return sortDirection * (resource1[field] - resource2[field]);
}
function localeCompare(field, resource1, resource2)
{
return sortDirection * (resource1[field] + "").localeCompare(resource2[field] + "")
}
var comparator;
switch (parseInt(this._dataGrid.sortColumnIdentifier)) {
case 0: comparator = localeCompare.bind(this, "name"); break;
case 1: comparator = localeCompare.bind(this, "type"); break;
case 2: comparator = numberCompare.bind(this, "size"); break;
default: localeCompare.bind(this, "resource"); // FIXME: comparator = ?
}
this._resources.sort(comparator);
this._dataGrid.removeChildren();
var nodeToSelect;
for (var i = 0; i < this._resources.length; ++i) {
var data = {};
var resource = this._resources[i];
data[0] = resource.name;
data[1] = resource.type;
data[2] = Number.bytesToString(resource.size);
var node = new WebInspector.DataGridNode(data);
node.resource = resource;
node.selectable = true;
this._dataGrid.appendChild(node);
if (resource === selectedResource) {
nodeToSelect = node;
nodeToSelect.selected = true;
}
}
if (!nodeToSelect)
this._dataGrid.children[0].selected = true;
},
resize: function()
{
if (this._dataGrid)
this._dataGrid.updateWidths();
},
_deleteButtonClicked: function(event)
{
if (!this._dataGrid || !this._dataGrid.selectedNode)
return;
// FIXME: Delete Button semantics are not yet defined. (Delete a single, or all?)
this._deleteCallback(this._dataGrid.selectedNode);
},
_deleteCallback: function(node)
{
// FIXME: Should we delete a single (selected) resource or all resources?
// InspectorBackend.deleteCachedResource(...)
// this._update();
},
_refreshButtonClicked: function(event)
{
// FIXME: Is this a refresh button or a re-fetch manifest button?
// this._update();
}
}
WebInspector.ApplicationCacheItemsView.prototype.__proto__ = WebInspector.View.prototype;

70
node_modules/weinre/web/client/AuditCategories.js generated vendored Normal file
View File

@ -0,0 +1,70 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.AuditCategories.PagePerformance = function() {
WebInspector.AuditCategory.call(this, WebInspector.AuditCategories.PagePerformance.AuditCategoryName);
}
WebInspector.AuditCategories.PagePerformance.AuditCategoryName = "Web Page Performance";
WebInspector.AuditCategories.PagePerformance.prototype = {
initialize: function()
{
this.addRule(new WebInspector.AuditRules.UnusedCssRule(), WebInspector.AuditRule.Severity.Warning);
this.addRule(new WebInspector.AuditRules.CssInHeadRule(), WebInspector.AuditRule.Severity.Severe);
this.addRule(new WebInspector.AuditRules.StylesScriptsOrderRule(), WebInspector.AuditRule.Severity.Severe);
}
}
WebInspector.AuditCategories.PagePerformance.prototype.__proto__ = WebInspector.AuditCategory.prototype;
WebInspector.AuditCategories.NetworkUtilization = function() {
WebInspector.AuditCategory.call(this, WebInspector.AuditCategories.NetworkUtilization.AuditCategoryName);
}
WebInspector.AuditCategories.NetworkUtilization.AuditCategoryName = "Network Utilization";
WebInspector.AuditCategories.NetworkUtilization.prototype = {
initialize: function()
{
this.addRule(new WebInspector.AuditRules.GzipRule(), WebInspector.AuditRule.Severity.Severe);
this.addRule(new WebInspector.AuditRules.ImageDimensionsRule(), WebInspector.AuditRule.Severity.Warning);
this.addRule(new WebInspector.AuditRules.CookieSizeRule(400), WebInspector.AuditRule.Severity.Warning);
this.addRule(new WebInspector.AuditRules.StaticCookielessRule(5), WebInspector.AuditRule.Severity.Warning);
this.addRule(new WebInspector.AuditRules.CombineJsResourcesRule(2), WebInspector.AuditRule.Severity.Severe);
this.addRule(new WebInspector.AuditRules.CombineCssResourcesRule(2), WebInspector.AuditRule.Severity.Severe);
this.addRule(new WebInspector.AuditRules.MinimizeDnsLookupsRule(4), WebInspector.AuditRule.Severity.Warning);
this.addRule(new WebInspector.AuditRules.ParallelizeDownloadRule(4, 10, 0.5), WebInspector.AuditRule.Severity.Warning);
this.addRule(new WebInspector.AuditRules.BrowserCacheControlRule(), WebInspector.AuditRule.Severity.Severe);
this.addRule(new WebInspector.AuditRules.ProxyCacheControlRule(), WebInspector.AuditRule.Severity.Warning);
}
}
WebInspector.AuditCategories.NetworkUtilization.prototype.__proto__ = WebInspector.AuditCategory.prototype;

92
node_modules/weinre/web/client/AuditFormatters.js generated vendored Normal file
View File

@ -0,0 +1,92 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.applyFormatters = function(value)
{
var formatter;
var type = typeof value;
var args;
switch (type) {
case "string":
case "boolean":
case "number":
formatter = WebInspector.AuditFormatters.text;
args = [ value.toString() ];
break;
case "object":
if (value instanceof Array) {
formatter = WebInspector.AuditFormatters.concat;
args = value;
} else if (value.type && value.arguments) {
formatter = WebInspector.AuditFormatters[value.type];
args = value.arguments;
}
}
if (!formatter)
throw "Invalid value or formatter: " + type + JSON.stringify(value);
return formatter.apply(null, args);
}
WebInspector.AuditFormatters = {
text: function(text)
{
return document.createTextNode(text);
},
snippet: function(snippetText)
{
var div = document.createElement("div");
div.innerText = snippetText;
div.className = "source-code";
return div;
},
concat: function()
{
var parent = document.createElement("span");
for (var arg = 0; arg < arguments.length; ++arg)
parent.appendChild(WebInspector.applyFormatters(arguments[arg]));
return parent;
},
url: function(url, displayText, allowExternalNavigation)
{
var a = document.createElement("a");
a.href = url;
a.title = url;
a.textContent = displayText || url;
if (allowExternalNavigation)
a.target = "_blank";
return a;
}
};

254
node_modules/weinre/web/client/AuditLauncherView.js generated vendored Normal file
View File

@ -0,0 +1,254 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.AuditLauncherView = function(runnerCallback)
{
WebInspector.View.call(this);
this._runnerCallback = runnerCallback;
this._categoryIdPrefix = "audit-category-item-";
this._auditRunning = false;
this.element.addStyleClass("audit-launcher-view");
this._contentElement = document.createElement("div");
this._contentElement.className = "audit-launcher-view-content";
this.element.appendChild(this._contentElement);
this._boundCategoryClickListener = this._categoryClicked.bind(this);
this._resetResourceCount();
this._sortedCategories = [];
this._headerElement = document.createElement("h1");
this._headerElement.className = "no-audits";
this._headerElement.textContent = WebInspector.UIString("No audits to run");
this._contentElement.appendChild(this._headerElement);
WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceStarted, this._onResourceStarted, this);
WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceFinished, this._onResourceFinished, this);
}
WebInspector.AuditLauncherView.prototype = {
_resetResourceCount: function()
{
this._loadedResources = 0;
this._totalResources = 0;
},
_onResourceStarted: function(event)
{
var resource = event.data;
// Ignore long-living WebSockets for the sake of progress indicator, as we won't be waiting them anyway.
if (resource.type === WebInspector.Resource.Type.WebSocket)
return;
++this._totalResources;
this._updateResourceProgress();
},
_onResourceFinished: function(event)
{
var resource = event.data;
// See resorceStarted for details.
if (resource.type === WebInspector.Resource.Type.WebSocket)
return;
++this._loadedResources;
this._updateResourceProgress();
},
addCategory: function(category)
{
if (!this._sortedCategories.length)
this._createLauncherUI();
var categoryElement = this._createCategoryElement(category.displayName, category.id);
category._checkboxElement = categoryElement.firstChild;
if (this._selectAllCheckboxElement.checked) {
category._checkboxElement.checked = true;
++this._currentCategoriesCount;
}
function compareCategories(a, b)
{
var aTitle = a.displayName || "";
var bTitle = b.displayName || "";
return aTitle.localeCompare(bTitle);
}
var insertBefore = insertionIndexForObjectInListSortedByFunction(category, this._sortedCategories, compareCategories);
this._categoriesElement.insertBefore(categoryElement, this._categoriesElement.children[insertBefore] || null);
this._sortedCategories.splice(insertBefore, 0, category);
this._updateButton();
},
_setAuditRunning: function(auditRunning)
{
if (this._auditRunning === auditRunning)
return;
this._auditRunning = auditRunning;
this._updateButton();
this._updateResourceProgress();
},
_launchButtonClicked: function(event)
{
var catIds = [];
var childNodes = this._categoriesElement.childNodes;
for (var category = 0; category < this._sortedCategories.length; ++category) {
if (this._sortedCategories[category]._checkboxElement.checked)
catIds.push(this._sortedCategories[category].id);
}
this._setAuditRunning(true);
this._runnerCallback(catIds, this._auditPresentStateElement.checked, this._setAuditRunning.bind(this, false));
},
_selectAllClicked: function(checkCategories)
{
var childNodes = this._categoriesElement.childNodes;
for (var i = 0, length = childNodes.length; i < length; ++i)
childNodes[i].firstChild.checked = checkCategories;
this._currentCategoriesCount = checkCategories ? this._sortedCategories.length : 0;
this._updateButton();
},
_categoryClicked: function(event)
{
this._currentCategoriesCount += event.target.checked ? 1 : -1;
this._selectAllCheckboxElement.checked = this._currentCategoriesCount === this._sortedCategories.length;
this._updateButton();
},
_createCategoryElement: function(title, id)
{
var labelElement = document.createElement("label");
labelElement.id = this._categoryIdPrefix + id;
var element = document.createElement("input");
element.type = "checkbox";
if (id !== "")
element.addEventListener("click", this._boundCategoryClickListener, false);
labelElement.appendChild(element);
labelElement.appendChild(document.createTextNode(title));
return labelElement;
},
_createLauncherUI: function()
{
this._headerElement = document.createElement("h1");
this._headerElement.textContent = WebInspector.UIString("Select audits to run");
for (var child = 0; child < this._contentElement.children.length; ++child)
this._contentElement.removeChild(this._contentElement.children[child]);
this._contentElement.appendChild(this._headerElement);
function handleSelectAllClick(event)
{
this._selectAllClicked(event.target.checked);
}
var categoryElement = this._createCategoryElement(WebInspector.UIString("Select All"), "");
categoryElement.id = "audit-launcher-selectall";
this._selectAllCheckboxElement = categoryElement.firstChild;
this._selectAllCheckboxElement.checked = true;
this._selectAllCheckboxElement.addEventListener("click", handleSelectAllClick.bind(this), false);
this._contentElement.appendChild(categoryElement);
this._categoriesElement = document.createElement("div");
this._categoriesElement.className = "audit-categories-container";
this._contentElement.appendChild(this._categoriesElement);
this._currentCategoriesCount = 0;
var flexibleSpaceElement = document.createElement("div");
flexibleSpaceElement.className = "flexible-space";
this._contentElement.appendChild(flexibleSpaceElement);
this._buttonContainerElement = document.createElement("div");
this._buttonContainerElement.className = "button-container";
var labelElement = document.createElement("label");
this._auditPresentStateElement = document.createElement("input");
this._auditPresentStateElement.name = "audit-mode";
this._auditPresentStateElement.type = "radio";
this._auditPresentStateElement.checked = true;
this._auditPresentStateLabelElement = document.createTextNode(WebInspector.UIString("Audit Present State"));
labelElement.appendChild(this._auditPresentStateElement);
labelElement.appendChild(this._auditPresentStateLabelElement);
this._buttonContainerElement.appendChild(labelElement);
labelElement = document.createElement("label");
this.auditReloadedStateElement = document.createElement("input");
this.auditReloadedStateElement.name = "audit-mode";
this.auditReloadedStateElement.type = "radio";
labelElement.appendChild(this.auditReloadedStateElement);
labelElement.appendChild(document.createTextNode("Reload Page and Audit on Load"));
this._buttonContainerElement.appendChild(labelElement);
this._launchButton = document.createElement("button");
this._launchButton.type = "button";
this._launchButton.textContent = WebInspector.UIString("Run");
this._launchButton.addEventListener("click", this._launchButtonClicked.bind(this), false);
this._buttonContainerElement.appendChild(this._launchButton);
this._resourceProgressContainer = document.createElement("span");
this._resourceProgressContainer.className = "resource-progress";
var resourceProgressImage = document.createElement("img");
this._resourceProgressContainer.appendChild(resourceProgressImage);
this._resourceProgressTextElement = document.createElement("span");
this._resourceProgressContainer.appendChild(this._resourceProgressTextElement);
this._buttonContainerElement.appendChild(this._resourceProgressContainer);
this._contentElement.appendChild(this._buttonContainerElement);
this._selectAllClicked(this._selectAllCheckboxElement.checked);
this._updateButton();
this._updateResourceProgress();
},
_updateResourceProgress: function()
{
if (!this._resourceProgressContainer)
return;
if (!this._auditRunning) {
this._resetResourceCount();
this._resourceProgressContainer.addStyleClass("hidden");
} else
this._resourceProgressContainer.removeStyleClass("hidden");
this._resourceProgressTextElement.textContent = WebInspector.UIString("Loading (%d of %d)", this._loadedResources, this._totalResources);
},
_updateButton: function()
{
this._launchButton.disabled = !this._currentCategoriesCount || this._auditRunning;
}
}
WebInspector.AuditLauncherView.prototype.__proto__ = WebInspector.View.prototype;

114
node_modules/weinre/web/client/AuditResultView.js generated vendored Normal file
View File

@ -0,0 +1,114 @@
/*
* Copyright (C) 2009 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.AuditResultView = function(categoryResults)
{
WebInspector.View.call(this);
this.element.className = "audit-result-view";
function categorySorter(a, b) {
return (a.title || "").localeCompare(b.title || "");
}
categoryResults.sort(categorySorter);
for (var i = 0; i < categoryResults.length; ++i)
this.element.appendChild(new WebInspector.AuditCategoryResultPane(categoryResults[i]).element);
}
WebInspector.AuditResultView.prototype.__proto__ = WebInspector.View.prototype;
WebInspector.AuditCategoryResultPane = function(categoryResult)
{
WebInspector.SidebarPane.call(this, categoryResult.title);
var treeOutlineElement = document.createElement("ol");
this.bodyElement.addStyleClass("audit-result-tree");
this.bodyElement.appendChild(treeOutlineElement);
this._treeOutline = new TreeOutline(treeOutlineElement);
this._treeOutline.expandTreeElementsWhenArrowing = true;
function ruleSorter(a, b)
{
var result = WebInspector.AuditRule.SeverityOrder[a.severity || 0] - WebInspector.AuditRule.SeverityOrder[b.severity || 0];
if (!result)
result = (a.value || "").localeCompare(b.value || "");
return result;
}
categoryResult.ruleResults.sort(ruleSorter);
for (var i = 0; i < categoryResult.ruleResults.length; ++i) {
var ruleResult = categoryResult.ruleResults[i];
var treeElement = this._appendResult(this._treeOutline, ruleResult);
treeElement.listItemElement.addStyleClass("audit-result");
if (ruleResult.severity) {
var severityElement = document.createElement("img");
severityElement.className = "severity-" + ruleResult.severity;
treeElement.listItemElement.appendChild(severityElement);
}
}
this.expand();
}
WebInspector.AuditCategoryResultPane.prototype = {
_appendResult: function(parentTreeElement, result)
{
var title = "";
if (typeof result.value === "string") {
title = result.value;
if (result.violationCount)
title = String.sprintf("%s (%d)", title, result.violationCount);
}
var treeElement = new TreeElement(null, null, !!result.children);
treeElement.titleHTML = title;
parentTreeElement.appendChild(treeElement);
if (result.className)
treeElement.listItemElement.addStyleClass(result.className);
if (typeof result.value !== "string")
treeElement.listItemElement.appendChild(WebInspector.applyFormatters(result.value));
if (result.children) {
for (var i = 0; i < result.children.length; ++i)
this._appendResult(treeElement, result.children[i]);
}
if (result.expanded) {
treeElement.listItemElement.removeStyleClass("parent");
treeElement.listItemElement.addStyleClass("parent-expanded");
treeElement.expand();
}
return treeElement;
}
}
WebInspector.AuditCategoryResultPane.prototype.__proto__ = WebInspector.SidebarPane.prototype;

1041
node_modules/weinre/web/client/AuditRules.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

474
node_modules/weinre/web/client/AuditsPanel.js generated vendored Normal file
View File

@ -0,0 +1,474 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.AuditsPanel = function()
{
WebInspector.Panel.call(this, "audits");
this.createSidebar();
this.auditsTreeElement = new WebInspector.SidebarSectionTreeElement("", {}, true);
this.sidebarTree.appendChild(this.auditsTreeElement);
this.auditsTreeElement.listItemElement.addStyleClass("hidden");
this.auditsTreeElement.expand();
this.auditsItemTreeElement = new WebInspector.AuditsSidebarTreeElement();
this.auditsTreeElement.appendChild(this.auditsItemTreeElement);
this.auditResultsTreeElement = new WebInspector.SidebarSectionTreeElement(WebInspector.UIString("RESULTS"), {}, true);
this.sidebarTree.appendChild(this.auditResultsTreeElement);
this.auditResultsTreeElement.expand();
this.clearResultsButton = new WebInspector.StatusBarButton(WebInspector.UIString("Clear audit results."), "clear-status-bar-item");
this.clearResultsButton.addEventListener("click", this._clearButtonClicked.bind(this), false);
this.viewsContainerElement = document.createElement("div");
this.viewsContainerElement.id = "audit-views";
this.element.appendChild(this.viewsContainerElement);
this._constructCategories();
this._launcherView = new WebInspector.AuditLauncherView(this.initiateAudit.bind(this));
for (id in this.categoriesById)
this._launcherView.addCategory(this.categoriesById[id]);
}
WebInspector.AuditsPanel.prototype = {
get toolbarItemLabel()
{
return WebInspector.UIString("Audits");
},
get statusBarItems()
{
return [this.clearResultsButton.element];
},
get mainResourceLoadTime()
{
return this._mainResourceLoadTime;
},
set mainResourceLoadTime(x)
{
this._mainResourceLoadTime = x;
this._didMainResourceLoad();
},
get mainResourceDOMContentTime()
{
return this._mainResourceDOMContentTime;
},
set mainResourceDOMContentTime(x)
{
this._mainResourceDOMContentTime = x;
},
get categoriesById()
{
return this._auditCategoriesById;
},
addCategory: function(category)
{
this.categoriesById[category.id] = category;
this._launcherView.addCategory(category);
},
getCategory: function(id)
{
return this.categoriesById[id];
},
_constructCategories: function()
{
this._auditCategoriesById = {};
for (var categoryCtorID in WebInspector.AuditCategories) {
var auditCategory = new WebInspector.AuditCategories[categoryCtorID]();
auditCategory._id = categoryCtorID;
this.categoriesById[categoryCtorID] = auditCategory;
}
},
_executeAudit: function(categories, resultCallback)
{
var resources = WebInspector.networkResources;
var rulesRemaining = 0;
for (var i = 0; i < categories.length; ++i)
rulesRemaining += categories[i].ruleCount;
var results = [];
var mainResourceURL = WebInspector.mainResource.url;
function ruleResultReadyCallback(categoryResult, ruleResult)
{
if (ruleResult && ruleResult.children)
categoryResult.addRuleResult(ruleResult);
--rulesRemaining;
if (!rulesRemaining && resultCallback)
resultCallback(mainResourceURL, results);
}
if (!rulesRemaining) {
resultCallback(mainResourceURL, results);
return;
}
for (var i = 0; i < categories.length; ++i) {
var category = categories[i];
var result = new WebInspector.AuditCategoryResult(category);
results.push(result);
category.run(resources, ruleResultReadyCallback.bind(null, result));
}
},
_auditFinishedCallback: function(launcherCallback, mainResourceURL, results)
{
var children = this.auditResultsTreeElement.children;
var ordinal = 1;
for (var i = 0; i < children.length; ++i) {
if (children[i].mainResourceURL === mainResourceURL)
ordinal++;
}
var resultTreeElement = new WebInspector.AuditResultSidebarTreeElement(results, mainResourceURL, ordinal);
this.auditResultsTreeElement.appendChild(resultTreeElement);
resultTreeElement.reveal();
resultTreeElement.select();
if (launcherCallback)
launcherCallback();
},
initiateAudit: function(categoryIds, runImmediately, launcherCallback)
{
if (!categoryIds || !categoryIds.length)
return;
var categories = [];
for (var i = 0; i < categoryIds.length; ++i)
categories.push(this.categoriesById[categoryIds[i]]);
function initiateAuditCallback(categories, launcherCallback)
{
this._executeAudit(categories, this._auditFinishedCallback.bind(this, launcherCallback));
}
if (runImmediately)
initiateAuditCallback.call(this, categories, launcherCallback);
else
this._reloadResources(initiateAuditCallback.bind(this, categories, launcherCallback));
},
_reloadResources: function(callback)
{
this._pageReloadCallback = callback;
InspectorBackend.reloadPage(false);
},
_didMainResourceLoad: function()
{
if (this._pageReloadCallback) {
var callback = this._pageReloadCallback;
delete this._pageReloadCallback;
callback();
}
},
showResults: function(categoryResults)
{
if (!categoryResults._resultView)
categoryResults._resultView = new WebInspector.AuditResultView(categoryResults);
this.visibleView = categoryResults._resultView;
},
showLauncherView: function()
{
this.visibleView = this._launcherView;
},
get visibleView()
{
return this._visibleView;
},
set visibleView(x)
{
if (this._visibleView === x)
return;
if (this._visibleView)
this._visibleView.hide();
this._visibleView = x;
if (x)
x.show(this.viewsContainerElement);
},
attach: function()
{
WebInspector.Panel.prototype.attach.call(this);
this.auditsItemTreeElement.select();
},
updateMainViewWidth: function(width)
{
this.viewsContainerElement.style.left = width + "px";
},
_clearButtonClicked: function()
{
this.auditsItemTreeElement.reveal();
this.auditsItemTreeElement.select();
this.auditResultsTreeElement.removeChildren();
}
}
WebInspector.AuditsPanel.prototype.__proto__ = WebInspector.Panel.prototype;
WebInspector.AuditCategory = function(displayName)
{
this._displayName = displayName;
this._rules = [];
}
WebInspector.AuditCategory.prototype = {
get id()
{
// this._id value is injected at construction time.
return this._id;
},
get displayName()
{
return this._displayName;
},
get ruleCount()
{
this._ensureInitialized();
return this._rules.length;
},
addRule: function(rule, severity)
{
rule.severity = severity;
this._rules.push(rule);
},
run: function(resources, callback)
{
this._ensureInitialized();
for (var i = 0; i < this._rules.length; ++i)
this._rules[i].run(resources, callback);
},
_ensureInitialized: function()
{
if (!this._initialized) {
if ("initialize" in this)
this.initialize();
this._initialized = true;
}
}
}
WebInspector.AuditRule = function(id, displayName)
{
this._id = id;
this._displayName = displayName;
}
WebInspector.AuditRule.Severity = {
Info: "info",
Warning: "warning",
Severe: "severe"
}
WebInspector.AuditRule.SeverityOrder = {
"info": 3,
"warning": 2,
"severe": 1
}
WebInspector.AuditRule.prototype = {
get id()
{
return this._id;
},
get displayName()
{
return this._displayName;
},
set severity(severity)
{
this._severity = severity;
},
run: function(resources, callback)
{
var result = new WebInspector.AuditRuleResult(this.displayName);
result.severity = this._severity;
this.doRun(resources, result, callback);
},
doRun: function(resources, result, callback)
{
throw new Error("doRun() not implemented");
}
}
WebInspector.AuditCategoryResult = function(category)
{
this.title = category.displayName;
this.ruleResults = [];
}
WebInspector.AuditCategoryResult.prototype = {
addRuleResult: function(ruleResult)
{
this.ruleResults.push(ruleResult);
}
}
WebInspector.AuditRuleResult = function(value, expanded, className)
{
this.value = value;
this.className = className;
this.expanded = expanded;
this.violationCount = 0;
}
WebInspector.AuditRuleResult.linkifyDisplayName = function(url)
{
return WebInspector.linkifyURL(url, WebInspector.displayNameForURL(url));
}
WebInspector.AuditRuleResult.resourceDomain = function(domain)
{
return domain || WebInspector.UIString("[empty domain]");
}
WebInspector.AuditRuleResult.prototype = {
addChild: function(value, expanded, className)
{
if (!this.children)
this.children = [];
var entry = new WebInspector.AuditRuleResult(value, expanded, className);
this.children.push(entry);
return entry;
},
addURL: function(url)
{
return this.addChild(WebInspector.AuditRuleResult.linkifyDisplayName(url));
},
addURLs: function(urls)
{
for (var i = 0; i < urls.length; ++i)
this.addURL(urls[i]);
},
addSnippet: function(snippet)
{
return this.addChild(snippet, false, "source-code");
}
}
WebInspector.AuditsSidebarTreeElement = function()
{
this.small = false;
WebInspector.SidebarTreeElement.call(this, "audits-sidebar-tree-item", WebInspector.UIString("Audits"), "", null, false);
}
WebInspector.AuditsSidebarTreeElement.prototype = {
onattach: function()
{
WebInspector.SidebarTreeElement.prototype.onattach.call(this);
},
onselect: function()
{
WebInspector.panels.audits.showLauncherView();
},
get selectable()
{
return true;
},
refresh: function()
{
this.refreshTitles();
}
}
WebInspector.AuditsSidebarTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype;
WebInspector.AuditResultSidebarTreeElement = function(results, mainResourceURL, ordinal)
{
this.results = results;
this.mainResourceURL = mainResourceURL;
WebInspector.SidebarTreeElement.call(this, "audit-result-sidebar-tree-item", String.sprintf("%s (%d)", mainResourceURL, ordinal), "", {}, false);
}
WebInspector.AuditResultSidebarTreeElement.prototype = {
onselect: function()
{
WebInspector.panels.audits.showResults(this.results);
},
get selectable()
{
return true;
}
}
WebInspector.AuditResultSidebarTreeElement.prototype.__proto__ = WebInspector.SidebarTreeElement.prototype;
// Contributed audit rules should go into this namespace.
WebInspector.AuditRules = {};
// Contributed audit categories should go into this namespace.
WebInspector.AuditCategories = {};

View File

@ -0,0 +1,264 @@
/*
* Copyright (C) 2009 280 North Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
// Bottom Up Profiling shows the entire callstack backwards:
// The root node is a representation of each individual function called, and each child of that node represents
// a reverse-callstack showing how many of those calls came from it. So, unlike top-down, the statistics in
// each child still represent the root node. We have to be particularly careful of recursion with this mode
// because a root node can represent itself AND an ancestor.
WebInspector.BottomUpProfileDataGridNode = function(/*ProfileView*/ profileView, /*ProfileNode*/ profileNode, /*BottomUpProfileDataGridTree*/ owningTree)
{
WebInspector.ProfileDataGridNode.call(this, profileView, profileNode, owningTree, this._willHaveChildren(profileNode));
this._remainingNodeInfos = [];
}
WebInspector.BottomUpProfileDataGridNode.prototype = {
_takePropertiesFromProfileDataGridNode: function(/*ProfileDataGridNode*/ profileDataGridNode)
{
this._save();
this.selfTime = profileDataGridNode.selfTime;
this.totalTime = profileDataGridNode.totalTime;
this.numberOfCalls = profileDataGridNode.numberOfCalls;
},
// When focusing, we keep just the members of the callstack.
_keepOnlyChild: function(/*ProfileDataGridNode*/ child)
{
this._save();
this.removeChildren();
this.appendChild(child);
},
_exclude: function(aCallUID)
{
if (this._remainingNodeInfos)
this._populate();
this._save();
var children = this.children;
var index = this.children.length;
while (index--)
children[index]._exclude(aCallUID);
var child = this.childrenByCallUID[aCallUID];
if (child)
this._merge(child, true);
},
_restore: function()
{
WebInspector.ProfileDataGridNode.prototype._restore();
if (!this.children.length)
this.hasChildren = this._willHaveChildren();
},
_merge: function(/*ProfileDataGridNode*/ child, /*Boolean*/ shouldAbsorb)
{
this.selfTime -= child.selfTime;
WebInspector.ProfileDataGridNode.prototype._merge.call(this, child, shouldAbsorb);
},
_sharedPopulate: function()
{
var remainingNodeInfos = this._remainingNodeInfos;
var count = remainingNodeInfos.length;
for (var index = 0; index < count; ++index) {
var nodeInfo = remainingNodeInfos[index];
var ancestor = nodeInfo.ancestor;
var focusNode = nodeInfo.focusNode;
var child = this.findChild(ancestor);
// If we already have this child, then merge the data together.
if (child) {
var totalTimeAccountedFor = nodeInfo.totalTimeAccountedFor;
child.selfTime += focusNode.selfTime;
child.numberOfCalls += focusNode.numberOfCalls;
if (!totalTimeAccountedFor)
child.totalTime += focusNode.totalTime;
} else {
// If not, add it as a true ancestor.
// In heavy mode, we take our visual identity from ancestor node...
var child = new WebInspector.BottomUpProfileDataGridNode(this.profileView, ancestor, this.tree);
if (ancestor !== focusNode) {
// but the actual statistics from the "root" node (bottom of the callstack).
child.selfTime = focusNode.selfTime;
child.totalTime = focusNode.totalTime;
child.numberOfCalls = focusNode.numberOfCalls;
}
this.appendChild(child);
}
var parent = ancestor.parent;
if (parent && parent.parent) {
nodeInfo.ancestor = parent;
child._remainingNodeInfos.push(nodeInfo);
}
}
delete this._remainingNodeInfos;
},
_willHaveChildren: function(profileNode)
{
profileNode = profileNode || this.profileNode;
// In bottom up mode, our parents are our children since we display an inverted tree.
// However, we don't want to show the very top parent since it is redundant.
return !!(profileNode.parent && profileNode.parent.parent);
}
}
WebInspector.BottomUpProfileDataGridNode.prototype.__proto__ = WebInspector.ProfileDataGridNode.prototype;
WebInspector.BottomUpProfileDataGridTree = function(/*ProfileView*/ aProfileView, /*ProfileNode*/ aProfileNode)
{
WebInspector.ProfileDataGridTree.call(this, aProfileView, aProfileNode);
// Iterate each node in pre-order.
var profileNodeUIDs = 0;
var profileNodeGroups = [[], [aProfileNode]];
var visitedProfileNodesForCallUID = {};
this._remainingNodeInfos = [];
for (var profileNodeGroupIndex = 0; profileNodeGroupIndex < profileNodeGroups.length; ++profileNodeGroupIndex) {
var parentProfileNodes = profileNodeGroups[profileNodeGroupIndex];
var profileNodes = profileNodeGroups[++profileNodeGroupIndex];
var count = profileNodes.length;
for (var index = 0; index < count; ++index) {
var profileNode = profileNodes[index];
if (!profileNode.UID)
profileNode.UID = ++profileNodeUIDs;
if (profileNode.head && profileNode !== profileNode.head) {
// The total time of this ancestor is accounted for if we're in any form of recursive cycle.
var visitedNodes = visitedProfileNodesForCallUID[profileNode.callUID];
var totalTimeAccountedFor = false;
if (!visitedNodes) {
visitedNodes = {}
visitedProfileNodesForCallUID[profileNode.callUID] = visitedNodes;
} else {
// The total time for this node has already been accounted for iff one of it's parents has already been visited.
// We can do this check in this style because we are traversing the tree in pre-order.
var parentCount = parentProfileNodes.length;
for (var parentIndex = 0; parentIndex < parentCount; ++parentIndex) {
if (visitedNodes[parentProfileNodes[parentIndex].UID]) {
totalTimeAccountedFor = true;
break;
}
}
}
visitedNodes[profileNode.UID] = true;
this._remainingNodeInfos.push({ ancestor:profileNode, focusNode:profileNode, totalTimeAccountedFor:totalTimeAccountedFor });
}
var children = profileNode.children;
if (children.length) {
profileNodeGroups.push(parentProfileNodes.concat([profileNode]))
profileNodeGroups.push(children);
}
}
}
// Populate the top level nodes.
WebInspector.BottomUpProfileDataGridNode.prototype._populate.call(this);
return this;
}
WebInspector.BottomUpProfileDataGridTree.prototype = {
// When focusing, we keep the entire callstack up to this ancestor.
focus: function(/*ProfileDataGridNode*/ profileDataGridNode)
{
if (!profileDataGridNode)
return;
this._save();
var currentNode = profileDataGridNode;
var focusNode = profileDataGridNode;
while (currentNode.parent && (currentNode instanceof WebInspector.ProfileDataGridNode)) {
currentNode._takePropertiesFromProfileDataGridNode(profileDataGridNode);
focusNode = currentNode;
currentNode = currentNode.parent;
if (currentNode instanceof WebInspector.ProfileDataGridNode)
currentNode._keepOnlyChild(focusNode);
}
this.children = [focusNode];
this.totalTime = profileDataGridNode.totalTime;
},
exclude: function(/*ProfileDataGridNode*/ profileDataGridNode)
{
if (!profileDataGridNode)
return;
this._save();
var excludedCallUID = profileDataGridNode.callUID;
var excludedTopLevelChild = this.childrenByCallUID[excludedCallUID];
// If we have a top level node that is excluded, get rid of it completely (not keeping children),
// since bottom up data relies entirely on the root node.
if (excludedTopLevelChild)
this.children.remove(excludedTopLevelChild);
var children = this.children;
var count = children.length;
for (var index = 0; index < count; ++index)
children[index]._exclude(excludedCallUID);
if (this.lastComparator)
this.sort(this.lastComparator, true);
},
_sharedPopulate: WebInspector.BottomUpProfileDataGridNode.prototype._sharedPopulate
}
WebInspector.BottomUpProfileDataGridTree.prototype.__proto__ = WebInspector.ProfileDataGridTree.prototype;

49
node_modules/weinre/web/client/Breakpoint.js generated vendored Normal file
View File

@ -0,0 +1,49 @@
/*
* Copyright (C) 2008 Apple Inc. All Rights Reserved.
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.Breakpoint = function(id, url, sourceID, lineNumber, columnNumber, condition, enabled)
{
this.id = id;
this.url = url;
this.sourceID = sourceID;
this.lineNumber = lineNumber;
this.columnNumber = columnNumber;
this.condition = condition;
this.enabled = enabled;
this.locations = [];
}
WebInspector.Breakpoint.prototype = {
addLocation: function(sourceID, lineNumber, columnNumber)
{
this.locations.push({ sourceID: sourceID, lineNumber: lineNumber, columnNumber: columnNumber });
}
}

624
node_modules/weinre/web/client/BreakpointManager.js generated vendored Normal file
View File

@ -0,0 +1,624 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.BreakpointManager = function()
{
this._stickyBreakpoints = {};
var breakpoints = WebInspector.settings.findSettingForAllProjects("nativeBreakpoints");
for (var projectId in breakpoints)
this._stickyBreakpoints[projectId] = this._validateBreakpoints(breakpoints[projectId]);
this._breakpoints = {};
this._domBreakpointsRestored = false;
WebInspector.settings.addEventListener(WebInspector.Settings.Events.ProjectChanged, this._projectChanged, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerResumed, this._debuggerResumed, this);
}
WebInspector.BreakpointManager.BreakpointTypes = {
DOM: "DOM",
EventListener: "EventListener",
XHR: "XHR"
}
WebInspector.BreakpointManager.Events = {
DOMBreakpointAdded: "dom-breakpoint-added",
EventListenerBreakpointAdded: "event-listener-breakpoint-added",
XHRBreakpointAdded: "xhr-breakpoint-added",
ProjectChanged: "project-changed"
}
WebInspector.BreakpointManager.prototype = {
createDOMBreakpoint: function(nodeId, type)
{
this._createDOMBreakpoint(nodeId, type, true, false);
},
_createDOMBreakpoint: function(nodeId, type, enabled, restored)
{
var node = WebInspector.domAgent.nodeForId(nodeId);
if (!node)
return;
var breakpointId = this._createDOMBreakpointId(nodeId, type);
if (breakpointId in this._breakpoints)
return;
var breakpoint = new WebInspector.DOMBreakpoint(node, type);
this._setBreakpoint(breakpointId, breakpoint, enabled, restored);
if (enabled && restored)
breakpoint._enable();
breakpoint.view = new WebInspector.DOMBreakpointView(this, breakpointId, enabled, node, type);
this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.DOMBreakpointAdded, breakpoint.view);
},
createEventListenerBreakpoint: function(eventName)
{
this._createEventListenerBreakpoint(eventName, true, false);
},
_createEventListenerBreakpoint: function(eventName, enabled, restored)
{
var breakpointId = this._createEventListenerBreakpointId(eventName);
if (breakpointId in this._breakpoints)
return;
var breakpoint = new WebInspector.EventListenerBreakpoint(eventName);
this._setBreakpoint(breakpointId, breakpoint, enabled, restored);
breakpoint.view = new WebInspector.EventListenerBreakpointView(this, breakpointId, enabled, eventName);
this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.EventListenerBreakpointAdded, breakpoint.view);
},
createXHRBreakpoint: function(url)
{
this._createXHRBreakpoint(url, true, false);
},
_createXHRBreakpoint: function(url, enabled, restored)
{
var breakpointId = this._createXHRBreakpointId(url);
if (breakpointId in this._breakpoints)
return;
var breakpoint = new WebInspector.XHRBreakpoint(url);
this._setBreakpoint(breakpointId, breakpoint, enabled, restored);
breakpoint.view = new WebInspector.XHRBreakpointView(this, breakpointId, enabled, url);
this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.XHRBreakpointAdded, breakpoint.view);
},
_setBreakpoint: function(breakpointId, breakpoint, enabled, restored)
{
this._breakpoints[breakpointId] = breakpoint;
breakpoint.enabled = enabled;
if (restored)
return;
if (enabled)
breakpoint._enable();
this._saveBreakpoints();
},
_setBreakpointEnabled: function(breakpointId, enabled)
{
var breakpoint = this._breakpoints[breakpointId];
if (breakpoint.enabled === enabled)
return;
if (enabled)
breakpoint._enable();
else
breakpoint._disable();
breakpoint.enabled = enabled;
this._saveBreakpoints();
},
_removeBreakpoint: function(breakpointId)
{
var breakpoint = this._breakpoints[breakpointId];
if (breakpoint.enabled)
breakpoint._disable();
delete this._breakpoints[breakpointId];
this._saveBreakpoints();
},
breakpointViewForEventData: function(eventData)
{
var breakpointId;
if (eventData.breakpointType === WebInspector.BreakpointManager.BreakpointTypes.DOM)
breakpointId = this._createDOMBreakpointId(eventData.nodeId, eventData.type);
else if (eventData.breakpointType === WebInspector.BreakpointManager.BreakpointTypes.EventListener)
breakpointId = this._createEventListenerBreakpointId(eventData.eventName);
else if (eventData.breakpointType === WebInspector.BreakpointManager.BreakpointTypes.XHR)
breakpointId = this._createXHRBreakpointId(eventData.breakpointURL);
else
return;
var breakpoint = this._breakpoints[breakpointId];
if (breakpoint)
return breakpoint.view;
},
_debuggerPaused: function(event)
{
var eventType = event.data.eventType;
var eventData = event.data.eventData;
if (eventType !== WebInspector.DebuggerEventTypes.NativeBreakpoint)
return;
var breakpointView = this.breakpointViewForEventData(eventData);
if (!breakpointView)
return;
breakpointView.hit = true;
this._lastHitBreakpointView = breakpointView;
},
_debuggerResumed: function(event)
{
if (!this._lastHitBreakpointView)
return;
this._lastHitBreakpointView.hit = false;
delete this._lastHitBreakpointView;
},
_projectChanged: function(event)
{
this._breakpoints = {};
this._domBreakpointsRestored = false;
this.dispatchEventToListeners(WebInspector.BreakpointManager.Events.ProjectChanged);
var breakpoints = this._stickyBreakpoints[WebInspector.settings.projectId] || [];
for (var i = 0; i < breakpoints.length; ++i) {
var breakpoint = breakpoints[i];
if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.EventListener)
this._createEventListenerBreakpoint(breakpoint.condition.eventName, breakpoint.enabled, true);
else if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.XHR)
this._createXHRBreakpoint(breakpoint.condition.url, breakpoint.enabled, true);
}
if (!this._breakpointsPushedToFrontend) {
InspectorBackend.setAllBrowserBreakpoints(this._stickyBreakpoints);
this._breakpointsPushedToFrontend = true;
}
},
restoreDOMBreakpoints: function()
{
function didPushNodeByPathToFrontend(path, nodeId)
{
pathToNodeId[path] = nodeId;
pendingCalls -= 1;
if (pendingCalls)
return;
for (var i = 0; i < breakpoints.length; ++i) {
var breakpoint = breakpoints[i];
if (breakpoint.type !== WebInspector.BreakpointManager.BreakpointTypes.DOM)
continue;
var nodeId = pathToNodeId[breakpoint.condition.path];
if (nodeId)
this._createDOMBreakpoint(nodeId, breakpoint.condition.type, breakpoint.enabled, true);
}
this._domBreakpointsRestored = true;
this._saveBreakpoints();
}
var breakpoints = this._stickyBreakpoints[WebInspector.settings.projectId] || [];
var pathToNodeId = {};
var pendingCalls = 0;
for (var i = 0; i < breakpoints.length; ++i) {
if (breakpoints[i].type !== WebInspector.BreakpointManager.BreakpointTypes.DOM)
continue;
var path = breakpoints[i].condition.path;
if (path in pathToNodeId)
continue;
pathToNodeId[path] = 0;
pendingCalls += 1;
InspectorBackend.pushNodeByPathToFrontend(path, didPushNodeByPathToFrontend.bind(this, path));
}
if (!pendingCalls)
this._domBreakpointsRestored = true;
},
_saveBreakpoints: function()
{
var breakpoints = [];
for (var breakpointId in this._breakpoints) {
var breakpoint = this._breakpoints[breakpointId];
var persistentBreakpoint = breakpoint._serializeToJSON();
persistentBreakpoint.enabled = breakpoint.enabled;
breakpoints.push(persistentBreakpoint);
}
if (!this._domBreakpointsRestored) {
var stickyBreakpoints = this._stickyBreakpoints[WebInspector.settings.projectId] || [];
for (var i = 0; i < stickyBreakpoints.length; ++i) {
if (stickyBreakpoints[i].type === WebInspector.BreakpointManager.BreakpointTypes.DOM)
breakpoints.push(stickyBreakpoints[i]);
}
}
WebInspector.settings.nativeBreakpoints = breakpoints;
this._stickyBreakpoints[WebInspector.settings.projectId] = breakpoints;
InspectorBackend.setAllBrowserBreakpoints(this._stickyBreakpoints);
},
_validateBreakpoints: function(persistentBreakpoints)
{
var breakpoints = [];
var breakpointsSet = {};
for (var i = 0; i < persistentBreakpoints.length; ++i) {
var breakpoint = persistentBreakpoints[i];
if (!("type" in breakpoint && "enabled" in breakpoint && "condition" in breakpoint))
continue;
var id = breakpoint.type + ":";
var condition = breakpoint.condition;
if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.DOM) {
if (typeof condition.path !== "string" || typeof condition.type !== "number")
continue;
id += condition.path + ":" + condition.type;
} else if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.EventListener) {
if (typeof condition.eventName !== "string")
continue;
id += condition.eventName;
} else if (breakpoint.type === WebInspector.BreakpointManager.BreakpointTypes.XHR) {
if (typeof condition.url !== "string")
continue;
id += condition.url;
} else
continue;
if (id in breakpointsSet)
continue;
breakpointsSet[id] = true;
breakpoints.push(breakpoint);
}
return breakpoints;
},
_createDOMBreakpointId: function(nodeId, type)
{
return "dom:" + nodeId + ":" + type;
},
_createEventListenerBreakpointId: function(eventName)
{
return "eventListner:" + eventName;
},
_createXHRBreakpointId: function(url)
{
return "xhr:" + url;
}
}
WebInspector.BreakpointManager.prototype.__proto__ = WebInspector.Object.prototype;
WebInspector.DOMBreakpoint = function(node, type)
{
this._nodeId = node.id;
this._path = node.path();
this._type = type;
}
WebInspector.DOMBreakpoint.prototype = {
_enable: function()
{
InspectorBackend.setDOMBreakpoint(this._nodeId, this._type);
},
_disable: function()
{
InspectorBackend.removeDOMBreakpoint(this._nodeId, this._type);
},
_serializeToJSON: function()
{
var type = WebInspector.BreakpointManager.BreakpointTypes.DOM;
return { type: type, condition: { path: this._path, type: this._type } };
}
}
WebInspector.EventListenerBreakpoint = function(eventName)
{
this._eventName = eventName;
}
WebInspector.EventListenerBreakpoint.prototype = {
_enable: function()
{
InspectorBackend.setEventListenerBreakpoint(this._eventName);
},
_disable: function()
{
InspectorBackend.removeEventListenerBreakpoint(this._eventName);
},
_serializeToJSON: function()
{
var type = WebInspector.BreakpointManager.BreakpointTypes.EventListener;
return { type: type, condition: { eventName: this._eventName } };
}
}
WebInspector.XHRBreakpoint = function(url)
{
this._url = url;
}
WebInspector.XHRBreakpoint.prototype = {
_enable: function()
{
InspectorBackend.setXHRBreakpoint(this._url);
},
_disable: function()
{
InspectorBackend.removeXHRBreakpoint(this._url);
},
_serializeToJSON: function()
{
var type = WebInspector.BreakpointManager.BreakpointTypes.XHR;
return { type: type, condition: { url: this._url } };
}
}
WebInspector.NativeBreakpointView = function(manager, id, enabled)
{
this._manager = manager;
this._id = id;
this._enabled = enabled;
this._hit = false;
}
WebInspector.NativeBreakpointView.prototype = {
get enabled()
{
return this._enabled;
},
set enabled(enabled)
{
this._manager._setBreakpointEnabled(this._id, enabled);
this._enabled = enabled;
this.dispatchEventToListeners("enable-changed");
},
get hit()
{
return this._hit;
},
set hit(hit)
{
this._hit = hit;
this.dispatchEventToListeners("hit-state-changed");
},
remove: function()
{
this._manager._removeBreakpoint(this._id);
this._onRemove();
this.dispatchEventToListeners("removed");
},
_compare: function(x, y)
{
if (x !== y)
return x < y ? -1 : 1;
return 0;
},
_onRemove: function()
{
}
}
WebInspector.NativeBreakpointView.prototype.__proto__ = WebInspector.Object.prototype;
WebInspector.DOMBreakpointView = function(manager, id, enabled, node, type)
{
WebInspector.NativeBreakpointView.call(this, manager, id, enabled);
this._node = node;
this._nodeId = node.id;
this._type = type;
node.breakpoints[this._type] = this;
}
WebInspector.DOMBreakpointView.prototype = {
compareTo: function(other)
{
return this._compare(this._type, other._type);
},
populateLabelElement: function(element)
{
// FIXME: this should belong to the view, not the manager.
var linkifiedNode = WebInspector.panels.elements.linkifyNodeById(this._nodeId);
linkifiedNode.addStyleClass("monospace");
element.appendChild(linkifiedNode);
var description = document.createElement("div");
description.className = "source-text";
description.textContent = WebInspector.domBreakpointTypeLabel(this._type);
element.appendChild(description);
},
populateStatusMessageElement: function(element, eventData)
{
var substitutions = [WebInspector.domBreakpointTypeLabel(this._type), WebInspector.panels.elements.linkifyNodeById(this._nodeId)];
var formatters = {
s: function(substitution)
{
return substitution;
}
};
function append(a, b)
{
if (typeof b === "string")
b = document.createTextNode(b);
element.appendChild(b);
}
if (this._type === WebInspector.DOMBreakpointTypes.SubtreeModified) {
var targetNode = WebInspector.panels.elements.linkifyNodeById(eventData.targetNodeId);
if (eventData.insertion) {
if (eventData.targetNodeId !== this._nodeId)
WebInspector.formatLocalized("Paused on a \"%s\" breakpoint set on %s, because a new child was added to its descendant %s.", substitutions.concat(targetNode), formatters, "", append);
else
WebInspector.formatLocalized("Paused on a \"%s\" breakpoint set on %s, because a new child was added to that node.", substitutions, formatters, "", append);
} else
WebInspector.formatLocalized("Paused on a \"%s\" breakpoint set on %s, because its descendant %s was removed.", substitutions.concat(targetNode), formatters, "", append);
} else
WebInspector.formatLocalized("Paused on a \"%s\" breakpoint set on %s.", substitutions, formatters, "", append);
},
_onRemove: function()
{
delete this._node.breakpoints[this._type];
}
}
WebInspector.DOMBreakpointView.prototype.__proto__ = WebInspector.NativeBreakpointView.prototype;
WebInspector.EventListenerBreakpointView = function(manager, id, enabled, eventName)
{
WebInspector.NativeBreakpointView.call(this, manager, id, enabled);
this._eventName = eventName;
}
WebInspector.EventListenerBreakpointView.eventNameForUI = function(eventName)
{
if (!WebInspector.EventListenerBreakpointView._eventNamesForUI) {
WebInspector.EventListenerBreakpointView._eventNamesForUI = {
"instrumentation:setTimer": WebInspector.UIString("Set Timer"),
"instrumentation:clearTimer": WebInspector.UIString("Clear Timer"),
"instrumentation:timerFired": WebInspector.UIString("Timer Fired")
};
}
return WebInspector.EventListenerBreakpointView._eventNamesForUI[eventName] || eventName.substring(eventName.indexOf(":") + 1);
}
WebInspector.EventListenerBreakpointView.prototype = {
get eventName()
{
return this._eventName;
},
compareTo: function(other)
{
return this._compare(this._eventName, other._eventName);
},
populateLabelElement: function(element)
{
element.appendChild(document.createTextNode(this._uiEventName()));
},
populateStatusMessageElement: function(element, eventData)
{
var status = WebInspector.UIString("Paused on a \"%s\" Event Listener.", this._uiEventName());
element.appendChild(document.createTextNode(status));
},
_uiEventName: function()
{
return WebInspector.EventListenerBreakpointView.eventNameForUI(this._eventName);
}
}
WebInspector.EventListenerBreakpointView.prototype.__proto__ = WebInspector.NativeBreakpointView.prototype;
WebInspector.XHRBreakpointView = function(manager, id, enabled, url)
{
WebInspector.NativeBreakpointView.call(this, manager, id, enabled);
this._url = url;
}
WebInspector.XHRBreakpointView.prototype = {
compareTo: function(other)
{
return this._compare(this._url, other._url);
},
populateEditElement: function(element)
{
element.textContent = this._url;
},
populateLabelElement: function(element)
{
var label;
if (!this._url.length)
label = WebInspector.UIString("Any XHR");
else
label = WebInspector.UIString("URL contains \"%s\"", this._url);
element.appendChild(document.createTextNode(label));
element.addStyleClass("cursor-auto");
},
populateStatusMessageElement: function(element)
{
var status = WebInspector.UIString("Paused on a XMLHttpRequest.");
element.appendChild(document.createTextNode(status));
}
}
WebInspector.XHRBreakpointView.prototype.__proto__ = WebInspector.NativeBreakpointView.prototype;
WebInspector.DOMBreakpointTypes = {
SubtreeModified: 0,
AttributeModified: 1,
NodeRemoved: 2
};
WebInspector.domBreakpointTypeLabel = function(type)
{
if (!WebInspector._DOMBreakpointTypeLabels) {
WebInspector._DOMBreakpointTypeLabels = {};
WebInspector._DOMBreakpointTypeLabels[WebInspector.DOMBreakpointTypes.SubtreeModified] = WebInspector.UIString("Subtree Modified");
WebInspector._DOMBreakpointTypeLabels[WebInspector.DOMBreakpointTypes.AttributeModified] = WebInspector.UIString("Attribute Modified");
WebInspector._DOMBreakpointTypeLabels[WebInspector.DOMBreakpointTypes.NodeRemoved] = WebInspector.UIString("Node Removed");
}
return WebInspector._DOMBreakpointTypeLabels[type];
}
WebInspector.domBreakpointTypeContextMenuLabel = function(type)
{
if (!WebInspector._DOMBreakpointTypeContextMenuLabels) {
WebInspector._DOMBreakpointTypeContextMenuLabels = {};
WebInspector._DOMBreakpointTypeContextMenuLabels[WebInspector.DOMBreakpointTypes.SubtreeModified] = WebInspector.UIString("Break on Subtree Modifications");
WebInspector._DOMBreakpointTypeContextMenuLabels[WebInspector.DOMBreakpointTypes.AttributeModified] = WebInspector.UIString("Break on Attributes Modifications");
WebInspector._DOMBreakpointTypeContextMenuLabels[WebInspector.DOMBreakpointTypes.NodeRemoved] = WebInspector.UIString("Break on Node Removal");
}
return WebInspector._DOMBreakpointTypeContextMenuLabels[type];
}

View File

@ -0,0 +1,623 @@
/*
* Copyright (C) 2008 Apple Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.JavaScriptBreakpointsSidebarPane = function(title)
{
WebInspector.SidebarPane.call(this, WebInspector.UIString("Breakpoints"));
this.listElement = document.createElement("ol");
this.listElement.className = "breakpoint-list";
this.emptyElement = document.createElement("div");
this.emptyElement.className = "info";
this.emptyElement.textContent = WebInspector.UIString("No Breakpoints");
this.bodyElement.appendChild(this.emptyElement);
this._items = {};
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointAdded, this._breakpointAdded, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointRemoved, this._breakpointRemoved, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.BreakpointResolved, this._breakpointResolved, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.ParsedScriptSource, this._parsedScriptSource, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerPaused, this._debuggerPaused, this);
WebInspector.debuggerModel.addEventListener(WebInspector.DebuggerModel.Events.DebuggerResumed, this._debuggerResumed, this);
WebInspector.breakpointManager.addEventListener(WebInspector.BreakpointManager.Events.ProjectChanged, this._projectChanged, this);
}
WebInspector.JavaScriptBreakpointsSidebarPane.prototype = {
_breakpointAdded: function(event)
{
var breakpoint = event.data;
var breakpointId = breakpoint.id;
if (breakpoint.url && !WebInspector.debuggerModel.scriptsForURL(breakpoint.url).length)
return;
var element = document.createElement("li");
var checkbox = document.createElement("input");
checkbox.className = "checkbox-elem";
checkbox.type = "checkbox";
checkbox.checked = breakpoint.enabled;
checkbox.addEventListener("click", this._breakpointItemCheckboxClicked.bind(this, breakpointId), false);
element.appendChild(checkbox);
var label = document.createElement("span");
element.appendChild(label);
element._data = breakpoint;
var currentElement = this.listElement.firstChild;
while (currentElement) {
if (currentElement._data && this._compareBreakpoints(currentElement._data, element._data) > 0)
break;
currentElement = currentElement.nextSibling;
}
this._addListElement(element, currentElement);
element.addEventListener("contextmenu", this._contextMenuEventFired.bind(this, breakpointId), true);
this._setupBreakpointElement(breakpoint, element);
var breakpointItem = {};
breakpointItem.element = element;
breakpointItem.checkbox = checkbox;
this._items[breakpointId] = breakpointItem;
if (!this.expanded)
this.expanded = true;
},
_breakpointRemoved: function(event)
{
var breakpointId = event.data;
var breakpointItem = this._items[breakpointId];
if (breakpointItem) {
delete this._items[breakpointId];
this._removeListElement(breakpointItem.element);
}
},
_breakpointResolved: function(event)
{
var breakpoint = event.data;
this._breakpointRemoved({ data: breakpoint.id });
this._breakpointAdded({ data: breakpoint });
},
_parsedScriptSource: function(event)
{
var url = event.data.sourceURL;
var breakpoints = WebInspector.debuggerModel.breakpoints;
for (var id in breakpoints) {
if (!(id in this._items))
this._breakpointAdded({ data: breakpoints[id] });
}
},
_breakpointEnableChanged: function(enabled, event)
{
var breakpointId = event.data;
var breakpointItem = this._items[breakpointId];
if (breakpointItem)
breakpointItem.checkbox.checked = enabled;
},
_breakpointItemCheckboxClicked: function(breakpointId, event)
{
var breakpoint = WebInspector.debuggerModel.breakpointForId(breakpointId);
WebInspector.debuggerModel.updateBreakpoint(breakpointId, breakpoint.condition, event.target.checked);
// Breakpoint element may have it's own click handler.
event.stopPropagation();
},
_contextMenuEventFired: function(breakpointId, event)
{
var contextMenu = new WebInspector.ContextMenu();
contextMenu.appendItem(WebInspector.UIString("Remove Breakpoint"), this._removeBreakpoint.bind(this, breakpointId));
contextMenu.show(event);
},
_debuggerPaused: function(event)
{
var breakpoint = event.data.breakpoint;
if (!breakpoint)
return;
var breakpointItem = this._items[breakpoint.id];
if (!breakpointItem)
return;
breakpointItem.element.addStyleClass("breakpoint-hit");
this._lastHitBreakpointItem = breakpointItem;
},
_debuggerResumed: function()
{
if (this._lastHitBreakpointItem) {
this._lastHitBreakpointItem.element.removeStyleClass("breakpoint-hit");
delete this._lastHitBreakpointItem;
}
},
_addListElement: function(element, beforeElement)
{
if (beforeElement)
this.listElement.insertBefore(element, beforeElement);
else {
if (!this.listElement.firstChild) {
this.bodyElement.removeChild(this.emptyElement);
this.bodyElement.appendChild(this.listElement);
}
this.listElement.appendChild(element);
}
},
_removeListElement: function(element)
{
this.listElement.removeChild(element);
if (!this.listElement.firstChild) {
this.bodyElement.removeChild(this.listElement);
this.bodyElement.appendChild(this.emptyElement);
}
},
_projectChanged: function()
{
this.listElement.removeChildren();
if (this.listElement.parentElement) {
this.bodyElement.removeChild(this.listElement);
this.bodyElement.appendChild(this.emptyElement);
}
this._items = {};
},
_compare: function(x, y)
{
if (x !== y)
return x < y ? -1 : 1;
return 0;
},
_compareBreakpoints: function(b1, b2)
{
return this._compare(b1.url, b2.url) || this._compare(b1.lineNumber, b2.lineNumber);
},
_setupBreakpointElement: function(data, element)
{
var sourceID;
var lineNumber = data.lineNumber;
if (data.locations.length) {
sourceID = data.locations[0].sourceID;
lineNumber = data.locations[0].lineNumber;
}
var displayName = data.url ? WebInspector.displayNameForURL(data.url) : WebInspector.UIString("(program)");
var labelElement = document.createTextNode(displayName + ":" + (lineNumber + 1));
element.appendChild(labelElement);
var sourceTextElement = document.createElement("div");
sourceTextElement.className = "source-text monospace";
element.appendChild(sourceTextElement);
if (sourceID) {
function didGetSourceLine(text)
{
sourceTextElement.textContent = text;
}
var script = WebInspector.debuggerModel.scriptForSourceID(sourceID);
script.sourceLine(lineNumber, didGetSourceLine.bind(this));
}
element.addStyleClass("cursor-pointer");
var clickHandler = WebInspector.panels.scripts.showSourceLine.bind(WebInspector.panels.scripts, data.url, lineNumber + 1);
element.addEventListener("click", clickHandler, false);
},
_removeBreakpoint: function(breakpointId)
{
WebInspector.debuggerModel.removeBreakpoint(breakpointId);
}
}
WebInspector.JavaScriptBreakpointsSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype;
WebInspector.NativeBreakpointsSidebarPane = function(title)
{
WebInspector.SidebarPane.call(this, title);
this.listElement = document.createElement("ol");
this.listElement.className = "breakpoint-list";
this.emptyElement = document.createElement("div");
this.emptyElement.className = "info";
this.emptyElement.textContent = WebInspector.UIString("No Breakpoints");
this.bodyElement.appendChild(this.emptyElement);
WebInspector.breakpointManager.addEventListener(WebInspector.BreakpointManager.Events.ProjectChanged, this._projectChanged, this);
}
WebInspector.NativeBreakpointsSidebarPane.prototype = {
addBreakpointItem: function(breakpointItem)
{
var element = breakpointItem.element;
element._breakpointItem = breakpointItem;
breakpointItem.addEventListener("breakpoint-hit", this.expand, this);
breakpointItem.addEventListener("removed", this._removeListElement.bind(this, element), this);
var currentElement = this.listElement.firstChild;
while (currentElement) {
if (currentElement._breakpointItem && currentElement._breakpointItem.compareTo(element._breakpointItem) > 0)
break;
currentElement = currentElement.nextSibling;
}
this._addListElement(element, currentElement);
if (breakpointItem.click) {
element.addStyleClass("cursor-pointer");
element.addEventListener("click", breakpointItem.click.bind(breakpointItem), false);
}
element.addEventListener("contextmenu", this._contextMenuEventFired.bind(this, breakpointItem), true);
},
_contextMenuEventFired: function(breakpointItem, event)
{
var contextMenu = new WebInspector.ContextMenu();
contextMenu.appendItem(WebInspector.UIString("Remove Breakpoint"), breakpointItem.remove.bind(breakpointItem));
contextMenu.show(event);
},
_addListElement: function(element, beforeElement)
{
if (beforeElement)
this.listElement.insertBefore(element, beforeElement);
else {
if (!this.listElement.firstChild) {
this.bodyElement.removeChild(this.emptyElement);
this.bodyElement.appendChild(this.listElement);
}
this.listElement.appendChild(element);
}
},
_removeListElement: function(element)
{
this.listElement.removeChild(element);
if (!this.listElement.firstChild) {
this.bodyElement.removeChild(this.listElement);
this.bodyElement.appendChild(this.emptyElement);
}
},
_projectChanged: function()
{
this.listElement.removeChildren();
if (this.listElement.parentElement) {
this.bodyElement.removeChild(this.listElement);
this.bodyElement.appendChild(this.emptyElement);
}
}
}
WebInspector.NativeBreakpointsSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype;
WebInspector.XHRBreakpointsSidebarPane = function()
{
WebInspector.NativeBreakpointsSidebarPane.call(this, WebInspector.UIString("XHR Breakpoints"));
function addButtonClicked(event)
{
event.stopPropagation();
this._startEditingBreakpoint(null);
}
var addButton = document.createElement("button");
addButton.className = "add";
addButton.addEventListener("click", addButtonClicked.bind(this), false);
this.titleElement.appendChild(addButton);
}
WebInspector.XHRBreakpointsSidebarPane.prototype = {
addBreakpointItem: function(breakpointItem)
{
WebInspector.NativeBreakpointsSidebarPane.prototype.addBreakpointItem.call(this, breakpointItem);
breakpointItem._labelElement.addEventListener("dblclick", this._startEditingBreakpoint.bind(this, breakpointItem), false);
},
_startEditingBreakpoint: function(breakpointItem)
{
if (this._editingBreakpoint)
return;
this._editingBreakpoint = true;
if (!this.expanded)
this.expanded = true;
var inputElement = document.createElement("span");
inputElement.className = "breakpoint-condition editing";
if (breakpointItem) {
breakpointItem.populateEditElement(inputElement);
this.listElement.insertBefore(inputElement, breakpointItem.element);
breakpointItem.element.addStyleClass("hidden");
} else
this._addListElement(inputElement, this.listElement.firstChild);
var commitHandler = this._hideEditBreakpointDialog.bind(this, inputElement, true, breakpointItem);
var cancelHandler = this._hideEditBreakpointDialog.bind(this, inputElement, false, breakpointItem);
WebInspector.startEditing(inputElement, {
commitHandler: commitHandler,
cancelHandler: cancelHandler
});
},
_hideEditBreakpointDialog: function(inputElement, accept, breakpointItem)
{
this._removeListElement(inputElement);
this._editingBreakpoint = false;
if (accept) {
if (breakpointItem)
breakpointItem.remove();
WebInspector.breakpointManager.createXHRBreakpoint(inputElement.textContent.toLowerCase());
} else if (breakpointItem)
breakpointItem.element.removeStyleClass("hidden");
}
}
WebInspector.XHRBreakpointsSidebarPane.prototype.__proto__ = WebInspector.NativeBreakpointsSidebarPane.prototype;
WebInspector.BreakpointItem = function(breakpoint)
{
this._breakpoint = breakpoint;
this._element = document.createElement("li");
var checkboxElement = document.createElement("input");
checkboxElement.className = "checkbox-elem";
checkboxElement.type = "checkbox";
checkboxElement.checked = this._breakpoint.enabled;
checkboxElement.addEventListener("click", this._checkboxClicked.bind(this), false);
this._element.appendChild(checkboxElement);
this._createLabelElement();
this._breakpoint.addEventListener("enable-changed", this._enableChanged, this);
this._breakpoint.addEventListener("hit-state-changed", this._hitStateChanged, this);
this._breakpoint.addEventListener("label-changed", this._labelChanged, this);
this._breakpoint.addEventListener("removed", this.dispatchEventToListeners.bind(this, "removed"));
if (breakpoint.click)
this.click = breakpoint.click.bind(breakpoint);
}
WebInspector.BreakpointItem.prototype = {
get element()
{
return this._element;
},
compareTo: function(other)
{
return this._breakpoint.compareTo(other._breakpoint);
},
populateEditElement: function(element)
{
this._breakpoint.populateEditElement(element);
},
remove: function()
{
this._breakpoint.remove();
},
_checkboxClicked: function(event)
{
this._breakpoint.enabled = !this._breakpoint.enabled;
// Breakpoint element may have it's own click handler.
event.stopPropagation();
},
_enableChanged: function(event)
{
var checkbox = this._element.firstChild;
checkbox.checked = this._breakpoint.enabled;
},
_hitStateChanged: function(event)
{
if (event.target.hit) {
this._element.addStyleClass("breakpoint-hit");
this.dispatchEventToListeners("breakpoint-hit");
} else
this._element.removeStyleClass("breakpoint-hit");
},
_labelChanged: function(event)
{
this._element.removeChild(this._labelElement);
this._createLabelElement();
},
_createLabelElement: function()
{
this._labelElement = document.createElement("span");
this._breakpoint.populateLabelElement(this._labelElement);
this._element.appendChild(this._labelElement);
}
}
WebInspector.BreakpointItem.prototype.__proto__ = WebInspector.Object.prototype;
WebInspector.EventListenerBreakpointsSidebarPane = function()
{
WebInspector.SidebarPane.call(this, WebInspector.UIString("Event Listener Breakpoints"));
this.categoriesElement = document.createElement("ol");
this.categoriesElement.tabIndex = 0;
this.categoriesElement.addStyleClass("properties-tree event-listener-breakpoints");
this.categoriesTreeOutline = new TreeOutline(this.categoriesElement);
this.bodyElement.appendChild(this.categoriesElement);
WebInspector.breakpointManager.addEventListener(WebInspector.BreakpointManager.Events.ProjectChanged, this._projectChanged, this);
WebInspector.breakpointManager.addEventListener(WebInspector.BreakpointManager.Events.EventListenerBreakpointAdded, this._breakpointAdded, this);
this._breakpointItems = {};
this._createCategory(WebInspector.UIString("Keyboard"), "listener", ["keydown", "keyup", "keypress", "textInput"]);
this._createCategory(WebInspector.UIString("Mouse"), "listener", ["click", "dblclick", "mousedown", "mouseup", "mouseover", "mousemove", "mouseout", "mousewheel"]);
// FIXME: uncomment following once inspector stops being drop targer in major ports.
// Otherwise, inspector page reacts on drop event and tries to load the event data.
// this._createCategory(WebInspector.UIString("Drag"), "listener", ["drag", "drop", "dragstart", "dragend", "dragenter", "dragleave", "dragover"]);
this._createCategory(WebInspector.UIString("Control"), "listener", ["resize", "scroll", "zoom", "focus", "blur", "select", "change", "submit", "reset"]);
this._createCategory(WebInspector.UIString("Clipboard"), "listener", ["copy", "cut", "paste", "beforecopy", "beforecut", "beforepaste"]);
this._createCategory(WebInspector.UIString("Load"), "listener", ["load", "unload", "abort", "error"]);
this._createCategory(WebInspector.UIString("DOM Mutation"), "listener", ["DOMActivate", "DOMFocusIn", "DOMFocusOut", "DOMAttrModified", "DOMCharacterDataModified", "DOMNodeInserted", "DOMNodeInsertedIntoDocument", "DOMNodeRemoved", "DOMNodeRemovedFromDocument", "DOMSubtreeModified", "DOMContentLoaded"]);
this._createCategory(WebInspector.UIString("Device"), "listener", ["deviceorientation", "devicemotion"]);
this._createCategory(WebInspector.UIString("Timer"), "instrumentation", ["setTimer", "clearTimer", "timerFired"]);
}
WebInspector.EventListenerBreakpointsSidebarPane.prototype = {
_createCategory: function(name, type, eventNames)
{
var categoryItem = {};
categoryItem.element = new TreeElement(name);
this.categoriesTreeOutline.appendChild(categoryItem.element);
categoryItem.element.listItemElement.addStyleClass("event-category");
categoryItem.element.selectable = true;
categoryItem.checkbox = this._createCheckbox(categoryItem.element);
categoryItem.checkbox.addEventListener("click", this._categoryCheckboxClicked.bind(this, categoryItem), true);
categoryItem.children = {};
for (var i = 0; i < eventNames.length; ++i) {
var eventName = type + ":" + eventNames[i];
var breakpointItem = {};
var title = WebInspector.EventListenerBreakpointView.eventNameForUI(eventName);
breakpointItem.element = new TreeElement(title);
categoryItem.element.appendChild(breakpointItem.element);
var hitMarker = document.createElement("div");
hitMarker.className = "breakpoint-hit-marker";
breakpointItem.element.listItemElement.appendChild(hitMarker);
breakpointItem.element.listItemElement.addStyleClass("source-code");
breakpointItem.element.selectable = true;
breakpointItem.checkbox = this._createCheckbox(breakpointItem.element);
breakpointItem.checkbox.addEventListener("click", this._breakpointCheckboxClicked.bind(this, breakpointItem), true);
breakpointItem.parent = categoryItem;
breakpointItem.eventName = eventName;
this._breakpointItems[eventName] = breakpointItem;
categoryItem.children[eventName] = breakpointItem;
}
},
_createCheckbox: function(treeElement)
{
var checkbox = document.createElement("input");
checkbox.className = "checkbox-elem";
checkbox.type = "checkbox";
treeElement.listItemElement.insertBefore(checkbox, treeElement.listItemElement.firstChild);
return checkbox;
},
_categoryCheckboxClicked: function(categoryItem)
{
var checked = categoryItem.checkbox.checked;
for (var eventName in categoryItem.children) {
var breakpointItem = categoryItem.children[eventName];
if (breakpointItem.checkbox.checked !== checked) {
breakpointItem.checkbox.checked = checked;
this._breakpointCheckboxClicked(breakpointItem);
}
}
},
_breakpointCheckboxClicked: function(breakpointItem)
{
if (breakpointItem.checkbox.checked)
WebInspector.breakpointManager.createEventListenerBreakpoint(breakpointItem.eventName);
else
breakpointItem.breakpoint.remove();
},
_breakpointAdded: function(event)
{
var breakpoint = event.data;
var breakpointItem = this._breakpointItems[breakpoint.eventName];
breakpointItem.breakpoint = breakpoint;
breakpoint.addEventListener("hit-state-changed", this._breakpointHitStateChanged.bind(this, breakpointItem));
breakpoint.addEventListener("removed", this._breakpointRemoved.bind(this, breakpointItem));
breakpointItem.checkbox.checked = true;
this._updateCategoryCheckbox(breakpointItem);
},
_breakpointHitStateChanged: function(breakpointItem, event)
{
if (event.target.hit) {
this.expanded = true;
var categoryItem = breakpointItem.parent;
categoryItem.element.expand();
breakpointItem.element.listItemElement.addStyleClass("breakpoint-hit");
} else
breakpointItem.element.listItemElement.removeStyleClass("breakpoint-hit");
},
_breakpointRemoved: function(breakpointItem)
{
breakpointItem.breakpoint = null;
breakpointItem.checkbox.checked = false;
this._updateCategoryCheckbox(breakpointItem);
},
_updateCategoryCheckbox: function(breakpointItem)
{
var categoryItem = breakpointItem.parent;
var hasEnabled = false, hasDisabled = false;
for (var eventName in categoryItem.children) {
var breakpointItem = categoryItem.children[eventName];
if (breakpointItem.checkbox.checked)
hasEnabled = true;
else
hasDisabled = true;
}
categoryItem.checkbox.checked = hasEnabled;
categoryItem.checkbox.indeterminate = hasEnabled && hasDisabled;
},
_projectChanged: function()
{
for (var eventName in this._breakpointItems) {
var breakpointItem = this._breakpointItems[eventName];
breakpointItem.breakpoint = null;
breakpointItem.checkbox.checked = false;
this._updateCategoryCheckbox(breakpointItem);
}
}
}
WebInspector.EventListenerBreakpointsSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype;

125
node_modules/weinre/web/client/CSSCompletions.js generated vendored Normal file
View File

@ -0,0 +1,125 @@
/*
* Copyright (C) 2010 Nikita Vasilyev. All rights reserved.
* Copyright (C) 2010 Joseph Pecoraro. All rights reserved.
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.CSSCompletions = function(values, acceptEmptyPrefix)
{
this._values = values.slice();
this._values.sort();
this._acceptEmptyPrefix = acceptEmptyPrefix;
}
WebInspector.CSSCompletions.prototype = {
startsWith: function(prefix)
{
var firstIndex = this._firstIndexOfPrefix(prefix);
if (firstIndex === -1)
return [];
var results = [];
while (firstIndex < this._values.length && this._values[firstIndex].indexOf(prefix) === 0)
results.push(this._values[firstIndex++]);
return results;
},
firstStartsWith: function(prefix)
{
var foundIndex = this._firstIndexOfPrefix(prefix);
return (foundIndex === -1 ? "" : this._values[foundIndex]);
},
_firstIndexOfPrefix: function(prefix)
{
if (!this._values.length)
return -1;
if (!prefix)
return this._acceptEmptyPrefix ? 0 : -1;
var maxIndex = this._values.length - 1;
var minIndex = 0;
var foundIndex;
do {
var middleIndex = (maxIndex + minIndex) >> 1;
if (this._values[middleIndex].indexOf(prefix) === 0) {
foundIndex = middleIndex;
break;
}
if (this._values[middleIndex] < prefix)
minIndex = middleIndex + 1;
else
maxIndex = middleIndex - 1;
} while (minIndex <= maxIndex);
if (foundIndex === undefined)
return -1;
while (foundIndex && this._values[foundIndex - 1].indexOf(prefix) === 0)
foundIndex--;
return foundIndex;
},
keySet: function()
{
return this._values.keySet();
},
next: function(str, prefix)
{
return this._closest(str, prefix, 1);
},
previous: function(str, prefix)
{
return this._closest(str, prefix, -1);
},
_closest: function(str, prefix, shift)
{
if (!str)
return "";
var index = this._values.indexOf(str);
if (index === -1)
return "";
if (!prefix) {
index = (index + this._values.length + shift) % this._values.length;
return this._values[index];
}
var propertiesWithPrefix = this.startsWith(prefix);
var j = propertiesWithPrefix.indexOf(str);
j = (j + propertiesWithPrefix.length + shift) % propertiesWithPrefix.length;
return propertiesWithPrefix[j];
}
}

438
node_modules/weinre/web/client/CSSKeywordCompletions.js generated vendored Normal file
View File

@ -0,0 +1,438 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.CSSKeywordCompletions = {
forProperty: function(propertyName)
{
var acceptedKeywords = ["initial"];
if (propertyName in this._propertyKeywordMap)
acceptedKeywords = acceptedKeywords.concat(this._propertyKeywordMap[propertyName]);
if (propertyName in this._colorAwareProperties)
acceptedKeywords = acceptedKeywords.concat(WebInspector.CSSKeywordCompletions._colors);
if (propertyName in WebInspector.StylesSidebarPane.InheritedProperties)
acceptedKeywords.push("inherit");
return new WebInspector.CSSCompletions(acceptedKeywords, true);
}
};
WebInspector.CSSKeywordCompletions._colors = [
"aqua", "black", "blue", "fuchsia", "gray", "green", "lime", "maroon", "navy", "olive", "orange", "purple", "red",
"silver", "teal", "white", "yellow", "transparent", "currentcolor", "grey", "aliceblue", "antiquewhite",
"aquamarine", "azure", "beige", "bisque", "blanchedalmond", "blueviolet", "brown", "burlywood", "cadetblue",
"chartreuse", "chocolate", "coral", "cornflowerblue", "cornsilk", "crimson", "cyan", "darkblue", "darkcyan",
"darkgoldenrod", "darkgray", "darkgreen", "darkgrey", "darkkhaki", "darkmagenta", "darkolivegreen", "darkorange",
"darkorchid", "darkred", "darksalmon", "darkseagreen", "darkslateblue", "darkslategray", "darkslategrey",
"darkturquoise", "darkviolet", "deeppink", "deepskyblue", "dimgray", "dimgrey", "dodgerblue", "firebrick",
"floralwhite", "forestgreen", "gainsboro", "ghostwhite", "gold", "goldenrod", "greenyellow", "honeydew", "hotpink",
"indianred", "indigo", "ivory", "khaki", "lavender", "lavenderblush", "lawngreen", "lemonchiffon", "lightblue",
"lightcoral", "lightcyan", "lightgoldenrodyellow", "lightgray", "lightgreen", "lightgrey", "lightpink",
"lightsalmon", "lightseagreen", "lightskyblue", "lightslategray", "lightslategrey", "lightsteelblue", "lightyellow",
"limegreen", "linen", "magenta", "mediumaquamarine", "mediumblue", "mediumorchid", "mediumpurple", "mediumseagreen",
"mediumslateblue", "mediumspringgreen", "mediumturquoise", "mediumvioletred", "midnightblue", "mintcream",
"mistyrose", "moccasin", "navajowhite", "oldlace", "olivedrab", "orangered", "orchid", "palegoldenrod", "palegreen",
"paleturquoise", "palevioletred", "papayawhip", "peachpuff", "peru", "pink", "plum", "powderblue", "rosybrown",
"royalblue", "saddlebrown", "salmon", "sandybrown", "seagreen", "seashell", "sienna", "skyblue", "slateblue",
"slategray", "slategrey", "snow", "springgreen", "steelblue", "tan", "thistle", "tomato", "turquoise", "violet",
"wheat", "whitesmoke", "yellowgreen"
],
WebInspector.CSSKeywordCompletions._colorAwareProperties = [
"background", "background-color", "border", "border-color", "border-top", "border-right", "border-bottom",
"border-left", "border-top-color", "border-right-color", "border-bottom-color", "border-left-color", "color",
"outline", "outline-color", "text-line-through", "text-line-through-color", "text-overline", "text-overline-color",
"text-shadow", "text-underline", "text-underline-color", "-webkit-text-emphasis", "-webkit-text-emphasis-color"
].keySet();
WebInspector.CSSKeywordCompletions._propertyKeywordMap = {
"table-layout": [
"auto", "fixed"
],
"visibility": [
"hidden", "visible", "collapse"
],
"background-repeat": [
"repeat", "repeat-x", "repeat-y", "no-repeat", "space", "round"
],
"text-underline": [
"none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave"
],
"content": [
"list-item", "close-quote", "no-close-quote", "no-open-quote", "open-quote"
],
"list-style-image": [
"none"
],
"clear": [
"none", "left", "right", "both"
],
"text-underline-mode": [
"continuous", "skip-white-space"
],
"overflow-x": [
"hidden", "auto", "visible", "overlay", "scroll"
],
"stroke-linejoin": [
"round", "miter", "bevel"
],
"baseline-shift": [
"baseline", "sub", "super"
],
"border-bottom-width": [
"medium", "thick", "thin"
],
"marquee-speed": [
"normal", "slow", "fast"
],
"margin-top-collapse": [
"collapse", "separate", "discard"
],
"max-height": [
"none"
],
"box-orient": [
"horizontal", "vertical", "inline-axis", "block-axis"
],
"font-stretch": [
"normal", "wider", "narrower", "ultra-condensed", "extra-condensed", "condensed", "semi-condensed",
"semi-expanded", "expanded", "extra-expanded", "ultra-expanded"
],
"-webkit-color-correction": [
"default", "srgb"
],
"text-underline-style": [
"none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave"
],
"text-overline-mode": [
"continuous", "skip-white-space"
],
"-webkit-background-composite": [
"highlight", "clear", "copy", "source-over", "source-in", "source-out", "source-atop", "destination-over",
"destination-in", "destination-out", "destination-atop", "xor", "plus-darker", "plus-lighter"
],
"border-left-width": [
"medium", "thick", "thin"
],
"-webkit-writing-mode": [
"lr", "rl", "tb", "lr-tb", "rl-tb", "tb-rl", "horizontal-tb", "vertical-rl", "vertical-lr", "horizontal-bt"
],
"text-line-through-mode": [
"continuous", "skip-white-space"
],
"border-collapse": [
"collapse", "separate"
],
"page-break-inside": [
"auto", "avoid"
],
"border-top-width": [
"medium", "thick", "thin"
],
"outline-color": [
"invert"
],
"text-line-through-style": [
"none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave"
],
"outline-style": [
"none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
],
"cursor": [
"none", "copy", "auto", "crosshair", "default", "pointer", "move", "vertical-text", "cell", "context-menu",
"alias", "progress", "no-drop", "not-allowed", "-webkit-zoom-in", "-webkit-zoom-out", "e-resize", "ne-resize",
"nw-resize", "n-resize", "se-resize", "sw-resize", "s-resize", "w-resize", "ew-resize", "ns-resize",
"nesw-resize", "nwse-resize", "col-resize", "row-resize", "text", "wait", "help", "all-scroll", "-webkit-grab",
"-webkit-grabbing"
],
"border-width": [
"medium", "thick", "thin"
],
"size": [
"a3", "a4", "a5", "b4", "b5", "landscape", "ledger", "legal", "letter", "portrait"
],
"background-size": [
"contain", "cover"
],
"direction": [
"ltr", "rtl"
],
"marquee-direction": [
"left", "right", "auto", "reverse", "forwards", "backwards", "ahead", "up", "down"
],
"enable-background": [
"accumulate", "new"
],
"float": [
"none", "left", "right"
],
"overflow-y": [
"hidden", "auto", "visible", "overlay", "scroll"
],
"margin-bottom-collapse": [
"collapse", "separate", "discard"
],
"box-reflect": [
"left", "right", "above", "below"
],
"overflow": [
"hidden", "auto", "visible", "overlay", "scroll"
],
"text-rendering": [
"auto", "optimizespeed", "optimizelegibility", "geometricprecision"
],
"text-align": [
"-webkit-auto", "left", "right", "center", "justify", "-webkit-left", "-webkit-right", "-webkit-center"
],
"list-style-position": [
"outside", "inside"
],
"margin-bottom": [
"auto"
],
"color-interpolation": [
"linearrgb"
],
"background-origin": [
"border-box", "content-box", "padding-box"
],
"word-wrap": [
"normal", "break-word"
],
"font-weight": [
"normal", "bold", "bolder", "lighter", "100", "200", "300", "400", "500", "600", "700", "800", "900"
],
"margin-before-collapse": [
"collapse", "separate", "discard"
],
"text-overline-width": [
"normal", "medium", "auto", "thick", "thin"
],
"text-transform": [
"none", "capitalize", "uppercase", "lowercase"
],
"border-right-style": [
"none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
],
"border-left-style": [
"none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
],
"-webkit-text-emphasis": [
"circle", "filled", "open", "dot", "double-circle", "triangle", "sesame"
],
"font-style": [
"italic", "oblique", "normal"
],
"speak": [
"none", "normal", "spell-out", "digits", "literal-punctuation", "no-punctuation"
],
"text-line-through": [
"none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave", "continuous",
"skip-white-space"
],
"color-rendering": [
"auto", "optimizespeed", "optimizequality"
],
"list-style-type": [
"none", "disc", "circle", "square", "decimal", "decimal-leading-zero", "arabic-indic", "binary", "bengali",
"cambodian", "khmer", "devanagari", "gujarati", "gurmukhi", "kannada", "lower-hexadecimal", "lao", "malayalam",
"mongolian", "myanmar", "octal", "oriya", "persian", "urdu", "telugu", "tibetan", "thai", "upper-hexadecimal",
"lower-roman", "upper-roman", "lower-greek", "lower-alpha", "lower-latin", "upper-alpha", "upper-latin", "afar",
"ethiopic-halehame-aa-et", "ethiopic-halehame-aa-er", "amharic", "ethiopic-halehame-am-et", "amharic-abegede",
"ethiopic-abegede-am-et", "cjk-earthly-branch", "cjk-heavenly-stem", "ethiopic", "ethiopic-halehame-gez",
"ethiopic-abegede", "ethiopic-abegede-gez", "hangul-consonant", "hangul", "lower-norwegian", "oromo",
"ethiopic-halehame-om-et", "sidama", "ethiopic-halehame-sid-et", "somali", "ethiopic-halehame-so-et", "tigre",
"ethiopic-halehame-tig", "tigrinya-er", "ethiopic-halehame-ti-er", "tigrinya-er-abegede",
"ethiopic-abegede-ti-er", "tigrinya-et", "ethiopic-halehame-ti-et", "tigrinya-et-abegede",
"ethiopic-abegede-ti-et", "upper-greek", "upper-norwegian", "asterisks", "footnotes", "hebrew", "armenian",
"lower-armenian", "upper-armenian", "georgian", "cjk-ideographic", "hiragana", "katakana", "hiragana-iroha",
"katakana-iroha"
],
"-webkit-text-combine": [
"none", "horizontal"
],
"outline": [
"none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
],
"font": [
"caption", "icon", "menu", "message-box", "small-caption", "-webkit-mini-control", "-webkit-small-control",
"-webkit-control", "status-bar", "italic", "oblique", "small-caps", "normal", "bold", "bolder", "lighter",
"100", "200", "300", "400", "500", "600", "700", "800", "900", "xx-small", "x-small", "small", "medium",
"large", "x-large", "xx-large", "-webkit-xxx-large", "smaller", "larger", "serif", "sans-serif", "cursive",
"fantasy", "monospace", "-webkit-body"
],
"dominant-baseline": [
"middle", "auto", "central", "text-before-edge", "text-after-edge", "ideographic", "alphabetic", "hanging",
"mathematical", "use-script", "no-change", "reset-size"
],
"display": [
"none", "inline", "block", "list-item", "run-in", "compact", "inline-block", "table", "inline-table",
"table-row-group", "table-header-group", "table-footer-group", "table-row", "table-column-group",
"table-column", "table-cell", "table-caption", "-webkit-box", "-webkit-inline-box", "-wap-marquee"
],
"-webkit-text-emphasis-position": [
"over", "under"
],
"image-rendering": [
"auto", "optimizespeed", "optimizequality"
],
"alignment-baseline": [
"baseline", "middle", "auto", "before-edge", "after-edge", "central", "text-before-edge", "text-after-edge",
"ideographic", "alphabetic", "hanging", "mathematical"
],
"outline-width": [
"medium", "thick", "thin"
],
"text-line-through-width": [
"normal", "medium", "auto", "thick", "thin"
],
"box-align": [
"baseline", "center", "stretch", "start", "end"
],
"border-right-width": [
"medium", "thick", "thin"
],
"border-top-style": [
"none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
],
"line-height": [
"normal"
],
"text-overflow": [
"clip", "ellipsis"
],
"box-direction": [
"normal", "reverse"
],
"margin-after-collapse": [
"collapse", "separate", "discard"
],
"page-break-before": [
"left", "right", "auto", "always", "avoid"
],
"-webkit-hyphens": [
"none", "auto", "manual"
],
"border-image": [
"repeat", "stretch"
],
"text-decoration": [
"blink", "line-through", "overline", "underline"
],
"position": [
"absolute", "fixed", "relative", "static"
],
"font-family": [
"serif", "sans-serif", "cursive", "fantasy", "monospace", "-webkit-body"
],
"text-overflow-mode": [
"clip", "ellipsis"
],
"border-bottom-style": [
"none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
],
"unicode-bidi": [
"normal", "bidi-override", "embed"
],
"clip-rule": [
"nonzero", "evenodd"
],
"margin-left": [
"auto"
],
"margin-top": [
"auto"
],
"zoom": [
"document", "reset"
],
"text-overline-style": [
"none", "dotted", "dashed", "solid", "double", "dot-dash", "dot-dot-dash", "wave"
],
"max-width": [
"none"
],
"empty-cells": [
"hide", "show"
],
"pointer-events": [
"none", "all", "auto", "visible", "visiblepainted", "visiblefill", "visiblestroke", "painted", "fill", "stroke"
],
"letter-spacing": [
"normal"
],
"background-clip": [
"border-box", "content-box", "padding-box"
],
"-webkit-font-smoothing": [
"none", "auto", "antialiased", "subpixel-antialiased"
],
"border": [
"none", "hidden", "inset", "groove", "ridge", "outset", "dotted", "dashed", "solid", "double"
],
"font-size": [
"xx-small", "x-small", "small", "medium", "large", "x-large", "xx-large", "-webkit-xxx-large", "smaller",
"larger"
],
"font-variant": [
"small-caps", "normal"
],
"vertical-align": [
"baseline", "middle", "sub", "super", "text-top", "text-bottom", "top", "bottom", "-webkit-baseline-middle"
],
"marquee-style": [
"none", "scroll", "slide", "alternate"
],
"white-space": [
"normal", "nowrap", "pre", "pre-line", "pre-wrap"
],
"text-underline-width": [
"normal", "medium", "auto", "thick", "thin"
],
"box-lines": [
"single", "multiple"
],
"page-break-after": [
"left", "right", "auto", "always", "avoid"
],
"clip-path": [
"none"
],
"margin": [
"auto"
],
"marquee-repetition": [
"infinite"
],
"margin-right": [
"auto"
],
"-webkit-text-emphasis-style": [
"circle", "filled", "open", "dot", "double-circle", "triangle", "sesame"
]
}

574
node_modules/weinre/web/client/CSSStyleModel.js generated vendored Normal file
View File

@ -0,0 +1,574 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.CSSStyleModel = function()
{
}
WebInspector.CSSStyleModel.parseRuleArrayPayload = function(ruleArray)
{
var result = [];
for (var i = 0; i < ruleArray.length; ++i)
result.push(WebInspector.CSSRule.parsePayload(ruleArray[i]));
return result;
}
WebInspector.CSSStyleModel.prototype = {
getStylesAsync: function(nodeId, userCallback)
{
function callback(userCallback, payload)
{
if (!payload) {
if (userCallback)
userCallback(null);
return;
}
var result = {};
if ("inlineStyle" in payload)
result.inlineStyle = WebInspector.CSSStyleDeclaration.parsePayload(payload.inlineStyle);
result.computedStyle = WebInspector.CSSStyleDeclaration.parsePayload(payload.computedStyle);
result.matchedCSSRules = WebInspector.CSSStyleModel.parseRuleArrayPayload(payload.matchedCSSRules);
result.styleAttributes = {};
for (var name in payload.styleAttributes)
result.styleAttributes[name] = WebInspector.CSSStyleDeclaration.parsePayload(payload.styleAttributes[name]);
result.pseudoElements = [];
for (var i = 0; i < payload.pseudoElements.length; ++i) {
var entryPayload = payload.pseudoElements[i];
result.pseudoElements.push({ pseudoId: entryPayload.pseudoId, rules: WebInspector.CSSStyleModel.parseRuleArrayPayload(entryPayload.rules) });
}
result.inherited = [];
for (var i = 0; i < payload.inherited.length; ++i) {
var entryPayload = payload.inherited[i];
var entry = {};
if ("inlineStyle" in entryPayload)
entry.inlineStyle = WebInspector.CSSStyleDeclaration.parsePayload(entryPayload.inlineStyle);
if ("matchedCSSRules" in entryPayload)
entry.matchedCSSRules = WebInspector.CSSStyleModel.parseRuleArrayPayload(entryPayload.matchedCSSRules);
result.inherited.push(entry);
}
if (userCallback)
userCallback(result);
}
InspectorBackend.getStylesForNode(nodeId, callback.bind(null, userCallback));
},
getComputedStyleAsync: function(nodeId, userCallback)
{
function callback(userCallback, stylePayload)
{
if (!stylePayload)
userCallback(null);
else
userCallback(WebInspector.CSSStyleDeclaration.parsePayload(stylePayload));
}
InspectorBackend.getComputedStyleForNode(nodeId, callback.bind(null, userCallback));
},
getInlineStyleAsync: function(nodeId, userCallback)
{
function callback(userCallback, stylePayload)
{
if (!stylePayload)
userCallback(null);
else
userCallback(WebInspector.CSSStyleDeclaration.parsePayload(stylePayload));
}
InspectorBackend.getInlineStyleForNode(nodeId, callback.bind(null, userCallback));
},
setRuleSelector: function(ruleId, nodeId, newSelector, successCallback, failureCallback)
{
function checkAffectsCallback(nodeId, successCallback, rulePayload, selectedNodeIds)
{
var doesAffectSelectedNode = (selectedNodeIds.indexOf(nodeId) >= 0);
var rule = WebInspector.CSSRule.parsePayload(rulePayload);
successCallback(rule, doesAffectSelectedNode);
this._styleSheetChanged(rule.id.styleSheetId, true);
}
function callback(nodeId, successCallback, failureCallback, newSelector, rulePayload)
{
if (!rulePayload)
failureCallback();
else
InspectorBackend.querySelectorAll(nodeId, newSelector, checkAffectsCallback.bind(this, nodeId, successCallback, rulePayload));
}
InspectorBackend.setRuleSelector(ruleId, newSelector, callback.bind(this, nodeId, successCallback, failureCallback));
},
addRule: function(nodeId, selector, successCallback, failureCallback)
{
function checkAffectsCallback(nodeId, successCallback, rulePayload, selectedNodeIds)
{
var doesAffectSelectedNode = (selectedNodeIds.indexOf(nodeId) >= 0);
var rule = WebInspector.CSSRule.parsePayload(rulePayload);
successCallback(rule, doesAffectSelectedNode);
this._styleSheetChanged(rule.id.styleSheetId, true);
}
function callback(successCallback, failureCallback, selector, rulePayload)
{
if (!rulePayload) {
// Invalid syntax for a selector
failureCallback();
} else
InspectorBackend.querySelectorAll(nodeId, selector, checkAffectsCallback.bind(this, nodeId, successCallback, rulePayload));
}
InspectorBackend.addRule(nodeId, selector, callback.bind(this, successCallback, failureCallback, selector));
},
_styleSheetChanged: function(styleSheetId, majorChange)
{
if (!majorChange || !styleSheetId)
return;
function callback(href, content)
{
var resource = WebInspector.resourceForURL(href);
if (resource && resource.type === WebInspector.Resource.Type.Stylesheet)
resource.setContent(content, this._onRevert.bind(this, styleSheetId));
}
InspectorBackend.getStyleSheetText(styleSheetId, callback.bind(this));
},
_onRevert: function(styleSheetId, contentToRevertTo)
{
function callback(success)
{
this._styleSheetChanged(styleSheetId, true);
this.dispatchEventToListeners("stylesheet changed");
}
InspectorBackend.setStyleSheetText(styleSheetId, contentToRevertTo, callback.bind(this));
}
}
WebInspector.CSSStyleModel.prototype.__proto__ = WebInspector.Object.prototype;
WebInspector.CSSStyleDeclaration = function(payload)
{
this.id = payload.styleId;
this.properties = payload.properties;
this._shorthandValues = payload.shorthandValues;
this._livePropertyMap = {}; // LIVE properties (source-based or style-based) : { name -> CSSProperty }
this._allProperties = []; // ALL properties: [ CSSProperty ]
this._longhandProperties = {}; // shorthandName -> [ CSSProperty ]
this.__disabledProperties = {}; // DISABLED properties: { index -> CSSProperty }
var payloadPropertyCount = payload.cssProperties.length;
var propertyIndex = 0;
for (var i = 0; i < payloadPropertyCount; ++i) {
var property = new WebInspector.CSSProperty.parsePayload(this, i, payload.cssProperties[i]);
this._allProperties.push(property);
if (property.disabled)
this.__disabledProperties[i] = property;
if (!property.active && !property.styleBased)
continue;
var name = property.name;
this[propertyIndex] = name;
this._livePropertyMap[name] = property;
// Index longhand properties.
if (property.shorthand) { // only for parsed
var longhands = this._longhandProperties[property.shorthand];
if (!longhands) {
longhands = [];
this._longhandProperties[property.shorthand] = longhands;
}
longhands.push(property);
}
++propertyIndex;
}
this.length = propertyIndex;
if ("cssText" in payload)
this.cssText = payload.cssText;
}
WebInspector.CSSStyleDeclaration.parsePayload = function(payload)
{
return new WebInspector.CSSStyleDeclaration(payload);
}
WebInspector.CSSStyleDeclaration.prototype = {
get allProperties()
{
return this._allProperties;
},
getLiveProperty: function(name)
{
return this._livePropertyMap[name];
},
getPropertyValue: function(name)
{
var property = this._livePropertyMap[name];
return property ? property.value : "";
},
getPropertyPriority: function(name)
{
var property = this._livePropertyMap[name];
return property ? property.priority : "";
},
getPropertyShorthand: function(name)
{
var property = this._livePropertyMap[name];
return property ? property.shorthand : "";
},
isPropertyImplicit: function(name)
{
var property = this._livePropertyMap[name];
return property ? property.implicit : "";
},
styleTextWithShorthands: function()
{
var cssText = "";
var foundProperties = {};
for (var i = 0; i < this.length; ++i) {
var individualProperty = this[i];
var shorthandProperty = this.getPropertyShorthand(individualProperty);
var propertyName = (shorthandProperty || individualProperty);
if (propertyName in foundProperties)
continue;
if (shorthandProperty) {
var value = this.getShorthandValue(shorthandProperty);
var priority = this.getShorthandPriority(shorthandProperty);
} else {
var value = this.getPropertyValue(individualProperty);
var priority = this.getPropertyPriority(individualProperty);
}
foundProperties[propertyName] = true;
cssText += propertyName + ": " + value;
if (priority)
cssText += " !" + priority;
cssText += "; ";
}
return cssText;
},
getLonghandProperties: function(name)
{
return this._longhandProperties[name] || [];
},
getShorthandValue: function(shorthandProperty)
{
var property = this.getLiveProperty(shorthandProperty);
return property ? property.value : this._shorthandValues[shorthandProperty];
},
getShorthandPriority: function(shorthandProperty)
{
var priority = this.getPropertyPriority(shorthandProperty);
if (priority)
return priority;
var longhands = this._longhandProperties[shorthandProperty];
return longhands ? this.getPropertyPriority(longhands[0]) : null;
},
propertyAt: function(index)
{
return (index < this.allProperties.length) ? this.allProperties[index] : null;
},
pastLastSourcePropertyIndex: function()
{
for (var i = this.allProperties.length - 1; i >= 0; --i) {
var property = this.allProperties[i];
if (property.active || property.disabled)
return i + 1;
}
return 0;
},
newBlankProperty: function()
{
return new WebInspector.CSSProperty(this, this.pastLastSourcePropertyIndex(), "", "", "", "active", true, false, false, "");
},
insertPropertyAt: function(index, name, value, userCallback)
{
function callback(userCallback, payload)
{
if (!userCallback)
return;
if (!payload)
userCallback(null);
else {
userCallback(WebInspector.CSSStyleDeclaration.parsePayload(payload));
WebInspector.cssModel._styleSheetChanged(this.id.styleSheetId, true);
}
}
InspectorBackend.setPropertyText(this.id, index, name + ": " + value + ";", false, callback.bind(null, userCallback));
},
appendProperty: function(name, value, userCallback)
{
this.insertPropertyAt(this.allProperties.length, name, value, userCallback);
}
}
WebInspector.CSSRule = function(payload)
{
this.id = payload.ruleId;
this.selectorText = payload.selectorText;
this.sourceLine = payload.sourceLine;
this.sourceURL = payload.sourceURL;
this.origin = payload.origin;
this.style = WebInspector.CSSStyleDeclaration.parsePayload(payload.style);
this.style.parentRule = this;
this.selectorRange = payload.selectorRange;
}
WebInspector.CSSRule.parsePayload = function(payload)
{
return new WebInspector.CSSRule(payload);
}
WebInspector.CSSRule.prototype = {
get isUserAgent()
{
return this.origin === "user-agent";
},
get isUser()
{
return this.origin === "user";
},
get isViaInspector()
{
return this.origin === "inspector";
},
get isRegular()
{
return this.origin === "";
}
}
WebInspector.CSSProperty = function(ownerStyle, index, name, value, priority, status, parsedOk, implicit, shorthand, text)
{
this.ownerStyle = ownerStyle;
this.index = index;
this.name = name;
this.value = value;
this.priority = priority;
this.status = status;
this.parsedOk = parsedOk;
this.implicit = implicit;
this.shorthand = shorthand;
this.text = text;
}
WebInspector.CSSProperty.parsePayload = function(ownerStyle, index, payload)
{
var result = new WebInspector.CSSProperty(
ownerStyle, index, payload.name, payload.value, payload.priority, payload.status, payload.parsedOk, payload.implicit, payload.shorthandName, payload.text);
return result;
}
WebInspector.CSSProperty.prototype = {
get propertyText()
{
if (this.text !== undefined)
return this.text;
if (this.name === "")
return "";
return this.name + ": " + this.value + (this.priority ? " !" + this.priority : "") + ";";
},
get isLive()
{
return this.active || this.styleBased;
},
get active()
{
return this.status === "active";
},
get styleBased()
{
return this.status === "style";
},
get inactive()
{
return this.status === "inactive";
},
get disabled()
{
return this.status === "disabled";
},
// Replaces "propertyName: propertyValue [!important];" in the stylesheet by an arbitrary propertyText.
setText: function(propertyText, majorChange, userCallback)
{
function enabledCallback(style)
{
if (style)
WebInspector.cssModel._styleSheetChanged(style.id.styleSheetId, majorChange);
if (userCallback)
userCallback(style);
}
function callback(stylePayload)
{
if (stylePayload) {
this.text = propertyText;
var style = WebInspector.CSSStyleDeclaration.parsePayload(stylePayload);
var newProperty = style.allProperties[this.index];
if (newProperty && this.disabled && !propertyText.match(/^\s*$/)) {
newProperty.setDisabled(false, enabledCallback);
return;
} else
WebInspector.cssModel._styleSheetChanged(style.id.styleSheetId, majorChange);
if (userCallback)
userCallback(style);
} else {
if (userCallback)
userCallback(null);
}
}
if (!this.ownerStyle)
throw "No ownerStyle for property";
// An index past all the properties adds a new property to the style.
InspectorBackend.setPropertyText(this.ownerStyle.id, this.index, propertyText, this.index < this.ownerStyle.pastLastSourcePropertyIndex(), callback.bind(this));
},
setValue: function(newValue, userCallback)
{
var text = this.name + ": " + newValue + (this.priority ? " !" + this.priority : "") + ";"
this.setText(text, userCallback);
},
setDisabled: function(disabled, userCallback)
{
if (!this.ownerStyle && userCallback)
userCallback(null);
if (disabled === this.disabled && userCallback)
userCallback(this.ownerStyle);
function callback(stylePayload)
{
if (!userCallback)
return;
if (!stylePayload)
userCallback(null);
else {
var style = WebInspector.CSSStyleDeclaration.parsePayload(stylePayload);
userCallback(style);
WebInspector.cssModel._styleSheetChanged(this.ownerStyle.id.styleSheetId, false);
}
}
InspectorBackend.toggleProperty(this.ownerStyle.id, this.index, disabled, callback.bind(this));
}
}
WebInspector.CSSStyleSheet = function(payload)
{
this.id = payload.styleSheetId;
this.sourceURL = payload.sourceURL;
this.title = payload.title;
this.disabled = payload.disabled;
this.rules = [];
this.styles = {};
for (var i = 0; i < payload.rules.length; ++i) {
var rule = WebInspector.CSSRule.parsePayload(payload.rules[i]);
this.rules.push(rule);
if (rule.style)
this.styles[rule.style.id] = rule.style;
}
if ("text" in payload)
this._text = payload.text;
}
WebInspector.CSSStyleSheet.createForId = function(styleSheetId, userCallback)
{
function callback(styleSheetPayload)
{
if (!styleSheetPayload)
userCallback(null);
else
userCallback(new WebInspector.CSSStyleSheet(styleSheetPayload));
}
InspectorBackend.getStyleSheet(styleSheetId, callback.bind(this));
}
WebInspector.CSSStyleSheet.prototype = {
getText: function()
{
return this._text;
},
setText: function(newText, userCallback)
{
function callback(styleSheetPayload)
{
if (!styleSheetPayload)
userCallback(null);
else {
userCallback(new WebInspector.CSSStyleSheet(styleSheetPayload));
WebInspector.cssModel._styleSheetChanged(this.id, true);
}
}
InspectorBackend.setStyleSheetText(this.id, newText, callback.bind(this));
}
}

196
node_modules/weinre/web/client/CallStackSidebarPane.js generated vendored Normal file
View File

@ -0,0 +1,196 @@
/*
* Copyright (C) 2008 Apple Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.CallStackSidebarPane = function()
{
WebInspector.SidebarPane.call(this, WebInspector.UIString("Call Stack"));
}
WebInspector.CallStackSidebarPane.prototype = {
update: function(details)
{
this.bodyElement.removeChildren();
this.placards = [];
delete this._selectedCallFrame;
if (!details) {
var infoElement = document.createElement("div");
infoElement.className = "info";
infoElement.textContent = WebInspector.UIString("Not Paused");
this.bodyElement.appendChild(infoElement);
return;
}
var callFrames = details.callFrames;
var title;
var subtitle;
var script;
for (var i = 0; i < callFrames.length; ++i) {
var callFrame = callFrames[i];
switch (callFrame.type) {
case "function":
title = callFrame.functionName || WebInspector.UIString("(anonymous function)");
break;
case "program":
title = WebInspector.UIString("(program)");
break;
}
script = WebInspector.debuggerModel.scriptForSourceID(callFrame.sourceID);
if (script)
subtitle = WebInspector.displayNameForURL(script.sourceURL);
else
subtitle = WebInspector.UIString("(internal script)");
if (callFrame.line > 0) {
if (subtitle)
subtitle += ":" + callFrame.line;
else
subtitle = WebInspector.UIString("line %d", callFrame.line);
}
var placard = new WebInspector.Placard(title, subtitle);
placard.callFrame = callFrame;
placard.element.addEventListener("click", this._placardSelected.bind(this), false);
this.placards.push(placard);
this.bodyElement.appendChild(placard.element);
}
if (details.breakpoint)
this._scriptBreakpointHit();
else if (details.eventType === WebInspector.DebuggerEventTypes.NativeBreakpoint)
this._nativeBreakpointHit(details.eventData);
},
get selectedCallFrame()
{
return this._selectedCallFrame;
},
set selectedCallFrame(x)
{
this._selectedCallFrame = x;
for (var i = 0; i < this.placards.length; ++i) {
var placard = this.placards[i];
placard.selected = (placard.callFrame === this._selectedCallFrame);
}
this.dispatchEventToListeners("call frame selected");
},
handleShortcut: function(event)
{
var shortcut = WebInspector.KeyboardShortcut.makeKeyFromEvent(event);
var handler = this._shortcuts[shortcut];
if (handler) {
handler(event);
event.handled = true;
}
},
_selectNextCallFrameOnStack: function()
{
var index = this._selectedCallFrameIndex();
if (index == -1)
return;
this._selectedPlacardByIndex(index + 1);
},
_selectPreviousCallFrameOnStack: function()
{
var index = this._selectedCallFrameIndex();
if (index == -1)
return;
this._selectedPlacardByIndex(index - 1);
},
_selectedPlacardByIndex: function(index)
{
if (index < 0 || index >= this.placards.length)
return;
var placard = this.placards[index];
this.selectedCallFrame = placard.callFrame
},
_selectedCallFrameIndex: function()
{
if (!this._selectedCallFrame)
return -1;
for (var i = 0; i < this.placards.length; ++i) {
var placard = this.placards[i];
if (placard.callFrame === this._selectedCallFrame)
return i;
}
return -1;
},
_placardSelected: function(event)
{
var placardElement = event.target.enclosingNodeOrSelfWithClass("placard");
this.selectedCallFrame = placardElement.placard.callFrame;
},
registerShortcuts: function(section)
{
this._shortcuts = {};
var nextCallFrame = WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Period,
WebInspector.KeyboardShortcut.Modifiers.Ctrl);
this._shortcuts[nextCallFrame.key] = this._selectNextCallFrameOnStack.bind(this);
var prevCallFrame = WebInspector.KeyboardShortcut.makeDescriptor(WebInspector.KeyboardShortcut.Keys.Comma,
WebInspector.KeyboardShortcut.Modifiers.Ctrl);
this._shortcuts[prevCallFrame.key] = this._selectPreviousCallFrameOnStack.bind(this);
section.addRelatedKeys([ nextCallFrame.name, prevCallFrame.name ], WebInspector.UIString("Next/previous call frame"));
},
_scriptBreakpointHit: function()
{
var statusMessageElement = document.createElement("div");
statusMessageElement.className = "info";
statusMessageElement.appendChild(document.createTextNode(WebInspector.UIString("Paused on a JavaScript breakpoint.")));
this.bodyElement.appendChild(statusMessageElement);
},
_nativeBreakpointHit: function(eventData)
{
var breakpoint = WebInspector.breakpointManager.breakpointViewForEventData(eventData);
if (!breakpoint)
return;
var statusMessageElement = document.createElement("div");
statusMessageElement.className = "info";
breakpoint.populateStatusMessageElement(statusMessageElement, eventData);
this.bodyElement.appendChild(statusMessageElement);
}
}
WebInspector.CallStackSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype;

63
node_modules/weinre/web/client/Checkbox.js generated vendored Normal file
View File

@ -0,0 +1,63 @@
/*
* Copyright (C) 2010 Google Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.Checkbox = function(label, className, tooltip)
{
this.element = document.createElement('label');
this._inputElement = document.createElement('input');
this._inputElement.type = "checkbox";
this.element.className = className;
this.element.appendChild(this._inputElement);
this.element.appendChild(document.createTextNode(label));
if (tooltip)
this.element.title = tooltip;
}
WebInspector.Checkbox.prototype = {
set checked(checked)
{
this._inputElement.checked = checked;
},
get checked()
{
return this._inputElement.checked;
},
addEventListener: function(listener)
{
function listenerWrapper(event)
{
if (listener)
listener(event);
event.stopPropagation();
return true;
}
this._inputElement.addEventListener("click", listenerWrapper, false);
this.element.addEventListener("click", listenerWrapper, false);
}
}

663
node_modules/weinre/web/client/Color.js generated vendored Normal file
View File

@ -0,0 +1,663 @@
/*
* Copyright (C) 2009 Apple Inc. All rights reserved.
* Copyright (C) 2009 Joseph Pecoraro
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.Color = function(str)
{
this.value = str;
this._parse();
}
WebInspector.Color.prototype = {
get shorthex()
{
if ("_short" in this)
return this._short;
if (!this.simple)
return null;
var hex = this.hex;
if (hex.charAt(0) === hex.charAt(1) && hex.charAt(2) === hex.charAt(3) && hex.charAt(4) === hex.charAt(5))
this._short = hex.charAt(0) + hex.charAt(2) + hex.charAt(4);
else
this._short = hex;
return this._short;
},
get hex()
{
if (!this.simple)
return null;
return this._hex;
},
set hex(x)
{
this._hex = x;
},
get rgb()
{
if ("_rgb" in this)
return this._rgb;
if (this.simple)
this._rgb = this._hexToRGB(this.hex);
else {
var rgba = this.rgba;
this._rgb = [rgba[0], rgba[1], rgba[2]];
}
return this._rgb;
},
set rgb(x)
{
this._rgb = x;
},
get hsl()
{
if ("_hsl" in this)
return this._hsl;
this._hsl = this._rgbToHSL(this.rgb);
return this._hsl;
},
set hsl(x)
{
this._hsl = x;
},
get nickname()
{
if (typeof this._nickname !== "undefined") // would be set on parse if there was a nickname
return this._nickname;
else
return null;
},
set nickname(x)
{
this._nickname = x;
},
get rgba()
{
return this._rgba;
},
set rgba(x)
{
this._rgba = x;
},
get hsla()
{
return this._hsla;
},
set hsla(x)
{
this._hsla = x;
},
hasShortHex: function()
{
var shorthex = this.shorthex;
return (shorthex && shorthex.length === 3);
},
toString: function(format)
{
if (!format)
format = this.format;
switch (format) {
case "original":
return this.value;
case "rgb":
return "rgb(" + this.rgb.join(", ") + ")";
case "rgba":
return "rgba(" + this.rgba.join(", ") + ")";
case "hsl":
var hsl = this.hsl;
return "hsl(" + hsl[0] + ", " + hsl[1] + "%, " + hsl[2] + "%)";
case "hsla":
var hsla = this.hsla;
return "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, " + hsla[3] + ")";
case "hex":
return "#" + this.hex;
case "shorthex":
return "#" + this.shorthex;
case "nickname":
return this.nickname;
}
throw "invalid color format";
},
_rgbToHex: function(rgb)
{
var r = parseInt(rgb[0]).toString(16);
var g = parseInt(rgb[1]).toString(16);
var b = parseInt(rgb[2]).toString(16);
if (r.length === 1)
r = "0" + r;
if (g.length === 1)
g = "0" + g;
if (b.length === 1)
b = "0" + b;
return (r + g + b).toUpperCase();
},
_hexToRGB: function(hex)
{
var r = parseInt(hex.substring(0,2), 16);
var g = parseInt(hex.substring(2,4), 16);
var b = parseInt(hex.substring(4,6), 16);
return [r, g, b];
},
_rgbToHSL: function(rgb)
{
var r = parseInt(rgb[0]) / 255;
var g = parseInt(rgb[1]) / 255;
var b = parseInt(rgb[2]) / 255;
var max = Math.max(r, g, b);
var min = Math.min(r, g, b);
var diff = max - min;
var add = max + min;
if (min === max)
var h = 0;
else if (r === max)
var h = ((60 * (g - b) / diff) + 360) % 360;
else if (g === max)
var h = (60 * (b - r) / diff) + 120;
else
var h = (60 * (r - g) / diff) + 240;
var l = 0.5 * add;
if (l === 0)
var s = 0;
else if (l === 1)
var s = 1;
else if (l <= 0.5)
var s = diff / add;
else
var s = diff / (2 - add);
h = Math.round(h);
s = Math.round(s*100);
l = Math.round(l*100);
return [h, s, l];
},
_hslToRGB: function(hsl)
{
var h = parseFloat(hsl[0]) / 360;
var s = parseFloat(hsl[1]) / 100;
var l = parseFloat(hsl[2]) / 100;
if (l <= 0.5)
var q = l * (1 + s);
else
var q = l + s - (l * s);
var p = 2 * l - q;
var tr = h + (1 / 3);
var tg = h;
var tb = h - (1 / 3);
var r = Math.round(hueToRGB(p, q, tr) * 255);
var g = Math.round(hueToRGB(p, q, tg) * 255);
var b = Math.round(hueToRGB(p, q, tb) * 255);
return [r, g, b];
function hueToRGB(p, q, h) {
if (h < 0)
h += 1;
else if (h > 1)
h -= 1;
if ((h * 6) < 1)
return p + (q - p) * h * 6;
else if ((h * 2) < 1)
return q;
else if ((h * 3) < 2)
return p + (q - p) * ((2 / 3) - h) * 6;
else
return p;
}
},
_rgbaToHSLA: function(rgba)
{
var alpha = rgba[3];
var hsl = this._rgbToHSL(rgba)
hsl.push(alpha);
return hsl;
},
_hslaToRGBA: function(hsla)
{
var alpha = hsla[3];
var rgb = this._hslToRGB(hsla);
rgb.push(alpha);
return rgb;
},
_parse: function()
{
// Special Values - Advanced but Must Be Parsed First - transparent
var value = this.value.toLowerCase().replace(/%|\s+/g, "");
if (value in WebInspector.Color.AdvancedNickNames) {
this.format = "nickname";
var set = WebInspector.Color.AdvancedNickNames[value];
this.simple = false;
this.rgba = set[0];
this.hsla = set[1];
this.nickname = set[2];
this.alpha = set[0][3];
return;
}
// Simple - #hex, rgb(), nickname, hsl()
var simple = /^(?:#([0-9a-f]{3,6})|rgb\(([^)]+)\)|(\w+)|hsl\(([^)]+)\))$/i;
var match = this.value.match(simple);
if (match) {
this.simple = true;
if (match[1]) { // hex
var hex = match[1].toUpperCase();
if (hex.length === 3) {
this.format = "shorthex";
this.hex = hex.charAt(0) + hex.charAt(0) + hex.charAt(1) + hex.charAt(1) + hex.charAt(2) + hex.charAt(2);
} else {
this.format = "hex";
this.hex = hex;
}
} else if (match[2]) { // rgb
this.format = "rgb";
var rgb = match[2].split(/\s*,\s*/);
this.rgb = rgb;
this.hex = this._rgbToHex(rgb);
} else if (match[3]) { // nickname
var nickname = match[3].toLowerCase();
if (nickname in WebInspector.Color.Nicknames) {
this.format = "nickname";
this.hex = WebInspector.Color.Nicknames[nickname];
} else // unknown name
throw "unknown color name";
} else if (match[4]) { // hsl
this.format = "hsl";
var hsl = match[4].replace(/%/g, "").split(/\s*,\s*/);
this.hsl = hsl;
this.rgb = this._hslToRGB(hsl);
this.hex = this._rgbToHex(this.rgb);
}
// Fill in the values if this is a known hex color
var hex = this.hex;
if (hex && hex in WebInspector.Color.HexTable) {
var set = WebInspector.Color.HexTable[hex];
this.rgb = set[0];
this.hsl = set[1];
this.nickname = set[2];
}
return;
}
// Advanced - rgba(), hsla()
var advanced = /^(?:rgba\(([^)]+)\)|hsla\(([^)]+)\))$/;
match = this.value.match(advanced);
if (match) {
this.simple = false;
if (match[1]) { // rgba
this.format = "rgba";
this.rgba = match[1].split(/\s*,\s*/);
this.hsla = this._rgbaToHSLA(this.rgba);
this.alpha = this.rgba[3];
} else if (match[2]) { // hsla
this.format = "hsla";
this.hsla = match[2].replace(/%/g, "").split(/\s*,\s*/);
this.rgba = this._hslaToRGBA(this.hsla);
this.alpha = this.hsla[3];
}
return;
}
// Could not parse as a valid color
throw "could not parse color";
}
}
// Simple Values: [rgb, hsl, nickname]
WebInspector.Color.HexTable = {
"000000": [[0, 0, 0], [0, 0, 0], "black"],
"000080": [[0, 0, 128], [240, 100, 25], "navy"],
"00008B": [[0, 0, 139], [240, 100, 27], "darkBlue"],
"0000CD": [[0, 0, 205], [240, 100, 40], "mediumBlue"],
"0000FF": [[0, 0, 255], [240, 100, 50], "blue"],
"006400": [[0, 100, 0], [120, 100, 20], "darkGreen"],
"008000": [[0, 128, 0], [120, 100, 25], "green"],
"008080": [[0, 128, 128], [180, 100, 25], "teal"],
"008B8B": [[0, 139, 139], [180, 100, 27], "darkCyan"],
"00BFFF": [[0, 191, 255], [195, 100, 50], "deepSkyBlue"],
"00CED1": [[0, 206, 209], [181, 100, 41], "darkTurquoise"],
"00FA9A": [[0, 250, 154], [157, 100, 49], "mediumSpringGreen"],
"00FF00": [[0, 255, 0], [120, 100, 50], "lime"],
"00FF7F": [[0, 255, 127], [150, 100, 50], "springGreen"],
"00FFFF": [[0, 255, 255], [180, 100, 50], "cyan"],
"191970": [[25, 25, 112], [240, 64, 27], "midnightBlue"],
"1E90FF": [[30, 144, 255], [210, 100, 56], "dodgerBlue"],
"20B2AA": [[32, 178, 170], [177, 70, 41], "lightSeaGreen"],
"228B22": [[34, 139, 34], [120, 61, 34], "forestGreen"],
"2E8B57": [[46, 139, 87], [146, 50, 36], "seaGreen"],
"2F4F4F": [[47, 79, 79], [180, 25, 25], "darkSlateGray"],
"32CD32": [[50, 205, 50], [120, 61, 50], "limeGreen"],
"3CB371": [[60, 179, 113], [147, 50, 47], "mediumSeaGreen"],
"40E0D0": [[64, 224, 208], [174, 72, 56], "turquoise"],
"4169E1": [[65, 105, 225], [225, 73, 57], "royalBlue"],
"4682B4": [[70, 130, 180], [207, 44, 49], "steelBlue"],
"483D8B": [[72, 61, 139], [248, 39, 39], "darkSlateBlue"],
"48D1CC": [[72, 209, 204], [178, 60, 55], "mediumTurquoise"],
"4B0082": [[75, 0, 130], [275, 100, 25], "indigo"],
"556B2F": [[85, 107, 47], [82, 39, 30], "darkOliveGreen"],
"5F9EA0": [[95, 158, 160], [182, 25, 50], "cadetBlue"],
"6495ED": [[100, 149, 237], [219, 79, 66], "cornflowerBlue"],
"66CDAA": [[102, 205, 170], [160, 51, 60], "mediumAquaMarine"],
"696969": [[105, 105, 105], [0, 0, 41], "dimGray"],
"6A5ACD": [[106, 90, 205], [248, 53, 58], "slateBlue"],
"6B8E23": [[107, 142, 35], [80, 60, 35], "oliveDrab"],
"708090": [[112, 128, 144], [210, 13, 50], "slateGray"],
"778899": [[119, 136, 153], [210, 14, 53], "lightSlateGray"],
"7B68EE": [[123, 104, 238], [249, 80, 67], "mediumSlateBlue"],
"7CFC00": [[124, 252, 0], [90, 100, 49], "lawnGreen"],
"7FFF00": [[127, 255, 0], [90, 100, 50], "chartreuse"],
"7FFFD4": [[127, 255, 212], [160, 100, 75], "aquamarine"],
"800000": [[128, 0, 0], [0, 100, 25], "maroon"],
"800080": [[128, 0, 128], [300, 100, 25], "purple"],
"808000": [[128, 128, 0], [60, 100, 25], "olive"],
"808080": [[128, 128, 128], [0, 0, 50], "gray"],
"87CEEB": [[135, 206, 235], [197, 71, 73], "skyBlue"],
"87CEFA": [[135, 206, 250], [203, 92, 75], "lightSkyBlue"],
"8A2BE2": [[138, 43, 226], [271, 76, 53], "blueViolet"],
"8B0000": [[139, 0, 0], [0, 100, 27], "darkRed"],
"8B008B": [[139, 0, 139], [300, 100, 27], "darkMagenta"],
"8B4513": [[139, 69, 19], [25, 76, 31], "saddleBrown"],
"8FBC8F": [[143, 188, 143], [120, 25, 65], "darkSeaGreen"],
"90EE90": [[144, 238, 144], [120, 73, 75], "lightGreen"],
"9370D8": [[147, 112, 219], [260, 60, 65], "mediumPurple"],
"9400D3": [[148, 0, 211], [282, 100, 41], "darkViolet"],
"98FB98": [[152, 251, 152], [120, 93, 79], "paleGreen"],
"9932CC": [[153, 50, 204], [280, 61, 50], "darkOrchid"],
"9ACD32": [[154, 205, 50], [80, 61, 50], "yellowGreen"],
"A0522D": [[160, 82, 45], [19, 56, 40], "sienna"],
"A52A2A": [[165, 42, 42], [0, 59, 41], "brown"],
"A9A9A9": [[169, 169, 169], [0, 0, 66], "darkGray"],
"ADD8E6": [[173, 216, 230], [195, 53, 79], "lightBlue"],
"ADFF2F": [[173, 255, 47], [84, 100, 59], "greenYellow"],
"AFEEEE": [[175, 238, 238], [180, 65, 81], "paleTurquoise"],
"B0C4DE": [[176, 196, 222], [214, 41, 78], "lightSteelBlue"],
"B0E0E6": [[176, 224, 230], [187, 52, 80], "powderBlue"],
"B22222": [[178, 34, 34], [0, 68, 42], "fireBrick"],
"B8860B": [[184, 134, 11], [43, 89, 38], "darkGoldenrod"],
"BA55D3": [[186, 85, 211], [288, 59, 58], "mediumOrchid"],
"BC8F8F": [[188, 143, 143], [0, 25, 65], "rosyBrown"],
"BDB76B": [[189, 183, 107], [56, 38, 58], "darkKhaki"],
"C0C0C0": [[192, 192, 192], [0, 0, 75], "silver"],
"C71585": [[199, 21, 133], [322, 81, 43], "mediumVioletRed"],
"CD5C5C": [[205, 92, 92], [0, 53, 58], "indianRed"],
"CD853F": [[205, 133, 63], [30, 59, 53], "peru"],
"D2691E": [[210, 105, 30], [25, 75, 47], "chocolate"],
"D2B48C": [[210, 180, 140], [34, 44, 69], "tan"],
"D3D3D3": [[211, 211, 211], [0, 0, 83], "lightGrey"],
"D87093": [[219, 112, 147], [340, 60, 65], "paleVioletRed"],
"D8BFD8": [[216, 191, 216], [300, 24, 80], "thistle"],
"DA70D6": [[218, 112, 214], [302, 59, 65], "orchid"],
"DAA520": [[218, 165, 32], [43, 74, 49], "goldenrod"],
"DC143C": [[237, 164, 61], [35, 83, 58], "crimson"],
"DCDCDC": [[220, 220, 220], [0, 0, 86], "gainsboro"],
"DDA0DD": [[221, 160, 221], [300, 47, 75], "plum"],
"DEB887": [[222, 184, 135], [34, 57, 70], "burlyWood"],
"E0FFFF": [[224, 255, 255], [180, 100, 94], "lightCyan"],
"E6E6FA": [[230, 230, 250], [240, 67, 94], "lavender"],
"E9967A": [[233, 150, 122], [15, 72, 70], "darkSalmon"],
"EE82EE": [[238, 130, 238], [300, 76, 72], "violet"],
"EEE8AA": [[238, 232, 170], [55, 67, 80], "paleGoldenrod"],
"F08080": [[240, 128, 128], [0, 79, 72], "lightCoral"],
"F0E68C": [[240, 230, 140], [54, 77, 75], "khaki"],
"F0F8FF": [[240, 248, 255], [208, 100, 97], "aliceBlue"],
"F0FFF0": [[240, 255, 240], [120, 100, 97], "honeyDew"],
"F0FFFF": [[240, 255, 255], [180, 100, 97], "azure"],
"F4A460": [[244, 164, 96], [28, 87, 67], "sandyBrown"],
"F5DEB3": [[245, 222, 179], [39, 77, 83], "wheat"],
"F5F5DC": [[245, 245, 220], [60, 56, 91], "beige"],
"F5F5F5": [[245, 245, 245], [0, 0, 96], "whiteSmoke"],
"F5FFFA": [[245, 255, 250], [150, 100, 98], "mintCream"],
"F8F8FF": [[248, 248, 255], [240, 100, 99], "ghostWhite"],
"FA8072": [[250, 128, 114], [6, 93, 71], "salmon"],
"FAEBD7": [[250, 235, 215], [34, 78, 91], "antiqueWhite"],
"FAF0E6": [[250, 240, 230], [30, 67, 94], "linen"],
"FAFAD2": [[250, 250, 210], [60, 80, 90], "lightGoldenrodYellow"],
"FDF5E6": [[253, 245, 230], [39, 85, 95], "oldLace"],
"FF0000": [[255, 0, 0], [0, 100, 50], "red"],
"FF00FF": [[255, 0, 255], [300, 100, 50], "magenta"],
"FF1493": [[255, 20, 147], [328, 100, 54], "deepPink"],
"FF4500": [[255, 69, 0], [16, 100, 50], "orangeRed"],
"FF6347": [[255, 99, 71], [9, 100, 64], "tomato"],
"FF69B4": [[255, 105, 180], [330, 100, 71], "hotPink"],
"FF7F50": [[255, 127, 80], [16, 100, 66], "coral"],
"FF8C00": [[255, 140, 0], [33, 100, 50], "darkOrange"],
"FFA07A": [[255, 160, 122], [17, 100, 74], "lightSalmon"],
"FFA500": [[255, 165, 0], [39, 100, 50], "orange"],
"FFB6C1": [[255, 182, 193], [351, 100, 86], "lightPink"],
"FFC0CB": [[255, 192, 203], [350, 100, 88], "pink"],
"FFD700": [[255, 215, 0], [51, 100, 50], "gold"],
"FFDAB9": [[255, 218, 185], [28, 100, 86], "peachPuff"],
"FFDEAD": [[255, 222, 173], [36, 100, 84], "navajoWhite"],
"FFE4B5": [[255, 228, 181], [38, 100, 85], "moccasin"],
"FFE4C4": [[255, 228, 196], [33, 100, 88], "bisque"],
"FFE4E1": [[255, 228, 225], [6, 100, 94], "mistyRose"],
"FFEBCD": [[255, 235, 205], [36, 100, 90], "blanchedAlmond"],
"FFEFD5": [[255, 239, 213], [37, 100, 92], "papayaWhip"],
"FFF0F5": [[255, 240, 245], [340, 100, 97], "lavenderBlush"],
"FFF5EE": [[255, 245, 238], [25, 100, 97], "seaShell"],
"FFF8DC": [[255, 248, 220], [48, 100, 93], "cornsilk"],
"FFFACD": [[255, 250, 205], [54, 100, 90], "lemonChiffon"],
"FFFAF0": [[255, 250, 240], [40, 100, 97], "floralWhite"],
"FFFAFA": [[255, 250, 250], [0, 100, 99], "snow"],
"FFFF00": [[255, 255, 0], [60, 100, 50], "yellow"],
"FFFFE0": [[255, 255, 224], [60, 100, 94], "lightYellow"],
"FFFFF0": [[255, 255, 240], [60, 100, 97], "ivory"],
"FFFFFF": [[255, 255, 255], [0, 100, 100], "white"]
};
// Simple Values
WebInspector.Color.Nicknames = {
"aliceblue": "F0F8FF",
"antiquewhite": "FAEBD7",
"aqua": "00FFFF",
"aquamarine": "7FFFD4",
"azure": "F0FFFF",
"beige": "F5F5DC",
"bisque": "FFE4C4",
"black": "000000",
"blanchedalmond": "FFEBCD",
"blue": "0000FF",
"blueviolet": "8A2BE2",
"brown": "A52A2A",
"burlywood": "DEB887",
"cadetblue": "5F9EA0",
"chartreuse": "7FFF00",
"chocolate": "D2691E",
"coral": "FF7F50",
"cornflowerblue": "6495ED",
"cornsilk": "FFF8DC",
"crimson": "DC143C",
"cyan": "00FFFF",
"darkblue": "00008B",
"darkcyan": "008B8B",
"darkgoldenrod": "B8860B",
"darkgray": "A9A9A9",
"darkgreen": "006400",
"darkkhaki": "BDB76B",
"darkmagenta": "8B008B",
"darkolivegreen": "556B2F",
"darkorange": "FF8C00",
"darkorchid": "9932CC",
"darkred": "8B0000",
"darksalmon": "E9967A",
"darkseagreen": "8FBC8F",
"darkslateblue": "483D8B",
"darkslategray": "2F4F4F",
"darkturquoise": "00CED1",
"darkviolet": "9400D3",
"deeppink": "FF1493",
"deepskyblue": "00BFFF",
"dimgray": "696969",
"dodgerblue": "1E90FF",
"firebrick": "B22222",
"floralwhite": "FFFAF0",
"forestgreen": "228B22",
"fuchsia": "FF00FF",
"gainsboro": "DCDCDC",
"ghostwhite": "F8F8FF",
"gold": "FFD700",
"goldenrod": "DAA520",
"gray": "808080",
"green": "008000",
"greenyellow": "ADFF2F",
"honeydew": "F0FFF0",
"hotpink": "FF69B4",
"indianred": "CD5C5C",
"indigo": "4B0082",
"ivory": "FFFFF0",
"khaki": "F0E68C",
"lavender": "E6E6FA",
"lavenderblush": "FFF0F5",
"lawngreen": "7CFC00",
"lemonchiffon": "FFFACD",
"lightblue": "ADD8E6",
"lightcoral": "F08080",
"lightcyan": "E0FFFF",
"lightgoldenrodyellow": "FAFAD2",
"lightgreen": "90EE90",
"lightgrey": "D3D3D3",
"lightpink": "FFB6C1",
"lightsalmon": "FFA07A",
"lightseagreen": "20B2AA",
"lightskyblue": "87CEFA",
"lightslategray": "778899",
"lightsteelblue": "B0C4DE",
"lightyellow": "FFFFE0",
"lime": "00FF00",
"limegreen": "32CD32",
"linen": "FAF0E6",
"magenta": "FF00FF",
"maroon": "800000",
"mediumaquamarine": "66CDAA",
"mediumblue": "0000CD",
"mediumorchid": "BA55D3",
"mediumpurple": "9370D8",
"mediumseagreen": "3CB371",
"mediumslateblue": "7B68EE",
"mediumspringgreen": "00FA9A",
"mediumturquoise": "48D1CC",
"mediumvioletred": "C71585",
"midnightblue": "191970",
"mintcream": "F5FFFA",
"mistyrose": "FFE4E1",
"moccasin": "FFE4B5",
"navajowhite": "FFDEAD",
"navy": "000080",
"oldlace": "FDF5E6",
"olive": "808000",
"olivedrab": "6B8E23",
"orange": "FFA500",
"orangered": "FF4500",
"orchid": "DA70D6",
"palegoldenrod": "EEE8AA",
"palegreen": "98FB98",
"paleturquoise": "AFEEEE",
"palevioletred": "D87093",
"papayawhip": "FFEFD5",
"peachpuff": "FFDAB9",
"peru": "CD853F",
"pink": "FFC0CB",
"plum": "DDA0DD",
"powderblue": "B0E0E6",
"purple": "800080",
"red": "FF0000",
"rosybrown": "BC8F8F",
"royalblue": "4169E1",
"saddlebrown": "8B4513",
"salmon": "FA8072",
"sandybrown": "F4A460",
"seagreen": "2E8B57",
"seashell": "FFF5EE",
"sienna": "A0522D",
"silver": "C0C0C0",
"skyblue": "87CEEB",
"slateblue": "6A5ACD",
"slategray": "708090",
"snow": "FFFAFA",
"springgreen": "00FF7F",
"steelblue": "4682B4",
"tan": "D2B48C",
"teal": "008080",
"thistle": "D8BFD8",
"tomato": "FF6347",
"turquoise": "40E0D0",
"violet": "EE82EE",
"wheat": "F5DEB3",
"white": "FFFFFF",
"whitesmoke": "F5F5F5",
"yellow": "FFFF00",
"yellowgreen": "9ACD32"
};
// Advanced Values [rgba, hsla, nickname]
WebInspector.Color.AdvancedNickNames = {
"transparent": [[0, 0, 0, 0], [0, 0, 0, 0], "transparent"],
"rgba(0,0,0,0)": [[0, 0, 0, 0], [0, 0, 0, 0], "transparent"],
"hsla(0,0,0,0)": [[0, 0, 0, 0], [0, 0, 0, 0], "transparent"],
};

86
node_modules/weinre/web/client/ConsolePanel.js generated vendored Normal file
View File

@ -0,0 +1,86 @@
/*
* Copyright (C) 2009 Joseph Pecoraro
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.ConsolePanel = function()
{
WebInspector.Panel.call(this, "console");
}
WebInspector.ConsolePanel.prototype = {
get toolbarItemLabel()
{
return WebInspector.UIString("Console");
},
show: function()
{
WebInspector.Panel.prototype.show.call(this);
this._previousConsoleState = WebInspector.drawer.state;
WebInspector.drawer.enterPanelMode();
WebInspector.showConsole();
// Move the scope bar to the top of the messages, like the resources filter.
var scopeBar = document.getElementById("console-filter");
var consoleMessages = document.getElementById("console-messages");
scopeBar.parentNode.removeChild(scopeBar);
document.getElementById("console-view").insertBefore(scopeBar, consoleMessages);
// Update styles, and give console-messages a top margin so it doesn't overwrite the scope bar.
scopeBar.addStyleClass("console-filter-top");
scopeBar.removeStyleClass("status-bar-item");
consoleMessages.addStyleClass("console-filter-top");
},
hide: function()
{
WebInspector.Panel.prototype.hide.call(this);
if (this._previousConsoleState === WebInspector.Drawer.State.Hidden)
WebInspector.drawer.immediatelyExitPanelMode();
else
WebInspector.drawer.exitPanelMode();
delete this._previousConsoleState;
// Move the scope bar back to the bottom bar, next to Clear Console.
var scopeBar = document.getElementById("console-filter");
scopeBar.parentNode.removeChild(scopeBar);
document.getElementById("other-drawer-status-bar-items").appendChild(scopeBar);
// Update styles, and remove the top margin on console-messages.
scopeBar.removeStyleClass("console-filter-top");
scopeBar.addStyleClass("status-bar-item");
document.getElementById("console-messages").removeStyleClass("console-filter-top");
}
}
WebInspector.ConsolePanel.prototype.__proto__ = WebInspector.Panel.prototype;

1156
node_modules/weinre/web/client/ConsoleView.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

91
node_modules/weinre/web/client/ContextMenu.js generated vendored Normal file
View File

@ -0,0 +1,91 @@
/*
* Copyright (C) 2009 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.ContextMenu = function() {
this._items = [];
this._handlers = {};
}
WebInspector.ContextMenu.prototype = {
show: function(event)
{
// Remove trailing separator.
while (this._items.length > 0 && !("id" in this._items[this._items.length - 1]))
this._items.splice(this._items.length - 1, 1);
if (this._items.length) {
WebInspector._contextMenu = this;
InspectorFrontendHost.showContextMenu(event, this._items);
}
event.stopPropagation();
},
appendItem: function(label, handler, disabled)
{
var id = this._items.length;
this._items.push({type: "item", id: id, label: label, enabled: !disabled});
this._handlers[id] = handler;
},
appendCheckboxItem: function(label, handler, checked, disabled)
{
var id = this._items.length;
this._items.push({type: "checkbox", id: id, label: label, checked: !!checked, enabled: !disabled});
this._handlers[id] = handler;
},
appendSeparator: function()
{
// No separator dupes allowed.
if (this._items.length === 0)
return;
if (!("id" in this._items[this._items.length - 1]))
return;
this._items.push({type: "separator"});
},
_itemSelected: function(id)
{
if (this._handlers[id])
this._handlers[id].call(this);
}
}
WebInspector.contextMenuItemSelected = function(id)
{
if (WebInspector._contextMenu)
WebInspector._contextMenu._itemSelected(id);
}
WebInspector.contextMenuCleared = function()
{
// FIXME: Unfortunately, contextMenuCleared is invoked between show and item selected
// so we can't delete last menu object from WebInspector. Fix the contract.
}

201
node_modules/weinre/web/client/CookieItemsView.js generated vendored Normal file
View File

@ -0,0 +1,201 @@
/*
* Copyright (C) 2009 Apple Inc. All rights reserved.
* Copyright (C) 2009 Joseph Pecoraro
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.CookieItemsView = function(treeElement, cookieDomain)
{
WebInspector.View.call(this);
this.element.addStyleClass("storage-view");
this._deleteButton = new WebInspector.StatusBarButton(WebInspector.UIString("Delete"), "delete-storage-status-bar-item");
this._deleteButton.visible = false;
this._deleteButton.addEventListener("click", this._deleteButtonClicked.bind(this), false);
this._refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item");
this._refreshButton.addEventListener("click", this._refreshButtonClicked.bind(this), false);
this._treeElement = treeElement;
this._cookieDomain = cookieDomain;
this._emptyMsgElement = document.createElement("div");
this._emptyMsgElement.className = "storage-empty-view";
this._emptyMsgElement.textContent = WebInspector.UIString("This site has no cookies.");
this.element.appendChild(this._emptyMsgElement);
}
WebInspector.CookieItemsView.prototype = {
get statusBarItems()
{
return [this._refreshButton.element, this._deleteButton.element];
},
show: function(parentElement)
{
WebInspector.View.prototype.show.call(this, parentElement);
this._update();
},
hide: function()
{
WebInspector.View.prototype.hide.call(this);
this._deleteButton.visible = false;
},
resize: function()
{
if (this._cookiesTable)
this._cookiesTable.updateWidths();
},
_update: function()
{
WebInspector.Cookies.getCookiesAsync(this._updateWithCookies.bind(this));
},
_updateWithCookies: function(allCookies, isAdvanced)
{
this._cookies = isAdvanced ? this._filterCookiesForDomain(allCookies) : allCookies;
if (!this._cookies.length) {
// Nothing to show.
this._emptyMsgElement.removeStyleClass("hidden");
this._deleteButton.visible = false;
if (this._cookiesTable)
this._cookiesTable.element.addStyleClass("hidden");
return;
}
if (!this._cookiesTable) {
this._cookiesTable = isAdvanced ? new WebInspector.CookiesTable(this._cookieDomain, false, this._deleteCookie.bind(this)) : new WebInspector.SimpleCookiesTable();
this.element.appendChild(this._cookiesTable.element);
}
this._cookiesTable.setCookies(this._cookies);
this._cookiesTable.element.removeStyleClass("hidden");
this._emptyMsgElement.addStyleClass("hidden");
if (isAdvanced) {
this._treeElement.subtitle = String.sprintf(WebInspector.UIString("%d cookies (%s)"), this._cookies.length,
Number.bytesToString(this._totalSize));
this._deleteButton.visible = true;
}
this._cookiesTable.updateWidths();
},
_filterCookiesForDomain: function(allCookies)
{
var cookies = [];
var resourceURLsForDocumentURL = [];
this._totalSize = 0;
function populateResourcesForDocuments(resource)
{
var url = resource.documentURL.asParsedURL();
if (url && url.host == this._cookieDomain)
resourceURLsForDocumentURL.push(resource.url);
}
WebInspector.forAllResources(populateResourcesForDocuments.bind(this));
for (var i = 0; i < allCookies.length; ++i) {
var pushed = false;
var size = allCookies[i].size;
for (var j = 0; j < resourceURLsForDocumentURL.length; ++j) {
var resourceURL = resourceURLsForDocumentURL[j];
if (WebInspector.Cookies.cookieMatchesResourceURL(allCookies[i], resourceURL)) {
this._totalSize += size;
if (!pushed) {
pushed = true;
cookies.push(allCookies[i]);
}
}
}
}
return cookies;
},
_deleteCookie: function(cookie)
{
InspectorBackend.deleteCookie(cookie.name, this._cookieDomain);
this._update();
},
_deleteButtonClicked: function()
{
if (this._cookiesTable.selectedCookie)
this._deleteCookie(this._cookiesTable.selectedCookie);
},
_refreshButtonClicked: function(event)
{
this._update();
}
}
WebInspector.CookieItemsView.prototype.__proto__ = WebInspector.View.prototype;
WebInspector.SimpleCookiesTable = function()
{
this.element = document.createElement("div");
var columns = {};
columns[0] = {};
columns[1] = {};
columns[0].title = WebInspector.UIString("Name");
columns[1].title = WebInspector.UIString("Value");
this._dataGrid = new WebInspector.DataGrid(columns);
this._dataGrid.autoSizeColumns(20, 80);
this.element.appendChild(this._dataGrid.element);
this._dataGrid.updateWidths();
}
WebInspector.SimpleCookiesTable.prototype = {
setCookies: function(cookies)
{
this._dataGrid.removeChildren();
var addedCookies = {};
for (var i = 0; i < cookies.length; ++i) {
if (addedCookies[cookies[i].name])
continue;
addedCookies[cookies[i].name] = true;
var data = {};
data[0] = cookies[i].name;
data[1] = cookies[i].value;
var node = new WebInspector.DataGridNode(data, false);
node.selectable = true;
this._dataGrid.appendChild(node);
}
this._dataGrid.children[0].selected = true;
},
resize: function()
{
if (this._dataGrid)
this._dataGrid.updateWidths();
}
}

210
node_modules/weinre/web/client/CookieParser.js generated vendored Normal file
View File

@ -0,0 +1,210 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
// Ideally, we would rely on platform support for parsing a cookie, since
// this would save us from any potential inconsistency. However, exposing
// platform cookie parsing logic would require quite a bit of additional
// plumbing, and at least some platforms lack support for parsing Cookie,
// which is in a format slightly different from Set-Cookie and is normally
// only required on the server side.
WebInspector.CookieParser = function()
{
}
WebInspector.CookieParser.prototype = {
get cookies()
{
return this._cookies;
},
parseCookie: function(cookieHeader)
{
if (!this._initialize(cookieHeader))
return;
for (var kv = this._extractKeyValue(); kv; kv = this._extractKeyValue()) {
if (kv.key.charAt(0) === "$" && this._lastCookie)
this._lastCookie.addAttribute(kv.key.slice(1), kv.value);
else if (kv.key.toLowerCase() !== "$version" && typeof kv.value === "string")
this._addCookie(kv, WebInspector.Cookie.Type.Request);
this._advanceAndCheckCookieDelimiter();
}
this._flushCookie();
return this._cookies;
},
parseSetCookie: function(setCookieHeader)
{
if (!this._initialize(setCookieHeader))
return;
for (var kv = this._extractKeyValue(); kv; kv = this._extractKeyValue()) {
if (this._lastCookie)
this._lastCookie.addAttribute(kv.key, kv.value);
else
this._addCookie(kv, WebInspector.Cookie.Type.Response);
if (this._advanceAndCheckCookieDelimiter())
this._flushCookie();
}
this._flushCookie();
return this._cookies;
},
_initialize: function(headerValue)
{
this._input = headerValue;
if (typeof headerValue !== "string")
return false;
this._cookies = [];
this._lastCookie = null;
this._originalInputLength = this._input.length;
return true;
},
_flushCookie: function()
{
if (this._lastCookie)
this._lastCookie.size = this._originalInputLength - this._input.length - this._lastCookiePosition;
this._lastCookie = null;
},
_extractKeyValue: function()
{
if (!this._input || !this._input.length)
return null;
// Note: RFCs offer an option for quoted values that may contain commas and semicolons.
// Many browsers/platforms do not support this, however (see http://webkit.org/b/16699
// and http://crbug.com/12361). The logic below matches latest versions of IE, Firefox,
// Chrome and Safari on some old platforms. The latest version of Safari supports quoted
// cookie values, though.
var keyValueMatch = /^[ \t]*([^\s=;]+)[ \t]*(?:=[ \t]*([^;\n]*))?/.exec(this._input);
if (!keyValueMatch) {
console.log("Failed parsing cookie header before: " + this._input);
return null;
}
var result = {
key: keyValueMatch[1],
value: keyValueMatch[2] && keyValueMatch[2].trim(),
position: this._originalInputLength - this._input.length
};
this._input = this._input.slice(keyValueMatch[0].length);
return result;
},
_advanceAndCheckCookieDelimiter: function()
{
var match = /^\s*[\n;]\s*/.exec(this._input);
if (!match)
return false;
this._input = this._input.slice(match[0].length);
return match[0].match("\n") !== null;
},
_addCookie: function(keyValue, type)
{
if (this._lastCookie)
this._lastCookie.size = keyValue.position - this._lastCookiePosition;
// Mozilla bug 169091: Mozilla, IE and Chrome treat single token (w/o "=") as
// specifying a value for a cookie with empty name.
this._lastCookie = keyValue.value ? new WebInspector.Cookie(keyValue.key, keyValue.value, type) :
new WebInspector.Cookie("", keyValue.key, type);
this._lastCookiePosition = keyValue.position;
this._cookies.push(this._lastCookie);
}
};
WebInspector.CookieParser.parseCookie = function(header)
{
return (new WebInspector.CookieParser()).parseCookie(header);
}
WebInspector.CookieParser.parseSetCookie = function(header)
{
return (new WebInspector.CookieParser()).parseSetCookie(header);
}
WebInspector.Cookie = function(name, value, type)
{
this.name = name;
this.value = value;
this.type = type;
this._attributes = {};
}
WebInspector.Cookie.prototype = {
get httpOnly()
{
return "httponly" in this._attributes;
},
get secure()
{
return "secure" in this._attributes;
},
get session()
{
// RFC 2965 suggests using Discard attribute to mark session cookies, but this does not seem to be widely used.
// Check for absence of explicity max-age or expiry date instead.
return !("expries" in this._attributes || "max-age" in this._attributes);
},
get path()
{
return this._attributes.path;
},
get domain()
{
return this._attributes.domain;
},
expires: function(requestDate)
{
return this._attributes.expires ? new Date(this._attributes.expires) :
(this._attributes["max-age"] ? new Date(requestDate.getTime() + 1000 * this._attributes["max-age"]) : null);
},
get attributes()
{
return this._attributes;
},
addAttribute: function(key, value)
{
this._attributes[key.toLowerCase()] = value;
}
}
WebInspector.Cookie.Type = {
Request: 0,
Response: 1
};

205
node_modules/weinre/web/client/CookiesTable.js generated vendored Normal file
View File

@ -0,0 +1,205 @@
/*
* Copyright (C) 2009 Apple Inc. All rights reserved.
* Copyright (C) 2009 Joseph Pecoraro
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.CookiesTable = function(cookieDomain, expandable, deleteCallback)
{
this._cookieDomain = cookieDomain;
var columns = { 0: {}, 1: {}, 2: {}, 3: {}, 4: {}, 5: {}, 6: {}, 7: {} };
columns[0].title = WebInspector.UIString("Name");
columns[0].sortable = true;
columns[0].disclosure = expandable;
columns[0].width = "24%";
columns[1].title = WebInspector.UIString("Value");
columns[1].sortable = true;
columns[1].width = "34%";
columns[2].title = WebInspector.UIString("Domain");
columns[2].sortable = true;
columns[2].width = "7%";
columns[3].title = WebInspector.UIString("Path");
columns[3].sortable = true;
columns[3].width = "7%";
columns[4].title = WebInspector.UIString("Expires");
columns[4].sortable = true;
columns[4].width = "7%";
columns[5].title = WebInspector.UIString("Size");
columns[5].aligned = "right";
columns[5].sortable = true;
columns[5].width = "7%";
columns[6].title = WebInspector.UIString("HTTP");
columns[6].aligned = "centered";
columns[6].sortable = true;
columns[6].width = "7%";
columns[7].title = WebInspector.UIString("Secure");
columns[7].aligned = "centered";
columns[7].sortable = true;
columns[7].width = "7%";
this._dataGrid = new WebInspector.DataGrid(columns, null, deleteCallback ? this._onDeleteFromGrid.bind(this) : null);
this._dataGrid.addEventListener("sorting changed", this._rebuildTable, this);
this.element = this._dataGrid.element;
this._data = [];
this._deleteCallback = deleteCallback;
}
WebInspector.CookiesTable.prototype = {
updateWidths: function()
{
if (this._dataGrid)
this._dataGrid.updateWidths();
},
setCookies: function(cookies)
{
this._data = [{cookies: cookies}];
this._rebuildTable();
},
addCookiesFolder: function(folderName, cookies)
{
this._data.push({cookies: cookies, folderName: folderName});
this._rebuildTable();
},
get selectedCookie()
{
var node = this._dataGrid.selectedNode;
return node ? node.cookie : null;
},
_rebuildTable: function()
{
this._dataGrid.removeChildren();
for (var i = 0; i < this._data.length; ++i) {
var item = this._data[i];
if (item.folderName) {
var groupData = [ item.folderName, "", "", "", "", this._totalSize(item.cookies), "", "" ];
var groupNode = new WebInspector.DataGridNode(groupData);
groupNode.selectable = true;
this._dataGrid.appendChild(groupNode);
groupNode.element.addStyleClass("row-group");
this._populateNode(groupNode, item.cookies);
groupNode.expand();
} else
this._populateNode(this._dataGrid, item.cookies);
}
},
_populateNode: function(parentNode, cookies)
{
var selectedCookie = this.selectedCookie;
parentNode.removeChildren();
if (!cookies)
return;
this._sortCookies(cookies);
for (var i = 0; i < cookies.length; ++i) {
var cookieNode = this._createGridNode(cookies[i]);
parentNode.appendChild(cookieNode);
if (selectedCookie === cookies[i])
cookieNode.selected = true;
}
},
_totalSize: function(cookies)
{
var totalSize = 0;
for (var i = 0; cookies && i < cookies.length; ++i)
totalSize += cookies[i].size;
return totalSize;
},
_sortCookies: function(cookies)
{
var sortDirection = this._dataGrid.sortOrder === "ascending" ? 1 : -1;
function localeCompare(field, cookie1, cookie2)
{
return sortDirection * (cookie1[field] + "").localeCompare(cookie2[field] + "")
}
function numberCompare(field, cookie1, cookie2)
{
return sortDirection * (cookie1[field] - cookie2[field]);
}
function expiresCompare(cookie1, cookie2)
{
if (cookie1.session !== cookie2.session)
return sortDirection * (cookie1.session ? 1 : -1);
if (cookie1.session)
return 0;
return sortDirection * (cookie1.expires - cookie2.expires);
}
var comparator;
switch (parseInt(this._dataGrid.sortColumnIdentifier)) {
case 0: comparator = localeCompare.bind(this, "name"); break;
case 1: comparator = localeCompare.bind(this, "value"); break;
case 2: comparator = localeCompare.bind(this, "domain"); break;
case 3: comparator = localeCompare.bind(this, "path"); break;
case 4: comparator = expiresCompare; break;
case 5: comparator = numberCompare.bind(this, "size"); break;
case 6: comparator = localeCompare.bind(this, "httpOnly"); break;
case 7: comparator = localeCompare.bind(this, "secure"); break;
default: localeCompare.bind(this, "name");
}
cookies.sort(comparator);
},
_createGridNode: function(cookie)
{
var data = {};
data[0] = cookie.name;
data[1] = cookie.value;
data[2] = cookie.domain || "";
data[3] = cookie.path || "";
data[4] = cookie.type === WebInspector.Cookie.Type.Request ? "" :
(cookie.session ? WebInspector.UIString("Session") : new Date(cookie.expires).toGMTString());
data[5] = cookie.size;
var checkmark = "\u2713";
data[6] = (cookie.httpOnly ? checkmark : "");
data[7] = (cookie.secure ? checkmark : "");
var node = new WebInspector.DataGridNode(data);
node.cookie = cookie;
node.selectable = true;
return node;
},
_onDeleteFromGrid: function(node)
{
this._deleteCallback(node.cookie);
}
}

589
node_modules/weinre/web/client/DOMAgent.js generated vendored Normal file
View File

@ -0,0 +1,589 @@
/*
* Copyright (C) 2009, 2010 Google Inc. All rights reserved.
* Copyright (C) 2009 Joseph Pecoraro
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.DOMNode = function(doc, payload) {
this.ownerDocument = doc;
this.id = payload.id;
this.nodeType = payload.nodeType;
this.nodeName = payload.nodeName;
this.localName = payload.localName;
this._nodeValue = payload.nodeValue;
this.textContent = this.nodeValue;
this.attributes = [];
this._attributesMap = {};
if (payload.attributes)
this._setAttributesPayload(payload.attributes);
this._childNodeCount = payload.childNodeCount;
this.children = null;
this.nextSibling = null;
this.prevSibling = null;
this.firstChild = null;
this.lastChild = null;
this.parentNode = null;
if (payload.children)
this._setChildrenPayload(payload.children);
this._computedStyle = null;
this.style = null;
this._matchedCSSRules = [];
this.breakpoints = {};
if (this.nodeType === Node.ELEMENT_NODE) {
// HTML and BODY from internal iframes should not overwrite top-level ones.
if (!this.ownerDocument.documentElement && this.nodeName === "HTML")
this.ownerDocument.documentElement = this;
if (!this.ownerDocument.body && this.nodeName === "BODY")
this.ownerDocument.body = this;
if (payload.documentURL)
this.documentURL = payload.documentURL;
} else if (this.nodeType === Node.DOCUMENT_TYPE_NODE) {
this.publicId = payload.publicId;
this.systemId = payload.systemId;
this.internalSubset = payload.internalSubset;
} else if (this.nodeType === Node.DOCUMENT_NODE) {
this.documentURL = payload.documentURL;
} else if (this.nodeType === Node.ATTRIBUTE_NODE) {
this.name = payload.name;
this.value = payload.value;
}
}
WebInspector.DOMNode.prototype = {
hasAttributes: function()
{
return this.attributes.length > 0;
},
hasChildNodes: function()
{
return this._childNodeCount > 0;
},
get nodeValue() {
return this._nodeValue;
},
set nodeValue(value) {
if (this.nodeType != Node.TEXT_NODE)
return;
this.ownerDocument._domAgent.setTextNodeValueAsync(this, value, function() {});
},
getAttribute: function(name)
{
var attr = this._attributesMap[name];
return attr ? attr.value : undefined;
},
setAttribute: function(name, value)
{
var self = this;
var callback = function()
{
var attr = self._attributesMap[name];
if (attr)
attr.value = value;
else
attr = self._addAttribute(name, value);
};
this.ownerDocument._domAgent.setAttributeAsync(this, name, value, callback);
},
removeAttribute: function(name)
{
var self = this;
var callback = function()
{
delete self._attributesMap[name];
for (var i = 0; i < self.attributes.length; ++i) {
if (self.attributes[i].name == name) {
self.attributes.splice(i, 1);
break;
}
}
};
this.ownerDocument._domAgent.removeAttributeAsync(this, name, callback);
},
path: function()
{
var path = [];
var node = this;
while (node && "index" in node && node.nodeName.length) {
path.push([node.index, node.nodeName]);
node = node.parentNode;
}
path.reverse();
return path.join(",");
},
_setAttributesPayload: function(attrs)
{
this.attributes = [];
this._attributesMap = {};
for (var i = 0; i < attrs.length; i += 2)
this._addAttribute(attrs[i], attrs[i + 1]);
},
_insertChild: function(prev, payload)
{
var node = new WebInspector.DOMNode(this.ownerDocument, payload);
if (!prev) {
if (!this.children) {
// First node
this.children = [ node ];
} else
this.children.unshift(node);
} else
this.children.splice(this.children.indexOf(prev) + 1, 0, node);
this._renumber();
return node;
},
removeChild_: function(node)
{
this.children.splice(this.children.indexOf(node), 1);
node.parentNode = null;
this._renumber();
},
_setChildrenPayload: function(payloads)
{
this.children = [];
for (var i = 0; i < payloads.length; ++i) {
var payload = payloads[i];
var node = new WebInspector.DOMNode(this.ownerDocument, payload);
this.children.push(node);
}
this._renumber();
},
_renumber: function()
{
this._childNodeCount = this.children.length;
if (this._childNodeCount == 0) {
this.firstChild = null;
this.lastChild = null;
return;
}
this.firstChild = this.children[0];
this.lastChild = this.children[this._childNodeCount - 1];
for (var i = 0; i < this._childNodeCount; ++i) {
var child = this.children[i];
child.index = i;
child.nextSibling = i + 1 < this._childNodeCount ? this.children[i + 1] : null;
child.prevSibling = i - 1 >= 0 ? this.children[i - 1] : null;
child.parentNode = this;
}
},
_addAttribute: function(name, value)
{
var attr = {
"name": name,
"value": value,
"_node": this
};
this._attributesMap[name] = attr;
this.attributes.push(attr);
}
}
WebInspector.DOMDocument = function(domAgent, defaultView, payload)
{
WebInspector.DOMNode.call(this, this, payload);
this._listeners = {};
this._domAgent = domAgent;
this.defaultView = defaultView;
}
WebInspector.DOMDocument.prototype = {
addEventListener: function(name, callback)
{
var listeners = this._listeners[name];
if (!listeners) {
listeners = [];
this._listeners[name] = listeners;
}
listeners.push(callback);
},
removeEventListener: function(name, callback)
{
var listeners = this._listeners[name];
if (!listeners)
return;
var index = listeners.indexOf(callback);
if (index != -1)
listeners.splice(index, 1);
},
_fireDomEvent: function(name, event)
{
var listeners = this._listeners[name];
if (!listeners)
return;
for (var i = 0; i < listeners.length; ++i) {
var listener = listeners[i];
listener.call(this, event);
}
}
}
WebInspector.DOMDocument.prototype.__proto__ = WebInspector.DOMNode.prototype;
WebInspector.DOMWindow = function(domAgent)
{
this._domAgent = domAgent;
}
WebInspector.DOMWindow.prototype = {
get document()
{
return this._domAgent.document;
},
get Node()
{
return WebInspector.DOMNode;
},
get Element()
{
return WebInspector.DOMNode;
},
Object: function()
{
}
}
WebInspector.DOMAgent = function() {
this._window = new WebInspector.DOMWindow(this);
this._idToDOMNode = null;
this.document = null;
InspectorBackend.registerDomainDispatcher("DOM", new WebInspector.DOMDispatcher(this));
}
WebInspector.DOMAgent.prototype = {
get domWindow()
{
return this._window;
},
getChildNodesAsync: function(parent, callback)
{
var children = parent.children;
if (children) {
callback(children);
return;
}
function mycallback() {
callback(parent.children);
}
InspectorBackend.getChildNodes(parent.id, mycallback);
},
setAttributeAsync: function(node, name, value, callback)
{
var mycallback = this._didApplyDomChange.bind(this, node, callback);
InspectorBackend.setAttribute(node.id, name, value, mycallback);
},
removeAttributeAsync: function(node, name, callback)
{
var mycallback = this._didApplyDomChange.bind(this, node, callback);
InspectorBackend.removeAttribute(node.id, name, mycallback);
},
setTextNodeValueAsync: function(node, text, callback)
{
var mycallback = this._didApplyDomChange.bind(this, node, callback);
InspectorBackend.setTextNodeValue(node.id, text, mycallback);
},
_didApplyDomChange: function(node, callback, success)
{
if (!success)
return;
callback();
// TODO(pfeldman): Fix this hack.
var elem = WebInspector.panels.elements.treeOutline.findTreeElement(node);
if (elem)
elem.updateTitle();
},
_attributesUpdated: function(nodeId, attrsArray)
{
var node = this._idToDOMNode[nodeId];
node._setAttributesPayload(attrsArray);
var event = {target: node};
this.document._fireDomEvent("DOMAttrModified", event);
},
_characterDataModified: function(nodeId, newValue)
{
var node = this._idToDOMNode[nodeId];
node._nodeValue = newValue;
node.textContent = newValue;
var event = { target : node };
this.document._fireDomEvent("DOMCharacterDataModified", event);
},
nodeForId: function(nodeId)
{
return this._idToDOMNode[nodeId];
},
_setDocument: function(payload)
{
this._idToDOMNode = {};
if (payload && "id" in payload) {
this.document = new WebInspector.DOMDocument(this, this._window, payload);
this._idToDOMNode[payload.id] = this.document;
this._bindNodes(this.document.children);
WebInspector.breakpointManager.restoreDOMBreakpoints();
} else
this.document = null;
WebInspector.panels.elements.setDocument(this.document);
},
_setDetachedRoot: function(payload)
{
var root = new WebInspector.DOMNode(this.document, payload);
this._idToDOMNode[payload.id] = root;
},
_setChildNodes: function(parentId, payloads)
{
var parent = this._idToDOMNode[parentId];
parent._setChildrenPayload(payloads);
this._bindNodes(parent.children);
},
_bindNodes: function(children)
{
for (var i = 0; i < children.length; ++i) {
var child = children[i];
this._idToDOMNode[child.id] = child;
if (child.children)
this._bindNodes(child.children);
}
},
_childNodeCountUpdated: function(nodeId, newValue)
{
var node = this._idToDOMNode[nodeId];
node._childNodeCount = newValue;
var outline = WebInspector.panels.elements.treeOutline;
var treeElement = outline.findTreeElement(node);
if (treeElement)
treeElement.hasChildren = newValue;
},
_childNodeInserted: function(parentId, prevId, payload)
{
var parent = this._idToDOMNode[parentId];
var prev = this._idToDOMNode[prevId];
var node = parent._insertChild(prev, payload);
this._idToDOMNode[node.id] = node;
var event = { target : node, relatedNode : parent };
this.document._fireDomEvent("DOMNodeInserted", event);
},
_childNodeRemoved: function(parentId, nodeId)
{
var parent = this._idToDOMNode[parentId];
var node = this._idToDOMNode[nodeId];
parent.removeChild_(node);
var event = { target : node, relatedNode : parent };
this.document._fireDomEvent("DOMNodeRemoved", event);
delete this._idToDOMNode[nodeId];
this._removeBreakpoints(node);
},
_removeBreakpoints: function(node)
{
for (var type in node.breakpoints)
node.breakpoints[type].remove();
if (!node.children)
return;
for (var i = 0; i < node.children.length; ++i)
this._removeBreakpoints(node.children[i]);
}
}
WebInspector.DOMDispatcher = function(domAgent)
{
this._domAgent = domAgent;
}
WebInspector.DOMDispatcher.prototype = {
setDocument: function(payload)
{
this._domAgent._setDocument(payload);
},
attributesUpdated: function(nodeId, attrsArray)
{
this._domAgent._attributesUpdated(nodeId, attrsArray);
},
characterDataModified: function(nodeId, newValue)
{
this._domAgent._characterDataModified(nodeId, newValue);
},
setChildNodes: function(parentId, payloads)
{
this._domAgent._setChildNodes(parentId, payloads);
},
setDetachedRoot: function(payload)
{
this._domAgent._setDetachedRoot(payload);
},
childNodeCountUpdated: function(nodeId, newValue)
{
this._domAgent._childNodeCountUpdated(nodeId, newValue);
},
childNodeInserted: function(parentId, prevId, payload)
{
this._domAgent._childNodeInserted(parentId, prevId, payload);
},
childNodeRemoved: function(parentId, nodeId)
{
this._domAgent._childNodeRemoved(parentId, nodeId);
}
}
WebInspector.ApplicationCacheDispatcher = function()
{
}
WebInspector.ApplicationCacheDispatcher.getApplicationCachesAsync = function(callback)
{
function mycallback(applicationCaches)
{
// FIXME: Currently, this list only returns a single application cache.
if (applicationCaches)
callback(applicationCaches);
}
InspectorBackend.getApplicationCaches(mycallback);
}
WebInspector.ApplicationCacheDispatcher.prototype = {
updateApplicationCacheStatus: function(status)
{
WebInspector.panels.resources.updateApplicationCacheStatus(status);
},
updateNetworkState: function(isNowOnline)
{
WebInspector.panels.resources.updateNetworkState(isNowOnline);
}
}
InspectorBackend.registerDomainDispatcher("ApplicationCache", new WebInspector.ApplicationCacheDispatcher());
WebInspector.Cookies = {}
WebInspector.Cookies.getCookiesAsync = function(callback)
{
function mycallback(cookies, cookiesString)
{
if (cookiesString)
callback(WebInspector.Cookies.buildCookiesFromString(cookiesString), false);
else
callback(cookies, true);
}
InspectorBackend.getCookies(mycallback);
}
WebInspector.Cookies.buildCookiesFromString = function(rawCookieString)
{
var rawCookies = rawCookieString.split(/;\s*/);
var cookies = [];
if (!(/^\s*$/.test(rawCookieString))) {
for (var i = 0; i < rawCookies.length; ++i) {
var cookie = rawCookies[i];
var delimIndex = cookie.indexOf("=");
var name = cookie.substring(0, delimIndex);
var value = cookie.substring(delimIndex + 1);
var size = name.length + value.length;
cookies.push({ name: name, value: value, size: size });
}
}
return cookies;
}
WebInspector.Cookies.cookieMatchesResourceURL = function(cookie, resourceURL)
{
var url = resourceURL.asParsedURL();
if (!url || !this.cookieDomainMatchesResourceDomain(cookie.domain, url.host))
return false;
return (url.path.indexOf(cookie.path) === 0
&& (!cookie.port || url.port == cookie.port)
&& (!cookie.secure || url.scheme === "https"));
}
WebInspector.Cookies.cookieDomainMatchesResourceDomain = function(cookieDomain, resourceDomain)
{
if (cookieDomain.charAt(0) !== '.')
return resourceDomain === cookieDomain;
return !!resourceDomain.match(new RegExp("^([^\\.]+\\.)?" + cookieDomain.substring(1).escapeForRegExp() + "$"), "i");
}
WebInspector.EventListeners = {}
WebInspector.EventListeners.getEventListenersForNodeAsync = function(node, callback)
{
if (!node)
return;
InspectorBackend.getEventListenersForNode(node.id, callback);
}

97
node_modules/weinre/web/client/DOMStorage.js generated vendored Normal file
View File

@ -0,0 +1,97 @@
/*
* Copyright (C) 2008 Nokia Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.DOMStorage = function(id, domain, isLocalStorage)
{
this._id = id;
this._domain = domain;
this._isLocalStorage = isLocalStorage;
}
WebInspector.DOMStorage.prototype = {
get id()
{
return this._id;
},
get domain()
{
return this._domain;
},
get isLocalStorage()
{
return this._isLocalStorage;
},
getEntries: function(callback)
{
InspectorBackend.getDOMStorageEntries(this._id, callback);
},
setItem: function(key, value, callback)
{
InspectorBackend.setDOMStorageItem(this._id, key, value, callback);
},
removeItem: function(key, callback)
{
InspectorBackend.removeDOMStorageItem(this._id, key, callback);
}
}
WebInspector.DOMStorageDispatcher = function()
{
}
WebInspector.DOMStorageDispatcher.prototype = {
addDOMStorage: function(payload)
{
if (!WebInspector.panels.resources)
return;
var domStorage = new WebInspector.DOMStorage(
payload.id,
payload.host,
payload.isLocalStorage);
WebInspector.panels.resources.addDOMStorage(domStorage);
},
selectDOMStorage: function(o)
{
WebInspector.showPanel("resources");
WebInspector.panels.resources.selectDOMStorage(o);
},
updateDOMStorage: function(storageId)
{
WebInspector.panels.resources.updateDOMStorage(storageId);
}
}
InspectorBackend.registerDomainDispatcher("DOMStorage", new WebInspector.DOMStorageDispatcher());

157
node_modules/weinre/web/client/DOMStorageItemsView.js generated vendored Normal file
View File

@ -0,0 +1,157 @@
/*
* Copyright (C) 2008 Nokia Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.DOMStorageItemsView = function(domStorage)
{
WebInspector.View.call(this);
this.domStorage = domStorage;
this.element.addStyleClass("storage-view");
this.element.addStyleClass("table");
this.deleteButton = new WebInspector.StatusBarButton(WebInspector.UIString("Delete"), "delete-storage-status-bar-item");
this.deleteButton.visible = false;
this.deleteButton.addEventListener("click", this._deleteButtonClicked.bind(this), false);
this.refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item");
this.refreshButton.addEventListener("click", this._refreshButtonClicked.bind(this), false);
}
WebInspector.DOMStorageItemsView.prototype = {
get statusBarItems()
{
return [this.refreshButton.element, this.deleteButton.element];
},
show: function(parentElement)
{
WebInspector.View.prototype.show.call(this, parentElement);
this.update();
},
hide: function()
{
WebInspector.View.prototype.hide.call(this);
this.deleteButton.visible = false;
},
update: function()
{
this.element.removeChildren();
var callback = this._showDOMStorageEntries.bind(this);
this.domStorage.getEntries(callback);
},
_showDOMStorageEntries: function(entries)
{
this._dataGrid = this._dataGridForDOMStorageEntries(entries);
this.element.appendChild(this._dataGrid.element);
this._dataGrid.autoSizeColumns(10);
this.deleteButton.visible = true;
},
resize: function()
{
if (this._dataGrid)
this._dataGrid.updateWidths();
},
_dataGridForDOMStorageEntries: function(entries)
{
var columns = {};
columns[0] = {};
columns[1] = {};
columns[0].title = WebInspector.UIString("Key");
columns[1].title = WebInspector.UIString("Value");
var nodes = [];
var keys = [];
var length = entries.length;
for (var i = 0; i < entries.length; i++) {
var data = {};
var key = entries[i][0];
data[0] = key;
var value = entries[i][1];
data[1] = value;
var node = new WebInspector.DataGridNode(data, false);
node.selectable = true;
nodes.push(node);
keys.push(key);
}
var dataGrid = new WebInspector.DataGrid(columns, this._editingCallback.bind(this), this._deleteCallback.bind(this));
var length = nodes.length;
for (var i = 0; i < length; ++i)
dataGrid.appendChild(nodes[i]);
dataGrid.addCreationNode(false);
if (length > 0)
nodes[0].selected = true;
return dataGrid;
},
_deleteButtonClicked: function(event)
{
if (!this._dataGrid || !this._dataGrid.selectedNode)
return;
this._deleteCallback(this._dataGrid.selectedNode);
},
_refreshButtonClicked: function(event)
{
this.update();
},
_editingCallback: function(editingNode, columnIdentifier, oldText, newText)
{
var domStorage = this.domStorage;
if (columnIdentifier === 0) {
if (oldText)
domStorage.removeItem(oldText);
domStorage.setItem(newText, editingNode.data[1]);
} else {
domStorage.setItem(editingNode.data[0], newText);
}
this.update();
},
_deleteCallback: function(node)
{
if (!node || node.isCreationNode)
return;
if (this.domStorage)
this.domStorage.removeItem(node.data[0]);
this.update();
}
}
WebInspector.DOMStorageItemsView.prototype.__proto__ = WebInspector.View.prototype;

79
node_modules/weinre/web/client/DOMSyntaxHighlighter.js generated vendored Normal file
View File

@ -0,0 +1,79 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.DOMSyntaxHighlighter = function(mimeType)
{
this._tokenizer = WebInspector.SourceTokenizer.Registry.getInstance().getTokenizer(mimeType);
}
WebInspector.DOMSyntaxHighlighter.prototype = {
createSpan: function(content, className)
{
var span = document.createElement("span");
span.className = "webkit-" + className;
span.appendChild(document.createTextNode(content));
return span;
},
syntaxHighlightNode: function(node)
{
this._tokenizer.condition = this._tokenizer.initialCondition;
var lines = node.textContent.split("\n");
node.removeChildren();
for (var i = lines[0].length ? 0 : 1; i < lines.length; ++i) {
var line = lines[i];
var plainTextStart = 0;
this._tokenizer.line = line;
var column = 0;
do {
var newColumn = this._tokenizer.nextToken(column);
var tokenType = this._tokenizer.tokenType;
if (tokenType) {
if (column > plainTextStart) {
var plainText = line.substring(plainTextStart, column);
node.appendChild(document.createTextNode(plainText));
}
var token = line.substring(column, newColumn);
node.appendChild(this.createSpan(token, tokenType));
plainTextStart = newColumn;
}
column = newColumn;
} while (column < line.length)
if (plainTextStart < line.length) {
var plainText = line.substring(plainTextStart, line.length);
node.appendChild(document.createTextNode(plainText));
}
if (i < lines.length - 1)
node.appendChild(document.createElement("br"));
}
}
}

1478
node_modules/weinre/web/client/DataGrid.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

147
node_modules/weinre/web/client/Database.js generated vendored Normal file
View File

@ -0,0 +1,147 @@
/*
* Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.Database = function(id, domain, name, version)
{
this._id = id;
this._domain = domain;
this._name = name;
this._version = version;
}
WebInspector.Database.prototype = {
get id()
{
return this._id;
},
get name()
{
return this._name;
},
set name(x)
{
this._name = x;
},
get version()
{
return this._version;
},
set version(x)
{
this._version = x;
},
get domain()
{
return this._domain;
},
set domain(x)
{
this._domain = x;
},
get displayDomain()
{
return WebInspector.Resource.prototype.__lookupGetter__("displayDomain").call(this);
},
getTableNames: function(callback)
{
function sortingCallback(names)
{
callback(names.sort());
}
InspectorBackend.getDatabaseTableNames(this._id, sortingCallback);
},
executeSql: function(query, onSuccess, onError)
{
function callback(success, transactionId)
{
if (!success) {
onError(WebInspector.UIString("Database not found."));
return;
}
WebInspector.DatabaseDispatcher._callbacks[transactionId] = {"onSuccess": onSuccess, "onError": onError};
}
InspectorBackend.executeSQL(this._id, query, callback);
}
}
WebInspector.DatabaseDispatcher = function()
{
}
WebInspector.DatabaseDispatcher._callbacks = {};
WebInspector.DatabaseDispatcher.prototype = {
addDatabase: function(payload)
{
var database = new WebInspector.Database(
payload.id,
payload.domain,
payload.name,
payload.version);
WebInspector.panels.resources.addDatabase(database);
},
selectDatabase: function(o)
{
WebInspector.showPanel("resources");
WebInspector.panels.resources.selectDatabase(o);
},
sqlTransactionSucceeded: function(transactionId, columnNames, values)
{
if (!WebInspector.DatabaseDispatcher._callbacks[transactionId])
return;
var callback = WebInspector.DatabaseDispatcher._callbacks[transactionId].onSuccess;
delete WebInspector.DatabaseDispatcher._callbacks[transactionId];
if (callback)
callback(columnNames, values);
},
sqlTransactionFailed: function(transactionId, errorObj)
{
if (!WebInspector.DatabaseDispatcher._callbacks[transactionId])
return;
var callback = WebInspector.DatabaseDispatcher._callbacks[transactionId].onError;
delete WebInspector.DatabaseDispatcher._callbacks[transactionId];
if (callback)
callback(errorObj);
}
}
InspectorBackend.registerDomainDispatcher("Database", new WebInspector.DatabaseDispatcher());

196
node_modules/weinre/web/client/DatabaseQueryView.js generated vendored Normal file
View File

@ -0,0 +1,196 @@
/*
* Copyright (C) 2008 Apple Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.DatabaseQueryView = function(database)
{
WebInspector.View.call(this);
this.database = database;
this.element.addStyleClass("storage-view");
this.element.addStyleClass("query");
this.element.addStyleClass("monospace");
this.element.tabIndex = 0;
this.element.addEventListener("selectstart", this._selectStart.bind(this), false);
this.promptElement = document.createElement("div");
this.promptElement.className = "database-query-prompt";
this.promptElement.appendChild(document.createElement("br"));
this.promptElement.addEventListener("keydown", this._promptKeyDown.bind(this), true);
this.element.appendChild(this.promptElement);
this.prompt = new WebInspector.TextPrompt(this.promptElement, this.completions.bind(this), " ");
}
WebInspector.DatabaseQueryView.prototype = {
show: function(parentElement)
{
WebInspector.View.prototype.show.call(this, parentElement);
function moveBackIfOutside()
{
if (!this.prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed)
this.prompt.moveCaretToEndOfPrompt();
}
setTimeout(moveBackIfOutside.bind(this), 0);
},
completions: function(wordRange, bestMatchOnly, completionsReadyCallback)
{
var prefix = wordRange.toString().toLowerCase();
if (!prefix.length)
return;
var results = [];
function accumulateMatches(textArray)
{
if (bestMatchOnly && results.length)
return;
for (var i = 0; i < textArray.length; ++i) {
var text = textArray[i].toLowerCase();
if (text.length < prefix.length)
continue;
if (text.indexOf(prefix) !== 0)
continue;
results.push(textArray[i]);
if (bestMatchOnly)
return;
}
}
function tableNamesCallback(tableNames)
{
accumulateMatches(tableNames.map(function(name) { return name + " " }));
accumulateMatches(["SELECT ", "FROM ", "WHERE ", "LIMIT ", "DELETE FROM ", "CREATE ", "DROP ", "TABLE ", "INDEX ", "UPDATE ", "INSERT INTO ", "VALUES ("]);
completionsReadyCallback(results);
}
this.database.getTableNames(tableNamesCallback);
},
_promptKeyDown: function(event)
{
if (isEnterKey(event)) {
this._enterKeyPressed(event);
return;
}
},
_selectStart: function(event)
{
if (this._selectionTimeout)
clearTimeout(this._selectionTimeout);
this.prompt.clearAutoComplete();
function moveBackIfOutside()
{
delete this._selectionTimeout;
if (!this.prompt.isCaretInsidePrompt() && window.getSelection().isCollapsed)
this.prompt.moveCaretToEndOfPrompt();
this.prompt.autoCompleteSoon();
}
this._selectionTimeout = setTimeout(moveBackIfOutside.bind(this), 100);
},
_enterKeyPressed: function(event)
{
event.preventDefault();
event.stopPropagation();
this.prompt.clearAutoComplete(true);
var query = this.prompt.text;
if (!query.length)
return;
this.prompt.history.push(query);
this.prompt.historyOffset = 0;
this.prompt.text = "";
this.database.executeSql(query, this._queryFinished.bind(this, query), this._queryError.bind(this, query));
},
_queryFinished: function(query, columnNames, values)
{
var dataGrid = WebInspector.panels.resources.dataGridForResult(columnNames, values);
var trimmedQuery = query.trim();
if (dataGrid) {
dataGrid.element.addStyleClass("inline");
this._appendQueryResult(trimmedQuery, dataGrid.element);
dataGrid.autoSizeColumns(5);
}
if (trimmedQuery.match(/^create /i) || trimmedQuery.match(/^drop table /i))
WebInspector.panels.resources.updateDatabaseTables(this.database);
},
_queryError: function(query, error)
{
if (error.message)
var message = error.message;
else if (error.code == 2)
var message = WebInspector.UIString("Database no longer has expected version.");
else
var message = WebInspector.UIString("An unexpected error %s occurred.", error.code);
this._appendQueryResult(query, message, "error");
},
_appendQueryResult: function(query, result, resultClassName)
{
var element = document.createElement("div");
element.className = "database-user-query";
var commandTextElement = document.createElement("span");
commandTextElement.className = "database-query-text";
commandTextElement.textContent = query;
element.appendChild(commandTextElement);
var resultElement = document.createElement("div");
resultElement.className = "database-query-result";
if (resultClassName)
resultElement.addStyleClass(resultClassName);
if (typeof result === "string" || result instanceof String)
resultElement.textContent = result;
else if (result && result.nodeName)
resultElement.appendChild(result);
if (resultElement.childNodes.length)
element.appendChild(resultElement);
this.element.insertBefore(element, this.promptElement);
this.promptElement.scrollIntoView(false);
}
}
WebInspector.DatabaseQueryView.prototype.__proto__ = WebInspector.View.prototype;

90
node_modules/weinre/web/client/DatabaseTableView.js generated vendored Normal file
View File

@ -0,0 +1,90 @@
/*
* Copyright (C) 2008 Apple Inc. All Rights Reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.DatabaseTableView = function(database, tableName)
{
WebInspector.View.call(this);
this.database = database;
this.tableName = tableName;
this.element.addStyleClass("storage-view");
this.element.addStyleClass("table");
this.refreshButton = new WebInspector.StatusBarButton(WebInspector.UIString("Refresh"), "refresh-storage-status-bar-item");
this.refreshButton.addEventListener("click", this._refreshButtonClicked.bind(this), false);
}
WebInspector.DatabaseTableView.prototype = {
show: function(parentElement)
{
WebInspector.View.prototype.show.call(this, parentElement);
this.update();
},
get statusBarItems()
{
return [this.refreshButton.element];
},
update: function()
{
this.database.executeSql("SELECT * FROM " + this.tableName, this._queryFinished.bind(this), this._queryError.bind(this));
},
_queryFinished: function(columnNames, values)
{
this.element.removeChildren();
var dataGrid = WebInspector.panels.resources.dataGridForResult(columnNames, values);
if (!dataGrid) {
var emptyMsgElement = document.createElement("div");
emptyMsgElement.className = "storage-empty-view";
emptyMsgElement.textContent = WebInspector.UIString("The “%s”\ntable is empty.", this.tableName);
this.element.appendChild(emptyMsgElement);
return;
}
this.element.appendChild(dataGrid.element);
dataGrid.autoSizeColumns(5);
},
_queryError: function(error)
{
this.element.removeChildren();
var errorMsgElement = document.createElement("div");
errorMsgElement.className = "storage-table-error";
errorMsgElement.textContent = WebInspector.UIString("An error occurred trying to\nread the “%s” table.", this.tableName);
this.element.appendChild(errorMsgElement);
},
_refreshButtonClicked: function(event)
{
this.update();
}
}
WebInspector.DatabaseTableView.prototype.__proto__ = WebInspector.View.prototype;

380
node_modules/weinre/web/client/DebuggerModel.js generated vendored Normal file
View File

@ -0,0 +1,380 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.DebuggerModel = function()
{
this._paused = false;
this._callFrames = [];
this._breakpoints = {};
this._scripts = {};
InspectorBackend.registerDomainDispatcher("Debugger", new WebInspector.DebuggerDispatcher(this));
}
WebInspector.DebuggerModel.Events = {
DebuggerPaused: "debugger-paused",
DebuggerResumed: "debugger-resumed",
ParsedScriptSource: "parsed-script-source",
FailedToParseScriptSource: "failed-to-parse-script-source",
ScriptSourceChanged: "script-source-changed",
BreakpointAdded: "breakpoint-added",
BreakpointRemoved: "breakpoint-removed",
BreakpointResolved: "breakpoint-resolved"
}
WebInspector.DebuggerModel.prototype = {
enableDebugger: function()
{
InspectorBackend.enableDebugger();
if (this._breakpointsPushedToBackend)
return;
var breakpoints = WebInspector.settings.breakpoints;
for (var i = 0; i < breakpoints.length; ++i) {
var breakpoint = breakpoints[i];
if (typeof breakpoint.url !== "string" || typeof breakpoint.lineNumber !== "number" || typeof breakpoint.columnNumber !== "number" ||
typeof breakpoint.condition !== "string" || typeof breakpoint.enabled !== "boolean")
continue;
this.setBreakpoint(breakpoint.url, breakpoint.lineNumber, breakpoint.columnNumber, breakpoint.condition, breakpoint.enabled);
}
this._breakpointsPushedToBackend = true;
},
disableDebugger: function()
{
InspectorBackend.disableDebugger();
},
continueToLocation: function(sourceID, lineNumber, columnNumber)
{
InspectorBackend.continueToLocation(sourceID, lineNumber, columnNumber);
},
setBreakpoint: function(url, lineNumber, columnNumber, condition, enabled)
{
function didSetBreakpoint(breakpointsPushedToBackend, breakpointId, locations)
{
if (!breakpointId)
return;
var breakpoint = new WebInspector.Breakpoint(breakpointId, url, "", lineNumber, columnNumber, condition, enabled);
breakpoint.locations = locations;
this._breakpoints[breakpointId] = breakpoint;
if (breakpointsPushedToBackend)
this._saveBreakpoints();
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointAdded, breakpoint);
}
InspectorBackend.setJavaScriptBreakpoint(url, lineNumber, columnNumber, condition, enabled, didSetBreakpoint.bind(this, this._breakpointsPushedToBackend));
},
setBreakpointBySourceId: function(sourceID, lineNumber, columnNumber, condition, enabled)
{
function didSetBreakpoint(breakpointId, actualLineNumber, actualColumnNumber)
{
if (!breakpointId)
return;
var breakpoint = new WebInspector.Breakpoint(breakpointId, "", sourceID, lineNumber, columnNumber, condition, enabled);
breakpoint.addLocation(sourceID, actualLineNumber, actualColumnNumber);
this._breakpoints[breakpointId] = breakpoint;
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointAdded, breakpoint);
}
InspectorBackend.setJavaScriptBreakpointBySourceId(sourceID, lineNumber, columnNumber, condition, enabled, didSetBreakpoint.bind(this));
},
removeBreakpoint: function(breakpointId)
{
InspectorBackend.removeJavaScriptBreakpoint(breakpointId);
var breakpoint = this._breakpoints[breakpointId];
delete this._breakpoints[breakpointId];
this._saveBreakpoints();
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointRemoved, breakpointId);
},
updateBreakpoint: function(breakpointId, condition, enabled)
{
var breakpoint = this._breakpoints[breakpointId];
this.removeBreakpoint(breakpointId);
if (breakpoint.url)
this.setBreakpoint(breakpoint.url, breakpoint.lineNumber, breakpoint.columnNumber, condition, enabled);
else
this.setBreakpointBySourceId(breakpoint.sourceID, breakpoint.lineNumber, breakpoint.columnNumber, condition, enabled);
},
_breakpointResolved: function(breakpointId, sourceID, lineNumber, columnNumber)
{
var breakpoint = this._breakpoints[breakpointId];
if (!breakpoint)
return;
breakpoint.addLocation(sourceID, lineNumber, columnNumber);
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.BreakpointResolved, breakpoint);
},
_saveBreakpoints: function()
{
var serializedBreakpoints = [];
for (var id in this._breakpoints) {
var breakpoint = this._breakpoints[id];
if (!breakpoint.url)
continue;
var serializedBreakpoint = {};
serializedBreakpoint.url = breakpoint.url;
serializedBreakpoint.lineNumber = breakpoint.lineNumber;
serializedBreakpoint.columnNumber = breakpoint.columnNumber;
serializedBreakpoint.condition = breakpoint.condition;
serializedBreakpoint.enabled = breakpoint.enabled;
serializedBreakpoints.push(serializedBreakpoint);
}
WebInspector.settings.breakpoints = serializedBreakpoints;
},
get breakpoints()
{
return this._breakpoints;
},
breakpointForId: function(breakpointId)
{
return this._breakpoints[breakpointId];
},
queryBreakpoints: function(filter)
{
var breakpoints = [];
for (var id in this._breakpoints) {
var breakpoint = this._breakpoints[id];
if (filter(breakpoint))
breakpoints.push(breakpoint);
}
return breakpoints;
},
reset: function()
{
this._paused = false;
this._callFrames = [];
for (var id in this._breakpoints) {
var breakpoint = this._breakpoints[id];
if (!breakpoint.url)
this.removeBreakpoint(id);
else
breakpoint.locations = [];
}
this._scripts = {};
},
scriptForSourceID: function(sourceID)
{
return this._scripts[sourceID];
},
scriptsForURL: function(url)
{
return this.queryScripts(function(s) { return s.sourceURL === url; });
},
queryScripts: function(filter)
{
var scripts = [];
for (var sourceID in this._scripts) {
var script = this._scripts[sourceID];
if (filter(script))
scripts.push(script);
}
return scripts;
},
editScriptSource: function(sourceID, scriptSource)
{
function didEditScriptSource(success, newBodyOrErrorMessage, callFrames)
{
if (success) {
if (callFrames && callFrames.length)
this._callFrames = callFrames;
this._updateScriptSource(sourceID, newBodyOrErrorMessage);
} else
WebInspector.log(newBodyOrErrorMessage, WebInspector.ConsoleMessage.MessageLevel.Warning);
}
InspectorBackend.editScriptSource(sourceID, scriptSource, didEditScriptSource.bind(this));
},
_updateScriptSource: function(sourceID, scriptSource)
{
var script = this._scripts[sourceID];
var oldSource = script.source;
script.source = scriptSource;
// Clear and re-create breakpoints according to text diff.
var diff = Array.diff(oldSource.split("\n"), script.source.split("\n"));
for (var id in this._breakpoints) {
var breakpoint = this._breakpoints[id];
if (breakpoint.url) {
if (breakpoint.url !== script.sourceURL)
continue;
} else {
if (breakpoint.sourceID !== sourceID)
continue;
}
this.removeBreakpoint(breakpoint.id);
var lineNumber = breakpoint.lineNumber;
var newLineNumber = diff.left[lineNumber].row;
if (newLineNumber === undefined) {
for (var i = lineNumber - 1; i >= 0; --i) {
if (diff.left[i].row === undefined)
continue;
var shiftedLineNumber = diff.left[i].row + lineNumber - i;
if (shiftedLineNumber < diff.right.length) {
var originalLineNumber = diff.right[shiftedLineNumber].row;
if (originalLineNumber === lineNumber || originalLineNumber === undefined)
newLineNumber = shiftedLineNumber;
}
break;
}
}
if (newLineNumber === undefined)
continue;
if (breakpoint.url)
this.setBreakpoint(breakpoint.url, newLineNumber, breakpoint.columnNumber, breakpoint.condition, breakpoint.enabled);
else
this.setBreakpointBySourceId(sourceID, newLineNumber, breakpoint.columnNumber, breakpoint.condition, breakpoint.enabled);
}
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ScriptSourceChanged, { sourceID: sourceID, oldSource: oldSource });
},
get callFrames()
{
return this._callFrames;
},
_pausedScript: function(details)
{
this._paused = true;
this._callFrames = details.callFrames;
details.breakpoint = this._breakpointForCallFrame(details.callFrames[0]);
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerPaused, details);
},
_resumedScript: function()
{
this._paused = false;
this._callFrames = [];
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.DebuggerResumed);
},
_breakpointForCallFrame: function(callFrame)
{
function match(location)
{
if (location.sourceID != callFrame.sourceID)
return false;
return location.lineNumber === callFrame.line && location.columnNumber === callFrame.column;
}
for (var id in this._breakpoints) {
var breakpoint = this._breakpoints[id];
for (var i = 0; i < breakpoint.locations.length; ++i) {
if (match(breakpoint.locations[i]))
return breakpoint;
}
}
},
_parsedScriptSource: function(sourceID, sourceURL, lineOffset, columnOffset, length, scriptWorldType)
{
var script = new WebInspector.Script(sourceID, sourceURL, "", lineOffset, columnOffset, length, undefined, undefined, scriptWorldType);
this._scripts[sourceID] = script;
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.ParsedScriptSource, script);
},
_failedToParseScriptSource: function(sourceURL, source, startingLine, errorLine, errorMessage)
{
var script = new WebInspector.Script(null, sourceURL, source, startingLine, errorLine, errorMessage, undefined);
this.dispatchEventToListeners(WebInspector.DebuggerModel.Events.FailedToParseScriptSource, script);
}
}
WebInspector.DebuggerModel.prototype.__proto__ = WebInspector.Object.prototype;
WebInspector.DebuggerEventTypes = {
JavaScriptPause: 0,
JavaScriptBreakpoint: 1,
NativeBreakpoint: 2
};
WebInspector.DebuggerDispatcher = function(debuggerModel)
{
this._debuggerModel = debuggerModel;
}
WebInspector.DebuggerDispatcher.prototype = {
pausedScript: function(details)
{
this._debuggerModel._pausedScript(details);
},
resumedScript: function()
{
this._debuggerModel._resumedScript();
},
debuggerWasEnabled: function()
{
WebInspector.panels.scripts.debuggerWasEnabled();
},
debuggerWasDisabled: function()
{
WebInspector.panels.scripts.debuggerWasDisabled();
},
parsedScriptSource: function(sourceID, sourceURL, lineOffset, columnOffset, length, scriptWorldType)
{
this._debuggerModel._parsedScriptSource(sourceID, sourceURL, lineOffset, columnOffset, length, scriptWorldType);
},
failedToParseScriptSource: function(sourceURL, source, startingLine, errorLine, errorMessage)
{
this._debuggerModel._failedToParseScriptSource(sourceURL, source, startingLine, errorLine, errorMessage);
},
breakpointResolved: function(breakpointId, sourceID, lineNumber, columnNumber)
{
this._debuggerModel._breakpointResolved(breakpointId, sourceID, lineNumber, columnNumber);
},
didCreateWorker: function()
{
var workersPane = WebInspector.panels.scripts.sidebarPanes.workers;
workersPane.addWorker.apply(workersPane, arguments);
},
didDestroyWorker: function()
{
var workersPane = WebInspector.panels.scripts.sidebarPanes.workers;
workersPane.removeWorker.apply(workersPane, arguments);
}
}

92
node_modules/weinre/web/client/DetailedHeapshotView.js generated vendored Normal file
View File

@ -0,0 +1,92 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.DetailedHeapshotView = function(parent, profile)
{
WebInspector.View.call(this);
this.element.addStyleClass("heap-snapshot-view");
this.parent = parent;
this.profile = profile;
}
WebInspector.DetailedHeapshotView.prototype = {
get profile()
{
return this._profile;
},
set profile(profile)
{
this._profile = profile;
}
};
WebInspector.DetailedHeapshotView.prototype.__proto__ = WebInspector.View.prototype;
WebInspector.DetailedHeapshotProfileType = function()
{
WebInspector.ProfileType.call(this, WebInspector.HeapSnapshotProfileType.TypeId, WebInspector.UIString("HEAP SNAPSHOTS"));
}
WebInspector.DetailedHeapshotProfileType.prototype = {
get buttonTooltip()
{
return WebInspector.UIString("Take heap snapshot.");
},
get buttonStyle()
{
return "heap-snapshot-status-bar-item status-bar-item";
},
buttonClicked: function()
{
WebInspector.panels.profiles.takeHeapSnapshot(true);
},
get welcomeMessage()
{
return WebInspector.UIString("Get a heap snapshot by pressing the %s button on the status bar.");
},
createSidebarTreeElementForProfile: function(profile)
{
return new WebInspector.ProfileSidebarTreeElement(profile, WebInspector.UIString("Snapshot %d"), "heap-snapshot-sidebar-tree-item");
},
createView: function(profile)
{
return new WebInspector.DetailedHeapshotView(WebInspector.panels.profiles, profile);
}
}
WebInspector.DetailedHeapshotProfileType.prototype.__proto__ = WebInspector.ProfileType.prototype;

362
node_modules/weinre/web/client/Drawer.js generated vendored Normal file
View File

@ -0,0 +1,362 @@
/*
* Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
* Copyright (C) 2009 Joseph Pecoraro
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.Drawer = function()
{
WebInspector.View.call(this, document.getElementById("drawer"));
this._savedHeight = 200; // Default.
this.state = WebInspector.Drawer.State.Hidden;
this.fullPanel = false;
this._mainElement = document.getElementById("main");
this._toolbarElement = document.getElementById("toolbar");
this._mainStatusBar = document.getElementById("main-status-bar");
this._mainStatusBar.addEventListener("mousedown", this._startStatusBarDragging.bind(this), true);
this._viewStatusBar = document.getElementById("other-drawer-status-bar-items");
this._counters = document.getElementById("counters");
this._drawerStatusBar = document.getElementById("drawer-status-bar");
}
WebInspector.Drawer.prototype = {
get visibleView()
{
return this._visibleView;
},
set visibleView(x)
{
if (this._visibleView === x) {
if (this.visible && this.fullPanel)
return;
this.visible = !this.visible;
return;
}
var firstTime = !this._visibleView;
if (this._visibleView)
this._visibleView.hide();
this._visibleView = x;
if (x && !firstTime) {
this._safelyRemoveChildren();
this._viewStatusBar.removeChildren(); // optimize this? call old.detach()
x.attach(this.element, this._viewStatusBar);
x.show();
this.visible = true;
}
},
get savedHeight()
{
var height = this._savedHeight || this.element.offsetHeight;
return Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - this._mainElement.totalOffsetTop - Preferences.minConsoleHeight);
},
showView: function(view)
{
if (!this.visible || this.visibleView !== view)
this.visibleView = view;
},
show: function()
{
if (this._animating || this.visible)
return;
if (this.visibleView)
this.visibleView.show();
WebInspector.View.prototype.show.call(this);
this._animating = true;
document.body.addStyleClass("drawer-visible");
var anchoredItems = document.getElementById("anchored-status-bar-items");
var height = (this.fullPanel ? window.innerHeight - this._toolbarElement.offsetHeight : this.savedHeight);
var animations = [
{element: this.element, end: {height: height}},
{element: this._mainElement, end: {bottom: height}},
{element: this._mainStatusBar, start: {"padding-left": anchoredItems.offsetWidth - 1}, end: {"padding-left": 0}},
{element: this._viewStatusBar, start: {opacity: 0}, end: {opacity: 1}}
];
this._drawerStatusBar.insertBefore(anchoredItems, this._drawerStatusBar.firstChild);
if (this._currentPanelCounters) {
var oldRight = this._drawerStatusBar.clientWidth - (this._counters.offsetLeft + this._currentPanelCounters.offsetWidth);
var newRight = WebInspector.Panel.counterRightMargin;
var rightPadding = (oldRight - newRight);
animations.push({element: this._currentPanelCounters, start: {"padding-right": rightPadding}, end: {"padding-right": 0}});
this._currentPanelCounters.parentNode.removeChild(this._currentPanelCounters);
this._mainStatusBar.appendChild(this._currentPanelCounters);
}
function animationFinished()
{
if ("updateStatusBarItems" in WebInspector.currentPanel)
WebInspector.currentPanel.updateStatusBarItems();
if (this.visibleView.afterShow)
this.visibleView.afterShow();
delete this._animating;
delete this._currentAnimation;
this.state = (this.fullPanel ? WebInspector.Drawer.State.Full : WebInspector.Drawer.State.Variable);
if (this._currentPanelCounters)
this._currentPanelCounters.removeAttribute("style");
}
this._currentAnimation = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
},
hide: function()
{
if (this._animating || !this.visible)
return;
WebInspector.View.prototype.hide.call(this);
if (this.visibleView)
this.visibleView.hide();
this._animating = true;
if (!this.fullPanel)
this._savedHeight = this.element.offsetHeight;
if (this.element === WebInspector.currentFocusElement || this.element.isAncestor(WebInspector.currentFocusElement))
WebInspector.currentFocusElement = WebInspector.previousFocusElement;
var anchoredItems = document.getElementById("anchored-status-bar-items");
// Temporarily set properties and classes to mimic the post-animation values so panels
// like Elements in their updateStatusBarItems call will size things to fit the final location.
this._mainStatusBar.style.setProperty("padding-left", (anchoredItems.offsetWidth - 1) + "px");
document.body.removeStyleClass("drawer-visible");
if ("updateStatusBarItems" in WebInspector.currentPanel)
WebInspector.currentPanel.updateStatusBarItems();
document.body.addStyleClass("drawer-visible");
var animations = [
{element: this._mainElement, end: {bottom: 0}},
{element: this._mainStatusBar, start: {"padding-left": 0}, end: {"padding-left": anchoredItems.offsetWidth - 1}},
{element: this._viewStatusBar, start: {opacity: 1}, end: {opacity: 0}}
];
if (this._currentPanelCounters) {
var newRight = this._drawerStatusBar.clientWidth - this._counters.offsetLeft;
var oldRight = this._mainStatusBar.clientWidth - (this._currentPanelCounters.offsetLeft + this._currentPanelCounters.offsetWidth);
var rightPadding = (newRight - oldRight);
animations.push({element: this._currentPanelCounters, start: {"padding-right": 0}, end: {"padding-right": rightPadding}});
}
function animationFinished()
{
WebInspector.currentPanel.resize();
this._mainStatusBar.insertBefore(anchoredItems, this._mainStatusBar.firstChild);
this._mainStatusBar.style.removeProperty("padding-left");
if (this._currentPanelCounters) {
this._currentPanelCounters.setAttribute("style", null);
this._currentPanelCounters.parentNode.removeChild(this._currentPanelCounters);
this._counters.insertBefore(this._currentPanelCounters, this._counters.firstChild);
}
document.body.removeStyleClass("drawer-visible");
delete this._animating;
delete this._currentAnimation;
this.state = WebInspector.Drawer.State.Hidden;
}
this._currentAnimation = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
},
resize: function()
{
if (this.state === WebInspector.Drawer.State.Hidden)
return;
var height;
if (this.state === WebInspector.Drawer.State.Variable) {
height = parseInt(this.element.style.height);
height = Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - this._mainElement.totalOffsetTop - Preferences.minConsoleHeight);
} else
height = window.innerHeight - this._toolbarElement.offsetHeight;
this._mainElement.style.bottom = height + "px";
this.element.style.height = height + "px";
},
enterPanelMode: function()
{
this._cancelAnimationIfNeeded();
this.fullPanel = true;
if (this.visible) {
this._savedHeight = this.element.offsetHeight;
var height = window.innerHeight - this._toolbarElement.offsetHeight;
this._animateDrawerHeight(height, WebInspector.Drawer.State.Full);
}
},
exitPanelMode: function()
{
this._cancelAnimationIfNeeded();
this.fullPanel = false;
if (this.visible) {
// If this animation gets cancelled, we want the state of the drawer to be Variable,
// so that the new animation can't do an immediate transition between Hidden/Full states.
this.state = WebInspector.Drawer.State.Variable;
var height = this.savedHeight;
this._animateDrawerHeight(height, WebInspector.Drawer.State.Variable);
}
},
immediatelyExitPanelMode: function()
{
this.visible = false;
this.fullPanel = false;
},
immediatelyFinishAnimation: function()
{
if (this._currentAnimation)
this._currentAnimation.forceComplete();
},
set currentPanelCounters(x)
{
if (!x) {
if (this._currentPanelCounters)
this._currentPanelCounters.parentElement.removeChild(this._currentPanelCounters);
delete this._currentPanelCounters;
return;
}
this._currentPanelCounters = x;
if (this.visible)
this._mainStatusBar.appendChild(x);
else
this._counters.insertBefore(x, this._counters.firstChild);
},
_cancelAnimationIfNeeded: function()
{
if (this._animating) {
if (this._currentAnimation)
this._currentAnimation.cancel();
delete this._animating;
delete this._currentAnimation;
}
},
_animateDrawerHeight: function(height, finalState)
{
this._animating = true;
var animations = [
{element: this.element, end: {height: height}},
{element: this._mainElement, end: {bottom: height}}
];
function animationFinished()
{
delete this._animating;
delete this._currentAnimation;
this.state = finalState;
}
this._currentAnimation = WebInspector.animateStyle(animations, this._animationDuration(), animationFinished.bind(this));
},
_animationDuration: function()
{
// Immediate if going between Hidden and Full in full panel mode
if (this.fullPanel && (this.state === WebInspector.Drawer.State.Hidden || this.state === WebInspector.Drawer.State.Full))
return 0;
return (window.event && window.event.shiftKey ? 2000 : 250);
},
_safelyRemoveChildren: function()
{
var child = this.element.firstChild;
while (child) {
if (child.id !== "drawer-status-bar") {
var moveTo = child.nextSibling;
this.element.removeChild(child);
child = moveTo;
} else
child = child.nextSibling;
}
},
_startStatusBarDragging: function(event)
{
if (!this.visible || event.target !== this._mainStatusBar)
return;
WebInspector.elementDragStart(this._mainStatusBar, this._statusBarDragging.bind(this), this._endStatusBarDragging.bind(this), event, "row-resize");
this._statusBarDragOffset = event.pageY - this.element.totalOffsetTop;
event.stopPropagation();
},
_statusBarDragging: function(event)
{
var height = window.innerHeight - event.pageY + this._statusBarDragOffset;
height = Number.constrain(height, Preferences.minConsoleHeight, window.innerHeight - this._mainElement.totalOffsetTop - Preferences.minConsoleHeight);
this._mainElement.style.bottom = height + "px";
this.element.style.height = height + "px";
event.preventDefault();
event.stopPropagation();
},
_endStatusBarDragging: function(event)
{
WebInspector.elementDragEnd(event);
this._savedHeight = this.element.offsetHeight;
delete this._statusBarDragOffset;
event.stopPropagation();
}
}
WebInspector.Drawer.prototype.__proto__ = WebInspector.View.prototype;
WebInspector.Drawer.State = {
Hidden: 0,
Variable: 1,
Full: 2
};

1087
node_modules/weinre/web/client/ElementsPanel.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

1444
node_modules/weinre/web/client/ElementsTreeOutline.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,235 @@
/*
* Copyright (C) 2007 Apple Inc. All rights reserved.
* Copyright (C) 2009 Joseph Pecoraro
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.EventListenersSidebarPane = function()
{
WebInspector.SidebarPane.call(this, WebInspector.UIString("Event Listeners"));
this.bodyElement.addStyleClass("events-pane");
this.sections = [];
this.settingsSelectElement = document.createElement("select");
var option = document.createElement("option");
option.value = "all";
option.label = WebInspector.UIString("All Nodes");
this.settingsSelectElement.appendChild(option);
option = document.createElement("option");
option.value = "selected";
option.label = WebInspector.UIString("Selected Node Only");
this.settingsSelectElement.appendChild(option);
var filter = WebInspector.settings.eventListenersFilter;
if (filter === "all")
this.settingsSelectElement[0].selected = true;
else if (filter === "selected")
this.settingsSelectElement[1].selected = true;
this.settingsSelectElement.addEventListener("click", function(event) { event.stopPropagation() }, false);
this.settingsSelectElement.addEventListener("change", this._changeSetting.bind(this), false);
this.titleElement.appendChild(this.settingsSelectElement);
}
WebInspector.EventListenersSidebarPane.prototype = {
update: function(node)
{
var body = this.bodyElement;
body.removeChildren();
this.sections = [];
var self = this;
function callback(nodeId, eventListeners) {
var sectionNames = [];
var sectionMap = {};
for (var i = 0; i < eventListeners.length; ++i) {
var eventListener = eventListeners[i];
eventListener.node = WebInspector.domAgent.nodeForId(eventListener.nodeId);
delete eventListener.nodeId; // no longer needed
if (/^function _inspectorCommandLineAPI_logEvent\(/.test(eventListener.listenerBody.toString()))
continue; // ignore event listeners generated by monitorEvent
var type = eventListener.type;
var section = sectionMap[type];
if (!section) {
section = new WebInspector.EventListenersSection(type, nodeId);
sectionMap[type] = section;
sectionNames.push(type);
self.sections.push(section);
}
section.addListener(eventListener);
}
if (sectionNames.length === 0) {
var div = document.createElement("div");
div.className = "info";
div.textContent = WebInspector.UIString("No Event Listeners");
body.appendChild(div);
return;
}
sectionNames.sort();
for (var i = 0; i < sectionNames.length; ++i) {
var section = sectionMap[sectionNames[i]];
section.update();
body.appendChild(section.element);
}
}
WebInspector.EventListeners.getEventListenersForNodeAsync(node, callback);
},
_changeSetting: function(event)
{
var selectedOption = this.settingsSelectElement[this.settingsSelectElement.selectedIndex];
WebInspector.settings.eventListenersFilter = selectedOption.value;
for (var i = 0; i < this.sections.length; ++i)
this.sections[i].update();
}
}
WebInspector.EventListenersSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype;
WebInspector.EventListenersSection = function(title, nodeId)
{
this.eventListeners = [];
this._nodeId = nodeId;
WebInspector.PropertiesSection.call(this, title);
// Changed from a Properties List
this.propertiesElement.parentNode.removeChild(this.propertiesElement);
delete this.propertiesElement;
delete this.propertiesTreeOutline;
this.eventBars = document.createElement("div");
this.eventBars.className = "event-bars";
this.element.appendChild(this.eventBars);
}
WebInspector.EventListenersSection.prototype = {
update: function()
{
// A Filtered Array simplifies when to create connectors
var filteredEventListeners = this.eventListeners;
if (WebInspector.settings.eventListenersFilter === "selected") {
filteredEventListeners = [];
for (var i = 0; i < this.eventListeners.length; ++i) {
var eventListener = this.eventListeners[i];
if (eventListener.node.id === this._nodeId)
filteredEventListeners.push(eventListener);
}
}
this.eventBars.removeChildren();
var length = filteredEventListeners.length;
for (var i = 0; i < length; ++i) {
var eventListener = filteredEventListeners[i];
var eventListenerBar = new WebInspector.EventListenerBar(eventListener, this._nodeId);
this.eventBars.appendChild(eventListenerBar.element);
}
},
addListener: function(eventListener)
{
this.eventListeners.push(eventListener);
}
}
WebInspector.EventListenersSection.prototype.__proto__ = WebInspector.PropertiesSection.prototype;
WebInspector.EventListenerBar = function(eventListener, nodeId)
{
this.eventListener = eventListener;
this._nodeId = nodeId;
WebInspector.ObjectPropertiesSection.call(this);
this._setNodeTitle();
this._setFunctionSubtitle();
this.editable = false;
this.element.className = "event-bar"; /* Changed from "section" */
this.headerElement.addStyleClass("source-code");
this.propertiesElement.className = "event-properties properties-tree source-code"; /* Changed from "properties" */
}
WebInspector.EventListenerBar.prototype = {
update: function()
{
function updateWithNodeObject(nodeObject)
{
var properties = [];
if (nodeObject)
properties.push(new WebInspector.RemoteObjectProperty("node", nodeObject));
for (var propertyName in this.eventListener) {
var value = WebInspector.RemoteObject.fromPrimitiveValue(this.eventListener[propertyName]);
properties.push(new WebInspector.RemoteObjectProperty(propertyName, value));
}
this.updateProperties(properties);
}
var node = this.eventListener.node;
delete this.eventListener.node;
WebInspector.RemoteObject.resolveNode(node, updateWithNodeObject.bind(this));
},
_setNodeTitle: function()
{
var node = this.eventListener.node;
if (!node)
return;
if (node.nodeType === Node.DOCUMENT_NODE) {
this.titleElement.textContent = "document";
return;
}
if (node.id === this._nodeId) {
this.titleElement.textContent = appropriateSelectorForNode(node);
return;
}
this.titleElement.removeChildren();
this.titleElement.appendChild(WebInspector.panels.elements.linkifyNodeReference(this.eventListener.node));
},
_setFunctionSubtitle: function()
{
// Requires that Function.toString() return at least the function's signature.
if (this.eventListener.sourceName) {
this.subtitleElement.removeChildren();
this.subtitleElement.appendChild(WebInspector.linkifyResourceAsNode(this.eventListener.sourceName, "scripts", this.eventListener.lineNumber));
} else {
var match = this.eventListener.listenerBody.match(/function ([^\(]+?)\(/);
if (match)
this.subtitleElement.textContent = match[1];
else
this.subtitleElement.textContent = WebInspector.UIString("(anonymous function)");
}
}
}
WebInspector.EventListenerBar.prototype.__proto__ = WebInspector.ObjectPropertiesSection.prototype;

520
node_modules/weinre/web/client/ExtensionAPI.js generated vendored Normal file
View File

@ -0,0 +1,520 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.injectedExtensionAPI = function(InjectedScriptHost, inspectedWindow, injectedScriptId)
{
// Here and below, all constructors are private to API implementation.
// For a public type Foo, if internal fields are present, these are on
// a private FooImpl type, an instance of FooImpl is used in a closure
// by Foo consutrctor to re-bind publicly exported members to an instance
// of Foo.
function EventSinkImpl(type, customDispatch)
{
this._type = type;
this._listeners = [];
this._customDispatch = customDispatch;
}
EventSinkImpl.prototype = {
addListener: function(callback)
{
if (typeof callback != "function")
throw new "addListener: callback is not a function";
if (this._listeners.length === 0)
extensionServer.sendRequest({ command: "subscribe", type: this._type });
this._listeners.push(callback);
extensionServer.registerHandler("notify-" + this._type, bind(this._dispatch, this));
},
removeListener: function(callback)
{
var listeners = this._listeners;
for (var i = 0; i < listeners.length; ++i) {
if (listeners[i] === callback) {
listeners.splice(i, 1);
break;
}
}
if (this._listeners.length === 0)
extensionServer.sendRequest({ command: "unsubscribe", type: this._type });
},
_fire: function()
{
var listeners = this._listeners.slice();
for (var i = 0; i < listeners.length; ++i)
listeners[i].apply(null, arguments);
},
_dispatch: function(request)
{
if (this._customDispatch)
this._customDispatch.call(this, request);
else
this._fire.apply(this, request.arguments);
}
}
function InspectorExtensionAPI()
{
this.audits = new Audits();
this.inspectedWindow = new InspectedWindow();
this.panels = new Panels();
this.resources = new Resources();
this.onReset = new EventSink("reset");
}
InspectorExtensionAPI.prototype = {
log: function(message)
{
extensionServer.sendRequest({ command: "log", message: message });
}
}
function Resources()
{
function resourceDispatch(request)
{
var resource = request.arguments[1];
resource.__proto__ = new Resource(request.arguments[0]);
this._fire(resource);
}
this.onFinished = new EventSink("resource-finished", resourceDispatch);
}
Resources.prototype = {
getHAR: function(callback)
{
function callbackWrapper(result)
{
var entries = (result && result.entries) || [];
for (var i = 0; i < entries.length; ++i) {
entries[i].__proto__ = new Resource(entries[i]._resourceId);
delete entries[i]._resourceId;
}
callback(result);
}
return extensionServer.sendRequest({ command: "getHAR" }, callback && callbackWrapper);
},
addRequestHeaders: function(headers)
{
return extensionServer.sendRequest({ command: "addRequestHeaders", headers: headers, extensionId: location.hostname });
}
}
function ResourceImpl(id)
{
this._id = id;
}
ResourceImpl.prototype = {
getContent: function(callback)
{
function callbackWrapper(response)
{
callback(response.content, response.encoding);
}
extensionServer.sendRequest({ command: "getResourceContent", id: this._id }, callback && callbackWrapper);
}
};
function Panels()
{
var panels = {
elements: new ElementsPanel()
};
function panelGetter(name)
{
return panels[name];
}
for (var panel in panels)
this.__defineGetter__(panel, bind(panelGetter, null, panel));
}
Panels.prototype = {
create: function(title, iconURL, pageURL, callback)
{
var id = "extension-panel-" + extensionServer.nextObjectId();
var request = {
command: "createPanel",
id: id,
title: title,
icon: expandURL(iconURL),
url: expandURL(pageURL)
};
extensionServer.sendRequest(request, callback && bind(callback, this, new ExtensionPanel(id)));
}
}
function PanelImpl(id)
{
this._id = id;
}
function PanelWithSidebarImpl(id)
{
PanelImpl.call(this, id);
}
PanelWithSidebarImpl.prototype = {
createSidebarPane: function(title, url, callback)
{
var id = "extension-sidebar-" + extensionServer.nextObjectId();
var request = {
command: "createSidebarPane",
panel: this._id,
id: id,
title: title,
url: expandURL(url)
};
function callbackWrapper()
{
callback(new ExtensionSidebarPane(id));
}
extensionServer.sendRequest(request, callback && callbackWrapper);
},
createWatchExpressionSidebarPane: function(title, callback)
{
var id = "watch-sidebar-" + extensionServer.nextObjectId();
var request = {
command: "createWatchExpressionSidebarPane",
panel: this._id,
id: id,
title: title
};
function callbackWrapper()
{
callback(new WatchExpressionSidebarPane(id));
}
extensionServer.sendRequest(request, callback && callbackWrapper);
}
}
PanelWithSidebarImpl.prototype.__proto__ = PanelImpl.prototype;
function ElementsPanel()
{
var id = "elements";
PanelWithSidebar.call(this, id);
this.onSelectionChanged = new EventSink("panel-objectSelected-" + id);
}
function ExtensionPanel(id)
{
Panel.call(this, id);
this.onSearch = new EventSink("panel-search-" + id);
}
function ExtensionSidebarPaneImpl(id)
{
this._id = id;
}
ExtensionSidebarPaneImpl.prototype = {
setHeight: function(height)
{
extensionServer.sendRequest({ command: "setSidebarHeight", id: this._id, height: height });
}
}
function WatchExpressionSidebarPaneImpl(id)
{
ExtensionSidebarPaneImpl.call(this, id);
this.onUpdated = new EventSink("watch-sidebar-updated-" + id);
}
WatchExpressionSidebarPaneImpl.prototype = {
setExpression: function(expression, rootTitle)
{
extensionServer.sendRequest({ command: "setWatchSidebarContent", id: this._id, expression: expression, rootTitle: rootTitle, evaluateOnPage: true });
},
setObject: function(jsonObject, rootTitle)
{
extensionServer.sendRequest({ command: "setWatchSidebarContent", id: this._id, expression: jsonObject, rootTitle: rootTitle });
}
}
WatchExpressionSidebarPaneImpl.prototype.__proto__ = ExtensionSidebarPaneImpl.prototype;
function WatchExpressionSidebarPane(id)
{
var impl = new WatchExpressionSidebarPaneImpl(id);
ExtensionSidebarPane.call(this, id, impl);
}
function Audits()
{
}
Audits.prototype = {
addCategory: function(displayName, resultCount)
{
var id = "extension-audit-category-" + extensionServer.nextObjectId();
extensionServer.sendRequest({ command: "addAuditCategory", id: id, displayName: displayName, resultCount: resultCount });
return new AuditCategory(id);
}
}
function AuditCategoryImpl(id)
{
function auditResultDispatch(request)
{
var auditResult = new AuditResult(request.arguments[0]);
try {
this._fire(auditResult);
} catch (e) {
console.error("Uncaught exception in extension audit event handler: " + e);
auditResult.done();
}
}
this._id = id;
this.onAuditStarted = new EventSink("audit-started-" + id, auditResultDispatch);
}
function AuditResultImpl(id)
{
this._id = id;
var formatterTypes = [
"url",
"snippet",
"text"
];
for (var i = 0; i < formatterTypes.length; ++i)
this[formatterTypes[i]] = bind(this._nodeFactory, null, formatterTypes[i]);
}
AuditResultImpl.prototype = {
addResult: function(displayName, description, severity, details)
{
// shorthand for specifying details directly in addResult().
if (details && !(details instanceof AuditResultNode))
details = details instanceof Array ? this.createNode.apply(this, details) : this.createNode(details);
var request = {
command: "addAuditResult",
resultId: this._id,
displayName: displayName,
description: description,
severity: severity,
details: details
};
extensionServer.sendRequest(request);
},
createResult: function()
{
var node = new AuditResultNode();
node.contents = Array.prototype.slice.call(arguments);
return node;
},
done: function()
{
extensionServer.sendRequest({ command: "stopAuditCategoryRun", resultId: this._id });
},
get Severity()
{
return apiPrivate.audits.Severity;
},
_nodeFactory: function(type)
{
return {
type: type,
arguments: Array.prototype.slice.call(arguments, 1)
};
}
}
function AuditResultNode(contents)
{
this.contents = contents;
this.children = [];
this.expanded = false;
}
AuditResultNode.prototype = {
addChild: function()
{
var node = AuditResultImpl.prototype.createResult.apply(null, arguments);
this.children.push(node);
return node;
}
};
function InspectedWindow()
{
this.onDOMContentLoaded = new EventSink("inspectedPageDOMContentLoaded");
this.onLoaded = new EventSink("inspectedPageLoaded");
this.onNavigated = new EventSink("inspectedURLChanged");
}
InspectedWindow.prototype = {
reload: function(userAgent)
{
return extensionServer.sendRequest({ command: "reload", userAgent: userAgent });
},
eval: function(expression, callback)
{
function callbackWrapper(result)
{
var value = result.value;
if (!result.isException)
value = value === "undefined" ? undefined : JSON.parse(value);
callback(value, result.isException);
}
return extensionServer.sendRequest({ command: "evaluateOnInspectedPage", expression: expression }, callback && callbackWrapper);
}
}
function ExtensionServerClient()
{
this._callbacks = {};
this._handlers = {};
this._lastRequestId = 0;
this._lastObjectId = 0;
this.registerHandler("callback", bind(this._onCallback, this));
var channel = new MessageChannel();
this._port = channel.port1;
this._port.addEventListener("message", bind(this._onMessage, this), false);
this._port.start();
top.postMessage("registerExtension", [ channel.port2 ], "*");
}
ExtensionServerClient.prototype = {
sendRequest: function(message, callback)
{
if (typeof callback === "function")
message.requestId = this._registerCallback(callback);
return this._port.postMessage(message);
},
registerHandler: function(command, handler)
{
this._handlers[command] = handler;
},
nextObjectId: function()
{
return injectedScriptId + "_" + ++this._lastObjectId;
},
_registerCallback: function(callback)
{
var id = ++this._lastRequestId;
this._callbacks[id] = callback;
return id;
},
_onCallback: function(request)
{
if (request.requestId in this._callbacks) {
var callback = this._callbacks[request.requestId];
delete this._callbacks[request.requestId];
callback(request.result);
}
},
_onMessage: function(event)
{
var request = event.data;
var handler = this._handlers[request.command];
if (handler)
handler.call(this, request);
}
}
function expandURL(url)
{
if (!url)
return url;
if (/^[^/]+:/.exec(url)) // See if url has schema.
return url;
var baseURL = location.protocol + "//" + location.hostname + location.port;
if (/^\//.exec(url))
return baseURL + url;
return baseURL + location.pathname.replace(/\/[^/]*$/,"/") + url;
}
function bind(func, thisObject)
{
var args = Array.prototype.slice.call(arguments, 2);
return function() { return func.apply(thisObject, args.concat(Array.prototype.slice.call(arguments, 0))); };
}
function populateInterfaceClass(interface, implementation)
{
for (var member in implementation) {
if (member.charAt(0) === "_")
continue;
var value = implementation[member];
interface[member] = typeof value === "function" ? bind(value, implementation)
: interface[member] = implementation[member];
}
}
function declareInterfaceClass(implConstructor)
{
return function()
{
var impl = { __proto__: implConstructor.prototype };
implConstructor.apply(impl, arguments);
populateInterfaceClass(this, impl);
}
}
var AuditCategory = declareInterfaceClass(AuditCategoryImpl);
var AuditResult = declareInterfaceClass(AuditResultImpl);
var EventSink = declareInterfaceClass(EventSinkImpl);
var ExtensionSidebarPane = declareInterfaceClass(ExtensionSidebarPaneImpl);
var Panel = declareInterfaceClass(PanelImpl);
var PanelWithSidebar = declareInterfaceClass(PanelWithSidebarImpl);
var Resource = declareInterfaceClass(ResourceImpl);
var WatchExpressionSidebarPane = declareInterfaceClass(WatchExpressionSidebarPaneImpl);
var extensionServer = new ExtensionServerClient();
webInspector = new InspectorExtensionAPI();
}

513
node_modules/weinre/web/client/ExtensionAPISchema.json generated vendored Normal file
View File

@ -0,0 +1,513 @@
[
{
"namespace": "experimental.webInspector.inspectedWindow",
"description": "Provides access to the window being inspected.",
"functions": [
{
"name": "eval",
"type": "function",
"description": "Evaluates a JavaScript expression in the context of inspected page (NOTE: the expression must evaluate to a JSON-compliant object, otherwise the exception is thrown)",
"parameters": [
{
"name": "expression",
"type": "string",
"description": "An expression to evaluate."
},
{
"name": "callback",
"type": "function",
"description": "A function called when evaluation completes.",
"parameters": [
{
"name": "result",
"type": "object",
"description": "The result of evaluation"
},
{
"name": "isException",
"type": "boolean",
"description": "Set if an exception was caught while evaluating the expression"
}
]
}
]
}
],
"events": [
{
"name": "onDOMContentLoaded",
"type": "function",
"description": "Fired after DOMContentLoaded event on inspected page is fired."
},
{
"name": "onLoaded",
"type": "function",
"description": "Fired after load event on inspected page is fired."
},
{
"name": "onNavigated",
"type": "function",
"description": "Fired when navigation occurs in the window being inspected."
}
]
},
{
"namespace": "experimental.webInspector.panels",
"types": [
{
"id": "PanelWithSidebars",
"type": "object",
"isInstanceOf": "Panel",
"description": "A panel within Web Inspector UI that has sidebars.",
"functions": [
{
"name": "createSidebarPane",
"type": "function",
"description": "Creates a pane within panel's sidebar.",
"parameters": [
{
"name": "title",
"type": "string",
"description": "A text that is displayed in sidebar caption."
},
{
"name": "url",
"type": "string",
"description": "An URL of the page that represents the sidebar."
},
{
"name": "callback",
"type": "function",
"description": "A callback invoked when sidebar is created",
"parameters": [
{
"name": "result",
"description": "An ExtensionSidebarPane object for created sidebar pane",
"$ref": "ExtensionSidebarPane"
}
]
}
]
},
{
"name": "createWatchExpressionSidebarPane",
"type": "function",
"description": "Creates a pane with an object property tree (similar to a watch sidebar pane).",
"parameters": [
{
"name": "title",
"type": "string",
"description": "A text that is displayed in sidebar caption."
},
{
"name": "callback",
"type": "function",
"description": "A callback invoked when sidebar is created",
"parameters": [
{
"name": "result",
"description": "A WatchExpressionSidebarPane object for created sidebar pane",
"$ref": "WatchExpressionSidebarPane"
}
]
}
]
}
]
},
{
"id": "ElementsPanel",
"type": "object",
"isInstanceOf": "PanelWithSidebars",
"description": "Represents Elements panel",
"events": [
{
"name": "onSelectionChanged",
"description": "Fired when an objects is selected in the panel."
}
]
},
{
"id": "ExtensionPanel",
"type": "object",
"isInstanceOf": "Panel",
"description": "Represents a panel created by extension",
"events": [
{
"name": "onSearch",
"description": "Fired upon a search action (start of a new search, search result navigation or search being canceled).",
"parameters": [
{
"name": "action",
"type": "string",
"description": "Type of search action being performed."
},
{
"name": "queryString",
"type": "string",
"optional": true,
"description": "Query string (only for 'performSearch')"
}
]
}
]
},
{
"id": "ExtensionSidebarPane",
"type": "object",
"description": "A sidebar created by the extension.",
"functions": [
{
"name": "setHeight",
"type": "function",
"description": "Sets the height of the sidebar.",
"parameters": [
{
"name": "height",
"type": "string",
"description": "A CSS-like size specification, e.g. '10px' or '12pt'"
}
]
}
]
},
{
"id": "WatchExpressionSidebarPane",
"type": "object",
"description": "A sidebar created by the extension.",
"functions": [
{
"name": "setHeight",
"type": "function",
"description": "Sets the height of the sidebar.",
"parameters": [
{
"name": "height",
"type": "string",
"description": "A CSS-like size specification, e.g. '10px' or '12pt'"
}
]
},
{
"name": "setExpression",
"type": "function",
"description": "Sets an expression that is evaluated within the inspected page. The result is displayed in the sidebar pane.",
"parameters": [
{
"name": "expression",
"type": "string",
"description": "An expression to be evaluated in context of the inspected page. JavaScript objects and DOM nodes are displayed in an expandable tree similar to the console/watch."
},
{
"name": "rootTitle",
"type": "string",
"optional": true,
"description": "An optional title for the root of the expression tree."
}
]
},
{
"name": "setObject",
"type": "function",
"description": "Sets a JSON-compliant object to be displayed in the sidebar pane.",
"parameters": [
{
"name": "jsonObject",
"type": "string",
"description": "An object to be displayed in context of the inspected page. Evaluated in the context of the caller (API client)."
},
{
"name": "rootTitle",
"type": "string",
"optional": true,
"description": "An optional title for the root of the expression tree."
}
]
}
]
}
],
"properties": {
"scripts": {
"$ref": "ScriptsPanel",
"description": "Scripts panel"
}
},
"functions": [
{
"name": "create",
"type": "function",
"description": "Creates an extension panel.",
"parameters": [
{
"name": "title",
"type": "string",
"description": "Title that is displayed under the extension icon in the toolbar."
},
{
"name": "iconURL",
"type": "string",
"description": "An URL of the toolbar icon."
},
{
"name": "pageURL",
"type": "string",
"description": "An URL of the page that represents this panel."
}
],
"returns" : {
"$ref": "ExtensionPanel",
"description": "A panel that was created."
}
}
]
},
{
"namespace": "experimental.webInspector.resources",
"types": [
{
"id": "Resource",
"type": "object",
"description": "Represents a resource (document, script, image etc). See HAR Specification for reference.",
"functions": [
{
"name": "getContent",
"type": "function",
"description": "Returns resource content.",
"parameters": [
{
"name": "callback",
"type": "function",
"description": "A function that is called upon request completion.",
"parameters": [
{
"name": "content",
"type": "string",
"description": "Resource content (potentially encoded)."
},
{
"name": "encoding",
"type": "string",
"description": "Empty if content is not encoded, encoding name otherwise. Currently, only base64 supported."
}
]
}
]
}
]
}
],
"functions": [
{
"name": "getHAR",
"type": "function",
"description": "Returns HAR archive that contains all known resource objects.",
"parameters": [
{
"name": "callback",
"type": "function",
"description": "A function that is called upon request completion.",
"parameters": [
{
"name": "har",
"type": "object",
"description": "A HAR archieve. See HAR specification for details."
}
]
}
]
}
],
"events": [
{
"name": "onFinished",
"type": "function",
"description": "Fired when a resource request is finished and all resource data are available.",
"parameters": [
{ "name": "resource", "$ref": "Resource" }
]
}
]
},
{
"namespace": "experimental.webInspector.audits",
"functions": [
{
"name": "addCategory",
"type": "function",
"description": "Adds an audit category.",
"parameters": [
{ "name": "displayName", "type": "string", "description": "A display name for the category" },
{ "name": "resultCount", "type": "number", "description": "The expected number of audit results in the category." }
],
"returns": {
"$ref": "AuditCategory"
}
}
],
"types": [
{
"id": "AuditCategory",
"type": "object",
"description": "A set of audit rules",
"events": [
{
"name": "onAuditStarted",
"type": "function",
"description": "Fired when the audit is started, if the category is enabled -- the extension is expected to begin executing audit rules.",
"parameters": [
{ "name": "results", "$ref": "AuditResults" }
]
}
]
},
{
"id": "FormattedValue",
"type": "object",
"description": "A value returned from one of the formatters (an URL, code snippet etc), to be passed to createResult or addChild"
},
{
"id": "AuditResults",
"type": "object",
"description": "A collection of audit results for current run of the audit category",
"functions": [
{
"name": "addResult",
"type": "function",
"parameters": [
{
"name": "displayName",
"type": "string",
"description": "A concise, high-level description of audit rule result"
},
{
"name": "description",
"type": "string",
"description": "A detailed description of what the displayName means"
},
{
"name": "severity",
"$ref": "AuditResultSeverety"
},
{
"name": "details",
"$ref": "AuditResultNode",
"optional": true,
"description": "A subtree that appears under added result that may provide additional details on the violations found"
}
]
},
{
"name": "createResult",
"type": "function",
"description": "Creates a result node that may be user as details parameters to addResult",
"parameters": [
{
"name": "content ...",
"choices": [
{ "type": "string" },
{ "$ref": "FormattedValue" }
],
"description": "Either string or formatted values returned by one of AuditResult formatters (url, snippet etc)"
}
],
"returns": {
"$ref": "AuditResultNode"
}
},
{
"name": "done",
"type": "function",
"description": "Signals the WebInspector Audits panel that the run of this category is over. Normally the run completes automatically when a number of added top-level results is equal to that declared when AuditCategory was created."
},
{
"name": "url",
"type": "function",
"description": "Render passed value as an URL in the Audits panel",
"parameters": [
{ "name": "href", "type": "string", "description": "An URL that will appear as href value on resulting link" },
{ "name": "displayText", "type": "string", "description": "A text that will appear to user", "optional": true }
],
"returns": { "$ref": "FormattedValue" }
},
{
"name": "snippet",
"type": "function",
"description": "Render passed text as a code snippet in the Audits panel",
"parameters": [
{ "name": "text", "type": "string", "description": "Snippet text" }
],
"returns": { "$ref": "FormattedValue" }
}
],
"properties": {
"Severity": {
"$ref": "AuditResultSeverity",
"description": "A class that contains possible values for audit result severities."
},
"text": {
"type": "string",
"description": "The contents of the node."
},
"children": {
"optional": true,
"type": "array",
"items": { "$ref": "AuditResultNode" },
"description": "Children of this node."
},
"expanded": {
"optional": "true",
"type": "boolean",
"description": "Whether the node is expanded by default."
}
}
},
{
"id": "AuditResultNode",
"type": "object",
"description": "A node in the audit result trees. Displays some content and optionally has children node",
"functions": [
{
"name": "addChild",
"description": "Adds another child node to this node",
"parameters": [
{
"name": "content ...",
"choices": [
{ "type": "string" },
{ "$ref": "FormattedValue" }
],
"description": "Either string or formatted values returned by one of AuditResult formatters (url, snippet etc)"
}
],
"returns": {
"$ref": "AuditResultNode"
}
}
],
"properties": {
"expanded": {
"type": "boolean",
"description": "If set, the subtree will always be expanded"
}
}
},
{
"id": "AuditResultSeverity",
"type": "object",
"properties": {
"Info": {
"type": "string"
},
"Warning": {
"type": "string"
},
"Severe": {
"type": "string"
}
}
}
]
}
]

View File

@ -0,0 +1,111 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.ExtensionAuditCategory = function(id, displayName, ruleCount)
{
this._id = id;
this._displayName = displayName;
this._ruleCount = ruleCount;
}
WebInspector.ExtensionAuditCategory.prototype = {
// AuditCategory interface
get id()
{
return this._id;
},
get displayName()
{
return this._displayName;
},
get ruleCount()
{
return this._ruleCount;
},
run: function(resources, callback)
{
new WebInspector.ExtensionAuditCategoryResults(this, callback);
}
}
WebInspector.ExtensionAuditCategoryResults = function(category, callback)
{
this._category = category;
this._pendingRules = category.ruleCount;
this._ruleCompletionCallback = callback;
this.id = category.id + "-" + ++WebInspector.ExtensionAuditCategoryResults._lastId;
WebInspector.extensionServer.startAuditRun(category, this);
}
WebInspector.ExtensionAuditCategoryResults.prototype = {
get complete()
{
return !this._pendingRules;
},
cancel: function()
{
while (!this.complete)
this._addResult(null);
},
addResult: function(displayName, description, severity, details)
{
var result = new WebInspector.AuditRuleResult(displayName);
result.addChild(description);
result.severity = severity;
if (details)
this._addNode(result, details);
this._addResult(result);
},
_addNode: function(parent, node)
{
var addedNode = parent.addChild(node.contents, node.expanded);
if (node.children) {
for (var i = 0; i < node.children.length; ++i)
this._addNode(addedNode, node.children[i]);
}
},
_addResult: function(result)
{
this._ruleCompletionCallback(result);
this._pendingRules--;
if (!this._pendingRules)
WebInspector.extensionServer.stopAuditRun(this);
}
}
WebInspector.ExtensionAuditCategoryResults._lastId = 0;

46
node_modules/weinre/web/client/ExtensionCommon.js generated vendored Normal file
View File

@ -0,0 +1,46 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.commonExtensionSymbols = function(apiPrivate)
{
if (!apiPrivate.audits)
apiPrivate.audits = {};
apiPrivate.audits.Severity = {
Info: "info",
Warning: "warning",
Severe: "severe"
};
}
WebInspector.extensionAPI = {};
WebInspector.commonExtensionSymbols(WebInspector.extensionAPI);

118
node_modules/weinre/web/client/ExtensionPanel.js generated vendored Normal file
View File

@ -0,0 +1,118 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.ExtensionPanel = function(id, label, iconURL, options)
{
this.toolbarItemLabel = label;
this._addStyleRule(".toolbar-item." + id + " .toolbar-icon", "background-image: url(" + iconURL + ");");
WebInspector.Panel.call(this, id);
}
WebInspector.ExtensionPanel.prototype = {
get defaultFocusedElement()
{
return this.sidebarTreeElement || this.element;
},
updateMainViewWidth: function(width)
{
this.bodyElement.style.left = width + "px";
this.resize();
},
searchCanceled: function(startingNewSearch)
{
WebInspector.extensionServer.notifySearchAction(this._id, "cancelSearch");
WebInspector.Panel.prototype.searchCanceled.apply(this, arguments);
},
performSearch: function(query)
{
WebInspector.extensionServer.notifySearchAction(this._id, "performSearch", query);
WebInspector.Panel.prototype.performSearch.apply(this, arguments);
},
jumpToNextSearchResult: function()
{
WebInspector.extensionServer.notifySearchAction(this._id, "nextSearchResult");
WebInspector.Panel.prototype.jumpToNextSearchResult.call(this);
},
jumpToPreviousSearchResult: function()
{
WebInspector.extensionServer.notifySearchAction(this._id, "previousSearchResult");
WebInspector.Panel.prototype.jumpToPreviousSearchResult.call(this);
},
_addStyleRule: function(selector, body)
{
var style = document.createElement("style");
style.textContent = selector + " { " + body + " }";
document.head.appendChild(style);
}
}
WebInspector.ExtensionPanel.prototype.__proto__ = WebInspector.Panel.prototype;
WebInspector.ExtensionWatchSidebarPane = function(title, id)
{
WebInspector.SidebarPane.call(this, title);
this._id = id;
}
WebInspector.ExtensionWatchSidebarPane.prototype = {
setObject: function(object, title)
{
this._setObject(WebInspector.RemoteObject.fromLocalObject(object), title);
},
setExpression: function(expression, title)
{
InspectorBackend.evaluate(expression, "extension-watch", false, this._onEvaluate.bind(this, title));
},
_onEvaluate: function(title, result)
{
this._setObject(WebInspector.RemoteObject.fromPayload(result), title);
},
_setObject: function(object, title)
{
this.bodyElement.removeChildren();
var section = new WebInspector.ObjectPropertiesSection(object, title, null, true);
if (!title)
section.headerElement.addStyleClass("hidden");
section.expanded = true;
this.bodyElement.appendChild(section.element);
WebInspector.extensionServer.notifyExtensionWatchSidebarUpdated(this._id);
}
}
WebInspector.ExtensionWatchSidebarPane.prototype.__proto__ = WebInspector.SidebarPane.prototype;

View File

@ -0,0 +1,23 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
(function() {
var ExtensionRegistryImpl = modjewel.require("weinre/client/ExtensionRegistryImpl")
window.InspectorExtensionRegistry = new ExtensionRegistryImpl()
})()

465
node_modules/weinre/web/client/ExtensionServer.js generated vendored Normal file
View File

@ -0,0 +1,465 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.ExtensionServer = function()
{
this._clientObjects = {};
this._handlers = {};
this._subscribers = {};
this._extraHeaders = {};
this._status = new WebInspector.ExtensionStatus();
this._registerHandler("addRequestHeaders", this._onAddRequestHeaders.bind(this));
this._registerHandler("addAuditCategory", this._onAddAuditCategory.bind(this));
this._registerHandler("addAuditResult", this._onAddAuditResult.bind(this));
this._registerHandler("createPanel", this._onCreatePanel.bind(this));
this._registerHandler("createSidebarPane", this._onCreateSidebar.bind(this));
this._registerHandler("createWatchExpressionSidebarPane", this._onCreateWatchExpressionSidebarPane.bind(this));
this._registerHandler("evaluateOnInspectedPage", this._onEvaluateOnInspectedPage.bind(this));
this._registerHandler("getHAR", this._onGetHAR.bind(this));
this._registerHandler("getResourceContent", this._onGetResourceContent.bind(this));
this._registerHandler("log", this._onLog.bind(this));
this._registerHandler("reload", this._onReload.bind(this));
this._registerHandler("setSidebarHeight", this._onSetSidebarHeight.bind(this));
this._registerHandler("setWatchSidebarContent", this._onSetWatchSidebarContent.bind(this));
this._registerHandler("stopAuditCategoryRun", this._onStopAuditCategoryRun.bind(this));
this._registerHandler("subscribe", this._onSubscribe.bind(this));
this._registerHandler("unsubscribe", this._onUnsubscribe.bind(this));
window.addEventListener("message", this._onWindowMessage.bind(this), false);
}
WebInspector.ExtensionServer.prototype = {
notifyPanelShown: function(panelName)
{
this._postNotification("panel-shown-" + panelName);
},
notifyObjectSelected: function(panelId, objectId)
{
this._postNotification("panel-objectSelected-" + panelId, objectId);
},
notifySearchAction: function(panelId, action, searchString)
{
this._postNotification("panel-search-" + panelId, action, searchString);
},
notifyPageLoaded: function(milliseconds)
{
this._postNotification("inspectedPageLoaded", milliseconds);
},
notifyPageDOMContentLoaded: function(milliseconds)
{
this._postNotification("inspectedPageDOMContentLoaded", milliseconds);
},
notifyInspectedURLChanged: function()
{
this._postNotification("inspectedURLChanged");
},
notifyInspectorReset: function()
{
this._postNotification("reset");
},
notifyExtensionWatchSidebarUpdated: function(id)
{
this._postNotification("watch-sidebar-updated-" + id);
},
startAuditRun: function(category, auditRun)
{
this._clientObjects[auditRun.id] = auditRun;
this._postNotification("audit-started-" + category.id, auditRun.id);
},
stopAuditRun: function(auditRun)
{
delete this._clientObjects[auditRun.id];
},
_notifyResourceFinished: function(event)
{
var resource = event.data;
this._postNotification("resource-finished", resource.identifier, (new WebInspector.HAREntry(resource)).build());
},
_postNotification: function(type, details)
{
var subscribers = this._subscribers[type];
if (!subscribers)
return;
var message = {
command: "notify-" + type,
arguments: Array.prototype.slice.call(arguments, 1)
};
for (var i = 0; i < subscribers.length; ++i)
subscribers[i].postMessage(message);
},
_onSubscribe: function(message, port)
{
var subscribers = this._subscribers[message.type];
if (subscribers)
subscribers.push(port);
else
this._subscribers[message.type] = [ port ];
},
_onUnsubscribe: function(message, port)
{
var subscribers = this._subscribers[message.type];
if (!subscribers)
return;
subscribers.remove(port);
if (!subscribers.length)
delete this._subscribers[message.type];
},
_onAddRequestHeaders: function(message)
{
var id = message.extensionId;
if (typeof id !== "string")
return this._status.E_BADARGTYPE("extensionId", typeof id, "string");
var extensionHeaders = this._extraHeaders[id];
if (!extensionHeaders) {
extensionHeaders = {};
this._extraHeaders[id] = extensionHeaders;
}
for (name in message.headers)
extensionHeaders[name] = message.headers[name];
var allHeaders = {};
for (extension in this._extraHeaders) {
var headers = this._extraHeaders[extension];
for (name in headers) {
if (typeof headers[name] === "string")
allHeaders[name] = headers[name];
}
}
InspectorBackend.setExtraHeaders(allHeaders);
},
_onCreatePanel: function(message, port)
{
var id = message.id;
// The ids are generated on the client API side and must be unique, so the check below
// shouldn't be hit unless someone is bypassing the API.
if (id in this._clientObjects || id in WebInspector.panels)
return this._status.E_EXISTS(id);
var panel = new WebInspector.ExtensionPanel(id, message.title, message.icon);
this._clientObjects[id] = panel;
var toolbarElement = document.getElementById("toolbar");
var lastToolbarItem = WebInspector.panelOrder[WebInspector.panelOrder.length - 1].toolbarItem;
WebInspector.addPanelToolbarIcon(toolbarElement, panel, lastToolbarItem);
WebInspector.panels[id] = panel;
var iframe = this._createClientIframe(panel.element, message.url);
iframe.style.height = "100%";
return this._status.OK();
},
_onCreateSidebar: function(message)
{
var sidebar = this._createSidebar(message, WebInspector.SidebarPane);
if (sidebar.isError)
return sidebar;
this._createClientIframe(sidebar.bodyElement, message.url);
return this._status.OK();
},
_onCreateWatchExpressionSidebarPane: function(message)
{
var sidebar = this._createSidebar(message, WebInspector.ExtensionWatchSidebarPane);
return sidebar.isError ? sidebar : this._status.OK();
},
_createSidebar: function(message, constructor)
{
var panel = WebInspector.panels[message.panel];
if (!panel)
return this._status.E_NOTFOUND(message.panel);
if (!panel.sidebarElement || !panel.sidebarPanes)
return this._status.E_NOTSUPPORTED();
var id = message.id;
var sidebar = new constructor(message.title, message.id);
this._clientObjects[id] = sidebar;
panel.sidebarPanes[id] = sidebar;
panel.sidebarElement.appendChild(sidebar.element);
return sidebar;
},
_createClientIframe: function(parent, url, requestId, port)
{
var iframe = document.createElement("iframe");
iframe.src = url;
iframe.style.width = "100%";
parent.appendChild(iframe);
return iframe;
},
_onSetSidebarHeight: function(message)
{
var sidebar = this._clientObjects[message.id];
if (!sidebar)
return this._status.E_NOTFOUND(message.id);
sidebar.bodyElement.firstChild.style.height = message.height;
},
_onSetWatchSidebarContent: function(message)
{
var sidebar = this._clientObjects[message.id];
if (!sidebar)
return this._status.E_NOTFOUND(message.id);
if (message.evaluateOnPage)
sidebar.setExpression(message.expression, message.rootTitle);
else
sidebar.setObject(message.expression, message.rootTitle);
},
_onLog: function(message)
{
WebInspector.log(message.message);
},
_onReload: function(message)
{
if (typeof message.userAgent === "string")
InspectorBackend.setUserAgentOverride(message.userAgent);
InspectorBackend.reloadPage(false);
return this._status.OK();
},
_onEvaluateOnInspectedPage: function(message, port)
{
function callback(resultPayload)
{
var resultObject = WebInspector.RemoteObject.fromPayload(resultPayload);
var result = {};
if (resultObject.isError())
result.isException = true;
result.value = resultObject.description;
this._dispatchCallback(message.requestId, port, result);
}
var evalExpression = "JSON.stringify(eval(unescape('" + escape(message.expression) + "')));";
InspectorBackend.evaluate(evalExpression, "none", true, callback.bind(this));
},
_onRevealAndSelect: function(message)
{
if (message.panelId === "resources" && type === "resource")
return this._onRevealAndSelectResource(message);
else
return this._status.E_NOTSUPPORTED(message.panelId, message.type);
},
_onRevealAndSelectResource: function(message)
{
var id = message.id;
var resource = null;
resource = WebInspector.networkResourceById(id) || WebInspector.resourceForURL(id);
if (!resource)
return this._status.E_NOTFOUND(typeof id + ": " + id);
WebInspector.panels.resources.showResource(resource, message.line);
WebInspector.showPanel("resources");
},
_dispatchCallback: function(requestId, port, result)
{
port.postMessage({ command: "callback", requestId: requestId, result: result });
},
_onGetHAR: function(request)
{
var harLog = new WebInspector.HARLog();
harLog.includeResourceIds = true;
return harLog.build();
},
_onGetResourceContent: function(message, port)
{
function onContentAvailable(content, encoded)
{
var response = {
encoding: encoded ? "base64" : "",
content: content
};
this._dispatchCallback(message.requestId, port, response);
}
var resource = WebInspector.networkResourceById(message.id);
if (!resource)
return this._status.E_NOTFOUND(message.id);
resource.requestContent(onContentAvailable.bind(this));
},
_onAddAuditCategory: function(request)
{
var category = new WebInspector.ExtensionAuditCategory(request.id, request.displayName, request.resultCount);
if (WebInspector.panels.audits.getCategory(category.id))
return this._status.E_EXISTS(category.id);
this._clientObjects[request.id] = category;
WebInspector.panels.audits.addCategory(category);
},
_onAddAuditResult: function(request)
{
var auditResult = this._clientObjects[request.resultId];
if (!auditResult)
return this._status.E_NOTFOUND(request.resultId);
try {
auditResult.addResult(request.displayName, request.description, request.severity, request.details);
} catch (e) {
return e;
}
return this._status.OK();
},
_onStopAuditCategoryRun: function(request)
{
var auditRun = this._clientObjects[request.resultId];
if (!auditRun)
return this._status.E_NOTFOUND(request.resultId);
auditRun.cancel();
},
initExtensions: function()
{
// The networkManager is normally created after the ExtensionServer is constructed, but before initExtensions() is called.
WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceFinished, this._notifyResourceFinished, this);
InspectorExtensionRegistry.getExtensionsAsync();
},
_addExtensions: function(extensions)
{
// See ExtensionAPI.js and ExtensionCommon.js for details.
InspectorFrontendHost.setExtensionAPI(this._buildExtensionAPIInjectedScript());
for (var i = 0; i < extensions.length; ++i) {
var extension = extensions[i];
try {
if (!extension.startPage)
return;
var iframe = document.createElement("iframe");
iframe.src = extension.startPage;
iframe.style.display = "none";
document.body.appendChild(iframe);
} catch (e) {
console.error("Failed to initialize extension " + extension.startPage + ":" + e);
}
}
},
_buildExtensionAPIInjectedScript: function()
{
var resourceTypes = {};
var resourceTypeProperties = Object.getOwnPropertyNames(WebInspector.Resource.Type);
for (var i = 0; i < resourceTypeProperties.length; ++i) {
var propName = resourceTypeProperties[i];
var propValue = WebInspector.Resource.Type[propName];
if (typeof propValue === "number")
resourceTypes[propName] = WebInspector.Resource.Type.toString(propValue);
}
var platformAPI = WebInspector.buildPlatformExtensionAPI ? WebInspector.buildPlatformExtensionAPI() : "";
return "(function(){ " +
"var apiPrivate = {};" +
"(" + WebInspector.commonExtensionSymbols.toString() + ")(apiPrivate);" +
"(" + WebInspector.injectedExtensionAPI.toString() + ").apply(this, arguments);" +
platformAPI +
"})";
},
_onWindowMessage: function(event)
{
if (event.data !== "registerExtension")
return;
var port = event.ports[0];
port.addEventListener("message", this._onmessage.bind(this), false);
port.start();
},
_onmessage: function(event)
{
var request = event.data;
var result;
if (request.command in this._handlers)
result = this._handlers[request.command](request, event.target);
else
result = this._status.E_NOTSUPPORTED(request.command);
if (result && request.requestId)
this._dispatchCallback(request.requestId, event.target, result);
},
_registerHandler: function(command, callback)
{
this._handlers[command] = callback;
}
}
WebInspector.ExtensionServer._statuses =
{
OK: "",
E_EXISTS: "Object already exists: %s",
E_BADARG: "Invalid argument %s: %s",
E_BADARGTYPE: "Invalid type for argument %s: got %s, expected %s",
E_NOTFOUND: "Object not found: %s",
E_NOTSUPPORTED: "Object does not support requested operation: %s",
}
WebInspector.ExtensionStatus = function()
{
function makeStatus(code)
{
var description = WebInspector.ExtensionServer._statuses[code] || code;
var details = Array.prototype.slice.call(arguments, 1);
var status = { code: code, description: description, details: details };
if (code !== "OK") {
status.isError = true;
console.log("Extension server error: " + String.vsprintf(description, details));
}
return status;
}
for (status in WebInspector.ExtensionServer._statuses)
this[status] = makeStatus.bind(null, status);
}
WebInspector.addExtensions = function(extensions)
{
WebInspector.extensionServer._addExtensions(extensions);
}
WebInspector.extensionServer = new WebInspector.ExtensionServer();

109
node_modules/weinre/web/client/FontView.js generated vendored Normal file
View File

@ -0,0 +1,109 @@
/*
* Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.FontView = function(resource)
{
WebInspector.ResourceView.call(this, resource);
this.element.addStyleClass("font");
}
WebInspector.FontView.prototype = {
hasContent: function()
{
return true;
},
_createContentIfNeeded: function()
{
if (this.fontPreviewElement)
return;
var uniqueFontName = "WebInspectorFontPreview" + this.resource.identifier;
this.fontStyleElement = document.createElement("style");
this.fontStyleElement.textContent = "@font-face { font-family: \"" + uniqueFontName + "\"; src: url(" + this.resource.url + "); }";
document.head.appendChild(this.fontStyleElement);
this.fontPreviewElement = document.createElement("div");
this.element.appendChild(this.fontPreviewElement);
this.fontPreviewElement.style.setProperty("font-family", uniqueFontName, null);
this.fontPreviewElement.innerHTML = "ABCDEFGHIJKLM<br>NOPQRSTUVWXYZ<br>abcdefghijklm<br>nopqrstuvwxyz<br>1234567890";
this._lineCount = this.fontPreviewElement.getElementsByTagName("br").length + 1;
this.updateFontPreviewSize();
},
show: function(parentElement)
{
WebInspector.ResourceView.prototype.show.call(this, parentElement);
this._createContentIfNeeded();
this.updateFontPreviewSize();
},
resize: function()
{
this.updateFontPreviewSize();
WebInspector.ResourceView.prototype.resize.call(this);
},
updateFontPreviewSize: function()
{
if (!this.fontPreviewElement || !this.visible)
return;
var measureFontSize = 50;
this.fontPreviewElement.style.setProperty("font-size", measureFontSize + "px", null);
this.fontPreviewElement.style.setProperty("position", "absolute", null);
this.fontPreviewElement.style.removeProperty("height");
var height = this.fontPreviewElement.offsetHeight;
var width = this.fontPreviewElement.offsetWidth;
// Subtract some padding. This should match the padding in the CSS plus room for the scrollbar.
var containerWidth = this.element.offsetWidth - 50;
if (!height || !width || !containerWidth) {
this.fontPreviewElement.style.removeProperty("font-size");
this.fontPreviewElement.style.removeProperty("position");
return;
}
var realLineHeight = Math.floor(height / this._lineCount);
var fontSizeLineRatio = measureFontSize / realLineHeight;
var widthRatio = containerWidth / width;
var finalFontSize = Math.floor(realLineHeight * widthRatio * fontSizeLineRatio) - 2;
this.fontPreviewElement.style.setProperty("font-size", finalFontSize + "px", null);
this.fontPreviewElement.style.setProperty("height", this.fontPreviewElement.offsetHeight + "px", null);
this.fontPreviewElement.style.removeProperty("position");
}
}
WebInspector.FontView.prototype.__proto__ = WebInspector.ResourceView.prototype;

127
node_modules/weinre/web/client/GoToLineDialog.js generated vendored Normal file
View File

@ -0,0 +1,127 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.GoToLineDialog = function(view)
{
this._element = document.createElement("div");
this._element.className = "go-to-line-dialog";
this._element.addEventListener("keydown", this._onKeyDown.bind(this), false);
this._closeKeys = [
WebInspector.KeyboardShortcut.Keys.Enter.code,
WebInspector.KeyboardShortcut.Keys.Esc.code,
];
var dialogWindow = this._element;
dialogWindow.createChild("label").innerText = WebInspector.UIString("Go to line: ");
this._input = dialogWindow.createChild("input");
this._input.setAttribute("type", "text");
this._input.setAttribute("size", 6);
var linesCount = view.textModel.linesCount;
if (linesCount)
this._input.setAttribute("title", WebInspector.UIString("1 - %d", linesCount));
var blurHandler = this._onBlur.bind(this);
this._input.addEventListener("blur", blurHandler, false);
var go = dialogWindow.createChild("button");
go.innerText = WebInspector.UIString("Go");
go.addEventListener("click", this._onClick.bind(this), false);
go.addEventListener("mousedown", function(e) {
// Ok button click will close the dialog, removing onBlur listener
// to let click event be handled.
this._input.removeEventListener("blur", blurHandler, false);
}.bind(this), false);
this._view = view;
view.element.appendChild(this._element);
this._previousFocusElement = WebInspector.currentFocusElement;
WebInspector.currentFocusElement = this._input;
this._input.select();
}
WebInspector.GoToLineDialog.show = function(sourceView)
{
if (this._instance)
return;
this._instance = new WebInspector.GoToLineDialog(sourceView);
}
WebInspector.GoToLineDialog.prototype = {
_hide: function()
{
if (this._isHiding)
return;
this._isHiding = true;
WebInspector.currentFocusElement = this._previousFocusElement;
WebInspector.GoToLineDialog._instance = null;
this._element.parentElement.removeChild(this._element);
},
_onBlur: function(event)
{
this._hide();
},
_onKeyDown: function(event)
{
if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Tab.code) {
event.preventDefault();
return;
}
if (event.keyCode === WebInspector.KeyboardShortcut.Keys.Enter.code)
this._highlightSelectedLine();
if (this._closeKeys.indexOf(event.keyCode) >= 0) {
this._hide();
event.stopPropagation();
}
},
_onClick: function(event)
{
this._highlightSelectedLine();
this._hide();
},
_highlightSelectedLine: function()
{
var value = this._input.value;
var lineNumber = parseInt(value, 10);
if (!isNaN(lineNumber) && lineNumber > 0) {
lineNumber = Math.min(lineNumber, this._view.textModel.linesCount);
this._view.highlightLine(lineNumber);
}
}
};

246
node_modules/weinre/web/client/HAREntry.js generated vendored Normal file
View File

@ -0,0 +1,246 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
// See http://groups.google.com/group/http-archive-specification/web/har-1-2-spec
// for HAR specification.
WebInspector.HAREntry = function(resource)
{
this._resource = resource;
}
WebInspector.HAREntry.prototype = {
build: function()
{
return {
pageref: this._resource.documentURL,
startedDateTime: new Date(this._resource.startTime * 1000),
time: WebInspector.HAREntry._toMilliseconds(this._resource.duration),
request: this._buildRequest(),
response: this._buildResponse(),
// cache: {...}, -- Not supproted yet.
timings: this._buildTimings()
};
},
_buildRequest: function()
{
var res = {
method: this._resource.requestMethod,
url: this._resource.url,
// httpVersion: "HTTP/1.1" -- Not available.
headers: this._buildHeaders(this._resource.requestHeaders),
headersSize: -1, // Not available.
bodySize: -1 // Not available.
};
if (this._resource.queryParameters)
res.queryString = this._buildParameters(this._resource.queryParameters);
if (this._resource.requestFormData)
res.postData = this._buildPostData();
if (this._resource.requestCookies)
res.cookies = this._buildCookies(this._resource.requestCookies);
return res;
},
_buildResponse: function()
{
var res = {
status: this._resource.statusCode,
statusText: this._resource.statusText,
// "httpVersion": "HTTP/1.1" -- Not available.
headers: this._buildHeaders(this._resource.responseHeaders),
content: this._buildContent(),
redirectURL: this._resource.responseHeaderValue("Location") || "",
headersSize: -1, // Not available.
bodySize: this._resource.resourceSize
};
if (this._resource.responseCookies)
res.cookies = this._buildCookies(this._resource.responseCookies);
return res;
},
_buildContent: function()
{
return {
size: this._resource.resourceSize,
// compression: 0, -- Not available.
mimeType: this._resource.mimeType,
// text: -- Not available.
};
},
_buildTimings: function()
{
var waitForConnection = this._interval("connectStart", "connectEnd");
var blocked;
var connect;
var dns = this._interval("dnsStart", "dnsEnd");
var send = this._interval("sendStart", "sendEnd");
var ssl = this._interval("sslStart", "sslEnd");
if (ssl !== -1 && send !== -1)
send -= ssl;
if (this._resource.connectionReused) {
connect = -1;
blocked = waitForConnection;
} else {
blocked = 0;
connect = waitForConnection;
if (dns !== -1)
connect -= dns;
}
return {
blocked: blocked,
dns: dns,
connect: connect,
send: send,
wait: this._interval("sendEnd", "receiveHeadersEnd"),
receive: WebInspector.HAREntry._toMilliseconds(this._resource.receiveDuration),
ssl: ssl
};
},
_buildHeaders: function(headers)
{
var result = [];
for (var name in headers)
result.push({ name: name, value: headers[name] });
return result;
},
_buildPostData: function()
{
var res = {
mimeType: this._resource.requestHeaderValue("Content-Type"),
text: this._resource.requestFormData
};
if (this._resource.formParameters)
res.params = this._buildParameters(this._resource.formParameters);
return res;
},
_buildParameters: function(parameters)
{
return parameters.slice();
},
_buildCookies: function(cookies)
{
return cookies.map(this._buildCookie.bind(this));
},
_buildCookie: function(cookie)
{
return {
name: cookie.name,
value: cookie.value,
path: cookie.path,
domain: cookie.domain,
expires: cookie.expires(new Date(this._resource.startTime * 1000)),
httpOnly: cookie.httpOnly,
secure: cookie.secure
};
},
_interval: function(start, end)
{
var timing = this._resource.timing;
if (!timing)
return -1;
var startTime = timing[start];
return typeof startTime !== "number" || startTime === -1 ? -1 : Math.round(timing[end] - startTime);
}
}
WebInspector.HAREntry._toMilliseconds = function(time)
{
return time === -1 ? -1 : Math.round(time * 1000);
}
WebInspector.HARLog = function()
{
this.includeResourceIds = false;
}
WebInspector.HARLog.prototype = {
build: function()
{
var webKitVersion = /AppleWebKit\/([^ ]+)/.exec(window.navigator.userAgent);
return {
version: "1.2",
creator: {
name: "WebInspector",
version: webKitVersion ? webKitVersion[1] : "n/a"
},
pages: this._buildPages(),
entries: WebInspector.networkResources.map(this._convertResource.bind(this))
}
},
_buildPages: function()
{
return [
{
startedDateTime: new Date(WebInspector.mainResource.startTime * 1000),
id: WebInspector.mainResource.documentURL,
title: "",
pageTimings: this.buildMainResourceTimings()
}
];
},
buildMainResourceTimings: function()
{
return {
onContentLoad: this._pageEventTime(WebInspector.mainResourceDOMContentTime),
onLoad: this._pageEventTime(WebInspector.mainResourceLoadTime),
}
},
_convertResource: function(resource)
{
var entry = (new WebInspector.HAREntry(resource)).build();
if (this.includeResourceIds)
entry._resourceId = resource.identifier;
return entry;
},
_pageEventTime: function(time)
{
var startTime = WebInspector.mainResource.startTime;
if (time === -1 || startTime === -1)
return -1;
return WebInspector.HAREntry._toMilliseconds(time - startTime);
}
}

909
node_modules/weinre/web/client/HeapSnapshot.js generated vendored Normal file
View File

@ -0,0 +1,909 @@
/*
* Copyright (C) 2011 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.HeapSnapshotArraySlice = function(snapshot, arrayName, start, end)
{
// Note: we don't reference snapshot contents directly to avoid
// holding references to big chunks of data.
this._snapshot = snapshot;
this._arrayName = arrayName;
this._start = start;
this.length = end - start;
}
WebInspector.HeapSnapshotArraySlice.prototype = {
item: function(index)
{
return this._snapshot[this._arrayName][this._start + index];
}
}
WebInspector.HeapSnapshotEdge = function(snapshot, edges, edgeIndex)
{
this._snapshot = snapshot;
this._edges = edges;
this.edgeIndex = edgeIndex || 0;
}
WebInspector.HeapSnapshotEdge.prototype = {
clone: function()
{
return new WebInspector.HeapSnapshotEdge(this._snapshot, this._edges, this.edgeIndex);
},
get hasStringName()
{
if (!this.isShortcut)
return this._hasStringName;
return isNaN(parseInt(this._name, 10));
},
get isElement()
{
return this._type() === this._snapshot._edgeElementType;
},
get isHidden()
{
return this._type() === this._snapshot._edgeHiddenType;
},
get isInternal()
{
return this._type() === this._snapshot._edgeInternalType;
},
get isShortcut()
{
return this._type() === this._snapshot._edgeShortcutType;
},
get name()
{
if (!this.isShortcut)
return this._name;
var numName = parseInt(this._name, 10);
return isNaN(numName) ? this._name : numName;
},
get node()
{
return new WebInspector.HeapSnapshotNode(this._snapshot, this.nodeIndex);
},
get nodeIndex()
{
return this._edges.item(this.edgeIndex + this._snapshot._edgeToNodeOffset);
},
get rawEdges()
{
return this._edges;
},
toString: function()
{
switch (this.type) {
case "context": return "->" + this.name;
case "element": return "[" + this.name + "]";
case "property":
return this.name.indexOf(" ") === -1 ? "." + this.name : "[\"" + this.name + "\"]";
case "shortcut":
var name = this.name;
if (typeof name === "string")
return this.name.indexOf(" ") === -1 ? "." + this.name : "[\"" + this.name + "\"]";
else
return "[" + this.name + "]";
case "internal":
case "hidden":
return "{" + this.name + "}";
};
return "?" + this.name + "?";
},
get type()
{
return this._snapshot._edgeTypes[this._type()];
},
get _hasStringName()
{
return !this.isElement && !this.isHidden;
},
get _name()
{
return this._hasStringName ? this._snapshot._strings[this._nameOrIndex] : this._nameOrIndex;
},
get _nameOrIndex()
{
return this._edges.item(this.edgeIndex + this._snapshot._edgeNameOffset);
},
_type: function()
{
return this._edges.item(this.edgeIndex + this._snapshot._edgeTypeOffset);
}
};
WebInspector.HeapSnapshotEdgeIterator = function(edge)
{
this.edge = edge;
}
WebInspector.HeapSnapshotEdgeIterator.prototype = {
first: function()
{
this.edge.edgeIndex = 0;
},
hasNext: function()
{
return this.edge.edgeIndex < this.edge._edges.length;
},
get index()
{
return this.edge.edgeIndex;
},
set index(newIndex)
{
this.edge.edgeIndex = newIndex;
},
get item()
{
return this.edge;
},
next: function()
{
this.edge.edgeIndex += this.edge._snapshot._edgeFieldsCount;
}
};
WebInspector.HeapSnapshotNode = function(snapshot, nodeIndex)
{
this._snapshot = snapshot;
this._firstNodeIndex = nodeIndex;
this.nodeIndex = nodeIndex;
}
WebInspector.HeapSnapshotNode.prototype = {
get className()
{
switch (this.type) {
case "hidden":
return WebInspector.UIString("(system)");
case "object":
return this.name;
case "code":
return WebInspector.UIString("(compiled code)");
default:
return "(" + this.type + ")";
}
},
dominatorIndex: function()
{
return this._nodes[this.nodeIndex + this._snapshot._dominatorOffset];
},
get edges()
{
return new WebInspector.HeapSnapshotEdgeIterator(new WebInspector.HeapSnapshotEdge(this._snapshot, this.rawEdges));
},
get edgesCount()
{
return this._nodes[this.nodeIndex + this._snapshot._edgesCountOffset];
},
get id()
{
return this._nodes[this.nodeIndex + this._snapshot._nodeIdOffset];
},
get instancesCount()
{
return this._nodes[this.nodeIndex + this._snapshot._nodeInstancesCountOffset];
},
get isHidden()
{
return this._type() === this._snapshot._nodeHiddenType;
},
get isRoot()
{
return this.nodeIndex === this._snapshot._rootNodeIndex;
},
get name()
{
return this._snapshot._strings[this._name()];
},
get rawEdges()
{
var firstEdgeIndex = this._firstEdgeIndex();
return new WebInspector.HeapSnapshotArraySlice(this._snapshot, "_nodes", firstEdgeIndex, firstEdgeIndex + this.edgesCount * this._snapshot._edgeFieldsCount);
},
get retainedSize()
{
return this._nodes[this.nodeIndex + this._snapshot._nodeRetainedSizeOffset];
},
get retainers()
{
return new WebInspector.HeapSnapshotEdgeIterator(new WebInspector.HeapSnapshotEdge(this._snapshot, this._snapshot.retainers(this)));
},
get selfSize()
{
return this._nodes[this.nodeIndex + this._snapshot._nodeSelfSizeOffset];
},
get type()
{
return this._snapshot._nodeTypes[this._type()];
},
_name: function()
{
return this._nodes[this.nodeIndex + this._snapshot._nodeNameOffset];
},
get _nodes()
{
return this._snapshot._nodes;
},
_firstEdgeIndex: function()
{
return this.nodeIndex + this._snapshot._firstEdgeOffset;
},
get _nextNodeIndex()
{
return this._firstEdgeIndex() + this.edgesCount * this._snapshot._edgeFieldsCount;
},
_type: function()
{
return this._nodes[this.nodeIndex + this._snapshot._nodeTypeOffset];
}
};
WebInspector.HeapSnapshotNodeIterator = function(node)
{
this.node = node;
}
WebInspector.HeapSnapshotNodeIterator.prototype = {
first: function()
{
this.node.nodeIndex = this.node._firstNodeIndex;
},
hasNext: function()
{
return this.node.nodeIndex < this.node._nodes.length;
},
get index()
{
return this.node.nodeIndex;
},
set index(newIndex)
{
this.node.nodeIndex = newIndex;
},
get item()
{
return this.node;
},
next: function()
{
this.node.nodeIndex = this.node._nextNodeIndex;
}
}
WebInspector.HeapSnapshot = function(profile)
{
this._nodes = profile.nodes;
this._strings = profile.strings;
this._init();
}
WebInspector.HeapSnapshot.prototype = {
_init: function()
{
this._metaNodeIndex = 0;
this._rootNodeIndex = 1;
var meta = this._nodes[this._metaNodeIndex];
this._nodeTypeOffset = meta.fields.indexOf("type");
this._nodeNameOffset = meta.fields.indexOf("name");
this._nodeIdOffset = meta.fields.indexOf("id");
this._nodeInstancesCountOffset = this._nodeIdOffset;
this._nodeSelfSizeOffset = meta.fields.indexOf("self_size");
this._nodeRetainedSizeOffset = meta.fields.indexOf("retained_size");
this._dominatorOffset = meta.fields.indexOf("dominator");
this._edgesCountOffset = meta.fields.indexOf("children_count");
this._firstEdgeOffset = meta.fields.indexOf("children");
this._nodeTypes = meta.types[this._nodeTypeOffset];
this._nodeHiddenType = this._nodeTypes.indexOf("hidden");
var edgesMeta = meta.types[this._firstEdgeOffset];
this._edgeFieldsCount = edgesMeta.fields.length;
this._edgeTypeOffset = edgesMeta.fields.indexOf("type");
this._edgeNameOffset = edgesMeta.fields.indexOf("name_or_index");
this._edgeToNodeOffset = edgesMeta.fields.indexOf("to_node");
this._edgeTypes = edgesMeta.types[this._edgeTypeOffset];
this._edgeElementType = this._edgeTypes.indexOf("element");
this._edgeHiddenType = this._edgeTypes.indexOf("hidden");
this._edgeInternalType = this._edgeTypes.indexOf("internal");
this._edgeShortcutType = this._edgeTypes.indexOf("shortcut");
},
dispose: function()
{
delete this._nodes;
delete this._strings;
if (this._idsMap)
delete this._idsMap;
if (this._retainers) {
delete this._retainers;
delete this._nodesToRetainers;
}
if (this._aggregates) {
delete this._aggregates;
this._aggregatesWithIndexes = false;
}
},
get allNodes()
{
return new WebInspector.HeapSnapshotNodeIterator(this.rootNode);
},
get nodesCount()
{
if (this._nodesCount)
return this._nodesCount;
this._nodesCount = 0;
for (var iter = this.allNodes; iter.hasNext(); iter.next())
++this._nodesCount;
return this._nodesCount;
},
restore: function(profile)
{
this._nodes = profile.nodes;
this._strings = profile.strings;
},
get rootNode()
{
return new WebInspector.HeapSnapshotNode(this, this._rootNodeIndex);
},
get totalSize()
{
return this.rootNode.retainedSize;
},
get idsMap()
{
if (this._idsMap)
return this._idsMap;
this._idsMap = [];
for (var iter = this.allNodes; iter.hasNext(); iter.next()) {
this._idsMap[iter.node.id] = true;
}
return this._idsMap;
},
retainers: function(node)
{
if (!this._retainers)
this._buildRetainers();
var retIndexFrom = this._nodesToRetainers[node.nodeIndex];
var retIndexTo = this._nodesToRetainers[node._nextNodeIndex];
return new WebInspector.HeapSnapshotArraySlice(this, "_retainers", retIndexFrom, retIndexTo);
},
aggregates: function(withNodeIndexes)
{
if (!this._aggregates)
this._buildAggregates();
if (withNodeIndexes && !this._aggregatesWithIndexes)
this._buildAggregatesIndexes();
return this._aggregates;
},
_buildRetainers: function()
{
this._nodesToRetainers = [];
for (var nodesIter = this.allNodes; nodesIter.hasNext(); nodesIter.next()) {
var node = nodesIter.node;
if (!(node.nodeIndex in this._nodesToRetainers))
this._nodesToRetainers[node.nodeIndex] = 0;
for (var edgesIter = node.edges; edgesIter.hasNext(); edgesIter.next()) {
var edge = edgesIter.edge;
var nodeIndex = edge.nodeIndex;
if (!(nodeIndex in this._nodesToRetainers))
this._nodesToRetainers[nodeIndex] = 0;
this._nodesToRetainers[nodeIndex] += this._edgeFieldsCount;
}
}
nodesIter = this.allNodes;
var node = nodesIter.node;
var prevIndex = this._nodesToRetainers[node.nodeIndex] = 0;
var prevRetsCount = this._nodesToRetainers[node.nodeIndex];
nodesIter.next();
for (; nodesIter.hasNext(); nodesIter.next()) {
node = nodesIter.node;
var savedRefsCount = this._nodesToRetainers[node.nodeIndex];
this._nodesToRetainers[node.nodeIndex] = prevIndex + prevRetsCount;
prevIndex = this._nodesToRetainers[node.nodeIndex];
prevRetsCount = savedRefsCount;
}
this._retainers = new Array(prevIndex + prevRetsCount);
this._nodesToRetainers[this._nodes.length] = this._retainers.length;
for (nodesIter = this.allNodes; nodesIter.hasNext(); nodesIter.next()) {
node = nodesIter.node;
var retsCount = this._nodesToRetainers[node._nextNodeIndex] - this._nodesToRetainers[node.nodeIndex];
if (retsCount > 0) {
this._retainers[this._nodesToRetainers[node.nodeIndex]] = retsCount;
}
}
for (nodesIter = this.allNodes; nodesIter.hasNext(); nodesIter.next()) {
node = nodesIter.node;
for (var edgesIter = node.edges; edgesIter.hasNext(); edgesIter.next()) {
var edge = edgesIter.edge;
var nodeIndex = edge.nodeIndex;
var retIndex = this._nodesToRetainers[nodeIndex];
this._retainers[retIndex] -= this._edgeFieldsCount;
var idx = retIndex + this._retainers[retIndex];
this._retainers[idx + this._edgeTypeOffset] = edge._type();
this._retainers[idx + this._edgeNameOffset] = edge._nameOrIndex;
this._retainers[idx + this._edgeToNodeOffset] = node.nodeIndex;
}
}
},
_buildAggregates: function()
{
this._aggregates = {};
for (var iter = this.allNodes; iter.hasNext(); iter.next()) {
var node = iter.node;
var className = node.className;
var nameMatters = node.type === "object";
if (node.selfSize === 0)
continue;
if (!(className in this._aggregates))
this._aggregates[className] = { count: 0, self: 0, maxRet: 0, type: node.type, name: nameMatters ? node.name : null, idxs: [] };
var clss = this._aggregates[className];
++clss.count;
clss.self += node.selfSize;
if (node.retainedSize > clss.maxRet)
clss.maxRet = node.retainedSize;
}
},
_buildAggregatesIndexes: function()
{
for (var iter = this.allNodes; iter.hasNext(); iter.next()) {
var node = iter.node;
var className = node.className;
var clss = this._aggregates[className];
if (clss)
clss.idxs.push(node.nodeIndex);
}
var nodeA = new WebInspector.HeapSnapshotNode(this);
var nodeB = new WebInspector.HeapSnapshotNode(this);
for (var clss in this._aggregates)
this._aggregates[clss].idxs.sort(
function(idxA, idxB) {
nodeA.nodeIndex = idxA;
nodeB.nodeIndex = idxB;
return nodeA.id < nodeB.id ? -1 : 1;
});
this._aggregatesWithIndexes = true;
}
};
WebInspector.HeapSnapshotFilteredOrderedIterator = function(snapshot, iterator, filter)
{
this._snapshot = snapshot;
this._filter = filter;
this._iterator = iterator;
this._iterationOrder = null;
this._position = 0;
this._lastComparator = null;
}
WebInspector.HeapSnapshotFilteredOrderedIterator.prototype = {
_createIterationOrder: function()
{
this._iterationOrder = [];
var iterator = this._iterator;
if (!this._filter) {
for (iterator.first(); iterator.hasNext(); iterator.next())
this._iterationOrder.push(iterator.index);
} else {
for (iterator.first(); iterator.hasNext(); iterator.next()) {
if (this._filter(iterator.item))
this._iterationOrder.push(iterator.index);
}
}
},
first: function()
{
this._position = 0;
},
hasNext: function()
{
return this._position < this._iterationOrder.length;
},
get isEmpty()
{
if (this._iterationOrder)
return !this._iterationOrder.length;
var iterator = this._iterator;
if (!this._filter) {
iterator.first();
return !iterator.hasNext();
}
for (iterator.first(); iterator.hasNext(); iterator.next())
if (this._filter(iterator.item)) return false;
return true;
},
get item()
{
this._iterator.index = this._iterationOrder[this._position];
return this._iterator.item;
},
get lastComparator()
{
return this._lastComparator;
},
get length()
{
if (!this._iterationOrder)
this._createIterationOrder();
return this._iterationOrder.length;
},
next: function()
{
++this._position;
}
}
WebInspector.HeapSnapshotFilteredOrderedIterator.prototype.createComparator = function(fieldNames)
{
return {fieldName1:fieldNames[0], ascending1:fieldNames[1], fieldName2:fieldNames[2], ascending2:fieldNames[3]};
}
WebInspector.HeapSnapshotEdgesProvider = function(snapshot, rawEdges, filter)
{
WebInspector.HeapSnapshotFilteredOrderedIterator.call(this, snapshot, new WebInspector.HeapSnapshotEdgeIterator(new WebInspector.HeapSnapshotEdge(snapshot, rawEdges)), filter);
}
WebInspector.HeapSnapshotEdgesProvider.prototype = {
sort: function(comparator)
{
if (this._lastComparator === comparator)
return false;
this._lastComparator = comparator;
var fieldName1 = comparator.fieldName1;
var fieldName2 = comparator.fieldName2;
var ascending1 = comparator.ascending1;
var ascending2 = comparator.ascending2;
var edgeA = this._iterator.item.clone();
var edgeB = edgeA.clone();
var nodeA = new WebInspector.HeapSnapshotNode(this._snapshot);
var nodeB = new WebInspector.HeapSnapshotNode(this._snapshot);
function sortByEdgeFieldName(ascending, indexA, indexB)
{
edgeA.edgeIndex = indexA;
edgeB.edgeIndex = indexB;
if (edgeB.name === "__proto__") return -1;
if (edgeA.name === "__proto__") return 1;
var result =
edgeA.hasStringName === edgeB.hasStringName ?
(edgeA.name < edgeB.name ? -1 : (edgeA.name > edgeB.name ? 1 : 0)) :
(edgeA.hasStringName ? -1 : 1);
return ascending ? result : -result;
}
function sortByNodeField(fieldName, ascending, indexA, indexB)
{
edgeA.edgeIndex = indexA;
edgeB.edgeIndex = indexB;
nodeA.nodeIndex = edgeA.nodeIndex;
nodeB.nodeIndex = edgeB.nodeIndex;
var valueA = nodeA[fieldName];
var valueB = nodeB[fieldName];
var result = valueA < valueB ? -1 : (valueA > valueB ? 1 : 0);
return ascending ? result : -result;
}
if (!this._iterationOrder)
this._createIterationOrder();
function sortByEdgeAndNode(indexA, indexB) {
var result = sortByEdgeFieldName(ascending1, indexA, indexB);
if (result === 0)
result = sortByNodeField(fieldName2, ascending2, indexA, indexB);
return result;
}
function sortByNodeAndEdge(indexA, indexB) {
var result = sortByNodeField(fieldName1, ascending1, indexA, indexB);
if (result === 0)
result = sortByEdgeFieldName(ascending2, indexA, indexB);
return result;
}
function sortByNodeAndNode(indexA, indexB) {
var result = sortByNodeField(fieldName1, ascending1, indexA, indexB);
if (result === 0)
result = sortByNodeField(fieldName2, ascending2, indexA, indexB);
return result;
}
if (fieldName1 === "!edgeName")
this._iterationOrder.sort(sortByEdgeAndNode);
else if (fieldName2 === "!edgeName")
this._iterationOrder.sort(sortByNodeAndEdge);
else
this._iterationOrder.sort(sortByNodeAndNode);
return true;
}
};
WebInspector.HeapSnapshotEdgesProvider.prototype.__proto__ = WebInspector.HeapSnapshotFilteredOrderedIterator.prototype;
WebInspector.HeapSnapshotNodesProvider = function(snapshot, nodes, filter)
{
WebInspector.HeapSnapshotFilteredOrderedIterator.call(this, snapshot, nodes, filter);
}
WebInspector.HeapSnapshotNodesProvider.prototype = {
sort: function(comparator)
{
if (this._lastComparator === comparator)
return false;
this._lastComparator = comparator;
var fieldName1 = comparator.fieldName1;
var fieldName2 = comparator.fieldName2;
var ascending1 = comparator.ascending1;
var ascending2 = comparator.ascending2;
var nodeA = new WebInspector.HeapSnapshotNode(this._snapshot);
var nodeB = new WebInspector.HeapSnapshotNode(this._snapshot);
function sortByNodeField(fieldName, ascending, indexA, indexB)
{
nodeA.nodeIndex = indexA;
nodeB.nodeIndex = indexB;
var valueA = nodeA[fieldName];
var valueB = nodeB[fieldName];
var result = valueA < valueB ? -1 : (valueA > valueB ? 1 : 0);
return ascending ? result : -result;
}
if (!this._iterationOrder)
this._createIterationOrder();
function sortByComparator(indexA, indexB) {
var result = sortByNodeField(fieldName1, ascending1, indexA, indexB);
if (result === 0)
result = sortByNodeField(fieldName2, ascending2, indexA, indexB);
return result;
}
this._iterationOrder.sort(sortByComparator);
return true;
}
};
WebInspector.HeapSnapshotNodesProvider.prototype.__proto__ = WebInspector.HeapSnapshotFilteredOrderedIterator.prototype;
WebInspector.HeapSnapshotPathFinder = function(snapshot, targetNodeIndex)
{
this._snapshot = snapshot;
this._maxLength = 1;
this._lengthLimit = 15;
this._targetNodeIndex = targetNodeIndex;
this._currentPath = null;
this._skipHidden = !WebInspector.DetailedHeapshotView.prototype.showHiddenData;
this._rootChildren = this._fillRootChildren();
}
WebInspector.HeapSnapshotPathFinder.prototype = {
findNext: function()
{
for (var i = 0; i < 100000; ++i) {
if (!this._buildNextPath()) {
if (++this._maxLength >= this._lengthLimit)
return null;
this._currentPath = null;
if (!this._buildNextPath())
return null;
}
if (this._isPathFound())
return {path:this._pathToString(this._currentPath), len:this._currentPath.length};
}
return false;
},
_fillRootChildren: function()
{
var result = [];
for (var iter = this._snapshot.rootNode.edges; iter.hasNext(); iter.next())
result[iter.edge.nodeIndex] = true;
return result;
},
_appendToCurrentPath: function(iter)
{
this._currentPath._cache[this._lastEdge.nodeIndex] = true;
this._currentPath.push(iter);
},
_removeLastFromCurrentPath: function()
{
this._currentPath.pop();
delete this._currentPath._cache[this._lastEdge.nodeIndex];
},
_hasInPath: function(nodeIndex)
{
return this._targetNodeIndex === nodeIndex
|| !!this._currentPath._cache[nodeIndex];
},
_isPathFound: function()
{
return this._currentPath.length === this._maxLength
&& this._lastEdge.nodeIndex in this._rootChildren;
},
get _lastEdgeIter()
{
return this._currentPath[this._currentPath.length - 1];
},
get _lastEdge()
{
return this._lastEdgeIter.edge;
},
_skipEdge: function(edge)
{
return (this._skipHidden && (edge.isHidden || edge.node.isHidden))
|| this._hasInPath(edge.nodeIndex);
},
_nextEdgeIter: function()
{
var iter = this._lastEdgeIter;
while (this._skipEdge(iter.edge) && iter.hasNext())
iter.next();
return iter;
},
_buildNextPath: function()
{
if (this._currentPath !== null) {
var iter = this._lastEdgeIter;
while (true) {
iter.next();
if (iter.hasNext())
return true;
while (true) {
if (this._currentPath.length > 1) {
this._removeLastFromCurrentPath();
iter = this._lastEdgeIter;
iter.next();
iter = this._nextEdgeIter();
if (iter.hasNext()) {
while (this._currentPath.length < this._maxLength) {
iter = this._nextEdgeIter();
if (iter.hasNext())
this._appendToCurrentPath(iter.edge.node.retainers);
else
return true;
}
return true;
}
} else
return false;
}
}
} else {
var node = new WebInspector.HeapSnapshotNode(this._snapshot, this._targetNodeIndex);
this._currentPath = [node.retainers];
this._currentPath._cache = {};
while (this._currentPath.length < this._maxLength) {
var iter = this._nextEdgeIter();
if (iter.hasNext())
this._appendToCurrentPath(iter.edge.node.retainers);
else
break;
}
return true;
}
},
_nodeToString: function(node)
{
if (node.id === 1)
return node.name;
else
return node.name + "@" + node.id;
},
_pathToString: function(path)
{
if (!path)
return "";
var sPath = [];
for (var j = 0; j < path.length; ++j)
sPath.push(path[j].edge.toString());
sPath.push(this._nodeToString(path[path.length - 1].edge.node));
sPath.reverse();
return sPath.join("");
}
};

1032
node_modules/weinre/web/client/HeapSnapshotView.js generated vendored Normal file

File diff suppressed because it is too large Load Diff

88
node_modules/weinre/web/client/HelpScreen.js generated vendored Normal file
View File

@ -0,0 +1,88 @@
/*
* Copyright (C) 2010 Google Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
* * Neither the name of Google Inc. nor the names of its
* contributors may be used to endorse or promote products derived from
* this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.HelpScreen = function(title)
{
this._element = document.createElement("div");
this._element.className = "help-window-outer";
this._element.addEventListener("keydown", this._onKeyDown.bind(this), false);
var mainWindow = this._element.createChild("div", "help-window-main");
var captionWindow = mainWindow.createChild("div", "help-window-caption");
var closeButton = captionWindow.createChild("button", "help-close-button");
this.contentElement = mainWindow.createChild("div", "help-content");
this.contentElement.tabIndex = 0;
this.contentElement.addEventListener("blur", this._onBlur.bind(this), false);
captionWindow.createChild("h1", "help-window-title").innerText = title;
closeButton.innerText = "\u2716"; // Code stands for HEAVY MULTIPLICATION X.
closeButton.addEventListener("click", this._hide.bind(this), false);
this._closeKeys = [
WebInspector.KeyboardShortcut.Keys.Enter.code,
WebInspector.KeyboardShortcut.Keys.Esc.code,
WebInspector.KeyboardShortcut.Keys.Space.code,
];
document.body.appendChild(this._element);
}
WebInspector.HelpScreen.prototype = {
show: function()
{
if (this._isShown)
return;
this._element.style.visibility = "visible";
this._isShown = true;
this._previousFocusElement = WebInspector.currentFocusElement;
WebInspector.currentFocusElement = this.contentElement;
},
_hide: function()
{
this._isShown = false;
this._element.style.visibility = "hidden";
WebInspector.currentFocusElement = this._previousFocusElement;
},
_onKeyDown: function(event)
{
if (this._isShown && this._closeKeys.indexOf(event.keyCode) >= 0) {
this._hide();
event.stopPropagation();
}
},
_onBlur: function()
{
// Pretend we're modal, grab focus back if we're still shown.
if (this._isShown)
WebInspector.currentFocusElement = this.contentElement;
}
}

123
node_modules/weinre/web/client/ImageView.js generated vendored Normal file
View File

@ -0,0 +1,123 @@
/*
* Copyright (C) 2007, 2008 Apple Inc. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
WebInspector.ImageView = function(resource)
{
WebInspector.ResourceView.call(this, resource);
this.element.addStyleClass("image");
}
WebInspector.ImageView.prototype = {
hasContent: function()
{
return true;
},
show: function(parentElement)
{
WebInspector.ResourceView.prototype.show.call(this, parentElement);
this._createContentIfNeeded();
},
_createContentIfNeeded: function()
{
if (this._container)
return;
var imageContainer = document.createElement("div");
imageContainer.className = "image";
this.element.appendChild(imageContainer);
var imagePreviewElement = document.createElement("img");
imagePreviewElement.addStyleClass("resource-image-view");
imageContainer.appendChild(imagePreviewElement);
this._container = document.createElement("div");
this._container.className = "info";
this.element.appendChild(this._container);
var imageNameElement = document.createElement("h1");
imageNameElement.className = "title";
imageNameElement.textContent = this.resource.displayName;
this._container.appendChild(imageNameElement);
var infoListElement = document.createElement("dl");
infoListElement.className = "infoList";
this.resource.populateImageSource(imagePreviewElement);
function onImageLoad()
{
var content = this.resource.content;
if (content)
var resourceSize = this._base64ToSize(content);
else
var resourceSize = this.resource.resourceSize;
var imageProperties = [
{ name: WebInspector.UIString("Dimensions"), value: WebInspector.UIString("%d × %d", imagePreviewElement.naturalWidth, imagePreviewElement.naturalHeight) },
{ name: WebInspector.UIString("File size"), value: Number.bytesToString(resourceSize) },
{ name: WebInspector.UIString("MIME type"), value: this.resource.mimeType }
];
infoListElement.removeChildren();
for (var i = 0; i < imageProperties.length; ++i) {
var dt = document.createElement("dt");
dt.textContent = imageProperties[i].name;
infoListElement.appendChild(dt);
var dd = document.createElement("dd");
dd.textContent = imageProperties[i].value;
infoListElement.appendChild(dd);
}
var dt = document.createElement("dt");
dt.textContent = WebInspector.UIString("URL");
infoListElement.appendChild(dt);
var dd = document.createElement("dd");
dd.appendChild(WebInspector.linkifyURLAsNode(this.resource.url));
infoListElement.appendChild(dd);
this._container.appendChild(infoListElement);
}
imagePreviewElement.addEventListener("load", onImageLoad.bind(this), false);
},
_base64ToSize: function(content)
{
if (!content.length)
return 0;
var size = (content.length || 0) * 3 / 4;
if (content.length > 0 && content[content.length - 1] === "=")
size--;
if (content.length > 1 && content[content.length - 2] === "=")
size--;
return size;
}
}
WebInspector.ImageView.prototype.__proto__ = WebInspector.ResourceView.prototype;

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 KiB

BIN
node_modules/weinre/web/client/Images/auditsIcon.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.9 KiB

BIN
node_modules/weinre/web/client/Images/back.png generated vendored Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 377 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 379 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 529 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 526 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 250 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 426 B

Some files were not shown because too many files have changed in this diff Show More