popup.js 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799
  1. var currentTabID;
  2. var isTabIncognito = false;
  3. var cookieList = [];
  4. var newCookie = false;
  5. var pasteCookie = false;
  6. var currentLayout = "none";
  7. var lastInput = "";
  8. $.fx.speeds._default = 200;
  9. jQuery(document).ready(function () {
  10. ++data.nPopupClicked;
  11. start();
  12. /**
  13. * Force Repaint
  14. * Temporary workaround for Chromium #428044 bug
  15. * https://bugs.chromium.org/p/chromium/issues/detail?id=428044#c35
  16. */
  17. let body = $('body').css('display', 'none');
  18. setTimeout(() => {
  19. body.css('display', '');
  20. }, 100);
  21. });
  22. function start() {
  23. setLoaderVisible(true);
  24. var arguments = getUrlVars();
  25. if (arguments.url === undefined) {
  26. chrome.tabs.query(
  27. {
  28. active: true,
  29. lastFocusedWindow: true
  30. },
  31. function (tabs) {
  32. let currentTabURL = tabs[0].url;
  33. currentTabID = tabs[0].id;
  34. $('input', '#cookieSearchCondition').val(currentTabURL);
  35. document.title = document.title + "-" + currentTabURL;
  36. doSearch(false);
  37. }
  38. );
  39. } else {
  40. var url = decodeURI(arguments.url);
  41. currentTabID = parseInt(decodeURI(arguments.id));
  42. isTabIncognito = decodeURI(arguments.incognito) === "true";
  43. $('input', '#cookieSearchCondition').val(url);
  44. document.title = document.title + "-" + url;
  45. doSearch(true);
  46. }
  47. }
  48. function getUrlOfCookies() {
  49. return $('input', '#cookieSearchCondition').val();
  50. }
  51. function doSearch(isSeparateWindow) {
  52. var url = $('input', '#cookieSearchCondition').val();
  53. if (url.length < 3)
  54. return;
  55. var filter = new Filter();
  56. if (/^https?:\/\/.+$/.test(url)) {
  57. filter.setUrl(url);
  58. } else {
  59. filter.setDomain(url);
  60. }
  61. createList(filter.getFilter(), isSeparateWindow);
  62. }
  63. function submit(currentTabID) {
  64. if (newCookie)
  65. submitNew(currentTabID);
  66. else if (pasteCookie)
  67. importCookies();
  68. else
  69. submitAll(currentTabID);
  70. }
  71. function submitAll(currentTabID) {
  72. var cookies = $(".cookie", "#cookiesList");
  73. var nCookiesToUpdate = cookies.length;
  74. var onUpdateComplete = function () {
  75. data.nCookiesChanged += cookies.length;
  76. if (preferences.refreshAfterSubmit) {
  77. chrome.tabs.reload(currentTabID, { 'bypassCache': preferences.skipCacheRefresh });
  78. }
  79. doSearch();
  80. };
  81. cookies.each(function () {
  82. var cCookie = formCookieData($(this));
  83. if (cCookie === undefined) {
  84. return;
  85. }
  86. deleteCookie(cCookie.url, cCookie.name, cCookie.storeId, function () {
  87. chrome.cookies.set(cCookie, function () {
  88. if (--nCookiesToUpdate === 0) {
  89. onUpdateComplete();
  90. }
  91. });
  92. });
  93. });
  94. }
  95. function submitNew() {
  96. var cCookie = formCookieData($("#newCookie"));
  97. if (cCookie === undefined)
  98. return;
  99. chrome.cookies.getAllCookieStores(function (cookieStores) {
  100. for (let x = 0; x < cookieStores.length; x++) {
  101. if (cookieStores[x].tabIds.indexOf(currentTabID) != -1) {
  102. cCookie.storeId = cookieStores[x].id;
  103. break;
  104. }
  105. }
  106. deleteCookie(cCookie.url, cCookie.name, cCookie.storeId, function () {
  107. chrome.cookies.set(cCookie, doSearch);
  108. ++data.nCookiesCreated;
  109. });
  110. });
  111. }
  112. function createList(filters, isSeparateWindow) {
  113. var filteredCookies = [];
  114. if (filters === null)
  115. filters = {};
  116. var filterURL = {};
  117. if (filters.url !== undefined)
  118. filterURL.url = filters.url;
  119. if (filters.domain !== undefined)
  120. filterURL.domain = filters.domain;
  121. if (!isSeparateWindow) {
  122. $('#submitDiv').css({
  123. 'bottom': 0
  124. });
  125. } else {
  126. $('#submitDiv').addClass("submitDivSepWindow");
  127. }
  128. chrome.cookies.getAllCookieStores(function (cookieStores) {
  129. for (let x = 0; x < cookieStores.length; x++) {
  130. if (cookieStores[x].tabIds.indexOf(currentTabID) != -1) {
  131. filterURL.storeId = cookieStores[x].id;
  132. break;
  133. }
  134. }
  135. chrome.cookies.getAll(filterURL, function (cks) {
  136. var currentC;
  137. for (var i = 0; i < cks.length; i++) {
  138. currentC = cks[i];
  139. if (filters.name !== undefined && currentC.name.toLowerCase().indexOf(filters.name.toLowerCase()) === -1)
  140. continue;
  141. if (filters.domain !== undefined && currentC.domain.toLowerCase().indexOf(filters.domain.toLowerCase()) === -1)
  142. continue;
  143. if (filters.secure !== undefined && currentC.secure.toLowerCase().indexOf(filters.secure.toLowerCase()) === -1)
  144. continue;
  145. if (filters.session !== undefined && currentC.session.toLowerCase().indexOf(filters.session.toLowerCase()) === -1)
  146. continue;
  147. for (var x = 0; x < data.readOnly.length; x++) {
  148. try {
  149. var lock = data.readOnly[x];
  150. if (lock.name === currentC.name && lock.domain === currentC.domain) {
  151. currentC.isProtected = true;
  152. break;
  153. }
  154. } catch (e) {
  155. console.error(e.message);
  156. delete data.readOnly[x];
  157. }
  158. }
  159. filteredCookies.push(currentC);
  160. }
  161. cookieList = filteredCookies;
  162. $("#cookiesList").empty();
  163. if (cookieList.length === 0) {
  164. swithLayout();
  165. setEvents();
  166. setLoaderVisible(false);
  167. return;
  168. }
  169. cookieList.sort(function (a, b) {
  170. if (preferences.sortCookiesType === "domain_alpha") {
  171. var compDomain = a.domain.toLowerCase().localeCompare(b.domain.toLowerCase());
  172. if (compDomain)
  173. return compDomain;
  174. }
  175. return a.name.toLowerCase().localeCompare(b.name.toLowerCase())
  176. });
  177. createAccordionList(cookieList, function () {
  178. swithLayout();
  179. setEvents();
  180. $("input:checkbox").uniform();
  181. setLoaderVisible(false);
  182. });
  183. });
  184. });
  185. }
  186. function createAccordionList(cks, callback, callbackArguments) {
  187. let createAccordionCallback = callback;
  188. let createAccordionCallbackArguments = callbackArguments;
  189. try {
  190. $("#cookiesList").accordion("destroy");
  191. } catch (e) {
  192. // Accordion not yet created
  193. // console.warn(e.message)
  194. }
  195. if (cks === null)
  196. cks = cookieList;
  197. for (var i = 0; i < cks.length; i++) {
  198. currentC = cks[i];
  199. var domainText = "";
  200. if (preferences.showDomain) {
  201. domainText = currentC.domain;
  202. if (preferences.showDomainBeforeName) {
  203. domainText = domainText + " | ";
  204. } else {
  205. domainText = " | " + domainText;
  206. }
  207. }
  208. var titleText;
  209. if (preferences.showDomainBeforeName) {
  210. titleText = $("<p/>").text(domainText).append($("<b/>").text(currentC.name));
  211. if (currentC.isProtected)
  212. $(":first-child", titleText).css("color", "green");
  213. } else {
  214. titleText = $("<p/>").append($("<b/>").text(currentC.name)).append($("<span/>").text(domainText));
  215. }
  216. var titleElement = $("<h3/>").append($("<a/>").html(titleText.html()).attr("href", "#"));
  217. var cookie = $(".cookie_details_template").clone().removeClass("cookie_details_template");
  218. $(".index", cookie).val(i);
  219. $(".name", cookie).val(currentC.name);
  220. $(".value", cookie).val(currentC.value);
  221. $(".domain", cookie).val(currentC.domain);
  222. $(".path", cookie).val(currentC.path);
  223. $(".storeId", cookie).val(currentC.storeId);
  224. $(".sameSite", cookie).val(currentC.sameSite);
  225. if (currentC.isProtected)
  226. $(".unprotected", cookie).hide();
  227. else
  228. $(".protected", cookie).hide();
  229. if (currentC.hostOnly) {
  230. $(".domain", cookie).attr("disabled", "disabled");
  231. $(".hostOnly", cookie).prop("checked", true);
  232. }
  233. if (currentC.secure) {
  234. $(".secure", cookie).prop("checked", true);
  235. }
  236. if (currentC.httpOnly) {
  237. $(".httpOnly", cookie).prop("checked", true);
  238. }
  239. if (currentC.session) {
  240. $(".expiration", cookie).attr("disabled", "disabled");
  241. $(".session", cookie).prop("checked", true);
  242. }
  243. var expDate;
  244. if (currentC.session) {
  245. expDate = new Date();
  246. expDate.setFullYear(expDate.getFullYear() + 1);
  247. } else {
  248. expDate = new Date(currentC.expirationDate * 1000.0);
  249. }
  250. $('.expiration', cookie).val(expDate);
  251. $("#cookiesList").append(titleElement);
  252. $("#cookiesList").append(cookie);
  253. }
  254. $("#cookiesList").accordion({
  255. autoHeight: false,
  256. heightStyle: "content",
  257. collapsible: true,
  258. active: cks.length - 1,
  259. create: function (event, ui) {
  260. $.uniform.update();
  261. if (createAccordionCallback !== undefined)
  262. createAccordionCallback(createAccordionCallbackArguments);
  263. }
  264. });
  265. }
  266. function importCookies() {
  267. var nCookiesImportedThisTime = 0;
  268. var text = $(".value", "#pasteCookie").val();
  269. var error = $(".error", "#pasteCookie");
  270. error.hide();
  271. error.text("For format reference export cookies in JSON");
  272. error.html(error.html() + "<br> Also check&nbsp;<a href='http://developer.chrome.com/extensions/cookies.html#type-Cookie' target='_blank'>Developer Chrome Cookie</a><br>Error:");
  273. try {
  274. var cookieArray = $.parseJSON(text);
  275. if (Object.prototype.toString.apply(cookieArray) === "[object Object]")
  276. cookieArray = [cookieArray];
  277. for (var i = 0; i < cookieArray.length; i++) {
  278. try {
  279. var cJSON = cookieArray[i];
  280. var cookie = cookieForCreationFromFullCookie(cJSON);
  281. chrome.cookies.set(cookie);
  282. nCookiesImportedThisTime++;
  283. } catch (e) {
  284. error.html(error.html() + "<br>" + $('<div/>').text("Cookie number " + i).html() + "<br>" + $('<div/>').text(e.message).html());
  285. console.error(e.message);
  286. error.fadeIn();
  287. return;
  288. }
  289. }
  290. } catch (e) {
  291. error.html(error.html() + "<br>" + $('<div/>').text(e.message).html());
  292. console.error(e.message);
  293. error.fadeIn();
  294. return;
  295. }
  296. data.nCookiesImported += nCookiesImportedThisTime;
  297. doSearch();
  298. return;
  299. }
  300. function setEvents() {
  301. $("#submitButton:first-child").unbind().click(function () {
  302. submit(currentTabID);
  303. });
  304. if (cookieList.length > 0) {
  305. $("#submitDiv").show();
  306. }
  307. $("#submitFiltersButton").button();
  308. $("#submitFiltersDiv").unbind().click(function () {
  309. var domainChecked = $(".filterDomain:checked", $(this).parent()).val() !== undefined;
  310. var domain = $("#filterByDomain", $(this).parent()).text();
  311. var nameChecked = $(".filterName:checked", $(this).parent()).val() !== undefined;
  312. var name = $("#filterByName", $(this).parent()).text();
  313. var valueChecked = $(".filterValue:checked", $(this).parent()).val() !== undefined;
  314. var value = $("#filterByValue", $(this).parent()).text();
  315. var newRule = {};
  316. if (domainChecked)
  317. newRule.domain = domain;
  318. if (nameChecked)
  319. newRule.name = name;
  320. if (valueChecked)
  321. newRule.value = value;
  322. for (var i = 0; i < cookieList.length; i++) {
  323. var currentCookie = cookieList[i];
  324. if (currentCookie.isProtected)
  325. continue;
  326. if (!filterMatchesCookie(newRule, currentCookie.name, currentCookie.domain, currentCookie.value))
  327. continue;
  328. var url = buildUrl(currentCookie.domain, currentCookie.path, getUrlOfCookies());
  329. deleteCookie(url, currentCookie.name, currentCookie.storeId);
  330. }
  331. data.nCookiesFlagged += cookieList.length;
  332. var exists = addBlockRule(newRule);
  333. doSearch();
  334. return;
  335. });
  336. $("#deleteAllButton").unbind().click(function () {
  337. if (cookieList.length === 0)
  338. return false;
  339. var okFunction = function () {
  340. nCookiesDeletedThisTime = cookieList.length;
  341. deleteAll(cookieList, getUrlOfCookies());
  342. data.nCookiesDeleted += nCookiesDeletedThisTime;
  343. doSearch();
  344. }
  345. startAlertDialog(_getMessage("Alert_deleteAll"), okFunction);
  346. });
  347. if (preferences.showCommandsLabels) {
  348. $(".commands-row", ".commands-table").addClass("commands-row-texy");
  349. }
  350. if (preferences.showFlagAndDeleteAll) {
  351. $("#flagAllButton").show();
  352. $("#flagAllButton").unbind().click(function () {
  353. if (cookieList.length === 0)
  354. return false;
  355. var okFunction = function () {
  356. nCookiesFlaggedThisTime = cookieList.length;
  357. for (var i = 0; i < cookieList.length; i++) {
  358. var currentCookie = cookieList[i];
  359. if (currentCookie.isProtected)
  360. continue;
  361. var newRule = {};
  362. newRule.domain = currentCookie.domain;
  363. newRule.name = currentCookie.name;
  364. addBlockRule(newRule);
  365. var url = buildUrl(currentCookie.domain, currentCookie.path, getUrlOfCookies());
  366. deleteCookie(url, currentCookie.name, currentCookie.storeId);
  367. }
  368. data.nCookiesFlagged += nCookiesFlaggedThisTime;
  369. doSearch();
  370. return;
  371. }
  372. startAlertDialog(_getMessage("flagAll"), okFunction);
  373. });
  374. } else {
  375. $("#flagAllButton").hide();
  376. }
  377. $("#refreshButton").unbind().click(function () {
  378. if (currentLayout === "new") {
  379. clearNewCookieData();
  380. } else {
  381. location.reload(true);
  382. }
  383. });
  384. $("#addCookieButton").unbind().click(function () {
  385. newCookie = true;
  386. pasteCookie = false;
  387. swithLayout("new");
  388. });
  389. $("#backToList").unbind().click(function () {
  390. newCookie = false;
  391. pasteCookie = false;
  392. swithLayout();
  393. });
  394. $("#optionsButton").unbind().click(function () {
  395. var urlToOpen = chrome.extension.getURL('options_main_page.html');
  396. chrome.tabs.create({
  397. url: urlToOpen
  398. });
  399. });
  400. $("#copyButton").unbind().click(function () {
  401. copyToClipboard(cookiesToString.get(cookieList));
  402. data.nCookiesExported += cookieList.length;
  403. $("#copiedToast").fadeIn(function () {
  404. setTimeout(function () {
  405. $("#copiedToast").fadeOut();
  406. }, 2500);
  407. });
  408. $(this).animate({ backgroundColor: "#B3FFBD" }, 300, function () {
  409. $(this).animate({ backgroundColor: "#EDEDED" }, 500);
  410. });
  411. });
  412. $("#pasteButton").unbind().click(function () {
  413. newCookie = false;
  414. pasteCookie = true;
  415. swithLayout("paste");
  416. });
  417. $("#searchButton").unbind().click(function () {
  418. $("#searchField").focus();
  419. $("#searchField").fadeIn("normal", function () { $("#searchField").focus(); });
  420. $("#searchField").focus();
  421. });
  422. $("#searchBox").unbind().focusout(function () {
  423. $("#searchField").fadeOut();
  424. });
  425. $("#searchField").unbind().keyup(function () {
  426. find($(this).val());
  427. });
  428. $('input', '#cookieSearchCondition').unbind().keyup(doSearch);
  429. clearNewCookieData();
  430. $(".toast").each(function () {
  431. $(this).css("margin-top", "-" + ($(this).height() / 2) + "px");
  432. $(this).css("margin-left", "-" + ($(this).width() / 2) + "px");
  433. });
  434. $('textarea.value, input.domain, input.path').keydown(function (event) {
  435. if (event.ctrlKey && event.keyCode === 13) {
  436. submit(currentTabID);
  437. console.log('trigger save (submit)');
  438. event.preventDefault();
  439. event.stopPropagation();
  440. }
  441. });
  442. setCookieEvents();
  443. }
  444. function setCookieEvents() {
  445. $(".hostOnly").click(function () {
  446. var cookie = $(this).closest(".cookie");
  447. var checked = $(this).prop("checked");
  448. if (!!checked)
  449. $(".domain", cookie).attr("disabled", "disabled");
  450. else
  451. $(".domain", cookie).removeAttr("disabled");
  452. });
  453. $(".session").click(function () {
  454. var cookie = $(this).closest(".cookie");
  455. var checked = $(this).prop("checked");
  456. if (!!checked)
  457. $(".expiration", cookie).attr("disabled", "disabled");
  458. else
  459. $(".expiration", cookie).removeAttr("disabled");
  460. });
  461. $(".deleteOne").click(function () {
  462. var cookie = $(this).closest(".cookie");
  463. var name = $(".name", cookie).val();
  464. var domain = $(".domain", cookie).val();
  465. var path = $(".path", cookie).val();
  466. var secure = $(".secure", cookie).prop("checked");
  467. var storeId = $(".storeId", cookie).val();
  468. var okFunction = function () {
  469. var url = buildUrl(domain, path, getUrlOfCookies());
  470. deleteCookie(url, name, storeId, function (success) {
  471. if (success === true) {
  472. var head = cookie.prev('h3');
  473. cookie.add(head).slideUp(function () {
  474. $(this).remove();
  475. swithLayout();
  476. });
  477. } else {
  478. location.reload(true);
  479. }
  480. });
  481. ++data.nCookiesDeleted;
  482. };
  483. startAlertDialog(_getMessage("Alert_deleteCookie") + ": \"" + name + "\"?", okFunction)
  484. });
  485. $(".flagOne").click(function () {
  486. var cookie = $(this).closest(".cookie");
  487. var domain = $(".domain", cookie).val();
  488. var name = $(".name", cookie).val();
  489. var value = $(".value", cookie).val();
  490. $("#filterByDomain", "#cookieFilter").text(domain);
  491. $("#filterByName", "#cookieFilter").text(name);
  492. $("#filterByValue", "#cookieFilter").text(value);
  493. swithLayout("flag");
  494. });
  495. $(".protectOne").click(function () {
  496. var cookie = $(this).closest(".cookie");
  497. var titleName = $("b", cookie.prev()).first();
  498. var index = $(".index", cookie).val();
  499. isProtected = switchReadOnlyRule(cookieList[index]);
  500. cookieList[index].isProtected = isProtected;
  501. if (isProtected) {
  502. $(".unprotected", cookie).fadeOut('fast', function () {
  503. $(".protected", cookie).fadeIn('fast');
  504. });
  505. titleName.css("color", "green");
  506. } else {
  507. $(".protected", cookie).fadeOut('fast', function () {
  508. $(".unprotected", cookie).fadeIn('fast');
  509. });
  510. titleName.css("color", "#000");
  511. }
  512. });
  513. }
  514. function startAlertDialog(title, ok_callback, cancel_callback) {
  515. if (ok_callback == undefined) {
  516. return
  517. }
  518. if (!preferences.showAlerts) {
  519. ok_callback();
  520. return;
  521. }
  522. $("#alert_ok").unbind().click(function () {
  523. $("#alert_wrapper").hide();
  524. ok_callback();
  525. });
  526. if (cancel_callback !== undefined) {
  527. $("#alert_cancel").show();
  528. $("#alert_cancel").unbind().click(function () {
  529. $("#alert_wrapper").hide('fade');
  530. cancel_callback();
  531. });
  532. } else {
  533. $("#alert_cancel").hide();
  534. }
  535. $("#alert_title_p").empty().text(title);
  536. $("#alert_wrapper").show('fade');
  537. }
  538. function clearNewCookieData() {
  539. var cookieForm = $("#newCookie");
  540. $(".index", cookieForm).val("");
  541. $(".name", cookieForm).val("");
  542. $(".value", cookieForm).val("");
  543. $(".domain", cookieForm).val(getHost(getUrlOfCookies()));
  544. $(".hostOnly", cookieForm).prop("checked", false);
  545. $(".path", cookieForm).val("/");
  546. $(".secure", cookieForm).prop("checked", false);
  547. $(".httpOnly", cookieForm).prop("checked", false);
  548. $(".session", cookieForm).prop("checked", false);
  549. var expDate = new Date();
  550. expDate.setFullYear(expDate.getFullYear() + 1);
  551. $(".expiration", cookieForm).val(expDate);
  552. $.uniform.update();
  553. }
  554. function find(pattern) {
  555. if (pattern === lastInput)
  556. return;
  557. lastInput = pattern;
  558. $($(".cookie", "#cookiesList").get().reverse()).each(function () {
  559. var name = $(".name", $(this)).val();
  560. var node = $(this);
  561. var h3 = $(this).prev();
  562. if (pattern !== "" && name.toLowerCase().indexOf(pattern.toLowerCase()) !== -1) {
  563. h3.addClass("searchResult");
  564. node.detach();
  565. h3.detach();
  566. $("#cookiesList").prepend(node);
  567. $("#cookiesList").prepend(h3);
  568. } else {
  569. h3.removeClass("searchResult");
  570. }
  571. });
  572. $("#cookiesList").accordion("option", "collapsible", "true");
  573. $("#cookiesList").accordion("option", "active", cookieList.length);
  574. }
  575. function swithLayout(newLayout) {
  576. if (newLayout === undefined) {
  577. if ($("h3", "#cookiesList").length) {
  578. newLayout = "list";
  579. } else {
  580. newLayout = "empty";
  581. }
  582. }
  583. if (currentLayout === newLayout)
  584. return;
  585. currentLayout = newLayout;
  586. if (newLayout === "list" || newLayout === "empty") {
  587. $("#newCookie").slideUp();
  588. $("#pasteCookie").slideUp();
  589. $("#cookieFilter").slideUp();
  590. $("#submitFiltersButton").slideUp();
  591. }
  592. if (newLayout === "list") {
  593. $(".commands-table").first().animate({ opacity: 0 }, function () {
  594. $("#deleteAllButton").show();
  595. if (preferences.showFlagAndDeleteAll)
  596. $("#flagAllButton").show();
  597. $("#addCookieButton").show();
  598. $("#backToList").hide();
  599. $("#copyButton").show();
  600. $("#pasteButton").show();
  601. $("#searchButton").show();
  602. $(".commands-table").first().animate({ opacity: 1 });
  603. $("#cookieSearchCondition").show();
  604. });
  605. $("#noCookies").slideUp();
  606. $("#cookiesList").slideDown();
  607. $("#submitDiv").show();
  608. } else if (newLayout === "empty") {
  609. $(".commands-table").first().animate({ opacity: 0 }, function () {
  610. $("#deleteAllButton").hide();
  611. $("#flagAllButton").hide();
  612. $("#addCookieButton").show();
  613. $("#backToList").hide();
  614. $("#copyButton").hide();
  615. $("#pasteButton").show();
  616. $("#searchButton").hide();
  617. $(".commands-table").first().animate({ opacity: 1 });
  618. $("#cookieSearchCondition").show();
  619. });
  620. $(".notOnEmpty").hide();
  621. $("#noCookies").slideDown();
  622. $("#cookiesList").slideUp();
  623. $("#submitDiv").hide();
  624. } else {
  625. $(".commands-table").first().animate({ opacity: 0 }, function () {
  626. $("#deleteAllButton").hide();
  627. $("#flagAllButton").hide();
  628. $("#addCookieButton").hide();
  629. $("#backToList").show();
  630. $("#copyButton").hide();
  631. $("#pasteButton").hide();
  632. $("#searchButton").hide();
  633. $(".commands-table").first().animate({ opacity: 1 });
  634. });
  635. $("#noCookies").slideUp();
  636. $("#cookiesList").slideUp();
  637. $("#cookieSearchCondition").slideUp();
  638. if (newLayout === "flag") {
  639. $("#submitFiltersButton").slideDown();
  640. $("#cookieFilter").slideDown();
  641. $("#newCookie").slideUp();
  642. $("#pasteCookie").slideUp();
  643. $("#submitDiv").slideUp();
  644. } else if (newLayout === "paste") {
  645. $("#pasteCookie").slideDown();
  646. $("#newCookie").slideUp();
  647. $("#cookieFilter").slideUp();
  648. $("#submitFiltersButton").slideUp();
  649. $("#submitDiv").slideDown();
  650. $(".value", "#new").focus();
  651. } else if (newLayout === "new") {
  652. $("#newCookie").slideDown();
  653. $("#pasteCookie").slideUp();
  654. $("#cookieFilter").slideUp();
  655. $("#submitFiltersButton").slideUp();
  656. $("#submitDiv").slideDown();
  657. $('#newCookie input.name').focus();
  658. }
  659. }
  660. }
  661. function formCookieData(form) {
  662. var index = $(".index", form).val();
  663. var name = $(".name", form).val();
  664. var value = $(".value", form).val();
  665. var domain = $(".domain", form).val();
  666. var hostOnly = $(".hostOnly", form).prop("checked");
  667. var path = $(".path", form).val();
  668. var secure = $(".secure", form).prop("checked");
  669. var httpOnly = $(".httpOnly", form).prop("checked");
  670. var session = $(".session", form).prop("checked");
  671. var storeId = $(".storeId", form).val();
  672. var expiration = $(".expiration", form).val();
  673. var sameSite = $(".sameSite", form).val();
  674. var newCookie = {};
  675. newCookie.url = buildUrl(domain, path, getUrlOfCookies());
  676. newCookie.name = name.replace(";", "").replace(",", "");
  677. value = value.replace(";", "");
  678. newCookie.value = value;
  679. newCookie.path = path;
  680. newCookie.storeId = storeId;
  681. if (!hostOnly)
  682. newCookie.domain = domain;
  683. if (!session) {
  684. var expirationDate = new Date(expiration).getTime() / 1000;
  685. newCookie.expirationDate = expirationDate;
  686. // If the expiration date is not valid, tell the user by making the
  687. // invalid date red and showing it in the accordion
  688. if (isNaN(expirationDate)) {
  689. console.log("Invalid date");
  690. $(".expiration", form).addClass("error");
  691. $(".expiration", form).focus();
  692. if (index !== undefined) {
  693. // This is an existing cookie, not a new one
  694. $("#cookiesList").accordion("option", "active", parseInt(index));
  695. }
  696. return undefined;
  697. } else {
  698. $(".expiration", form).removeClass("error");
  699. }
  700. }
  701. newCookie.secure = secure;
  702. newCookie.httpOnly = httpOnly;
  703. newCookie.sameSite = sameSite;
  704. return newCookie;
  705. }