manage.html 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. <!DOCTYPE html>
  2. <html id="stylus">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title i18n-text="manageTitle"></title>
  7. <link rel="stylesheet" href="global.css">
  8. <!-- Notes:
  9. * Chrome doesn't garbage-collect (or even leaks) SVG <symbol> referenced via <use> so we'll embed the code directly
  10. * inter-tag whitespace in templates is automatically removed in localization.js
  11. * i18n-anything attribute automatically creates "anything" attribute
  12. -->
  13. <template data-id="style">
  14. <div class="entry">
  15. <h2 class="style-name">
  16. <a class="style-name-link">
  17. &nbsp;
  18. <span class="style-info" data-type="version"></span>
  19. </a>
  20. <a target="_blank" class="homepage"></a>
  21. </h2>
  22. <p class="applies-to">
  23. <label i18n-text="appliesDisplay"></label>
  24. <span class="targets"></span>
  25. </p>
  26. <p class="actions">
  27. <a class="style-edit-link">
  28. <button i18n-text="editStyleLabel" tabindex="-1"></button>
  29. </a>
  30. <button class="enable" i18n-text="enableStyleLabel"></button>
  31. <button class="disable" i18n-text="disableStyleLabel"></button>
  32. <button class="delete" i18n-text="deleteStyleLabel"></button>
  33. <button class="check-update" i18n-text="checkForUpdate"></button>
  34. <button class="update" i18n-text="installUpdate"></button>
  35. <button class="configure-usercss" i18n-text="configureStyle"></button>
  36. <span class="update-note"></span>
  37. </p>
  38. </div>
  39. </template>
  40. <template data-id="styleNewUI">
  41. <div class="entry">
  42. <h2 class="style-name">
  43. <div class="checkmate">
  44. <input class="checker" type="checkbox" i18n-title="toggleStyle">
  45. <svg class="svg-icon checked"><use xlink:href="#svg-icon-checked"/></svg>
  46. </div>
  47. <a class="style-name-link">
  48. &nbsp;
  49. <span class="style-info" data-type="version"></span>
  50. </a>
  51. </h2>
  52. <p class="actions">
  53. <a target="_blank" class="homepage" tabindex="0"></a>
  54. <a class="delete" i18n-title="deleteStyleLabel" tabindex="0">
  55. <svg class="svg-icon" viewBox="0 0 20 20">
  56. <polygon points="16.2,5.5 14.5,3.8 10,8.3 5.5,3.8 3.8,5.5 8.3,10 3.8,14.5
  57. 5.5,16.2 10,11.7 14.5,16.2 16.2,14.5 11.7,10 "/>
  58. </svg>
  59. </a>
  60. </p>
  61. <p class="style-info" data-type="age"></p>
  62. <div class="applies-to">
  63. <div class="targets"></div>
  64. <a class="expander" tabindex="0">...</a>
  65. </div>
  66. </div>
  67. </template>
  68. <template data-id="homepageIconBig">
  69. <svg class="svg-icon" viewBox="0 0 20 20">
  70. <polygon shape-rendering="crispEdges" points="3,3 3,17 17,17 17,13 15,13 15,15 5,15 5,5 7,5 7,3 "/>
  71. <polygon points="10,3 12.5,5.5 8,10 10,12 14.5,7.5 17,10 17,3 "/>
  72. </svg>
  73. </template>
  74. <template data-id="homepageIconSmall">
  75. <svg class="svg-icon" viewBox="0 0 20 20">
  76. <path d="M4,4h5v2H6v8h8v-3h2v5H4V4z M11,3h6v6l-2-2l-4,4L9,9l4-4L11,3z"/>
  77. </svg>
  78. </template>
  79. <template data-id="configureIcon">
  80. <a class="configure-usercss" i18n-title="configureStyle" tabindex="0">
  81. <svg class="svg-icon config"><use xlink:href="#svg-icon-config"></use></svg>
  82. </a>
  83. </template>
  84. <template data-id="updaterIcons">
  85. <span class="updater-icons">
  86. <a class="check-update" i18n-title="checkForUpdate" tabindex="0">
  87. <svg class="svg-icon" viewBox="0 0 20 20">
  88. <path d="M18,16.6l-3.1-3.1c0.5-0.7,0.9-1.5,1-2.5h-2.1c-0.4,1.7-2,3-3.9,3c-0.8,0-1.6-0.3-2.3-0.7
  89. L10,11H6.1H4.1H4v6l2.3-2.3c1,0.8,2.3,1.3,3.7,1.3c1.3,0,2.5-0.4,3.5-1.1l3.1,3.1L18,16.6z"/>
  90. <path d="M10,6c0.8,0,1.6,0.3,2.3,0.7L10,9h3.9h2.1H16V3l-2.3,2.3C12.7,4.5,11.4,4,10,4
  91. C7,4,4.6,6.2,4.1,9h2.1C6.6,7.3,8.1,6,10,6z"/>
  92. </svg>
  93. </a>
  94. <a class="update" i18n-title="installUpdate" tabindex="0">
  95. <svg class="svg-icon" viewBox="0 0 20 20">
  96. <polygon points="16,8 12,8 12,3 8,3 8,8 4,8 10,14 "/>
  97. <rect shape-rendering="crispEdges" x="4" y="15" width="12" height="2"/>
  98. </svg>
  99. </a>
  100. <span class="up-to-date" i18n-title="updateCheckSucceededNoUpdate">
  101. <svg class="svg-icon" viewBox="0 0 20 20">
  102. <polygon points="15.83 4.75 8.76 11.82 5.2 8.26 3.51 9.95 8.76 15.19 17.52 6.43 15.83 4.75"/>
  103. </svg>
  104. </span>
  105. <span class="updated" i18n-title="updateCompleted">
  106. <svg class="svg-icon" viewBox="0 0 20 20">
  107. <polygon points="15.83 4.75 8.76 11.82 5.2 8.26 3.51 9.95 8.76 15.19 17.52 6.43 15.83 4.75"/>
  108. </svg>
  109. </span>
  110. <span class="update-note"></span>
  111. </span>
  112. </template>
  113. <template data-id="appliesToTarget">
  114. <span class="target"></span>
  115. </template>
  116. <template data-id="appliesToSeparator">
  117. <span class="sep">, </span>
  118. </template>
  119. <template data-id="appliesToEverything">
  120. <span class="target" i18n-text="appliesToEverything"></span>
  121. </template>
  122. <template data-id="extraAppliesTo">
  123. <details class="applies-to-extra">
  124. <summary class="applies-to-extra-expander" i18n-text="appliesDisplayTruncatedSuffix"></summary>
  125. </details>
  126. </template>
  127. <script src="js/polyfill.js"></script>
  128. <script src="js/msg.js"></script>
  129. <script src="js/toolbox.js"></script>
  130. <script src="js/prefs.js"></script>
  131. <script src="js/dom.js"></script>
  132. <script src="js/localization.js"></script>
  133. <script src="js/router.js"></script>
  134. <script src="content/style-injector.js"></script>
  135. <script src="content/apply.js"></script>
  136. <script src="manage/events.js"></script>
  137. <script src="manage/filters.js"></script>
  138. <script src="manage/render.js"></script>
  139. <script src="manage/sorter.js"></script>
  140. <script src="manage/manage.js"></script>
  141. <link rel="stylesheet" href="manage/manage.css">
  142. </head>
  143. <body id="stylus-manage" i18n-dragndrop-hint="dragDropMessage">
  144. <div id="header">
  145. <h1 id="manage-heading" i18n-text="manageHeading"></h1>
  146. <div id="manage-settings">
  147. <div class="settings-column">
  148. <details id="filters" data-pref="manage.filters.expanded">
  149. <summary>
  150. <h2 i18n-text="manageFilters">:
  151. <div class="filter-stats-wrapper">
  152. <span id="filters-stats"></span>
  153. <a id="reset-filters" tabindex="0">
  154. <svg class="svg-icon" viewBox="0 0 20 20">
  155. <title i18n-text="genericResetLabel"></title>
  156. <polygon points="16.2,5.5 14.5,3.8 10,8.3 5.5,3.8 3.8,5.5 8.3,10 3.8,14.5
  157. 5.5,16.2 10,11.7 14.5,16.2 16.2,14.5 11.7,10 "/>
  158. </svg>
  159. </a>
  160. </div>
  161. </h2>
  162. </summary>
  163. <div class="filter-selection">
  164. <label>
  165. <div class="checkmate">
  166. <input id="manage.onlyEnabled" type="checkbox"
  167. data-filter=".enabled"
  168. data-filter-hide=".disabled">
  169. <svg class="svg-icon checked"><use xlink:href="#svg-icon-checked"/></svg>
  170. </div>
  171. </label>
  172. <div class="select-resizer">
  173. <select id="manage.onlyEnabled.invert" class="fit-width">
  174. <option i18n-text="manageOnlyEnabled" value="false"></option>
  175. <option i18n-text="manageOnlyDisabled" value="true"></option>
  176. </select>
  177. <svg class="svg-icon select-arrow"><use xlink:href="#svg-icon-select-arrow"/></svg>
  178. </div>
  179. </div>
  180. <div class="filter-selection">
  181. <label>
  182. <div class="checkmate">
  183. <input id="manage.onlyLocal" type="checkbox"
  184. data-filter=":not(.updatable):not(.update-done)"
  185. data-filter-hide=".updatable, .update-done">
  186. <svg class="svg-icon checked"><use xlink:href="#svg-icon-checked"/></svg>
  187. </div>
  188. </label>
  189. <div class="select-resizer">
  190. <select id="manage.onlyLocal.invert" i18n-title="manageOnlyLocalTooltip" class="fit-width">
  191. <option i18n-text="manageOnlyLocal" value="false"></option>
  192. <option i18n-text="manageOnlyExternal" value="true"></option>
  193. </select>
  194. <svg class="svg-icon select-arrow"><use xlink:href="#svg-icon-select-arrow"/></svg>
  195. </div>
  196. </div>
  197. <div class="filter-selection">
  198. <label>
  199. <div class="checkmate">
  200. <input id="manage.onlyUsercss" type="checkbox"
  201. data-filter=".usercss"
  202. data-filter-hide=":not(.usercss)">
  203. <svg class="svg-icon checked"><use xlink:href="#svg-icon-checked"/></svg>
  204. </div>
  205. </label>
  206. <div class="select-resizer">
  207. <select id="manage.onlyUsercss.invert" class="fit-width">
  208. <option i18n-text="manageOnlyUsercss" value="false"></option>
  209. <option i18n-text="manageOnlyNonUsercss" value="true"></option>
  210. </select>
  211. <svg class="svg-icon select-arrow"><use xlink:href="#svg-icon-select-arrow"/></svg>
  212. </div>
  213. </div>
  214. <label id="only-updates" class="hidden">
  215. <input type="checkbox"
  216. data-filter=".can-update, .update-problem, .update-done"
  217. data-filter-hide=":not(.updatable):not(.update-done),
  218. .no-update:not(.update-problem),
  219. .updatable:not(.can-update):not(.update-problem):not(.update-done)">
  220. <svg class="svg-icon checked"><use xlink:href="#svg-icon-checked"/></svg>
  221. <span i18n-text="manageOnlyUpdates"></span>
  222. </label>
  223. <div id="search-wrapper">
  224. <input id="search" type="search" i18n-placeholder="search" spellcheck="false"
  225. data-filter=":not(.not-matching)"
  226. data-filter-hide=".not-matching">
  227. <div class="select-wrapper">
  228. <select id="searchMode" class="fit-width">
  229. <option i18n-text="searchStylesName" value="name"></option>
  230. <option i18n-text="searchStylesMeta" value="meta" selected></option>
  231. <option i18n-text="searchStylesCode" value="code"></option>
  232. <option i18n-text="searchStylesMatchUrl" value="url"></option>
  233. <option i18n-text="searchStylesAll" value="all"></option>
  234. </select>
  235. <svg class="svg-icon select-arrow"><use xlink:href="#svg-icon-select-arrow"/></svg>
  236. </div>
  237. <a id="search-help" tabindex="0">
  238. <svg class="svg-icon info"><use xlink:href="#svg-icon-help"/></svg>
  239. </a>
  240. </div>
  241. </details>
  242. <div id="sort-wrapper">
  243. <div class="sorter-selection" i18n-title="sortLabel">
  244. <select id="manage.newUI.sort"></select>
  245. <svg class="svg-icon select-arrow"><use xlink:href="#svg-icon-select-arrow"/></svg>
  246. </div>
  247. <a id="sorter-help" tabindex="0">
  248. <svg class="svg-icon info"><use xlink:href="#svg-icon-help"/></svg>
  249. </a>
  250. </div>
  251. </div>
  252. <div class="settings-column">
  253. <details id="actions" data-pref="manage.actions.expanded">
  254. <summary><h2 i18n-text="optionsActions"></h2></summary>
  255. <div id="update-check">
  256. <button id="check-all-updates" i18n-text="checkAllUpdates">
  257. <span id="update-progress"></span>
  258. </button>
  259. <a id="update-history" i18n-title="genericHistoryLabel" tabindex="0">
  260. <svg class="svg-icon" viewBox="0 0 20 20" i18n-alt="helpAlt">
  261. <path d="M13,7H7V6h6Zm6,6.5A5.5,5.5,0,0,1,8.61,16H4V3H16V8.61A5.5,5.5,0,0,1,19,13.5ZM8,14c0-.16,0-.84,0-1H7V12H8.21a5.46,5.46,0,0,1,.39-1H7V10H9.26a5.55,5.55,0,0,1,1.09-1H7V8h7V5H6v9Zm10-.5A4.5,4.5,0,1,0,13.5,18,4.5,4.5,0,0,0,18,13.5ZM14,13V10H13v4h4V13Z"/>
  262. </svg>
  263. </a>
  264. </div>
  265. <div id="update-all">
  266. <button id="apply-all-updates" class="hidden" i18n-text="applyAllUpdates"></button>
  267. <span id="update-all-no-updates" class="hidden" i18n-text="updateAllCheckSucceededNoUpdate"></span>
  268. <button id="check-all-updates-force" class="hidden" i18n-text="checkAllUpdatesForce"></button>
  269. </div>
  270. <div id="add-style-wrapper">
  271. <a href="edit.html">
  272. <button id="add-style-label" i18n-text="addStyleLabel" tabindex="-1"></button>
  273. </a>
  274. <label id="add-style-as-usercss-wrapper">
  275. <input type="checkbox" id="newStyleAsUsercss">
  276. <svg class="svg-icon checked"><use xlink:href="#svg-icon-checked"/></svg>
  277. <span i18n-text="manageNewStyleAsUsercss" i18n-title="optionsAdvancedNewStyleAsUsercss"></span>
  278. <a id="usercss-wiki"
  279. href="https://github.com/openstyles/stylus/wiki/Usercss"
  280. i18n-title="externalUsercssDocument">
  281. <svg class="svg-icon" viewBox="0 0 20 20">
  282. <path d="M4,4h5v2H6v8h8v-3h2v5H4V4z M11,3h6v6l-2-2l-4,4L9,9l4-4L11,3z"/>
  283. </svg>
  284. </a>
  285. </label>
  286. </div>
  287. <button id="manage-options-button" i18n-text="openOptions"></button>
  288. </details>
  289. </div>
  290. <div class="settings-column">
  291. <details id="backup" data-pref="manage.backup.expanded">
  292. <summary><h2 id="backup-title" i18n-text="backupButtons"></h2></summary>
  293. <span id="backup-message" i18n-text="backupMessage"></span>
  294. <div id="backup-buttons">
  295. <button id="file-all-styles" i18n-text="exportLabel"></button>
  296. <button id="unfile-all-styles" i18n-text="importLabel"></button>
  297. <button id="sync-styles" i18n-text="optionsCustomizeSync"></button>
  298. </div>
  299. </details>
  300. <div id="manage-text">
  301. <span>
  302. <a href="https://userstyles.world/explore" target="_blank" i18n-text="linkGetShareStyles"></a>
  303. <a tabindex="0" i18n-title="linkGetShareStylesInfo" data-cmd="note">
  304. <svg class="svg-icon info"><use xlink:href="#svg-icon-help"/></svg>
  305. </a>
  306. </span>
  307. <span>
  308. <a href="https://uso.kkx.one/browse/styles" target="_blank" i18n-text="linkGetStyles"></a>
  309. <a tabindex="0" i18n-title="linkGetStylesInfo" data-cmd="note">
  310. <svg class="svg-icon info"><use xlink:href="#svg-icon-help"/></svg>
  311. </a>
  312. </span>
  313. <span><a href="https://add0n.com/stylus.html#features" target="_blank" i18n-text="linkGetHelp"></a></span>
  314. <span><a href="https://github.com/openstyles/stylus/wiki" target="_blank" i18n-text="linkStylusWiki"></a></span>
  315. <span><a href="https://www.transifex.com/github-7/Stylus" target="_blank" i18n-text="linkTranslate"></a></span>
  316. </div>
  317. </div>
  318. </div>
  319. </div>
  320. <div id="installed"></div>
  321. <svg xmlns="http://www.w3.org/2000/svg" style="display: none !important;">
  322. <symbol id="svg-icon-checked" viewBox="0 0 1000 1000">
  323. <path fill-rule="evenodd" d="M983.2,184.3L853,69.8c-4-3.5-9.3-5.3-14.5-5c-5.3,0.4-10.3,2.8-13.8,6.8L352.3,609.2L184.4,386.9c-3.2-4.2-8-7-13.2-7.8c-5.3-0.8-10.6,0.6-14.9,3.9L18,487.5c-8.8,6.7-10.6,19.3-3.9,28.1L325,927.2c3.6,4.8,9.3,7.7,15.3,8c0.2,0,0.5,0,0.7,0c5.8,0,11.3-2.5,15.1-6.8L985,212.6C992.3,204.3,991.5,191.6,983.2,184.3z"/>
  324. </symbol>
  325. <symbol id="svg-icon-select-arrow" viewBox="0 0 1792 1792">
  326. <path fill-rule="evenodd" d="M1408 704q0 26-19 45l-448 448q-19 19-45 19t-45-19l-448-448q-19-19-19-45t19-45 45-19h896q26 0 45 19t19 45z"/>
  327. </symbol>
  328. <symbol id="svg-icon-help" viewBox="0 0 14 16">
  329. <path fill-rule="evenodd" d="M6.3 5.69a.942.942 0 0 1-.28-.7c0-.28.09-.52.28-.7.19-.18.42-.28.7-.28.28 0 .52.09.7.28.18.19.28.42.28.7 0 .28-.09.52-.28.7a1 1 0 0 1-.7.3c-.28 0-.52-.11-.7-.3zM8 7.99c-.02-.25-.11-.48-.31-.69-.2-.19-.42-.3-.69-.31H6c-.27.02-.48.13-.69.31-.2.2-.3.44-.31.69h1v3c.02.27.11.5.31.69.2.2.42.31.69.31h1c.27 0 .48-.11.69-.31.2-.19.3-.42.31-.69H8V7.98v.01zM7 2.3c-3.14 0-5.7 2.54-5.7 5.68 0 3.14 2.56 5.7 5.7 5.7s5.7-2.55 5.7-5.7c0-3.15-2.56-5.69-5.7-5.69v.01zM7 .98c3.86 0 7 3.14 7 7s-3.14 7-7 7-7-3.12-7-7 3.14-7 7-7z"></path>
  330. </symbol>
  331. <symbol id="svg-icon-config" viewBox="0 0 16 16">
  332. <path d="M13.3,12.8l1.5-2.6l-2.2-1.5c0-0.2,0.1-0.5,0.1-0.7c0-0.2,0-0.5-0.1-0.7l2.2-1.5l-1.5-2.6l-2.4,1.2 c-0.4-0.3-0.8-0.5-1.2-0.7L9.5,1h-3L6.3,3.7C5.9,3.8,5.5,4.1,5.1,4.4L2.7,3.2L1.2,5.8l2.2,1.5c0,0.2-0.1,0.5-0.1,0.7 c0,0.2,0,0.5,0.1,0.7l-2.2,1.5l1.5,2.6l2.4-1.2c0.4,0.3,0.8,0.5,1.2,0.7L6.5,15h3l0.2-2.7c0.4-0.2,0.8-0.4,1.2-0.7L13.3,12.8z M8,10.3c-1.3,0-2.3-1-2.3-2.3c0-1.3,1-2.3,2.3-2.3c1.3,0,2.3,1,2.3,2.3C10.3,9.3,9.3,10.3,8,10.3z"/>
  333. </symbol>
  334. </svg>
  335. </body>
  336. </html>