зеркало из https://github.com/mozilla/brackets.git
Merge pull request #343 from JordanTheriault/mdn-docs-extension
Added MDN docs extension
This commit is contained in:
Коммит
259f2c1484
|
@ -7,6 +7,9 @@ Thumbs.db
|
|||
/node_modules
|
||||
/npm-debug.log
|
||||
|
||||
# ignore node_modules created by seldomly used documentation updating tool
|
||||
/src/extensions/extra/MDNDocs/tools/scrape-mdn/node_modules
|
||||
|
||||
# ignore compiled files
|
||||
/dist
|
||||
/src/.index.html
|
||||
|
|
|
@ -86,6 +86,7 @@ In addition, you can enable other extra extensions:
|
|||
* brackets-cdn-suggestions
|
||||
* ImageUrlCodeHints
|
||||
* HTMLHinter
|
||||
* MdnDocs
|
||||
|
||||
You could enable JSLint and LESSSupport by loading Bramble with `?enableExtensions=JSLint,LESSSupport`
|
||||
on the URL
|
||||
|
|
|
@ -0,0 +1,22 @@
|
|||
<div class="css-prop-defn {{#fullscreenSummary}}fullscreen-summary{{/fullscreenSummary}}" tabIndex="0"> <!-- tabIndex needed: otherwise click focuses CodeMirror scroller and Esc won't work -->
|
||||
<div class="css-prop-summary">
|
||||
<h1>{{propName}}</h1>
|
||||
<div>{{{summary}}}</div>
|
||||
</div>
|
||||
<div class="divider-holder no-focus">
|
||||
<div class="divider"></div>
|
||||
</div>
|
||||
<div class="css-prop-values quiet-scrollbars">
|
||||
<div class="scroller" tabIndex="0"> <!-- tabIndex needed: otherwise can't be focused on open or via click -->
|
||||
<dl>
|
||||
{{#propValues}}
|
||||
<dt>{{{value}}}</dt>
|
||||
<dd>{{{description}}}</dd>
|
||||
{{/propValues}}
|
||||
</dl>
|
||||
</div>
|
||||
</div>
|
||||
<div class="content-bottom"></div>
|
||||
<br />
|
||||
<a class="more-info" href="{{url}}" title="{{url}}" target="_blank">{{Strings.DOCS_MORE_LINK}}</a>
|
||||
</div>
|
|
@ -0,0 +1,214 @@
|
|||
/*
|
||||
* Copyright (c) 2013 Adobe Systems Incorporated. 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */
|
||||
/*global define, brackets, $, window, Mustache */
|
||||
|
||||
/**
|
||||
* Inline widget to display MDNDocs JSON data nicely formatted
|
||||
*/
|
||||
define(function (require, exports, module) {
|
||||
'use strict';
|
||||
|
||||
// Load Brackets modules
|
||||
var ExtensionUtils = brackets.getModule("utils/ExtensionUtils"),
|
||||
InlineWidget = brackets.getModule("editor/InlineWidget").InlineWidget,
|
||||
KeyEvent = brackets.getModule("utils/KeyEvent"),
|
||||
Strings = brackets.getModule("strings");
|
||||
|
||||
// Load template
|
||||
var inlineEditorTemplate = require("text!InlineDocsViewer.html");
|
||||
|
||||
// Lines height for scrolling
|
||||
var SCROLL_LINE_HEIGHT = 40;
|
||||
|
||||
// Load CSS
|
||||
ExtensionUtils.loadStyleSheet(module, "MDNDocs.less");
|
||||
|
||||
|
||||
/**
|
||||
* @param {!string} propName
|
||||
* @param {!{SUMMARY:string, URL:string, VALUES:?Array.<{value:string, description:string}>}} propDetails
|
||||
*/
|
||||
function InlineDocsViewer(propName, propDetails) {
|
||||
InlineWidget.call(this);
|
||||
|
||||
var templateVars = {
|
||||
propName : propName,
|
||||
summary : propDetails.SUMMARY,
|
||||
fullscreenSummary : !(propDetails.VALUES && propDetails.VALUES.length),
|
||||
propValues : propDetails.VALUES || [],
|
||||
url : propDetails.URL,
|
||||
Strings : Strings
|
||||
};
|
||||
|
||||
var html = Mustache.render(inlineEditorTemplate, templateVars);
|
||||
|
||||
this.$wrapperDiv = $(html);
|
||||
this.$htmlContent.append(this.$wrapperDiv);
|
||||
|
||||
// Preprocess link tags to make URLs absolute
|
||||
this.$wrapperDiv.find("a").each(function (index, elem) {
|
||||
var $elem = $(elem);
|
||||
var url = $elem.attr("href");
|
||||
if (url) {
|
||||
if (url.charAt(0) === "#") {
|
||||
// Anchors in JSON data are relative to page URL
|
||||
url = templateVars.url + url;
|
||||
} else if (url.substr(0, 4) !== "http") {
|
||||
// URLs in JSON data are relative
|
||||
url = "https://developer.mozilla.org" + (url.charAt(0) !== "/" ? "/" : "") + url;
|
||||
}
|
||||
$elem.attr("href", url);
|
||||
}
|
||||
$elem.attr("title", url);
|
||||
});
|
||||
|
||||
this._sizeEditorToContent = this._sizeEditorToContent.bind(this);
|
||||
this._handleWheelScroll = this._handleWheelScroll.bind(this);
|
||||
|
||||
this.$scroller = this.$wrapperDiv.find(".scroller");
|
||||
this.$scroller.on("mousewheel", this._handleWheelScroll);
|
||||
this._onKeydown = this._onKeydown.bind(this);
|
||||
}
|
||||
|
||||
InlineDocsViewer.prototype = Object.create(InlineWidget.prototype);
|
||||
InlineDocsViewer.prototype.constructor = InlineDocsViewer;
|
||||
InlineDocsViewer.prototype.parentClass = InlineWidget.prototype;
|
||||
|
||||
InlineDocsViewer.prototype.$wrapperDiv = null;
|
||||
InlineDocsViewer.prototype.$scroller = null;
|
||||
|
||||
/**
|
||||
* Handle scrolling.
|
||||
*
|
||||
* @param {Event} event Keyboard event or mouse scrollwheel event
|
||||
* @param {boolean} scrollingUp Is event to scroll up?
|
||||
* @param {DOMElement} scroller Element to scroll
|
||||
* @return {boolean} indication whether key was handled
|
||||
*/
|
||||
InlineDocsViewer.prototype._handleScrolling = function (event, scrollingUp, scroller) {
|
||||
// We need to block the event from both the host CodeMirror code (by stopping bubbling) and the
|
||||
// browser's native behavior (by preventing default). We preventDefault() *only* when the docs
|
||||
// scroller is at its limit (when an ancestor would get scrolled instead); otherwise we'd block
|
||||
// normal scrolling of the docs themselves.
|
||||
event.stopPropagation();
|
||||
if (scrollingUp && scroller.scrollTop === 0) {
|
||||
event.preventDefault();
|
||||
return true;
|
||||
} else if (!scrollingUp && scroller.scrollTop + scroller.clientHeight >= scroller.scrollHeight) {
|
||||
event.preventDefault();
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/** Don't allow scrollwheel/trackpad to bubble up to host editor - makes scrolling docs painful */
|
||||
InlineDocsViewer.prototype._handleWheelScroll = function (event) {
|
||||
var scrollingUp = (event.originalEvent.wheelDeltaY > 0),
|
||||
scroller = event.currentTarget;
|
||||
|
||||
// If content has no scrollbar, let host editor scroll normally
|
||||
if (scroller.clientHeight >= scroller.scrollHeight) {
|
||||
return;
|
||||
}
|
||||
|
||||
this._handleScrolling(event, scrollingUp, scroller);
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* Convert keydown events into navigation actions.
|
||||
*
|
||||
* @param {KeyboardEvent} event
|
||||
* @return {boolean} indication whether key was handled
|
||||
*/
|
||||
InlineDocsViewer.prototype._onKeydown = function (event) {
|
||||
var keyCode = event.keyCode,
|
||||
scroller = this.$scroller[0],
|
||||
scrollPos;
|
||||
|
||||
// Ignore key events with modifier keys
|
||||
if (event.altKey || event.ctrlKey || event.metaKey || event.shiftKey) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// Handle keys that we're interested in
|
||||
scrollPos = scroller.scrollTop;
|
||||
|
||||
switch (keyCode) {
|
||||
case KeyEvent.DOM_VK_UP:
|
||||
scrollPos = Math.max(0, scrollPos - SCROLL_LINE_HEIGHT);
|
||||
break;
|
||||
case KeyEvent.DOM_VK_PAGE_UP:
|
||||
scrollPos = Math.max(0, scrollPos - scroller.clientHeight);
|
||||
break;
|
||||
case KeyEvent.DOM_VK_DOWN:
|
||||
scrollPos = Math.min(scroller.scrollHeight - scroller.clientHeight,
|
||||
scrollPos + SCROLL_LINE_HEIGHT);
|
||||
break;
|
||||
case KeyEvent.DOM_VK_PAGE_DOWN:
|
||||
scrollPos = Math.min(scroller.scrollHeight - scroller.clientHeight,
|
||||
scrollPos + scroller.clientHeight);
|
||||
break;
|
||||
default:
|
||||
// Ignore other keys
|
||||
return false;
|
||||
}
|
||||
|
||||
scroller.scrollTop = scrollPos;
|
||||
|
||||
// Disallow further processing
|
||||
event.stopPropagation();
|
||||
event.preventDefault();
|
||||
return true;
|
||||
};
|
||||
|
||||
InlineDocsViewer.prototype.onAdded = function () {
|
||||
InlineDocsViewer.prototype.parentClass.onAdded.apply(this, arguments);
|
||||
|
||||
// Set height initially, and again whenever width might have changed (word wrap)
|
||||
this._sizeEditorToContent();
|
||||
$(window).on("resize", this._sizeEditorToContent);
|
||||
|
||||
// Set focus
|
||||
this.$scroller[0].focus();
|
||||
this.$wrapperDiv[0].addEventListener("keydown", this._onKeydown, true);
|
||||
};
|
||||
|
||||
InlineDocsViewer.prototype.onClosed = function () {
|
||||
InlineDocsViewer.prototype.parentClass.onClosed.apply(this, arguments);
|
||||
|
||||
$(window).off("resize", this._sizeEditorToContent);
|
||||
this.$wrapperDiv[0].removeEventListener("keydown", this._onKeydown, true);
|
||||
};
|
||||
|
||||
InlineDocsViewer.prototype._sizeEditorToContent = function () {
|
||||
this.hostEditor.setInlineWidgetHeight(this, this.$wrapperDiv.height() + 20, true);
|
||||
};
|
||||
|
||||
|
||||
module.exports = InlineDocsViewer;
|
||||
});
|
|
@ -0,0 +1,329 @@
|
|||
The following files are licensed under the "Creative Commons Attribution
|
||||
(CC-BY)" license:
|
||||
|
||||
* css.json
|
||||
* logo.svg
|
||||
|
||||
|
||||
The license is as follows:
|
||||
==============================================================================
|
||||
|
||||
Creative Commons Legal Code
|
||||
|
||||
Attribution 3.0 Unported
|
||||
|
||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||
LEGAL SERVICES. DISTRIBUTION OF THIS LICENSE DOES NOT CREATE AN
|
||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||
REGARDING THE INFORMATION PROVIDED, AND DISCLAIMS LIABILITY FOR
|
||||
DAMAGES RESULTING FROM ITS USE.
|
||||
|
||||
License
|
||||
|
||||
THE WORK (AS DEFINED BELOW) IS PROVIDED UNDER THE TERMS OF THIS CREATIVE
|
||||
COMMONS PUBLIC LICENSE ("CCPL" OR "LICENSE"). THE WORK IS PROTECTED BY
|
||||
COPYRIGHT AND/OR OTHER APPLICABLE LAW. ANY USE OF THE WORK OTHER THAN AS
|
||||
AUTHORIZED UNDER THIS LICENSE OR COPYRIGHT LAW IS PROHIBITED.
|
||||
|
||||
BY EXERCISING ANY RIGHTS TO THE WORK PROVIDED HERE, YOU ACCEPT AND AGREE
|
||||
TO BE BOUND BY THE TERMS OF THIS LICENSE. TO THE EXTENT THIS LICENSE MAY
|
||||
BE CONSIDERED TO BE A CONTRACT, THE LICENSOR GRANTS YOU THE RIGHTS
|
||||
CONTAINED HERE IN CONSIDERATION OF YOUR ACCEPTANCE OF SUCH TERMS AND
|
||||
CONDITIONS.
|
||||
|
||||
1. Definitions
|
||||
|
||||
a. "Adaptation" means a work based upon the Work, or upon the Work and
|
||||
other pre-existing works, such as a translation, adaptation,
|
||||
derivative work, arrangement of music or other alterations of a
|
||||
literary or artistic work, or phonogram or performance and includes
|
||||
cinematographic adaptations or any other form in which the Work may be
|
||||
recast, transformed, or adapted including in any form recognizably
|
||||
derived from the original, except that a work that constitutes a
|
||||
Collection will not be considered an Adaptation for the purpose of
|
||||
this License. For the avoidance of doubt, where the Work is a musical
|
||||
work, performance or phonogram, the synchronization of the Work in
|
||||
timed-relation with a moving image ("synching") will be considered an
|
||||
Adaptation for the purpose of this License.
|
||||
b. "Collection" means a collection of literary or artistic works, such as
|
||||
encyclopedias and anthologies, or performances, phonograms or
|
||||
broadcasts, or other works or subject matter other than works listed
|
||||
in Section 1(f) below, which, by reason of the selection and
|
||||
arrangement of their contents, constitute intellectual creations, in
|
||||
which the Work is included in its entirety in unmodified form along
|
||||
with one or more other contributions, each constituting separate and
|
||||
independent works in themselves, which together are assembled into a
|
||||
collective whole. A work that constitutes a Collection will not be
|
||||
considered an Adaptation (as defined above) for the purposes of this
|
||||
License.
|
||||
c. "Distribute" means to make available to the public the original and
|
||||
copies of the Work or Adaptation, as appropriate, through sale or
|
||||
other transfer of ownership.
|
||||
d. "Licensor" means the individual, individuals, entity or entities that
|
||||
offer(s) the Work under the terms of this License.
|
||||
e. "Original Author" means, in the case of a literary or artistic work,
|
||||
the individual, individuals, entity or entities who created the Work
|
||||
or if no individual or entity can be identified, the publisher; and in
|
||||
addition (i) in the case of a performance the actors, singers,
|
||||
musicians, dancers, and other persons who act, sing, deliver, declaim,
|
||||
play in, interpret or otherwise perform literary or artistic works or
|
||||
expressions of folklore; (ii) in the case of a phonogram the producer
|
||||
being the person or legal entity who first fixes the sounds of a
|
||||
performance or other sounds; and, (iii) in the case of broadcasts, the
|
||||
organization that transmits the broadcast.
|
||||
f. "Work" means the literary and/or artistic work offered under the terms
|
||||
of this License including without limitation any production in the
|
||||
literary, scientific and artistic domain, whatever may be the mode or
|
||||
form of its expression including digital form, such as a book,
|
||||
pamphlet and other writing; a lecture, address, sermon or other work
|
||||
of the same nature; a dramatic or dramatico-musical work; a
|
||||
choreographic work or entertainment in dumb show; a musical
|
||||
composition with or without words; a cinematographic work to which are
|
||||
assimilated works expressed by a process analogous to cinematography;
|
||||
a work of drawing, painting, architecture, sculpture, engraving or
|
||||
lithography; a photographic work to which are assimilated works
|
||||
expressed by a process analogous to photography; a work of applied
|
||||
art; an illustration, map, plan, sketch or three-dimensional work
|
||||
relative to geography, topography, architecture or science; a
|
||||
performance; a broadcast; a phonogram; a compilation of data to the
|
||||
extent it is protected as a copyrightable work; or a work performed by
|
||||
a variety or circus performer to the extent it is not otherwise
|
||||
considered a literary or artistic work.
|
||||
g. "You" means an individual or entity exercising rights under this
|
||||
License who has not previously violated the terms of this License with
|
||||
respect to the Work, or who has received express permission from the
|
||||
Licensor to exercise rights under this License despite a previous
|
||||
violation.
|
||||
h. "Publicly Perform" means to perform public recitations of the Work and
|
||||
to communicate to the public those public recitations, by any means or
|
||||
process, including by wire or wireless means or public digital
|
||||
performances; to make available to the public Works in such a way that
|
||||
members of the public may access these Works from a place and at a
|
||||
place individually chosen by them; to perform the Work to the public
|
||||
by any means or process and the communication to the public of the
|
||||
performances of the Work, including by public digital performance; to
|
||||
broadcast and rebroadcast the Work by any means including signs,
|
||||
sounds or images.
|
||||
i. "Reproduce" means to make copies of the Work by any means including
|
||||
without limitation by sound or visual recordings and the right of
|
||||
fixation and reproducing fixations of the Work, including storage of a
|
||||
protected performance or phonogram in digital form or other electronic
|
||||
medium.
|
||||
|
||||
2. Fair Dealing Rights. Nothing in this License is intended to reduce,
|
||||
limit, or restrict any uses free from copyright or rights arising from
|
||||
limitations or exceptions that are provided for in connection with the
|
||||
copyright protection under copyright law or other applicable laws.
|
||||
|
||||
3. License Grant. Subject to the terms and conditions of this License,
|
||||
Licensor hereby grants You a worldwide, royalty-free, non-exclusive,
|
||||
perpetual (for the duration of the applicable copyright) license to
|
||||
exercise the rights in the Work as stated below:
|
||||
|
||||
a. to Reproduce the Work, to incorporate the Work into one or more
|
||||
Collections, and to Reproduce the Work as incorporated in the
|
||||
Collections;
|
||||
b. to create and Reproduce Adaptations provided that any such Adaptation,
|
||||
including any translation in any medium, takes reasonable steps to
|
||||
clearly label, demarcate or otherwise identify that changes were made
|
||||
to the original Work. For example, a translation could be marked "The
|
||||
original work was translated from English to Spanish," or a
|
||||
modification could indicate "The original work has been modified.";
|
||||
c. to Distribute and Publicly Perform the Work including as incorporated
|
||||
in Collections; and,
|
||||
d. to Distribute and Publicly Perform Adaptations.
|
||||
e. For the avoidance of doubt:
|
||||
|
||||
i. Non-waivable Compulsory License Schemes. In those jurisdictions in
|
||||
which the right to collect royalties through any statutory or
|
||||
compulsory licensing scheme cannot be waived, the Licensor
|
||||
reserves the exclusive right to collect such royalties for any
|
||||
exercise by You of the rights granted under this License;
|
||||
ii. Waivable Compulsory License Schemes. In those jurisdictions in
|
||||
which the right to collect royalties through any statutory or
|
||||
compulsory licensing scheme can be waived, the Licensor waives the
|
||||
exclusive right to collect such royalties for any exercise by You
|
||||
of the rights granted under this License; and,
|
||||
iii. Voluntary License Schemes. The Licensor waives the right to
|
||||
collect royalties, whether individually or, in the event that the
|
||||
Licensor is a member of a collecting society that administers
|
||||
voluntary licensing schemes, via that society, from any exercise
|
||||
by You of the rights granted under this License.
|
||||
|
||||
The above rights may be exercised in all media and formats whether now
|
||||
known or hereafter devised. The above rights include the right to make
|
||||
such modifications as are technically necessary to exercise the rights in
|
||||
other media and formats. Subject to Section 8(f), all rights not expressly
|
||||
granted by Licensor are hereby reserved.
|
||||
|
||||
4. Restrictions. The license granted in Section 3 above is expressly made
|
||||
subject to and limited by the following restrictions:
|
||||
|
||||
a. You may Distribute or Publicly Perform the Work only under the terms
|
||||
of this License. You must include a copy of, or the Uniform Resource
|
||||
Identifier (URI) for, this License with every copy of the Work You
|
||||
Distribute or Publicly Perform. You may not offer or impose any terms
|
||||
on the Work that restrict the terms of this License or the ability of
|
||||
the recipient of the Work to exercise the rights granted to that
|
||||
recipient under the terms of the License. You may not sublicense the
|
||||
Work. You must keep intact all notices that refer to this License and
|
||||
to the disclaimer of warranties with every copy of the Work You
|
||||
Distribute or Publicly Perform. When You Distribute or Publicly
|
||||
Perform the Work, You may not impose any effective technological
|
||||
measures on the Work that restrict the ability of a recipient of the
|
||||
Work from You to exercise the rights granted to that recipient under
|
||||
the terms of the License. This Section 4(a) applies to the Work as
|
||||
incorporated in a Collection, but this does not require the Collection
|
||||
apart from the Work itself to be made subject to the terms of this
|
||||
License. If You create a Collection, upon notice from any Licensor You
|
||||
must, to the extent practicable, remove from the Collection any credit
|
||||
as required by Section 4(b), as requested. If You create an
|
||||
Adaptation, upon notice from any Licensor You must, to the extent
|
||||
practicable, remove from the Adaptation any credit as required by
|
||||
Section 4(b), as requested.
|
||||
b. If You Distribute, or Publicly Perform the Work or any Adaptations or
|
||||
Collections, You must, unless a request has been made pursuant to
|
||||
Section 4(a), keep intact all copyright notices for the Work and
|
||||
provide, reasonable to the medium or means You are utilizing: (i) the
|
||||
name of the Original Author (or pseudonym, if applicable) if supplied,
|
||||
and/or if the Original Author and/or Licensor designate another party
|
||||
or parties (e.g., a sponsor institute, publishing entity, journal) for
|
||||
attribution ("Attribution Parties") in Licensor's copyright notice,
|
||||
terms of service or by other reasonable means, the name of such party
|
||||
or parties; (ii) the title of the Work if supplied; (iii) to the
|
||||
extent reasonably practicable, the URI, if any, that Licensor
|
||||
specifies to be associated with the Work, unless such URI does not
|
||||
refer to the copyright notice or licensing information for the Work;
|
||||
and (iv) , consistent with Section 3(b), in the case of an Adaptation,
|
||||
a credit identifying the use of the Work in the Adaptation (e.g.,
|
||||
"French translation of the Work by Original Author," or "Screenplay
|
||||
based on original Work by Original Author"). The credit required by
|
||||
this Section 4 (b) may be implemented in any reasonable manner;
|
||||
provided, however, that in the case of a Adaptation or Collection, at
|
||||
a minimum such credit will appear, if a credit for all contributing
|
||||
authors of the Adaptation or Collection appears, then as part of these
|
||||
credits and in a manner at least as prominent as the credits for the
|
||||
other contributing authors. For the avoidance of doubt, You may only
|
||||
use the credit required by this Section for the purpose of attribution
|
||||
in the manner set out above and, by exercising Your rights under this
|
||||
License, You may not implicitly or explicitly assert or imply any
|
||||
connection with, sponsorship or endorsement by the Original Author,
|
||||
Licensor and/or Attribution Parties, as appropriate, of You or Your
|
||||
use of the Work, without the separate, express prior written
|
||||
permission of the Original Author, Licensor and/or Attribution
|
||||
Parties.
|
||||
c. Except as otherwise agreed in writing by the Licensor or as may be
|
||||
otherwise permitted by applicable law, if You Reproduce, Distribute or
|
||||
Publicly Perform the Work either by itself or as part of any
|
||||
Adaptations or Collections, You must not distort, mutilate, modify or
|
||||
take other derogatory action in relation to the Work which would be
|
||||
prejudicial to the Original Author's honor or reputation. Licensor
|
||||
agrees that in those jurisdictions (e.g. Japan), in which any exercise
|
||||
of the right granted in Section 3(b) of this License (the right to
|
||||
make Adaptations) would be deemed to be a distortion, mutilation,
|
||||
modification or other derogatory action prejudicial to the Original
|
||||
Author's honor and reputation, the Licensor will waive or not assert,
|
||||
as appropriate, this Section, to the fullest extent permitted by the
|
||||
applicable national law, to enable You to reasonably exercise Your
|
||||
right under Section 3(b) of this License (right to make Adaptations)
|
||||
but not otherwise.
|
||||
|
||||
5. Representations, Warranties and Disclaimer
|
||||
|
||||
UNLESS OTHERWISE MUTUALLY AGREED TO BY THE PARTIES IN WRITING, LICENSOR
|
||||
OFFERS THE WORK AS-IS AND MAKES NO REPRESENTATIONS OR WARRANTIES OF ANY
|
||||
KIND CONCERNING THE WORK, EXPRESS, IMPLIED, STATUTORY OR OTHERWISE,
|
||||
INCLUDING, WITHOUT LIMITATION, WARRANTIES OF TITLE, MERCHANTIBILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE, NONINFRINGEMENT, OR THE ABSENCE OF
|
||||
LATENT OR OTHER DEFECTS, ACCURACY, OR THE PRESENCE OF ABSENCE OF ERRORS,
|
||||
WHETHER OR NOT DISCOVERABLE. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION
|
||||
OF IMPLIED WARRANTIES, SO SUCH EXCLUSION MAY NOT APPLY TO YOU.
|
||||
|
||||
6. Limitation on Liability. EXCEPT TO THE EXTENT REQUIRED BY APPLICABLE
|
||||
LAW, IN NO EVENT WILL LICENSOR BE LIABLE TO YOU ON ANY LEGAL THEORY FOR
|
||||
ANY SPECIAL, INCIDENTAL, CONSEQUENTIAL, PUNITIVE OR EXEMPLARY DAMAGES
|
||||
ARISING OUT OF THIS LICENSE OR THE USE OF THE WORK, EVEN IF LICENSOR HAS
|
||||
BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
|
||||
|
||||
7. Termination
|
||||
|
||||
a. This License and the rights granted hereunder will terminate
|
||||
automatically upon any breach by You of the terms of this License.
|
||||
Individuals or entities who have received Adaptations or Collections
|
||||
from You under this License, however, will not have their licenses
|
||||
terminated provided such individuals or entities remain in full
|
||||
compliance with those licenses. Sections 1, 2, 5, 6, 7, and 8 will
|
||||
survive any termination of this License.
|
||||
b. Subject to the above terms and conditions, the license granted here is
|
||||
perpetual (for the duration of the applicable copyright in the Work).
|
||||
Notwithstanding the above, Licensor reserves the right to release the
|
||||
Work under different license terms or to stop distributing the Work at
|
||||
any time; provided, however that any such election will not serve to
|
||||
withdraw this License (or any other license that has been, or is
|
||||
required to be, granted under the terms of this License), and this
|
||||
License will continue in full force and effect unless terminated as
|
||||
stated above.
|
||||
|
||||
8. Miscellaneous
|
||||
|
||||
a. Each time You Distribute or Publicly Perform the Work or a Collection,
|
||||
the Licensor offers to the recipient a license to the Work on the same
|
||||
terms and conditions as the license granted to You under this License.
|
||||
b. Each time You Distribute or Publicly Perform an Adaptation, Licensor
|
||||
offers to the recipient a license to the original Work on the same
|
||||
terms and conditions as the license granted to You under this License.
|
||||
c. If any provision of this License is invalid or unenforceable under
|
||||
applicable law, it shall not affect the validity or enforceability of
|
||||
the remainder of the terms of this License, and without further action
|
||||
by the parties to this agreement, such provision shall be reformed to
|
||||
the minimum extent necessary to make such provision valid and
|
||||
enforceable.
|
||||
d. No term or provision of this License shall be deemed waived and no
|
||||
breach consented to unless such waiver or consent shall be in writing
|
||||
and signed by the party to be charged with such waiver or consent.
|
||||
e. This License constitutes the entire agreement between the parties with
|
||||
respect to the Work licensed here. There are no understandings,
|
||||
agreements or representations with respect to the Work not specified
|
||||
here. Licensor shall not be bound by any additional provisions that
|
||||
may appear in any communication from You. This License may not be
|
||||
modified without the mutual written agreement of the Licensor and You.
|
||||
f. The rights granted under, and the subject matter referenced, in this
|
||||
License were drafted utilizing the terminology of the Berne Convention
|
||||
for the Protection of Literary and Artistic Works (as amended on
|
||||
September 28, 1979), the Rome Convention of 1961, the WIPO Copyright
|
||||
Treaty of 1996, the WIPO Performances and Phonograms Treaty of 1996
|
||||
and the Universal Copyright Convention (as revised on July 24, 1971).
|
||||
These rights and subject matter take effect in the relevant
|
||||
jurisdiction in which the License terms are sought to be enforced
|
||||
according to the corresponding provisions of the implementation of
|
||||
those treaty provisions in the applicable national law. If the
|
||||
standard suite of rights granted under applicable copyright law
|
||||
includes additional rights not granted under this License, such
|
||||
additional rights are deemed to be included in the License; this
|
||||
License is not intended to restrict the license of any rights under
|
||||
applicable law.
|
||||
|
||||
|
||||
Creative Commons Notice
|
||||
|
||||
Creative Commons is not a party to this License, and makes no warranty
|
||||
whatsoever in connection with the Work. Creative Commons will not be
|
||||
liable to You or any party on any legal theory for any damages
|
||||
whatsoever, including without limitation any general, special,
|
||||
incidental or consequential damages arising in connection to this
|
||||
license. Notwithstanding the foregoing two (2) sentences, if Creative
|
||||
Commons has expressly identified itself as the Licensor hereunder, it
|
||||
shall have all rights and obligations of Licensor.
|
||||
|
||||
Except for the limited purpose of indicating to the public that the
|
||||
Work is licensed under the CCPL, Creative Commons does not authorize
|
||||
the use by either party of the trademark "Creative Commons" or any
|
||||
related trademark or logo of Creative Commons without the prior
|
||||
written consent of Creative Commons. Any permitted use will be in
|
||||
compliance with Creative Commons' then-current trademark usage
|
||||
guidelines, as may be published on its website or otherwise made
|
||||
available upon request from time to time. For the avoidance of doubt,
|
||||
this trademark restriction does not form part of this License.
|
||||
|
||||
Creative Commons may be contacted at http://creativecommons.org/.
|
|
@ -0,0 +1,236 @@
|
|||
/* Colors */
|
||||
@bc-btn-bg: #e5e9e9;
|
||||
@bc-btn-border: #b2b5b5;
|
||||
@bc-highlight: rgba(255, 255, 255, 0.12);
|
||||
@bc-panel-separator: #c3c6c5;
|
||||
@bc-text: #333;
|
||||
@bc-text-link: #0083e8;
|
||||
@bc-text-thin-quiet: #777;
|
||||
|
||||
/* Typography */
|
||||
@font-weight-semibold: 500;
|
||||
|
||||
|
||||
/* Overall inline widget content container */
|
||||
.css-prop-defn {
|
||||
margin-left: 20px;
|
||||
|
||||
color: @bc-text-thin-quiet;
|
||||
|
||||
/* Enable text selection */
|
||||
cursor: auto;
|
||||
-webkit-user-select: text;
|
||||
-khtml-user-select: text;
|
||||
-moz-user-select: text;
|
||||
-ms-user-select: text;
|
||||
-o-user-select: text;
|
||||
user-select: text;
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
|
||||
font-family: SourceSansPro;
|
||||
font-size: 14px;
|
||||
|
||||
h1 {
|
||||
color: @bc-text;
|
||||
font-size: 16px;
|
||||
font-weight: @font-weight-semibold;
|
||||
line-height: normal;
|
||||
margin: 15px 0 9px 0;
|
||||
}
|
||||
|
||||
a {
|
||||
color: @bc-text-link;
|
||||
}
|
||||
|
||||
code {
|
||||
font-family: SourceCodePro;
|
||||
font-size: 12px;
|
||||
color: @bc-text;
|
||||
background: none; // revert Bootstrap's styling
|
||||
padding: 0;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
b {
|
||||
font-weight: @font-weight-semibold;
|
||||
}
|
||||
|
||||
table {
|
||||
width: 100%;
|
||||
margin-bottom: 1em;
|
||||
th, td {
|
||||
border: 1px solid lighten(@bc-text-thin-quiet, 20%);
|
||||
padding: 0 .15em;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Left-hand column */
|
||||
.css-prop-summary {
|
||||
box-sizing: border-box;
|
||||
float: left;
|
||||
padding-left: 20px;
|
||||
width: 35%;
|
||||
word-wrap: break-word;
|
||||
-webkit-hyphens: auto;
|
||||
hyphens: auto;
|
||||
|
||||
p {
|
||||
line-height: 18px;
|
||||
}
|
||||
}
|
||||
|
||||
// Used to avoid overlapping CM scrollbar - TODO (#3460): need a cleaner way to do this
|
||||
@scrollbar-wid: 17px;
|
||||
|
||||
/* Right-hand column */
|
||||
.css-prop-values {
|
||||
box-sizing: border-box; //for exact dimension
|
||||
float: right;
|
||||
width: 60%;
|
||||
|
||||
.scroller {
|
||||
max-height: 300px;
|
||||
overflow-y: auto;
|
||||
|
||||
margin: 20px (@scrollbar-wid + 4px) 0 0;
|
||||
|
||||
&:focus {
|
||||
outline: none;
|
||||
}
|
||||
}
|
||||
|
||||
dl {
|
||||
margin-top: 0px;
|
||||
|
||||
dt {
|
||||
color: @bc-text;
|
||||
font-size: 13px;
|
||||
font-weight: @font-weight-semibold;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
dd {
|
||||
// some styles must specifically be on <p> to override Bootstrap
|
||||
p, li, b {
|
||||
font-size: 13px;
|
||||
font-style: normal;
|
||||
line-height: 18px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
line-height: 18px;
|
||||
margin-left: 20px;
|
||||
margin-right: 0px;
|
||||
margin-bottom: -2px; // remove extra spacing between dt-dd pairs
|
||||
padding-bottom: 0px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.divider-holder {
|
||||
// This nesting lets us effectively have 'left: (37% + 12px)'
|
||||
position: absolute;
|
||||
left: 37%;
|
||||
top: 0;
|
||||
height: 100%;
|
||||
.divider {
|
||||
margin-left: 12px;
|
||||
width: 0px;
|
||||
height: 100%;
|
||||
border-left: 1px solid @bc-panel-separator;
|
||||
}
|
||||
}
|
||||
|
||||
.fullscreen-summary {
|
||||
.css-prop-summary {
|
||||
width: 95%;
|
||||
}
|
||||
|
||||
.css-prop-values, .divider-holder {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
.content-bottom {
|
||||
// Used to pull bottom edge of .css-prop-defn down below its two floated children.
|
||||
// Also prevents .more-info (after us in DOM order) from overlapping the float: right content.
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/* Link to full docs, at bottom */
|
||||
a.more-info {
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
right: (33px + @scrollbar-wid);
|
||||
padding: 7px 4px 10px 30px;
|
||||
|
||||
background: @bc-btn-bg url("logo.svg");
|
||||
background-repeat: no-repeat;
|
||||
background-size: 25px 30px;
|
||||
background-position: 5px 1px;
|
||||
|
||||
border: 1px solid @bc-btn-border;
|
||||
border-radius: 3px 3px 0 0;
|
||||
border-bottom: none;
|
||||
box-shadow: inset 0 1px 0 @bc-highlight; // white chisel along top edge
|
||||
|
||||
font-size: 12px;
|
||||
font-weight: @font-weight-semibold;
|
||||
color: @bc-text;
|
||||
text-shadow: 0 1px 0 @bc-highlight;
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
/* Dark UI Theme */
|
||||
@dark-bc-highlight: rgba(255, 255, 255, 0.06);
|
||||
@dark-bc-text: #ccc;
|
||||
@dark-bc-text-link: #6bbeff;
|
||||
@dark-bc-text-thin-quiet: #bbb;
|
||||
@dark-bc-btn-bg: #3f3f3f;
|
||||
@dark-bc-btn-border: #202020;
|
||||
@dark-bc-panel-separator: #343434;
|
||||
|
||||
.dark {
|
||||
.css-prop-defn {
|
||||
color: @dark-bc-text-thin-quiet;
|
||||
|
||||
h1, b {
|
||||
color: @dark-bc-text;
|
||||
}
|
||||
|
||||
a {
|
||||
color: @dark-bc-text-link;
|
||||
}
|
||||
|
||||
code {
|
||||
color: @dark-bc-text;
|
||||
}
|
||||
|
||||
dl dt {
|
||||
color: @dark-bc-text;
|
||||
}
|
||||
|
||||
.divider-holder .divider {
|
||||
border-left: 1px solid @dark-bc-panel-separator;
|
||||
}
|
||||
|
||||
a.more-info {
|
||||
background-color: @dark-bc-btn-bg;
|
||||
border: 1px solid @dark-bc-btn-border;
|
||||
box-shadow: inset 0 1px 0 @dark-bc-highlight;
|
||||
color: @dark-bc-text;
|
||||
text-shadow: 0 1px 0 @dark-bc-highlight;
|
||||
}
|
||||
|
||||
table {
|
||||
th, td {
|
||||
border-color: darken(@dark-bc-text-thin-quiet, 35%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
# Updating the Docs
|
||||
Use the Node script scrape-mdn in `/tools/scrape-mdn`
|
||||
|
||||
1. Navigate to `tools/scrape-mdn`
|
||||
2. Run `npm install`
|
||||
3. Enter `node app`
|
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
Различия файлов скрыты, потому что одна или несколько строк слишком длинны
|
@ -0,0 +1,186 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Generator: Adobe Illustrator 17.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
||||
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
|
||||
width="73px" height="64px" viewBox="0 0 73 64" enable-background="new 0 0 73 64" xml:space="preserve">
|
||||
<g id="only_logo">
|
||||
<g>
|
||||
|
||||
<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="-1815.3298" y1="803.0175" x2="-1815.3298" y2="772.748" gradientTransform="matrix(1.98 0 0 1.98 3630.6501 -1528.0078)">
|
||||
<stop offset="0" style="stop-color:#2075BC"/>
|
||||
<stop offset="1" style="stop-color:#29AAE1"/>
|
||||
</linearGradient>
|
||||
<polygon fill="url(#SVGID_1_)" points="53.239,2.139 53.239,2.033 53.239,2.139 53.134,2.033 53.134,2.139 36.297,8.809
|
||||
19.355,2.139 19.355,2.033 19.249,2.139 19.249,2.033 19.249,2.139 2.306,8.915 2.306,61.967 19.249,55.507 36.297,61.967
|
||||
36.297,61.967 36.297,61.967 36.297,61.967 36.297,61.967 53.239,55.507 70.288,61.967 70.288,8.915 "/>
|
||||
<g>
|
||||
|
||||
<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="-1828.1918" y1="803.0175" x2="-1828.1918" y2="772.748" gradientTransform="matrix(1.98 0 0 1.98 3630.6501 -1528.0078)">
|
||||
<stop offset="0" style="stop-color:#0A6AA8"/>
|
||||
<stop offset="1" style="stop-color:#1699C8"/>
|
||||
</linearGradient>
|
||||
<polygon fill="url(#SVGID_2_)" points="2.306,8.915 2.306,61.967 19.355,55.507 19.355,2.033 "/>
|
||||
|
||||
<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="-1819.6349" y1="803.0175" x2="-1819.6349" y2="772.748" gradientTransform="matrix(1.98 0 0 1.98 3630.6501 -1528.0078)">
|
||||
<stop offset="0" style="stop-color:#2075BC"/>
|
||||
<stop offset="1" style="stop-color:#29AAE1"/>
|
||||
</linearGradient>
|
||||
<polygon fill="url(#SVGID_3_)" points="36.297,8.915 36.297,61.967 19.249,55.507 19.249,2.033 "/>
|
||||
|
||||
<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="-1811.0514" y1="803.0175" x2="-1811.0514" y2="772.748" gradientTransform="matrix(1.98 0 0 1.98 3630.6501 -1528.0078)">
|
||||
<stop offset="0" style="stop-color:#0A6AA8"/>
|
||||
<stop offset="1" style="stop-color:#1699C8"/>
|
||||
</linearGradient>
|
||||
<polygon fill="url(#SVGID_4_)" points="36.297,8.915 36.297,61.967 53.239,55.507 53.239,2.033 "/>
|
||||
|
||||
<linearGradient id="SVGID_5_" gradientUnits="userSpaceOnUse" x1="-1802.4946" y1="803.0175" x2="-1802.4946" y2="772.748" gradientTransform="matrix(1.98 0 0 1.98 3630.6501 -1528.0078)">
|
||||
<stop offset="0" style="stop-color:#2075BC"/>
|
||||
<stop offset="1" style="stop-color:#29AAE1"/>
|
||||
</linearGradient>
|
||||
<polygon fill="url(#SVGID_5_)" points="70.288,8.915 70.288,61.967 53.134,55.507 53.134,2.033 "/>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_6_" d="M60.546,33.164c-0.635-1.8-0.423-4.871-0.742-5.295c-2.012-2.753-9.212-3.176-12.495-6.777
|
||||
c0.529-1.8-0.635-3.176-1.8-4.341c-1.8-1.271-4.236-0.742-6.141-0.212c-2.117-0.423-4.13-1.271-6.247-1.8
|
||||
c-4.659-0.529-9.319,2.753-9.319,2.753c-3.388,2.117-8.577,6.566-11.119,9.106c0.635,0.106,1.271-0.423,2.012-0.423
|
||||
l4.871-1.271c-2.012,1.694-6.247,4.553-7.518,6.883c1.482-0.529,4.659-2.224,6.247-2.436
|
||||
c-1.377,1.165-4.236,3.494-5.189,4.976c0.106,0.106,0,0.212,0,0.317c1.165-0.635,4.024-2.33,5.401-2.436
|
||||
c-1.377,1.377-3.812,4.13-4.341,5.93c1.165-0.742,4.13-2.33,5.401-2.753c-0.317,0.742-0.953,1.271-1.377,1.906
|
||||
c-0.635,0.953-2.012,2.117-2.012,3.282c1.059-0.953,2.33-1.8,3.601-2.436c-0.529,1.165-1.588,2.117-1.906,3.601
|
||||
c0.847-0.847,2.436-1.271,3.494-1.588l-0.106,0.106c-0.106,0.106-1.271,0.953-2.117,1.906c0.742,0,0.212-0.106,1.165,0.106
|
||||
h0.529c-0.212,0.106-0.529,0.317-0.847,0.423l0,0c-0.423,0.212-0.953,0.529-1.377,0.742
|
||||
c2.012,2.542,4.447,4.659,7.306,6.035c3.707,1.8,7.73,2.436,11.859,1.906c0-0.212-0.106-0.423-0.212-0.742l0,0l0,0
|
||||
c-0.106-0.317-0.212-0.529-0.212-0.847l0,0l0,0c1.377-2.542,0.635-6.989,4.236-8.789c2.436-1.271,2.647-1.906,5.401-1.377
|
||||
c1.482,0.317,4.765,1.377,6.247,1.059c1.377-0.742,2.117-1.165,3.388-2.012c1.482,0.317,2.012,0.106,2.542-0.635
|
||||
c-0.529,0.742,0.953-2.753,1.588-4.024L60.546,33.164z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_7_">
|
||||
<use xlink:href="#SVGID_6_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<ellipse clip-path="url(#SVGID_7_)" fill="#FFFFFF" cx="36.297" cy="33.377" rx="31.555" ry="21.39"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_8_" d="M60.546,33.164c-0.635-1.8-0.423-4.871-0.742-5.295c-2.012-2.753-9.212-3.176-12.495-6.777
|
||||
c0.529-1.8-0.635-3.176-1.8-4.341c-1.8-1.271-4.236-0.742-6.141-0.212c-2.117-0.423-4.13-1.271-6.247-1.8
|
||||
c-4.659-0.529-9.319,2.753-9.319,2.753c-3.388,2.117-8.577,6.566-11.119,9.106c0.635,0.106,1.271-0.423,2.012-0.423
|
||||
l4.871-1.271c-2.012,1.694-6.247,4.553-7.518,6.883c1.482-0.529,4.659-2.224,6.247-2.436
|
||||
c-1.377,1.165-4.236,3.494-5.189,4.976c0.106,0.106,0,0.212,0,0.317c1.165-0.635,4.024-2.33,5.401-2.436
|
||||
c-1.377,1.377-3.812,4.13-4.341,5.93c1.165-0.742,4.13-2.33,5.401-2.753c-0.317,0.742-0.953,1.271-1.377,1.906
|
||||
c-0.635,0.953-2.012,2.117-2.012,3.282c1.059-0.953,2.33-1.8,3.601-2.436c-0.529,1.165-1.588,2.117-1.906,3.601
|
||||
c0.847-0.847,2.436-1.271,3.494-1.588l-0.106,0.106c-0.106,0.106-1.271,0.953-2.117,1.906c0.742,0,0.212-0.106,1.165,0.106
|
||||
h0.529c-0.212,0.106-0.529,0.317-0.847,0.423l0,0c-0.423,0.212-0.953,0.529-1.377,0.742
|
||||
c2.012,2.542,4.447,4.659,7.306,6.035c3.707,1.8,7.73,2.436,11.859,1.906c0-0.212-0.106-0.423-0.212-0.742l0,0l0,0
|
||||
c-0.106-0.317-0.212-0.529-0.212-0.847l0,0l0,0c1.377-2.542,0.635-6.989,4.236-8.789c2.436-1.271,2.647-1.906,5.401-1.377
|
||||
c1.482,0.317,4.765,1.377,6.247,1.059c1.377-0.742,2.117-1.165,3.388-2.012c1.482,0.317,2.012,0.106,2.542-0.635
|
||||
c-0.529,0.742,0.953-2.753,1.588-4.024L60.546,33.164z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_9_">
|
||||
<use xlink:href="#SVGID_8_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<polygon clip-path="url(#SVGID_9_)" fill="#F2F2F2" points="2.73,9.869 2.73,63.555 19.566,56.884 19.566,3.091 "/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_10_" d="M60.546,33.164c-0.635-1.8-0.423-4.871-0.742-5.295c-2.012-2.753-9.212-3.176-12.495-6.777
|
||||
c0.529-1.8-0.635-3.176-1.8-4.341c-1.8-1.271-4.236-0.742-6.141-0.212c-2.117-0.423-4.13-1.271-6.247-1.8
|
||||
c-4.659-0.529-9.319,2.753-9.319,2.753c-3.388,2.117-8.577,6.566-11.119,9.106c0.635,0.106,1.271-0.423,2.012-0.423
|
||||
l4.871-1.271c-2.012,1.694-6.247,4.553-7.518,6.883c1.482-0.529,4.659-2.224,6.247-2.436
|
||||
c-1.377,1.165-4.236,3.494-5.189,4.976c0.106,0.106,0,0.212,0,0.317c1.165-0.635,4.024-2.33,5.401-2.436
|
||||
c-1.377,1.377-3.812,4.13-4.341,5.93c1.165-0.742,4.13-2.33,5.401-2.753c-0.317,0.742-0.953,1.271-1.377,1.906
|
||||
c-0.635,0.953-2.012,2.117-2.012,3.282c1.059-0.953,2.33-1.8,3.601-2.436c-0.529,1.165-1.588,2.117-1.906,3.601
|
||||
c0.847-0.847,2.436-1.271,3.494-1.588l-0.106,0.106c-0.106,0.106-1.271,0.953-2.117,1.906c0.742,0,0.212-0.106,1.165,0.106
|
||||
h0.529c-0.212,0.106-0.529,0.317-0.847,0.423l0,0c-0.423,0.212-0.953,0.529-1.377,0.742
|
||||
c2.012,2.542,4.447,4.659,7.306,6.035c3.707,1.8,7.73,2.436,11.859,1.906c0-0.212-0.106-0.423-0.212-0.742l0,0l0,0
|
||||
c-0.106-0.317-0.212-0.529-0.212-0.847l0,0l0,0c1.377-2.542,0.635-6.989,4.236-8.789c2.436-1.271,2.647-1.906,5.401-1.377
|
||||
c1.482,0.317,4.765,1.377,6.247,1.059c1.377-0.742,2.117-1.165,3.388-2.012c1.482,0.317,2.012,0.106,2.542-0.635
|
||||
c-0.529,0.742,0.953-2.753,1.588-4.024L60.546,33.164z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_11_">
|
||||
<use xlink:href="#SVGID_10_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<polygon clip-path="url(#SVGID_11_)" fill="#FFFFFF" points="36.403,9.869 36.403,63.555 19.46,56.884 19.46,3.091
|
||||
"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_12_" d="M60.546,33.164c-0.635-1.8-0.423-4.871-0.742-5.295c-2.012-2.753-9.212-3.176-12.495-6.777
|
||||
c0.529-1.8-0.635-3.176-1.8-4.341c-1.8-1.271-4.236-0.742-6.141-0.212c-2.117-0.423-4.13-1.271-6.247-1.8
|
||||
c-4.659-0.529-9.319,2.753-9.319,2.753c-3.388,2.117-8.577,6.566-11.119,9.106c0.635,0.106,1.271-0.423,2.012-0.423
|
||||
l4.871-1.271c-2.012,1.694-6.247,4.553-7.518,6.883c1.482-0.529,4.659-2.224,6.247-2.436
|
||||
c-1.377,1.165-4.236,3.494-5.189,4.976c0.106,0.106,0,0.212,0,0.317c1.165-0.635,4.024-2.33,5.401-2.436
|
||||
c-1.377,1.377-3.812,4.13-4.341,5.93c1.165-0.742,4.13-2.33,5.401-2.753c-0.317,0.742-0.953,1.271-1.377,1.906
|
||||
c-0.635,0.953-2.012,2.117-2.012,3.282c1.059-0.953,2.33-1.8,3.601-2.436c-0.529,1.165-1.588,2.117-1.906,3.601
|
||||
c0.847-0.847,2.436-1.271,3.494-1.588l-0.106,0.106c-0.106,0.106-1.271,0.953-2.117,1.906c0.742,0,0.212-0.106,1.165,0.106
|
||||
h0.529c-0.212,0.106-0.529,0.317-0.847,0.423l0,0c-0.423,0.212-0.953,0.529-1.377,0.742
|
||||
c2.012,2.542,4.447,4.659,7.306,6.035c3.707,1.8,7.73,2.436,11.859,1.906c0-0.212-0.106-0.423-0.212-0.742l0,0l0,0
|
||||
c-0.106-0.317-0.212-0.529-0.212-0.847l0,0l0,0c1.377-2.542,0.635-6.989,4.236-8.789c2.436-1.271,2.647-1.906,5.401-1.377
|
||||
c1.482,0.317,4.765,1.377,6.247,1.059c1.377-0.742,2.117-1.165,3.388-2.012c1.482,0.317,2.012,0.106,2.542-0.635
|
||||
c-0.529,0.742,0.953-2.753,1.588-4.024L60.546,33.164z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_13_">
|
||||
<use xlink:href="#SVGID_12_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<polygon clip-path="url(#SVGID_13_)" fill="#F2F2F2" points="36.403,9.869 36.403,63.555 53.134,56.884 53.134,3.091
|
||||
"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<g>
|
||||
<defs>
|
||||
<path id="SVGID_14_" d="M60.546,33.164c-0.635-1.8-0.423-4.871-0.742-5.295c-2.012-2.753-9.212-3.176-12.495-6.777
|
||||
c0.529-1.8-0.635-3.176-1.8-4.341c-1.8-1.271-4.236-0.742-6.141-0.212c-2.117-0.423-4.13-1.271-6.247-1.8
|
||||
c-4.659-0.529-9.319,2.753-9.319,2.753c-3.388,2.117-8.577,6.566-11.119,9.106c0.635,0.106,1.271-0.423,2.012-0.423
|
||||
l4.871-1.271c-2.012,1.694-6.247,4.553-7.518,6.883c1.482-0.529,4.659-2.224,6.247-2.436
|
||||
c-1.377,1.165-4.236,3.494-5.189,4.976c0.106,0.106,0,0.212,0,0.317c1.165-0.635,4.024-2.33,5.401-2.436
|
||||
c-1.377,1.377-3.812,4.13-4.341,5.93c1.165-0.742,4.13-2.33,5.401-2.753c-0.317,0.742-0.953,1.271-1.377,1.906
|
||||
c-0.635,0.953-2.012,2.117-2.012,3.282c1.059-0.953,2.33-1.8,3.601-2.436c-0.529,1.165-1.588,2.117-1.906,3.601
|
||||
c0.847-0.847,2.436-1.271,3.494-1.588l-0.106,0.106c-0.106,0.106-1.271,0.953-2.117,1.906c0.742,0,0.212-0.106,1.165,0.106
|
||||
h0.529c-0.212,0.106-0.529,0.317-0.847,0.423l0,0c-0.423,0.212-0.953,0.529-1.377,0.742
|
||||
c2.012,2.542,4.447,4.659,7.306,6.035c3.707,1.8,7.73,2.436,11.859,1.906c0-0.212-0.106-0.423-0.212-0.742l0,0l0,0
|
||||
c-0.106-0.317-0.212-0.529-0.212-0.847l0,0l0,0c1.377-2.542,0.635-6.989,4.236-8.789c2.436-1.271,2.647-1.906,5.401-1.377
|
||||
c1.482,0.317,4.765,1.377,6.247,1.059c1.377-0.742,2.117-1.165,3.388-2.012c1.482,0.317,2.012,0.106,2.542-0.635
|
||||
c-0.529,0.742,0.953-2.753,1.588-4.024L60.546,33.164z"/>
|
||||
</defs>
|
||||
<clipPath id="SVGID_15_">
|
||||
<use xlink:href="#SVGID_14_" overflow="visible"/>
|
||||
</clipPath>
|
||||
<polygon clip-path="url(#SVGID_15_)" fill="#FFFFFF" points="70.076,9.869 70.076,63.555 53.134,56.884 53.134,3.091
|
||||
"/>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
<g id="logo_white">
|
||||
</g>
|
||||
</svg>
|
После Ширина: | Высота: | Размер: 12 KiB |
|
@ -0,0 +1,172 @@
|
|||
/*
|
||||
* Copyright (c) 2013 Adobe Systems Incorporated. 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.
|
||||
*
|
||||
*/
|
||||
|
||||
|
||||
/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */
|
||||
/*global $, define, brackets */
|
||||
|
||||
define(function (require, exports, module) {
|
||||
"use strict";
|
||||
|
||||
// Core modules
|
||||
var _ = brackets.getModule("thirdparty/lodash"),
|
||||
EditorManager = brackets.getModule("editor/EditorManager"),
|
||||
CSSUtils = brackets.getModule("language/CSSUtils"),
|
||||
HTMLUtils = brackets.getModule("language/HTMLUtils"),
|
||||
ExtensionUtils = brackets.getModule("utils/ExtensionUtils");
|
||||
|
||||
// Extension modules
|
||||
var InlineDocsViewer = require("InlineDocsViewer");
|
||||
|
||||
|
||||
/*
|
||||
* Caches docs promises
|
||||
*/
|
||||
var promiseCache = {};
|
||||
|
||||
/**
|
||||
* Lazily loads JSON docs files. Returns a Promise the is resolved with the parsed Object, or
|
||||
* rejected if the file is missing/corrupt.
|
||||
* @param {string} fileName JSON file to load
|
||||
* @return {!$.Promise}
|
||||
*/
|
||||
function getDocs(fileName) {
|
||||
if (!promiseCache[fileName]) {
|
||||
var result = new $.Deferred();
|
||||
|
||||
// XXXBramble - load from server vs. fs
|
||||
$.ajax({
|
||||
url: ExtensionUtils.getModulePath(module, fileName),
|
||||
dataType: "json"
|
||||
})
|
||||
.done(function(data, status, jqXHR) {
|
||||
result.resolve(data);
|
||||
})
|
||||
.fail(function(jqXHR, status, err) {
|
||||
console.error("Unable to load documentation database: ", err);
|
||||
result.reject();
|
||||
});
|
||||
|
||||
|
||||
promiseCache[fileName] = result.promise();
|
||||
}
|
||||
|
||||
return promiseCache[fileName];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Inline docs provider.
|
||||
*
|
||||
* @param {!Editor} editor
|
||||
* @param {!{line:Number, ch:Number}} pos
|
||||
* @return {?$.Promise} resolved with an InlineWidget; null if we're not going to provide anything
|
||||
*/
|
||||
function inlineProvider(hostEditor, pos) {
|
||||
var jsonFile, propInfo,
|
||||
propQueue = [], // priority queue of propNames to try
|
||||
langId = hostEditor.getLanguageForSelection().getId(),
|
||||
supportedLangs = ["css", "scss", "less", "html"],
|
||||
langIndex = langId ? supportedLangs.indexOf(langId) : -1; // fail if langId is falsy
|
||||
|
||||
// Only provide docs when cursor is in supported language
|
||||
if (langIndex < 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
// Only provide docs if the selection is within a single line
|
||||
var sel = hostEditor.getSelection();
|
||||
if (sel.start.line !== sel.end.line) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (langIndex <= 2) { // CSS-like language
|
||||
jsonFile = "css.json";
|
||||
propInfo = CSSUtils.getInfoAtPos(hostEditor, sel.start);
|
||||
if (propInfo.name) {
|
||||
propQueue.push(propInfo.name);
|
||||
// remove possible vendor prefixes
|
||||
propQueue.push(propInfo.name.replace(/^-(?:webkit|moz|ms|o)-/, ""));
|
||||
console.log(propQueue);
|
||||
}
|
||||
} else { // HTML
|
||||
jsonFile = "html.json";
|
||||
propInfo = HTMLUtils.getTagInfo(hostEditor, sel.start);
|
||||
if (propInfo.position.tokenType === HTMLUtils.ATTR_NAME && propInfo.attr && propInfo.attr.name) {
|
||||
// we're on an HTML attribute (and not on its value)
|
||||
propQueue.push(propInfo.attr.name.toLowerCase());
|
||||
}
|
||||
if (propInfo.tagName) { // we're somehow on an HTML tag (no matter where exactly)
|
||||
propInfo = propInfo.tagName.toLowerCase();
|
||||
if (/^h[1-6]$/.test(propInfo)) { // h1..h6 are expressed as "hn" in Web Platform Docs
|
||||
propInfo = "hn";
|
||||
}
|
||||
propQueue.push("<" + propInfo + ">");
|
||||
}
|
||||
}
|
||||
|
||||
// Are we on a supported property? (no matter if info is available for the property)
|
||||
if (propQueue.length) {
|
||||
var result = new $.Deferred();
|
||||
|
||||
// Load JSON file if not done yet
|
||||
getDocs(jsonFile)
|
||||
.done(function (docs) {
|
||||
// Construct inline widget (if we have docs for this property)
|
||||
|
||||
var displayName, propDetails,
|
||||
propName = _.find(propQueue, function (propName) { // find the first property where info is available
|
||||
return docs.hasOwnProperty(propName);
|
||||
});
|
||||
|
||||
if (propName) {
|
||||
// strip off all prefixes from the propName
|
||||
var propPrefix = propName.substr(0, propName.lastIndexOf("/"));
|
||||
propDetails = docs[propName];
|
||||
displayName = propName.substr(propName.lastIndexOf("/") + 1);
|
||||
}
|
||||
if (propDetails) {
|
||||
var inlineWidget = new InlineDocsViewer(displayName, propDetails);
|
||||
inlineWidget.load(hostEditor);
|
||||
result.resolve(inlineWidget);
|
||||
} else {
|
||||
result.reject();
|
||||
}
|
||||
})
|
||||
.fail(function () {
|
||||
result.reject();
|
||||
});
|
||||
|
||||
return result.promise();
|
||||
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
// Register as inline docs provider
|
||||
EditorManager.registerInlineDocsProvider(inlineProvider);
|
||||
|
||||
exports._getDocs = getDocs;
|
||||
exports._inlineProvider = inlineProvider;
|
||||
});
|
|
@ -0,0 +1,22 @@
|
|||
The MIT License (MIT)
|
||||
|
||||
Copyright (c) 2015 Jordan Theriault
|
||||
|
||||
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.
|
||||
|
|
@ -0,0 +1,2 @@
|
|||
# scrape-mdn
|
||||
Scrapes Mozilla Developer Network (MDN) JSON responses and rebuilds them in a leaner JSON object
|
|
@ -0,0 +1,48 @@
|
|||
/*
|
||||
// LEAN-MDN is a node application that gets data from MDN website via JSON requests
|
||||
// and formats it into a new, more lean JSON structure.
|
||||
// Type 'node app' to run the application.
|
||||
// Generated documents are located in /json
|
||||
*/
|
||||
|
||||
var fs = require("fs");
|
||||
var request = require("request");
|
||||
|
||||
//File names for output
|
||||
var MDN_CSS_DOC_FILENAME = "css";
|
||||
var MDN_HTML_DOC_FILENAME = "html";
|
||||
|
||||
//Language setting to retrieve localized, ex "/en-US", blank for default
|
||||
var DOC_LANG = "";
|
||||
|
||||
//Links to MDN pages
|
||||
var MDN_URL = "https://developer.mozilla.org/en-US/";
|
||||
var MDN_HTML_DOC_URL = "https://developer.mozilla.org" + DOC_LANG + "/docs/Web/HTML/Element$children?expand";
|
||||
var MDN_CSS_DOC_URL = "https://developer.mozilla.org" + DOC_LANG + "/docs/Web/CSS$children?expand";
|
||||
|
||||
//JSON object to put newly constructed data
|
||||
|
||||
function generate(url, filename) {
|
||||
var docData = {};
|
||||
console.log("Fetching and constructing " + filename + " documentation...");
|
||||
request(url, function(error, response, body){
|
||||
if(!error && response.statusCode == 200){
|
||||
var rawData = JSON.parse(body).subpages;
|
||||
|
||||
for(var i = 0; i < rawData.length; i++) {
|
||||
var obj = rawData[i];
|
||||
|
||||
docData[obj.title] = {
|
||||
"URL": obj.url,
|
||||
"SUMMARY": obj.summary
|
||||
};
|
||||
}
|
||||
}
|
||||
fs.writeFile("../../" + filename + ".json", JSON.stringify(docData, null, 0), function(err){
|
||||
console.log(filename + ".json has been written.")
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
generate(MDN_HTML_DOC_URL, MDN_HTML_DOC_FILENAME);
|
||||
generate(MDN_CSS_DOC_URL, MDN_CSS_DOC_FILENAME);
|
|
@ -0,0 +1,14 @@
|
|||
{
|
||||
"name": "scape-mdn",
|
||||
"version": "1.0.0",
|
||||
"description": "Fetches HTML and CSS docs in raw JSON from the Mozilla Developer Network (MDN) and simplifies it, writing HTML and CSS docs to individual JSON files.",
|
||||
"main": "app.js",
|
||||
"scripts": {
|
||||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "Jordan Theriault",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"request": "^2.57.0"
|
||||
}
|
||||
}
|
|
@ -61,7 +61,8 @@ define(function (require, exports, module) {
|
|||
var extraExtensions = [
|
||||
"brackets-cdn-suggestions", // https://github.com/szdc/brackets-cdn-suggestions
|
||||
"ImageUrlCodeHints",
|
||||
"HTMLHinter"
|
||||
"HTMLHinter",
|
||||
"MDNDocs"
|
||||
];
|
||||
|
||||
// Disable any extensions we found on the query string's disableExtensions param
|
||||
|
|
Загрузка…
Ссылка в новой задаче