parent
902659a889
commit
d6ec816ea9
|
@ -1,425 +1,456 @@
|
||||||
{
|
{
|
||||||
"addStyleLabel": {
|
"addStyleLabel": {
|
||||||
"message": "Write new style",
|
"message": "Write new style",
|
||||||
"description": "Label for the button to go to the add style page"
|
"description": "Label for the button to go to the add style page"
|
||||||
},
|
},
|
||||||
"addStyleTitle": {
|
"addStyleTitle": {
|
||||||
"message": "Add Style",
|
"message": "Add Style",
|
||||||
"description": "Title of the page for adding styles"
|
"description": "Title of the page for adding styles"
|
||||||
},
|
},
|
||||||
"appliesAdd": {
|
"appliesAdd": {
|
||||||
"message": "Add",
|
"message": "Add",
|
||||||
"description": "Label for the button to add an 'applies' entry"
|
"description": "Label for the button to add an 'applies' entry"
|
||||||
},
|
},
|
||||||
"appliesDisplay": {
|
"appliesDisplay": {
|
||||||
"message": "Applies to: $applies$",
|
"message": "Applies to: $applies$",
|
||||||
"description": "Text on the manage screen to describe what the style applies to",
|
"description": "Text on the manage screen to describe what the style applies to",
|
||||||
"placeholders": {
|
"placeholders": {
|
||||||
"applies": {
|
"applies": {
|
||||||
"content": "$1"
|
"content": "$1"
|
||||||
}
|
}
|
||||||
}
|
|
||||||
},
|
|
||||||
"appliesDisplayTruncatedSuffix": {
|
|
||||||
"message": "and more",
|
|
||||||
"description": "Text added to appliesDisplay when there are more sites for the style than are displayed"
|
|
||||||
},
|
|
||||||
"appliesDomainOption": {
|
|
||||||
"message": "URLs on the domain",
|
|
||||||
"description": "Option to make the style apply to the entered string as a domain"
|
|
||||||
},
|
|
||||||
"appliesHelp": {
|
|
||||||
"message": "Use the 'Applies to' controls to limit what URLs the code in this section applies to.",
|
|
||||||
"description": "Help text for 'applies to' section"
|
|
||||||
},
|
|
||||||
"appliesLabel": {
|
|
||||||
"message": "Applies to",
|
|
||||||
"description": "Label for 'applies to' fields on the edit\/add screen"
|
|
||||||
},
|
|
||||||
"appliesRegexpOption": {
|
|
||||||
"message": "URLs matching the regexp",
|
|
||||||
"description": "Option to make the style apply to the entered string as a regular expression"
|
|
||||||
},
|
|
||||||
"appliesRemove": {
|
|
||||||
"message": "Remove",
|
|
||||||
"description": "Label for the button to remove an 'applies' entry"
|
|
||||||
},
|
|
||||||
"appliesSpecify": {
|
|
||||||
"message": "Specify",
|
|
||||||
"description": "Label for the button to make a style apply only to specific sites"
|
|
||||||
},
|
|
||||||
"appliesToEverything": {
|
|
||||||
"message": "Everything",
|
|
||||||
"description": "Text displayed for styles that apply to all sites"
|
|
||||||
},
|
|
||||||
"appliesUrlOption": {
|
|
||||||
"message": "URL",
|
|
||||||
"description": "Option to make the style apply to the entered string as a URL"
|
|
||||||
},
|
|
||||||
"appliesUrlPrefixOption": {
|
|
||||||
"message": "URLs starting with",
|
|
||||||
"description": "Option to make the style apply to the entered string as a URL prefix"
|
|
||||||
},
|
|
||||||
"applyAllUpdates": {
|
|
||||||
"message": "Apply all updates",
|
|
||||||
"description": "Label for the button to apply all detected updates"
|
|
||||||
},
|
|
||||||
"checkAllUpdates": {
|
|
||||||
"message": "Check all styles for updates",
|
|
||||||
"description": "Label for the button to check all styles for updates"
|
|
||||||
},
|
|
||||||
"checkForUpdate": {
|
|
||||||
"message": "Check for update",
|
|
||||||
"description": "Label for the button to check a single style for an update"
|
|
||||||
},
|
|
||||||
"checkingForUpdate": {
|
|
||||||
"message": "Checking...",
|
|
||||||
"description": "Text to display when checking a style for an update"
|
|
||||||
},
|
|
||||||
"cm_indentWithTabs": {
|
|
||||||
"message": "Use tabs with smart indentation",
|
|
||||||
"description": "Label for the checkbox controlling tabs with smart indentation option for the style editor."
|
|
||||||
},
|
|
||||||
"cm_keyMap": {
|
|
||||||
"message": "Keymap",
|
|
||||||
"description": "Label for the drop-down list controlling the keymap for the style editor."
|
|
||||||
},
|
|
||||||
"cm_lineWrapping": {
|
|
||||||
"message": "Word wrap",
|
|
||||||
"description": "Label for the checkbox controlling word wrap option for the style editor."
|
|
||||||
},
|
|
||||||
"cm_smartIndent": {
|
|
||||||
"message": "Use smart indentation",
|
|
||||||
"description": "Label for the checkbox controlling smart indentation option for the style editor."
|
|
||||||
},
|
|
||||||
"cm_tabSize": {
|
|
||||||
"message": "Tab size",
|
|
||||||
"description": "Label for the text box controlling tab size option for the style editor."
|
|
||||||
},
|
|
||||||
"cm_theme": {
|
|
||||||
"message": "Theme",
|
|
||||||
"description": "Label for the style editor's CSS theme."
|
|
||||||
},
|
|
||||||
"confirmNo": {
|
|
||||||
"message": "No",
|
|
||||||
"description": "'No' button in a confirm dialog"
|
|
||||||
},
|
|
||||||
"confirmStop": {
|
|
||||||
"message": "Stop",
|
|
||||||
"description": "'Stop' button in a confirm dialog"
|
|
||||||
},
|
|
||||||
"confirmYes": {
|
|
||||||
"message": "Yes",
|
|
||||||
"description": "'Yes' button in a confirm dialog"
|
|
||||||
},
|
|
||||||
"dbError": {
|
|
||||||
"message": "An error has occurred using the Stylus database. Would you like to visit a web page with possible solutions?",
|
|
||||||
"description": "Prompt when a DB error is encountered"
|
|
||||||
},
|
|
||||||
"defaultTheme": {
|
|
||||||
"message": "default",
|
|
||||||
"description": "Default CodeMirror CSS theme option on the edit style page"
|
|
||||||
},
|
|
||||||
"deleteStyleLabel": {
|
|
||||||
"message": "Delete",
|
|
||||||
"description": "Label for the button to delete a style"
|
|
||||||
},
|
|
||||||
"deleteStyleConfirm": {
|
|
||||||
"message": "Are you sure you want to delete this style?",
|
|
||||||
"description": "Confirmation before deleting a style"
|
|
||||||
},
|
|
||||||
"description": {
|
|
||||||
"message": "Restyle the web with Stylus, a user styles manager. Stylus lets you easily install themes and skins for many popular sites.",
|
|
||||||
"description": "Extension description"
|
|
||||||
},
|
|
||||||
"disableAllStyles": {
|
|
||||||
"message": "Turn all styles off",
|
|
||||||
"description": "Label for the checkbox that turns all enabled styles off."
|
|
||||||
},
|
|
||||||
"disableStyleLabel": {
|
|
||||||
"message": "Disable",
|
|
||||||
"description": "Label for the button to disable a style"
|
|
||||||
},
|
|
||||||
"editGotoLine": {
|
|
||||||
"message": "Goto line (or line:col)",
|
|
||||||
"description": "Go to line or line:column on Ctrl-G in style code editor"
|
|
||||||
},
|
|
||||||
"editStyleHeading": {
|
|
||||||
"message": "Edit Style",
|
|
||||||
"description": "Title of the page for editing styles"
|
|
||||||
},
|
|
||||||
"editStyleLabel": {
|
|
||||||
"message": "Edit",
|
|
||||||
"description": "Label for the button to go to the edit style page"
|
|
||||||
},
|
|
||||||
"editStyleTitle": {
|
|
||||||
"message": "Edit Style $stylename$",
|
|
||||||
"description": "Title of the page for editing styles",
|
|
||||||
"placeholders": {
|
|
||||||
"stylename": {
|
|
||||||
"content": "$1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"enableStyleLabel": {
|
|
||||||
"message": "Enable",
|
|
||||||
"description": "Label for the button to enable a style"
|
|
||||||
},
|
|
||||||
"exportLabel": {
|
|
||||||
"message": "Export",
|
|
||||||
"description": "Label for the button to export a style ('edit' page) or all styles ('manage' page)"
|
|
||||||
},
|
|
||||||
"findStylesForSite": {
|
|
||||||
"message": "Find more styles for this site.",
|
|
||||||
"description": "Text for a link that gets a list of styles for the current site"
|
|
||||||
},
|
|
||||||
"helpAlt": {
|
|
||||||
"message": "Help",
|
|
||||||
"description": "Alternate text for help buttons"
|
|
||||||
},
|
|
||||||
"helpKeyMapHotkey": {
|
|
||||||
"message": "Press a hotkey",
|
|
||||||
"description": "Placeholder text of inputbox in keymap help popup on the edit style page. Must be very short"
|
|
||||||
},
|
|
||||||
"helpKeyMapCommand": {
|
|
||||||
"message": "Type a command name",
|
|
||||||
"description": "Placeholder text of inputbox in keymap help popup on the edit style page. Must be very short"
|
|
||||||
},
|
|
||||||
"importLabel": {
|
|
||||||
"message": "Import",
|
|
||||||
"description": "Label for the button to import a style ('edit' page) or all styles ('manage' page)"
|
|
||||||
},
|
|
||||||
"importAppendLabel": {
|
|
||||||
"message": "Append to style",
|
|
||||||
"description": "Label for the button to import a style and append to the existing sections"
|
|
||||||
},
|
|
||||||
"importAppendTooltip": {
|
|
||||||
"message": "Append the imported style to current style",
|
|
||||||
"description": "Tooltip for the button to import a style and append to the existing sections"
|
|
||||||
},
|
|
||||||
"importReplaceLabel": {
|
|
||||||
"message": "Overwrite style",
|
|
||||||
"description": "Label for the button to import and overwrite current style"
|
|
||||||
},
|
|
||||||
"importReplaceTooltip": {
|
|
||||||
"message": "Discard contents of current style and overwrite it with the imported style",
|
|
||||||
"description": "Label for the button to import and overwrite current style"
|
|
||||||
},
|
|
||||||
"installUpdate": {
|
|
||||||
"message": "Install update",
|
|
||||||
"description": "Label for the button to install an update for a single style"
|
|
||||||
},
|
|
||||||
"issues": {
|
|
||||||
"message": "Issues",
|
|
||||||
"description": "Label for the CSSLint issues block on the style edit page"
|
|
||||||
},
|
|
||||||
"issuesHelp": {
|
|
||||||
"message": "The issues found by <a href='https:\/\/github.com\/CSSLint\/csslint' target='_blank'>CSSLint<\/a> with these rules enabled:",
|
|
||||||
"description": "Help popup message for the CSSLint issues block on the style edit page"
|
|
||||||
},
|
|
||||||
"manageFilters": {
|
|
||||||
"message": "Filters",
|
|
||||||
"description": "Label for filters container"
|
|
||||||
},
|
|
||||||
"manageHeading": {
|
|
||||||
"message": "Installed Styles",
|
|
||||||
"description": "Heading for the manage page"
|
|
||||||
},
|
|
||||||
"manageOnlyEnabled": {
|
|
||||||
"message": "Only enabled styles",
|
|
||||||
"description": "Checkbox to show only enabled styles"
|
|
||||||
},
|
|
||||||
"manageOnlyEdited": {
|
|
||||||
"message": "Only edited styles",
|
|
||||||
"description": "Checkbox to show only locally edited styles"
|
|
||||||
},
|
|
||||||
"manageText": {
|
|
||||||
"message": "<a href='https:\/\/userstyles.org'>Get styles on userstyles.org<\/a> | <a href='https:\/\/userstyles.org\/help\/stylish_chrome'>Get help<\/a>",
|
|
||||||
"description": "Help text on the manage page"
|
|
||||||
},
|
|
||||||
"manageTitle": {
|
|
||||||
"message": "Stylus",
|
|
||||||
"description": "Title for the manage page"
|
|
||||||
},
|
|
||||||
"menuShowBadge": {
|
|
||||||
"message": "Show active style count",
|
|
||||||
"description": "Label (must be very short) for the checkbox in the toolbar button context menu controlling toolbar badge text."
|
|
||||||
},
|
|
||||||
"noStylesForSite": {
|
|
||||||
"message": "No styles installed for this site.",
|
|
||||||
"description": "Text displayed when no styles are installed for the current site"
|
|
||||||
},
|
|
||||||
"openManage": {
|
|
||||||
"message": "Manage installed styles.",
|
|
||||||
"description": "Link to open the manage page."
|
|
||||||
},
|
|
||||||
"optionsHeading": {
|
|
||||||
"message": "Options",
|
|
||||||
"description": "Heading for options section on manage page."
|
|
||||||
},
|
|
||||||
"popupStylesFirst": {
|
|
||||||
"message": "List styles before commands in the toolbar button menu",
|
|
||||||
"description": "Label for the checkbox controlling section order in the toolbar button menu."
|
|
||||||
},
|
|
||||||
"prefShowBadge": {
|
|
||||||
"message": "Show number of styles active for the current site on the toolbar button",
|
|
||||||
"description": "Label for the checkbox controlling toolbar badge text."
|
|
||||||
},
|
|
||||||
"replace": {
|
|
||||||
"message": "Replace",
|
|
||||||
"description": "Label before the replace input field in the editor shown on Ctrl-H"
|
|
||||||
},
|
|
||||||
"replaceAll": {
|
|
||||||
"message": "Replace all",
|
|
||||||
"description": "Label before the replace input field in the editor shown on 'replaceAll' hotkey"
|
|
||||||
},
|
|
||||||
"replaceWith": {
|
|
||||||
"message": "Replace with",
|
|
||||||
"description": "Label before the replace-with input field in the editor shown on Ctrl-H etc."
|
|
||||||
},
|
|
||||||
"search": {
|
|
||||||
"message": "Search",
|
|
||||||
"description": "Label before the search input field in the editor shown on Ctrl-F"
|
|
||||||
},
|
|
||||||
"searchRegexp": {
|
|
||||||
"message": "Use /re/ syntax for regexp search",
|
|
||||||
"description": "Label after the search input field in the editor shown on Ctrl-F"
|
|
||||||
},
|
|
||||||
"searchStyles": {
|
|
||||||
"message": "Search contents",
|
|
||||||
"description": "Label for the search filter textbox on the Manage styles page"
|
|
||||||
},
|
|
||||||
"sectionAdd": {
|
|
||||||
"message": "Add another section",
|
|
||||||
"description": "Label for the button to add a section"
|
|
||||||
},
|
|
||||||
"sectionCode": {
|
|
||||||
"message": "Code",
|
|
||||||
"description": "Label for the code for a section"
|
|
||||||
},
|
|
||||||
"sectionHelp": {
|
|
||||||
"message": "Sections let you define different pieces of code to apply to different sets of URLs in the same style. For example, a single style could change the homepage of a site one way, while changing the rest of a site another way.",
|
|
||||||
"description": "Help text for sections"
|
|
||||||
},
|
|
||||||
"sectionRemove": {
|
|
||||||
"message": "Remove section",
|
|
||||||
"description": "Label for the button to remove a section"
|
|
||||||
},
|
|
||||||
"styleBadRegexp": {
|
|
||||||
"message": "Regexp is invalid.",
|
|
||||||
"description": "Validation message for a bad regexp in a style"
|
|
||||||
},
|
|
||||||
"styleBeautify": {
|
|
||||||
"message": "Beautify",
|
|
||||||
"description": "Label for the CSS-beautifier button on the edit style page"
|
|
||||||
},
|
|
||||||
"styleCancelEditLabel": {
|
|
||||||
"message": "Back to manage",
|
|
||||||
"description": "Label for cancel button for style editing"
|
|
||||||
},
|
|
||||||
"styleChangesNotSaved": {
|
|
||||||
"message": "You've made changes to this style without saving.",
|
|
||||||
"description": "Text for the prompt when changes are made to a style and the user tries to leave without saving"
|
|
||||||
},
|
|
||||||
"styleEnabledLabel": {
|
|
||||||
"message": "Enabled",
|
|
||||||
"description": "Label for the enabled state of styles"
|
|
||||||
},
|
|
||||||
"styleInstall": {
|
|
||||||
"message": "Install '$stylename$' into Stylus?",
|
|
||||||
"description": "Confirmation when installing a style",
|
|
||||||
"placeholders": {
|
|
||||||
"stylename": {
|
|
||||||
"content": "$1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"styleMissingName": {
|
|
||||||
"message": "Enter a name.",
|
|
||||||
"description": "Error displayed when user saves without providing a name"
|
|
||||||
},
|
|
||||||
"styleSaveLabel": {
|
|
||||||
"message": "Save",
|
|
||||||
"description": "Label for save button for style editing"
|
|
||||||
},
|
|
||||||
"styleSectionsTitle": {
|
|
||||||
"message": "Sections",
|
|
||||||
"description": "Title for the style sections section"
|
|
||||||
},
|
|
||||||
"styleMozillaFormatHeading": {
|
|
||||||
"message": "Mozilla Format",
|
|
||||||
"description": "Heading for the section with buttons to import/export Mozilla format of the style"
|
|
||||||
},
|
|
||||||
"styleFromMozillaFormatPrompt": {
|
|
||||||
"message": "Paste the Mozilla-format code",
|
|
||||||
"description": "Prompt in the dialog displayed after clicking 'Import from Mozilla format' button"
|
|
||||||
},
|
|
||||||
"styleToMozillaFormatTitle": {
|
|
||||||
"message": "Style in Mozilla format",
|
|
||||||
"description": "Title of the popup with the style code in Mozilla format, shown after pressing the Export button on Edit style page"
|
|
||||||
},
|
|
||||||
"styleToMozillaFormatHelp": {
|
|
||||||
"message": "The Mozilla format of the code can be used with Stylus for Firefox and can be submitted to userstyles.org.",
|
|
||||||
"description": "Help info for the Mozilla format header section that converts the code to/from Mozilla format"
|
|
||||||
},
|
|
||||||
"styleUpdate": {
|
|
||||||
"message": "Are you sure you want to update '$stylename$'?",
|
|
||||||
"description": "Confirmation when updating a style",
|
|
||||||
"placeholders": {
|
|
||||||
"stylename": {
|
|
||||||
"content": "$1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"stylishUnavailableForURL": {
|
|
||||||
"message": "(Stylus can't affect this page.)",
|
|
||||||
"description": "Note in the toolbar pop-up when on a URL Stylus can't affect"
|
|
||||||
},
|
|
||||||
"undo": {
|
|
||||||
"message": "Undo",
|
|
||||||
"description": "Button label"
|
|
||||||
},
|
|
||||||
"undoGlobal": {
|
|
||||||
"message": "Undo (global)",
|
|
||||||
"description": "CSS-beautify global Undo button label"
|
|
||||||
},
|
|
||||||
"updateCheckFailBadResponseCode": {
|
|
||||||
"message": "Update failed - server responded with code $code$.",
|
|
||||||
"description": "Text that displays when an update check failed because the response code indicates an error",
|
|
||||||
"placeholders": {
|
|
||||||
"code": {
|
|
||||||
"content": "$1"
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"updateCheckFailServerUnreachable": {
|
|
||||||
"message": "Update failed - server unreachable.",
|
|
||||||
"description": "Text that displays when an update check failed because the update server is unreachable"
|
|
||||||
},
|
|
||||||
"updateCheckSucceededNoUpdate": {
|
|
||||||
"message": "Style is up to date.",
|
|
||||||
"description": "Text that displays when an update check completed and no update is available"
|
|
||||||
},
|
|
||||||
"updateAllCheckSucceededNoUpdate": {
|
|
||||||
"message": "All styles are up to date.",
|
|
||||||
"description": "Text that displays when an update all check completed and no updates are available"
|
|
||||||
},
|
|
||||||
"updateCompleted": {
|
|
||||||
"message": "Update completed.",
|
|
||||||
"description": "Text that displays when an update completed"
|
|
||||||
},
|
|
||||||
"writeStyleFor": {
|
|
||||||
"message": "Write style for: ",
|
|
||||||
"description": "Label for toolbar pop-up that precedes the links to write a new style"
|
|
||||||
},
|
|
||||||
"writeStyleForURL": {
|
|
||||||
"message": "this URL",
|
|
||||||
"description": "Text for link in toolbar pop-up to write a new style for the current URL"
|
|
||||||
},
|
|
||||||
"bckpInstStyles": {
|
|
||||||
"message": "Export Styles"
|
|
||||||
},
|
|
||||||
"retrieveBckp": {
|
|
||||||
"message": "Import Styles"
|
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
"appliesDisplayTruncatedSuffix": {
|
||||||
|
"message": "and more",
|
||||||
|
"description": "Text added to appliesDisplay when there are more sites for the style than are displayed"
|
||||||
|
},
|
||||||
|
"appliesDomainOption": {
|
||||||
|
"message": "URLs on the domain",
|
||||||
|
"description": "Option to make the style apply to the entered string as a domain"
|
||||||
|
},
|
||||||
|
"appliesHelp": {
|
||||||
|
"message": "Use the 'Applies to' controls to limit what URLs the code in this section applies to.",
|
||||||
|
"description": "Help text for 'applies to' section"
|
||||||
|
},
|
||||||
|
"appliesLabel": {
|
||||||
|
"message": "Applies to",
|
||||||
|
"description": "Label for 'applies to' fields on the edit\/add screen"
|
||||||
|
},
|
||||||
|
"appliesRegexpOption": {
|
||||||
|
"message": "URLs matching the regexp",
|
||||||
|
"description": "Option to make the style apply to the entered string as a regular expression"
|
||||||
|
},
|
||||||
|
"appliesRemove": {
|
||||||
|
"message": "Remove",
|
||||||
|
"description": "Label for the button to remove an 'applies' entry"
|
||||||
|
},
|
||||||
|
"appliesSpecify": {
|
||||||
|
"message": "Specify",
|
||||||
|
"description": "Label for the button to make a style apply only to specific sites"
|
||||||
|
},
|
||||||
|
"appliesToEverything": {
|
||||||
|
"message": "Everything",
|
||||||
|
"description": "Text displayed for styles that apply to all sites"
|
||||||
|
},
|
||||||
|
"appliesUrlOption": {
|
||||||
|
"message": "URL",
|
||||||
|
"description": "Option to make the style apply to the entered string as a URL"
|
||||||
|
},
|
||||||
|
"appliesUrlPrefixOption": {
|
||||||
|
"message": "URLs starting with",
|
||||||
|
"description": "Option to make the style apply to the entered string as a URL prefix"
|
||||||
|
},
|
||||||
|
"applyAllUpdates": {
|
||||||
|
"message": "Apply all updates",
|
||||||
|
"description": "Label for the button to apply all detected updates"
|
||||||
|
},
|
||||||
|
"checkAllUpdates": {
|
||||||
|
"message": "Check all styles for updates",
|
||||||
|
"description": "Label for the button to check all styles for updates"
|
||||||
|
},
|
||||||
|
"checkForUpdate": {
|
||||||
|
"message": "Check for update",
|
||||||
|
"description": "Label for the button to check a single style for an update"
|
||||||
|
},
|
||||||
|
"checkingForUpdate": {
|
||||||
|
"message": "Checking...",
|
||||||
|
"description": "Text to display when checking a style for an update"
|
||||||
|
},
|
||||||
|
"cm_indentWithTabs": {
|
||||||
|
"message": "Use tabs with smart indentation",
|
||||||
|
"description": "Label for the checkbox controlling tabs with smart indentation option for the style editor."
|
||||||
|
},
|
||||||
|
"cm_keyMap": {
|
||||||
|
"message": "Keymap",
|
||||||
|
"description": "Label for the drop-down list controlling the keymap for the style editor."
|
||||||
|
},
|
||||||
|
"cm_lineWrapping": {
|
||||||
|
"message": "Word wrap",
|
||||||
|
"description": "Label for the checkbox controlling word wrap option for the style editor."
|
||||||
|
},
|
||||||
|
"cm_smartIndent": {
|
||||||
|
"message": "Use smart indentation",
|
||||||
|
"description": "Label for the checkbox controlling smart indentation option for the style editor."
|
||||||
|
},
|
||||||
|
"cm_tabSize": {
|
||||||
|
"message": "Tab size",
|
||||||
|
"description": "Label for the text box controlling tab size option for the style editor."
|
||||||
|
},
|
||||||
|
"cm_theme": {
|
||||||
|
"message": "Theme",
|
||||||
|
"description": "Label for the style editor's CSS theme."
|
||||||
|
},
|
||||||
|
"confirmNo": {
|
||||||
|
"message": "No",
|
||||||
|
"description": "'No' button in a confirm dialog"
|
||||||
|
},
|
||||||
|
"confirmStop": {
|
||||||
|
"message": "Stop",
|
||||||
|
"description": "'Stop' button in a confirm dialog"
|
||||||
|
},
|
||||||
|
"confirmYes": {
|
||||||
|
"message": "Yes",
|
||||||
|
"description": "'Yes' button in a confirm dialog"
|
||||||
|
},
|
||||||
|
"dbError": {
|
||||||
|
"message": "An error has occurred using the Stylus database. Would you like to visit a web page with possible solutions?",
|
||||||
|
"description": "Prompt when a DB error is encountered"
|
||||||
|
},
|
||||||
|
"defaultTheme": {
|
||||||
|
"message": "default",
|
||||||
|
"description": "Default CodeMirror CSS theme option on the edit style page"
|
||||||
|
},
|
||||||
|
"deleteStyleLabel": {
|
||||||
|
"message": "Delete",
|
||||||
|
"description": "Label for the button to delete a style"
|
||||||
|
},
|
||||||
|
"deleteStyleConfirm": {
|
||||||
|
"message": "Are you sure you want to delete this style?",
|
||||||
|
"description": "Confirmation before deleting a style"
|
||||||
|
},
|
||||||
|
"description": {
|
||||||
|
"message": "Restyle the web with Stylus, a user styles manager. Stylus lets you easily install themes and skins for many popular sites.",
|
||||||
|
"description": "Extension description"
|
||||||
|
},
|
||||||
|
"disableAllStyles": {
|
||||||
|
"message": "Turn all styles off",
|
||||||
|
"description": "Label for the checkbox that turns all enabled styles off."
|
||||||
|
},
|
||||||
|
"disableStyleLabel": {
|
||||||
|
"message": "Disable",
|
||||||
|
"description": "Label for the button to disable a style"
|
||||||
|
},
|
||||||
|
"editGotoLine": {
|
||||||
|
"message": "Goto line (or line:col)",
|
||||||
|
"description": "Go to line or line:column on Ctrl-G in style code editor"
|
||||||
|
},
|
||||||
|
"editStyleHeading": {
|
||||||
|
"message": "Edit Style",
|
||||||
|
"description": "Title of the page for editing styles"
|
||||||
|
},
|
||||||
|
"editStyleLabel": {
|
||||||
|
"message": "Edit",
|
||||||
|
"description": "Label for the button to go to the edit style page"
|
||||||
|
},
|
||||||
|
"editStyleTitle": {
|
||||||
|
"message": "Edit Style $stylename$",
|
||||||
|
"description": "Title of the page for editing styles",
|
||||||
|
"placeholders": {
|
||||||
|
"stylename": {
|
||||||
|
"content": "$1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"enableStyleLabel": {
|
||||||
|
"message": "Enable",
|
||||||
|
"description": "Label for the button to enable a style"
|
||||||
|
},
|
||||||
|
"exportLabel": {
|
||||||
|
"message": "Export",
|
||||||
|
"description": "Label for the button to export a style ('edit' page) or all styles ('manage' page)"
|
||||||
|
},
|
||||||
|
"findStylesForSite": {
|
||||||
|
"message": "Find more styles for this site.",
|
||||||
|
"description": "Text for a link that gets a list of styles for the current site"
|
||||||
|
},
|
||||||
|
"helpAlt": {
|
||||||
|
"message": "Help",
|
||||||
|
"description": "Alternate text for help buttons"
|
||||||
|
},
|
||||||
|
"helpKeyMapHotkey": {
|
||||||
|
"message": "Press a hotkey",
|
||||||
|
"description": "Placeholder text of inputbox in keymap help popup on the edit style page. Must be very short"
|
||||||
|
},
|
||||||
|
"helpKeyMapCommand": {
|
||||||
|
"message": "Type a command name",
|
||||||
|
"description": "Placeholder text of inputbox in keymap help popup on the edit style page. Must be very short"
|
||||||
|
},
|
||||||
|
"importLabel": {
|
||||||
|
"message": "Import",
|
||||||
|
"description": "Label for the button to import a style ('edit' page) or all styles ('manage' page)"
|
||||||
|
},
|
||||||
|
"importAppendLabel": {
|
||||||
|
"message": "Append to style",
|
||||||
|
"description": "Label for the button to import a style and append to the existing sections"
|
||||||
|
},
|
||||||
|
"importAppendTooltip": {
|
||||||
|
"message": "Append the imported style to current style",
|
||||||
|
"description": "Tooltip for the button to import a style and append to the existing sections"
|
||||||
|
},
|
||||||
|
"importReplaceLabel": {
|
||||||
|
"message": "Overwrite style",
|
||||||
|
"description": "Label for the button to import and overwrite current style"
|
||||||
|
},
|
||||||
|
"importReplaceTooltip": {
|
||||||
|
"message": "Discard contents of current style and overwrite it with the imported style",
|
||||||
|
"description": "Label for the button to import and overwrite current style"
|
||||||
|
},
|
||||||
|
"installUpdate": {
|
||||||
|
"message": "Install update",
|
||||||
|
"description": "Label for the button to install an update for a single style"
|
||||||
|
},
|
||||||
|
"issues": {
|
||||||
|
"message": "Issues",
|
||||||
|
"description": "Label for the CSSLint issues block on the style edit page"
|
||||||
|
},
|
||||||
|
"issuesHelp": {
|
||||||
|
"message": "The issues found by <a href='https:\/\/github.com\/CSSLint\/csslint' target='_blank'>CSSLint<\/a> with these rules enabled:",
|
||||||
|
"description": "Help popup message for the CSSLint issues block on the style edit page"
|
||||||
|
},
|
||||||
|
"manageFilters": {
|
||||||
|
"message": "Filters",
|
||||||
|
"description": "Label for filters container"
|
||||||
|
},
|
||||||
|
"manageHeading": {
|
||||||
|
"message": "Installed Styles",
|
||||||
|
"description": "Heading for the manage page"
|
||||||
|
},
|
||||||
|
"manageOnlyEnabled": {
|
||||||
|
"message": "Only enabled styles",
|
||||||
|
"description": "Checkbox to show only enabled styles"
|
||||||
|
},
|
||||||
|
"manageOnlyEdited": {
|
||||||
|
"message": "Only edited styles",
|
||||||
|
"description": "Checkbox to show only locally edited styles"
|
||||||
|
},
|
||||||
|
"manageText": {
|
||||||
|
"message": "<a href='https:\/\/userstyles.org'>Get styles on userstyles.org<\/a> | <a href='https:\/\/userstyles.org\/help\/stylish_chrome'>Get help<\/a>",
|
||||||
|
"description": "Help text on the manage page"
|
||||||
|
},
|
||||||
|
"manageTitle": {
|
||||||
|
"message": "Stylus",
|
||||||
|
"description": "Title for the manage page"
|
||||||
|
},
|
||||||
|
"menuShowBadge": {
|
||||||
|
"message": "Show active style count",
|
||||||
|
"description": "Label (must be very short) for the checkbox in the toolbar button context menu controlling toolbar badge text."
|
||||||
|
},
|
||||||
|
"noStylesForSite": {
|
||||||
|
"message": "No styles installed for this site.",
|
||||||
|
"description": "Text displayed when no styles are installed for the current site"
|
||||||
|
},
|
||||||
|
"openManage": {
|
||||||
|
"message": "Manage installed styles.",
|
||||||
|
"description": "Link to open the manage page."
|
||||||
|
},
|
||||||
|
"optionsHeading": {
|
||||||
|
"message": "Options",
|
||||||
|
"description": "Heading for options section on manage page."
|
||||||
|
},
|
||||||
|
"popupStylesFirst": {
|
||||||
|
"message": "List styles before commands in the toolbar button menu",
|
||||||
|
"description": "Label for the checkbox controlling section order in the toolbar button menu."
|
||||||
|
},
|
||||||
|
"prefShowBadge": {
|
||||||
|
"message": "Show number of styles active for the current site on the toolbar button",
|
||||||
|
"description": "Label for the checkbox controlling toolbar badge text."
|
||||||
|
},
|
||||||
|
"replace": {
|
||||||
|
"message": "Replace",
|
||||||
|
"description": "Label before the replace input field in the editor shown on Ctrl-H"
|
||||||
|
},
|
||||||
|
"replaceAll": {
|
||||||
|
"message": "Replace all",
|
||||||
|
"description": "Label before the replace input field in the editor shown on 'replaceAll' hotkey"
|
||||||
|
},
|
||||||
|
"replaceWith": {
|
||||||
|
"message": "Replace with",
|
||||||
|
"description": "Label before the replace-with input field in the editor shown on Ctrl-H etc."
|
||||||
|
},
|
||||||
|
"search": {
|
||||||
|
"message": "Search",
|
||||||
|
"description": "Label before the search input field in the editor shown on Ctrl-F"
|
||||||
|
},
|
||||||
|
"searchRegexp": {
|
||||||
|
"message": "Use /re/ syntax for regexp search",
|
||||||
|
"description": "Label after the search input field in the editor shown on Ctrl-F"
|
||||||
|
},
|
||||||
|
"searchStyles": {
|
||||||
|
"message": "Search contents",
|
||||||
|
"description": "Label for the search filter textbox on the Manage styles page"
|
||||||
|
},
|
||||||
|
"sectionAdd": {
|
||||||
|
"message": "Add another section",
|
||||||
|
"description": "Label for the button to add a section"
|
||||||
|
},
|
||||||
|
"sectionCode": {
|
||||||
|
"message": "Code",
|
||||||
|
"description": "Label for the code for a section"
|
||||||
|
},
|
||||||
|
"sectionHelp": {
|
||||||
|
"message": "Sections let you define different pieces of code to apply to different sets of URLs in the same style. For example, a single style could change the homepage of a site one way, while changing the rest of a site another way.",
|
||||||
|
"description": "Help text for sections"
|
||||||
|
},
|
||||||
|
"sectionRemove": {
|
||||||
|
"message": "Remove section",
|
||||||
|
"description": "Label for the button to remove a section"
|
||||||
|
},
|
||||||
|
"styleBadRegexp": {
|
||||||
|
"message": "Regexp is invalid.",
|
||||||
|
"description": "Validation message for a bad regexp in a style"
|
||||||
|
},
|
||||||
|
"styleBeautify": {
|
||||||
|
"message": "Beautify",
|
||||||
|
"description": "Label for the CSS-beautifier button on the edit style page"
|
||||||
|
},
|
||||||
|
"styleCancelEditLabel": {
|
||||||
|
"message": "Back to manage",
|
||||||
|
"description": "Label for cancel button for style editing"
|
||||||
|
},
|
||||||
|
"styleChangesNotSaved": {
|
||||||
|
"message": "You've made changes to this style without saving.",
|
||||||
|
"description": "Text for the prompt when changes are made to a style and the user tries to leave without saving"
|
||||||
|
},
|
||||||
|
"styleEnabledLabel": {
|
||||||
|
"message": "Enabled",
|
||||||
|
"description": "Label for the enabled state of styles"
|
||||||
|
},
|
||||||
|
"styleInstall": {
|
||||||
|
"message": "Install '$stylename$' into Stylus?",
|
||||||
|
"description": "Confirmation when installing a style",
|
||||||
|
"placeholders": {
|
||||||
|
"stylename": {
|
||||||
|
"content": "$1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"styleMissingName": {
|
||||||
|
"message": "Enter a name.",
|
||||||
|
"description": "Error displayed when user saves without providing a name"
|
||||||
|
},
|
||||||
|
"styleSaveLabel": {
|
||||||
|
"message": "Save",
|
||||||
|
"description": "Label for save button for style editing"
|
||||||
|
},
|
||||||
|
"styleSectionsTitle": {
|
||||||
|
"message": "Sections",
|
||||||
|
"description": "Title for the style sections section"
|
||||||
|
},
|
||||||
|
"styleMozillaFormatHeading": {
|
||||||
|
"message": "Mozilla Format",
|
||||||
|
"description": "Heading for the section with buttons to import/export Mozilla format of the style"
|
||||||
|
},
|
||||||
|
"styleFromMozillaFormatPrompt": {
|
||||||
|
"message": "Paste the Mozilla-format code",
|
||||||
|
"description": "Prompt in the dialog displayed after clicking 'Import from Mozilla format' button"
|
||||||
|
},
|
||||||
|
"styleToMozillaFormatTitle": {
|
||||||
|
"message": "Style in Mozilla format",
|
||||||
|
"description": "Title of the popup with the style code in Mozilla format, shown after pressing the Export button on Edit style page"
|
||||||
|
},
|
||||||
|
"styleToMozillaFormatHelp": {
|
||||||
|
"message": "The Mozilla format of the code can be used with Stylus for Firefox and can be submitted to userstyles.org.",
|
||||||
|
"description": "Help info for the Mozilla format header section that converts the code to/from Mozilla format"
|
||||||
|
},
|
||||||
|
"styleUpdate": {
|
||||||
|
"message": "Are you sure you want to update '$stylename$'?",
|
||||||
|
"description": "Confirmation when updating a style",
|
||||||
|
"placeholders": {
|
||||||
|
"stylename": {
|
||||||
|
"content": "$1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"stylishUnavailableForURL": {
|
||||||
|
"message": "(Stylus can't affect this page.)",
|
||||||
|
"description": "Note in the toolbar pop-up when on a URL Stylus can't affect"
|
||||||
|
},
|
||||||
|
"undo": {
|
||||||
|
"message": "Undo",
|
||||||
|
"description": "Button label"
|
||||||
|
},
|
||||||
|
"undoGlobal": {
|
||||||
|
"message": "Undo (global)",
|
||||||
|
"description": "CSS-beautify global Undo button label"
|
||||||
|
},
|
||||||
|
"updateCheckFailBadResponseCode": {
|
||||||
|
"message": "Update failed - server responded with code $code$.",
|
||||||
|
"description": "Text that displays when an update check failed because the response code indicates an error",
|
||||||
|
"placeholders": {
|
||||||
|
"code": {
|
||||||
|
"content": "$1"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"updateCheckFailServerUnreachable": {
|
||||||
|
"message": "Update failed - server unreachable.",
|
||||||
|
"description": "Text that displays when an update check failed because the update server is unreachable"
|
||||||
|
},
|
||||||
|
"updateCheckSucceededNoUpdate": {
|
||||||
|
"message": "Style is up to date.",
|
||||||
|
"description": "Text that displays when an update check completed and no update is available"
|
||||||
|
},
|
||||||
|
"updateAllCheckSucceededNoUpdate": {
|
||||||
|
"message": "All styles are up to date.",
|
||||||
|
"description": "Text that displays when an update all check completed and no updates are available"
|
||||||
|
},
|
||||||
|
"updateCompleted": {
|
||||||
|
"message": "Update completed.",
|
||||||
|
"description": "Text that displays when an update completed"
|
||||||
|
},
|
||||||
|
"writeStyleFor": {
|
||||||
|
"message": "Write style for: ",
|
||||||
|
"description": "Label for toolbar pop-up that precedes the links to write a new style"
|
||||||
|
},
|
||||||
|
"writeStyleForURL": {
|
||||||
|
"message": "this URL",
|
||||||
|
"description": "Text for link in toolbar pop-up to write a new style for the current URL"
|
||||||
|
},
|
||||||
|
"bckpInstStyles": {
|
||||||
|
"message": "Export Styles"
|
||||||
|
},
|
||||||
|
"retrieveBckp": {
|
||||||
|
"message": "Import Styles"
|
||||||
|
},
|
||||||
|
// options page
|
||||||
|
"optionsBadgeNormal": {
|
||||||
|
"message": "Badge background color"
|
||||||
|
},
|
||||||
|
"optionsBadgeDisabled": {
|
||||||
|
"message": "Badge background color (when disabled)"
|
||||||
|
},
|
||||||
|
"optionsUpdateInterval": {
|
||||||
|
"message": "Automatically check for user-style updates (in hours)"
|
||||||
|
},
|
||||||
|
"optionsUpdateIntervalNote": {
|
||||||
|
"message": "To disable the automatic user-style update checks, set interval to zero"
|
||||||
|
},
|
||||||
|
"optionsCustomize": {
|
||||||
|
"message": "UI Customizations"
|
||||||
|
},
|
||||||
|
"optionsActions": {
|
||||||
|
"message": "Actions"
|
||||||
|
},
|
||||||
|
"optionsOpenManager": {
|
||||||
|
"message": "Open styles manager"
|
||||||
|
},
|
||||||
|
"optionsCheckUpdate": {
|
||||||
|
"message": "Check for updates"
|
||||||
|
},
|
||||||
|
"optionsOpen": {
|
||||||
|
"message": "Open"
|
||||||
|
},
|
||||||
|
"optionsCheck": {
|
||||||
|
"message": "Check"
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -120,7 +120,8 @@ runTryCatch(function() {
|
||||||
chrome.contextMenus.onClicked.addListener(function(info, tab) {
|
chrome.contextMenus.onClicked.addListener(function(info, tab) {
|
||||||
if (info.menuItemId == "disableAll") {
|
if (info.menuItemId == "disableAll") {
|
||||||
disableAllStylesToggle(info.checked);
|
disableAllStylesToggle(info.checked);
|
||||||
} else {
|
}
|
||||||
|
else {
|
||||||
prefs.set(info.menuItemId, info.checked);
|
prefs.set(info.menuItemId, info.checked);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -238,6 +238,10 @@ function checkUpdateAll() {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
// notify the automatic updater to reset the next automatic update accordingly
|
||||||
|
chrome.runtime.sendMessage({
|
||||||
|
method: 'resetInterval'
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
function checkUpdate(element, callback) {
|
function checkUpdate(element, callback) {
|
||||||
|
|
121
manifest.json
121
manifest.json
|
@ -1,61 +1,64 @@
|
||||||
{
|
{
|
||||||
"name": "Stylus",
|
"name": "Stylus",
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
"description": "__MSG_description__",
|
"description": "__MSG_description__",
|
||||||
"homepage_url": "https://github.com/schomery/stylish-chrome",
|
"homepage_url": "https://github.com/schomery/stylish-chrome",
|
||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"icons": {
|
"icons": {
|
||||||
"16": "16.png",
|
"16": "16.png",
|
||||||
"48": "48.png",
|
"48": "48.png",
|
||||||
"128": "128.png"
|
"128": "128.png"
|
||||||
},
|
},
|
||||||
"permissions": [
|
"permissions": [
|
||||||
"tabs",
|
"tabs",
|
||||||
"webNavigation",
|
"webNavigation",
|
||||||
"webRequest",
|
"webRequest",
|
||||||
"webRequestBlocking",
|
"webRequestBlocking",
|
||||||
"contextMenus",
|
"contextMenus",
|
||||||
"storage",
|
"storage",
|
||||||
"*://*/*"
|
"*://*/*"
|
||||||
],
|
],
|
||||||
"optional_permissions": [
|
"optional_permissions": [
|
||||||
"downloads"
|
"downloads"
|
||||||
],
|
],
|
||||||
"background": {
|
"background": {
|
||||||
"scripts": ["messaging.js", "storage-websql.js", "storage.js", "background.js", "update.js"]
|
"scripts": ["messaging.js", "storage-websql.js", "storage.js", "background.js", "update.js"]
|
||||||
},
|
},
|
||||||
"commands": {
|
"commands": {
|
||||||
"openManage": {
|
"openManage": {
|
||||||
"description": "__MSG_openManage__"
|
"description": "__MSG_openManage__"
|
||||||
},
|
},
|
||||||
"styleDisableAll": {
|
"styleDisableAll": {
|
||||||
"description": "__MSG_disableAllStyles__"
|
"description": "__MSG_disableAllStyles__"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"content_scripts": [
|
"content_scripts": [
|
||||||
{
|
{
|
||||||
"matches": ["<all_urls>"],
|
"matches": ["<all_urls>"],
|
||||||
"run_at": "document_start",
|
"run_at": "document_start",
|
||||||
"all_frames": true,
|
"all_frames": true,
|
||||||
"js": ["apply.js"]
|
"js": ["apply.js"]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"matches": ["http://userstyles.org/*", "https://userstyles.org/*"],
|
"matches": ["http://userstyles.org/*", "https://userstyles.org/*"],
|
||||||
"run_at": "document_end",
|
"run_at": "document_end",
|
||||||
"all_frames": false,
|
"all_frames": false,
|
||||||
"js": ["install.js"]
|
"js": ["install.js"]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"options_page": "manage.html",
|
"browser_action": {
|
||||||
"browser_action": {
|
"default_icon": {
|
||||||
"default_icon": {
|
"16": "16w.png",
|
||||||
"16": "16w.png",
|
"32": "32w.png",
|
||||||
"32": "32w.png",
|
"19": "19w.png",
|
||||||
"19": "19w.png",
|
"38": "38w.png"
|
||||||
"38": "38w.png"
|
},
|
||||||
},
|
"default_title": "Stylus",
|
||||||
"default_title": "Stylus",
|
"default_popup": "popup.html"
|
||||||
"default_popup": "popup.html"
|
},
|
||||||
},
|
"default_locale": "en",
|
||||||
"default_locale": "en"
|
"options_ui": {
|
||||||
|
"page": "options/index.html",
|
||||||
|
"chrome_style": true
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -60,7 +60,9 @@ function updateIcon(tab, styles) {
|
||||||
if (!chrome.runtime.lastError) {
|
if (!chrome.runtime.lastError) {
|
||||||
var t = prefs.get("show-badge") && styles.length ? ("" + styles.length) : "";
|
var t = prefs.get("show-badge") && styles.length ? ("" + styles.length) : "";
|
||||||
chrome.browserAction.setBadgeText({text: t, tabId: tab.id});
|
chrome.browserAction.setBadgeText({text: t, tabId: tab.id});
|
||||||
chrome.browserAction.setBadgeBackgroundColor({color: disableAll ? "darkred" : '#006666'});
|
chrome.browserAction.setBadgeBackgroundColor({
|
||||||
|
color: prefs.get(disableAll ? 'badgeDisabled' : 'badgeNormal')
|
||||||
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
//console.log("Tab " + tab.id + " (" + tab.url + ") badge text set to '" + t + "'.");
|
//console.log("Tab " + tab.id + " (" + tab.url + ") badge text set to '" + t + "'.");
|
||||||
|
|
22
options/index.css
Normal file
22
options/index.css
Normal file
|
@ -0,0 +1,22 @@
|
||||||
|
body {
|
||||||
|
margin: 10px;
|
||||||
|
font-family: "Helvetica Neue",Helvetica,sans-serif;
|
||||||
|
font-size: 12px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
td:last-child {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type=number],
|
||||||
|
button {
|
||||||
|
width: 80px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.notes {
|
||||||
|
font-size: 90%;
|
||||||
|
color: #999;
|
||||||
|
}
|
55
options/index.html
Normal file
55
options/index.html
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Stylus Options</title>
|
||||||
|
<link rel="stylesheet" href="index.css">
|
||||||
|
<script src="../localization.js"></script>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1 i18n-text="optionsCustomize"></h1>
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td i18n-text="optionsBadgeNormal"></td>
|
||||||
|
<td><input type="color" id="badgeNormal"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td i18n-text="optionsBadgeDisabled"></td>
|
||||||
|
<td><input type="color" id="badgeDisabled"></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td i18n-text="optionsUpdateInterval"><sup>1</sup></td>
|
||||||
|
<td><input type="number" min="0" id="updateInterval"></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div>
|
||||||
|
<button id="save">Save</button>
|
||||||
|
<span id="status"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h1 i18n-text="optionsActions"></h1>
|
||||||
|
<table>
|
||||||
|
<tbody>
|
||||||
|
<tr>
|
||||||
|
<td i18n-text="optionsOpenManager"></td>
|
||||||
|
<td><button type="button" data-cmd="open-manage" i18n-text="optionsOpen"></button></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td i18n-text="optionsCheckUpdate"></td>
|
||||||
|
<td>
|
||||||
|
<span id="update-counter"></span>
|
||||||
|
<button type="button" data-cmd="check-updates" i18n-text="optionsCheck"></button>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="notes">
|
||||||
|
<hr>
|
||||||
|
1: <span i18n-text="optionsUpdateIntervalNote"></span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<script src="index.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
88
options/index.js
Normal file
88
options/index.js
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
'use strict';
|
||||||
|
|
||||||
|
function restore () {
|
||||||
|
chrome.runtime.getBackgroundPage(bg => {
|
||||||
|
document.getElementById('badgeDisabled').value = bg.prefs.get('badgeDisabled');
|
||||||
|
document.getElementById('badgeNormal').value = bg.prefs.get('badgeNormal');
|
||||||
|
document.getElementById('updateInterval').value = bg.prefs.get('updateInterval');
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function save () {
|
||||||
|
chrome.runtime.getBackgroundPage(bg => {
|
||||||
|
bg.prefs.set('badgeDisabled', document.getElementById('badgeDisabled').value);
|
||||||
|
bg.prefs.set('badgeNormal', document.getElementById('badgeNormal').value);
|
||||||
|
bg.prefs.set(
|
||||||
|
'updateInterval',
|
||||||
|
Math.max(0, +document.getElementById('updateInterval').value)
|
||||||
|
);
|
||||||
|
// display notification
|
||||||
|
let status = document.getElementById('status');
|
||||||
|
status.textContent = 'Options saved.';
|
||||||
|
setTimeout(() => status.textContent = '', 750);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('DOMContentLoaded', restore);
|
||||||
|
document.getElementById('save').addEventListener('click', save);
|
||||||
|
|
||||||
|
// actions
|
||||||
|
document.addEventListener('click', e => {
|
||||||
|
let cmd = e.target.dataset.cmd;
|
||||||
|
let total = 0, updated = 0;
|
||||||
|
|
||||||
|
function update () {
|
||||||
|
document.getElementById('update-counter').textContent = `${updated}/${total}`;
|
||||||
|
}
|
||||||
|
function done (target) {
|
||||||
|
target.disabled = false;
|
||||||
|
window.setTimeout(() => {
|
||||||
|
document.getElementById('update-counter').textContent = '';
|
||||||
|
}, 750);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (cmd === 'open-manage') {
|
||||||
|
chrome.tabs.query({
|
||||||
|
url: chrome.runtime.getURL('manage.html')
|
||||||
|
}, tabs => {
|
||||||
|
if (tabs.length) {
|
||||||
|
chrome.tabs.update(tabs[0].id, {
|
||||||
|
active: true,
|
||||||
|
}, () => {
|
||||||
|
chrome.windows.update(tabs[0].windowId, {
|
||||||
|
focused: true
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
chrome.tabs.create({
|
||||||
|
url: chrome.runtime.getURL('manage.html')
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
else if (cmd === 'check-updates') {
|
||||||
|
e.target.disabled = true;
|
||||||
|
chrome.runtime.getBackgroundPage(bg => {
|
||||||
|
bg.update.perform((cmd, value) => {
|
||||||
|
if (cmd === 'count') {
|
||||||
|
total = value;
|
||||||
|
if (!total) {
|
||||||
|
done(e.target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (cmd === 'single-updated' || cmd === 'single-skipped') {
|
||||||
|
updated += 1;
|
||||||
|
if (total && updated === total) {
|
||||||
|
done(e.target);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
update();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
// notify the automatic updater to reset the next automatic update accordingly
|
||||||
|
chrome.runtime.sendMessage({
|
||||||
|
method: 'resetInterval'
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
|
@ -348,6 +348,11 @@ var prefs = chrome.extension.getBackgroundPage().prefs || new function Prefs() {
|
||||||
},
|
},
|
||||||
"editor.lintDelay": 500, // lint gutter marker update delay, ms
|
"editor.lintDelay": 500, // lint gutter marker update delay, ms
|
||||||
"editor.lintReportDelay": 4500, // lint report update delay, ms
|
"editor.lintReportDelay": 4500, // lint report update delay, ms
|
||||||
|
|
||||||
|
"badgeDisabled": "darkred", // badge background color when disabled
|
||||||
|
"badgeNormal": "#006666", // badge background color
|
||||||
|
|
||||||
|
"updateInterval": 12 // user-style automatic update interval, hour
|
||||||
};
|
};
|
||||||
var values = deepCopy(defaults);
|
var values = deepCopy(defaults);
|
||||||
|
|
||||||
|
|
49
update.js
49
update.js
|
@ -1,4 +1,4 @@
|
||||||
/* globals getStyles, saveStyle */
|
/* globals getStyles, saveStyle, prefs */
|
||||||
'use strict';
|
'use strict';
|
||||||
|
|
||||||
var update = {
|
var update = {
|
||||||
|
@ -11,7 +11,7 @@ var update = {
|
||||||
req.onerror = req.ontimeout = () => callback();
|
req.onerror = req.ontimeout = () => callback();
|
||||||
req.send(data);
|
req.send(data);
|
||||||
},
|
},
|
||||||
md5Check: (style, callback) => {
|
md5Check: (style, callback, skipped) => {
|
||||||
let req = new XMLHttpRequest();
|
let req = new XMLHttpRequest();
|
||||||
req.open('GET', style.md5Url, true);
|
req.open('GET', style.md5Url, true);
|
||||||
req.onload = () => {
|
req.onload = () => {
|
||||||
|
@ -20,16 +20,16 @@ var update = {
|
||||||
callback(style);
|
callback(style);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
console.log(`"${style.name}" style is up-to-date`);
|
skipped(`"${style.name}" style is up-to-date`);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
req.onerror = req.ontimeout = () => console.log('Error validating MD5 checksum');
|
req.onerror = req.ontimeout = () => skipped('Error validating MD5 checksum');
|
||||||
req.send();
|
req.send();
|
||||||
},
|
},
|
||||||
list: (callback) => {
|
list: (callback) => {
|
||||||
getStyles({}, (styles) => callback(styles.filter(style => style.updateUrl)));
|
getStyles({}, (styles) => callback(styles.filter(style => style.updateUrl)));
|
||||||
},
|
},
|
||||||
perform: () => {
|
perform: (observe = function () {}) => {
|
||||||
// from install.js
|
// from install.js
|
||||||
function arraysAreEqual (a, b) {
|
function arraysAreEqual (a, b) {
|
||||||
// treat empty array and undefined as equivalent
|
// treat empty array and undefined as equivalent
|
||||||
|
@ -57,6 +57,7 @@ var update = {
|
||||||
}
|
}
|
||||||
|
|
||||||
update.list(styles => {
|
update.list(styles => {
|
||||||
|
observe('count', styles.length);
|
||||||
styles.forEach(style => update.md5Check(style, style => update.fetch(style.updateUrl, response => {
|
styles.forEach(style => update.md5Check(style, style => update.fetch(style.updateUrl, response => {
|
||||||
if (response) {
|
if (response) {
|
||||||
let json = JSON.parse(response);
|
let json = JSON.parse(response);
|
||||||
|
@ -65,20 +66,50 @@ var update = {
|
||||||
if (json.sections.every((section) => {
|
if (json.sections.every((section) => {
|
||||||
return style.sections.some(installedSection => sectionsAreEqual(section, installedSection));
|
return style.sections.some(installedSection => sectionsAreEqual(section, installedSection));
|
||||||
})) {
|
})) {
|
||||||
return console.log('everything is the same');
|
return observe('single-skipped', '2'); // everything is the same
|
||||||
}
|
}
|
||||||
json.method = 'saveStyle';
|
json.method = 'saveStyle';
|
||||||
json.id = style.id;
|
json.id = style.id;
|
||||||
|
|
||||||
saveStyle(json, function () {
|
saveStyle(json, function () {
|
||||||
console.log(`"${style.name}" style is updated`);
|
observe('single-updated', style.name);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
console.log('style sections mismatch');
|
return observe('single-skipped', '3'); // style sections mismatch
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})));
|
}), () => observe('single-skipped', '1')));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
// automatically update all user-styles if "updateInterval" pref is set
|
||||||
|
window.setTimeout(function () {
|
||||||
|
let id;
|
||||||
|
function run () {
|
||||||
|
update.perform(/*(cmd, value) => console.log(cmd, value)*/);
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
function reset () {
|
||||||
|
window.clearTimeout(id);
|
||||||
|
let interval = prefs.get('updateInterval');
|
||||||
|
// if interval === 0 => automatic update is disabled
|
||||||
|
if (interval) {
|
||||||
|
/* console.log('next update', interval); */
|
||||||
|
id = window.setTimeout(run, interval * 60 * 60 * 1000);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (prefs.get('updateInterval')) {
|
||||||
|
run();
|
||||||
|
}
|
||||||
|
chrome.runtime.onMessage.addListener(request => {
|
||||||
|
// when user has changed the predefined time interval in the settings page
|
||||||
|
if (request.method === 'prefChanged' && request.prefName === 'updateInterval') {
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
// when user just manually checked for updates
|
||||||
|
if (request.method === 'resetInterval') {
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}, 10000);
|
||||||
|
|
Loading…
Reference in New Issue
Block a user