graphiti 2.0.0.beta.2 → 2.0.0.beta.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +30 -86
- data/.github/workflows/docs.yml +60 -0
- data/.github/workflows/release.yml +8 -8
- data/.gitignore +7 -0
- data/.npmrc +9 -0
- data/.standard.yml +4 -1
- data/Appraisals +33 -32
- data/CHANGELOG.md +41 -0
- data/README.md +13 -2
- data/UPGRADING.md +2 -68
- data/docs/concepts/backends-and-models.md +122 -0
- data/docs/concepts/endpoints.md +183 -0
- data/docs/concepts/links.md +212 -0
- data/docs/concepts/overview.md +80 -0
- data/docs/concepts/persisting.md +376 -0
- data/docs/concepts/relationships.md +527 -0
- data/docs/concepts/resources.md +677 -0
- data/docs/getting-started/first-api.md +289 -0
- data/docs/getting-started/installation.md +185 -0
- data/docs/intro.md +307 -0
- data/docs/js/authentication.md +63 -0
- data/docs/js/ddau.md +20 -0
- data/docs/js/extra-params.md +41 -0
- data/docs/js/index.md +112 -0
- data/docs/js/installation.md +120 -0
- data/docs/js/middleware.md +72 -0
- data/docs/js/models.md +202 -0
- data/docs/js/reads.md +494 -0
- data/docs/js/state-syncing.md +100 -0
- data/docs/js/writes.md +373 -0
- data/docs/reference/vandal.md +63 -0
- data/docs/reference/why.md +13 -0
- data/docs/topics/authorization.md +155 -0
- data/docs/topics/caching.md +55 -0
- data/docs/topics/customizing-sideloads.md +156 -0
- data/docs/topics/debugging.md +216 -0
- data/docs/topics/error-handling.md +210 -0
- data/docs/topics/etags.md +46 -0
- data/docs/topics/hopping-relationships.md +149 -0
- data/docs/topics/json-attributes.md +77 -0
- data/docs/topics/openstruct-models.md +50 -0
- data/docs/topics/remote-resources.md +291 -0
- data/docs/topics/testing.md +894 -0
- data/docs/topics/without-activerecord.md +324 -0
- data/docs/tutorial/index.md +58 -0
- data/docs/tutorial/step_0.md +107 -0
- data/docs/tutorial/step_1.md +199 -0
- data/docs/tutorial/step_2.md +312 -0
- data/docs/tutorial/step_3.md +142 -0
- data/docs/tutorial/step_4.md +135 -0
- data/docs/tutorial/step_5.md +69 -0
- data/docs/tutorial/step_6.md +82 -0
- data/docs/tutorial/step_7.md +205 -0
- data/docs/tutorial/step_8.md +128 -0
- data/docs/tutorial/step_9.md +171 -0
- data/docs/upgrading.md +265 -0
- data/gemfiles/rails_7_1.gemfile +4 -3
- data/gemfiles/{rails_7_2_graphiti_rails.gemfile → rails_7_2.gemfile} +3 -3
- data/gemfiles/{rails_8_1_graphiti_rails.gemfile → rails_8_0.gemfile} +3 -3
- data/gemfiles/{rails_8_0_graphiti_rails.gemfile → rails_8_1.gemfile} +3 -3
- data/graphiti.gemspec +7 -5
- data/{deprecated_generators → lib/generators}/graphiti/api_test_generator.rb +7 -1
- data/{deprecated_generators → lib/generators}/graphiti/generator_mixin.rb +14 -1
- data/{deprecated_generators → lib/generators}/graphiti/install_generator.rb +19 -13
- data/{deprecated_generators → lib/generators}/graphiti/resource_generator.rb +43 -6
- data/{deprecated_generators → lib/generators}/graphiti/templates/index_request_spec.rb.erb +1 -1
- data/{deprecated_generators → lib/generators}/graphiti/templates/resource_reads_spec.rb.erb +6 -6
- data/{deprecated_generators → lib/generators}/graphiti/templates/show_request_spec.rb.erb +1 -1
- data/lib/graphiti/configuration.rb +2 -2
- data/lib/graphiti/error_serializers/conflict_request.rb +19 -0
- data/lib/graphiti/error_serializers/deprecated_constants.rb +48 -0
- data/lib/graphiti/error_serializers/invalid_request.rb +56 -0
- data/lib/graphiti/error_serializers/validation.rb +143 -0
- data/lib/graphiti/errors.rb +4 -23
- data/lib/graphiti/query.rb +1 -1
- data/lib/graphiti/rails/context.rb +33 -0
- data/lib/graphiti/rails/controller.rb +41 -0
- data/lib/graphiti/rails/debugging.rb +18 -0
- data/lib/graphiti/rails/exception_handlers.rb +77 -0
- data/lib/graphiti/rails/railtie.rb +139 -0
- data/lib/graphiti/rails/responders.rb +21 -0
- data/lib/graphiti/rails/test_helpers.rb +22 -0
- data/lib/graphiti/rails.rb +47 -29
- data/lib/graphiti/resource/configuration.rb +1 -0
- data/lib/graphiti/resource/interface.rb +2 -2
- data/lib/graphiti/resource/persistence.rb +14 -2
- data/lib/graphiti/resource/remote.rb +2 -2
- data/lib/graphiti/resource/sideloading.rb +1 -1
- data/lib/graphiti/resource.rb +13 -1
- data/lib/graphiti/responders.rb +7 -20
- data/lib/graphiti/schema.rb +5 -1
- data/lib/graphiti/schema_diff.rb +4 -0
- data/lib/graphiti/scope.rb +45 -37
- data/lib/graphiti/serializer.rb +6 -0
- data/lib/graphiti/sideload/belongs_to.rb +38 -5
- data/lib/graphiti/sideload/polymorphic_belongs_to.rb +27 -23
- data/lib/graphiti/sideload.rb +54 -35
- data/lib/graphiti/spec_helpers/errors.rb +73 -0
- data/lib/graphiti/spec_helpers/errors_proxy.rb +75 -0
- data/lib/graphiti/spec_helpers/helpers.rb +107 -0
- data/lib/graphiti/spec_helpers/node.rb +88 -0
- data/lib/graphiti/spec_helpers/rspec.rb +147 -0
- data/lib/graphiti/spec_helpers.rb +53 -0
- data/lib/graphiti/util/include_params.rb +2 -2
- data/lib/graphiti/util/persistence.rb +10 -11
- data/lib/graphiti/util/serializer_relationships.rb +41 -5
- data/lib/graphiti/version.rb +1 -1
- data/lib/graphiti-rails.rb +11 -0
- data/lib/graphiti.rb +34 -10
- data/lib/graphiti_errors.rb +11 -0
- data/lib/graphiti_spec_helpers/rspec.rb +3 -0
- data/lib/graphiti_spec_helpers.rb +11 -0
- data/lib/{graphiti/deprecated_tasks.rb → tasks/graphiti.rake} +6 -1
- data/package-lock.json +6199 -0
- data/package.json +5 -4
- data/website/.gitignore +20 -0
- data/website/README.md +43 -0
- data/website/docusaurus.config.js +141 -0
- data/website/package-lock.json +19474 -0
- data/website/package.json +46 -0
- data/website/sidebars.js +82 -0
- data/website/src/css/custom.css +58 -0
- data/website/src/pages/markdown-page.mdx +7 -0
- data/website/static/.nojekyll +0 -0
- data/website/static/1.13/2019/03/31/graphiti-1-0.html +205 -0
- data/website/static/1.13/2019/05/08/graphiti-1-1.html +212 -0
- data/website/static/1.13/2019/05/20/graphiti-1-2.html +214 -0
- data/website/static/1.13/2019/10/14/tutorial.html +198 -0
- data/website/static/1.13/CNAME +1 -0
- data/website/static/1.13/README.md +16 -0
- data/website/static/1.13/assets/css/syntax.css +60 -0
- data/website/static/1.13/assets/favicons/android-chrome-192x192.png +0 -0
- data/website/static/1.13/assets/favicons/android-chrome-256x256.png +0 -0
- data/website/static/1.13/assets/favicons/apple-touch-icon.png +0 -0
- data/website/static/1.13/assets/favicons/browserconfig.xml +9 -0
- data/website/static/1.13/assets/favicons/favicon-16x16.png +0 -0
- data/website/static/1.13/assets/favicons/favicon-32x32.png +0 -0
- data/website/static/1.13/assets/favicons/favicon.ico +0 -0
- data/website/static/1.13/assets/favicons/mstile-150x150.png +0 -0
- data/website/static/1.13/assets/favicons/safari-pinned-tab.svg +1 -0
- data/website/static/1.13/assets/favicons/site.webmanifest +19 -0
- data/website/static/1.13/assets/img/backend.gif +0 -0
- data/website/static/1.13/assets/img/conformity.png +0 -0
- data/website/static/1.13/assets/img/error_payload.png +0 -0
- data/website/static/1.13/assets/img/gh.png +0 -0
- data/website/static/1.13/assets/img/lifecycle.gif +0 -0
- data/website/static/1.13/assets/img/logo-500.png +0 -0
- data/website/static/1.13/assets/img/logo.png +0 -0
- data/website/static/1.13/assets/img/love-graffiti.jpg +0 -0
- data/website/static/1.13/assets/img/meta_total_count.png +0 -0
- data/website/static/1.13/assets/img/persist.jpg +0 -0
- data/website/static/1.13/assets/img/resource.gif +0 -0
- data/website/static/1.13/assets/img/rest-graffiti.jpg +0 -0
- data/website/static/1.13/assets/img/rest1.gif +0 -0
- data/website/static/1.13/assets/img/rest2.gif +0 -0
- data/website/static/1.13/assets/img/rest3.gif +0 -0
- data/website/static/1.13/assets/img/rethink-rest-graffiti.jpg +0 -0
- data/website/static/1.13/assets/img/why.png +0 -0
- data/website/static/1.13/assets/js/highlight.pack.js +2 -0
- data/website/static/1.13/assets/main.css +15518 -0
- data/website/static/1.13/assets/main.css.map +1 -0
- data/website/static/1.13/bin/bundle +109 -0
- data/website/static/1.13/bin/jekyll +27 -0
- data/website/static/1.13/bin/kramdown +27 -0
- data/website/static/1.13/bin/listen +27 -0
- data/website/static/1.13/bin/rake +27 -0
- data/website/static/1.13/bin/rougify +27 -0
- data/website/static/1.13/bin/safe_yaml +27 -0
- data/website/static/1.13/bin/sass +27 -0
- data/website/static/1.13/bin/sass-convert +27 -0
- data/website/static/1.13/bin/scss +27 -0
- data/website/static/1.13/blog.html +259 -0
- data/website/static/1.13/cheatsheet.html +316 -0
- data/website/static/1.13/cookbooks/authorization.md +0 -0
- data/website/static/1.13/cookbooks/caching.md +0 -0
- data/website/static/1.13/cookbooks/customizing-sideloads.html +325 -0
- data/website/static/1.13/cookbooks/etags.md +0 -0
- data/website/static/1.13/cookbooks/hopping-relationships.html +324 -0
- data/website/static/1.13/cookbooks/json_attributes.md +0 -0
- data/website/static/1.13/cookbooks/openstruct-models.md +0 -0
- data/website/static/1.13/cookbooks/remote-resources.md +0 -0
- data/website/static/1.13/cookbooks/without-activerecord.html +510 -0
- data/website/static/1.13/features.html +249 -0
- data/website/static/1.13/feed.xml +106 -0
- data/website/static/1.13/guides/concepts/backends-and-models.html +467 -0
- data/website/static/1.13/guides/concepts/debugging.html +440 -0
- data/website/static/1.13/guides/concepts/endpoints.html +432 -0
- data/website/static/1.13/guides/concepts/error-handling.html +396 -0
- data/website/static/1.13/guides/concepts/links.html +501 -0
- data/website/static/1.13/guides/concepts/remote-resources.html +536 -0
- data/website/static/1.13/guides/concepts/resources.html +2176 -0
- data/website/static/1.13/guides/concepts/testing.html +1469 -0
- data/website/static/1.13/guides/getting-started/installation.html +420 -0
- data/website/static/1.13/guides/graphiti-rails-migration.html +242 -0
- data/website/static/1.13/guides/index.html +269 -0
- data/website/static/1.13/guides/overview.html +325 -0
- data/website/static/1.13/guides/upgrading-2-0.html +193 -0
- data/website/static/1.13/guides/upgrading.html +314 -0
- data/website/static/1.13/guides/vandal.html +282 -0
- data/website/static/1.13/guides/why.html +1121 -0
- data/website/static/1.13/index.html +72 -0
- data/website/static/1.13/js/authentication.html +295 -0
- data/website/static/1.13/js/ddau.html +238 -0
- data/website/static/1.13/js/extra-params.html +270 -0
- data/website/static/1.13/js/index.html +321 -0
- data/website/static/1.13/js/installation.html +637 -0
- data/website/static/1.13/js/introduction.html +257 -0
- data/website/static/1.13/js/middleware.html +318 -0
- data/website/static/1.13/js/reads/fieldsets.html +271 -0
- data/website/static/1.13/js/reads/filtering.html +289 -0
- data/website/static/1.13/js/reads/includes.html +260 -0
- data/website/static/1.13/js/reads/index.html +497 -0
- data/website/static/1.13/js/reads/nested-queries.html +353 -0
- data/website/static/1.13/js/reads/pagination.html +260 -0
- data/website/static/1.13/js/reads/sorting.html +265 -0
- data/website/static/1.13/js/reads/statistics.html +289 -0
- data/website/static/1.13/js/state-syncing.html +340 -0
- data/website/static/1.13/js/writes/deferred.html +296 -0
- data/website/static/1.13/js/writes/dirty-tracking.html +399 -0
- data/website/static/1.13/js/writes/index.html +391 -0
- data/website/static/1.13/js/writes/nested.html +330 -0
- data/website/static/1.13/js/writes/validations.html +272 -0
- data/website/static/1.13/quickstart.html +660 -0
- data/website/static/1.13/template +161 -0
- data/website/static/1.13/tutorial/index.html +250 -0
- data/website/static/1.13/tutorial/step_0.html +292 -0
- data/website/static/1.13/tutorial/step_1.html +517 -0
- data/website/static/1.13/tutorial/step_2.html +481 -0
- data/website/static/1.13/tutorial/step_3.html +323 -0
- data/website/static/1.13/tutorial/step_4.html +318 -0
- data/website/static/1.13/tutorial/step_5.html +265 -0
- data/website/static/1.13/tutorial/step_6.html +276 -0
- data/website/static/1.13/tutorial/step_7.html +390 -0
- data/website/static/1.13/tutorial/step_8.html +316 -0
- data/website/static/1.13/tutorial/step_9.html +365 -0
- data/website/static/assets/img/error_payload.png +0 -0
- data/website/static/assets/img/legacy/legacy-0378a3bb39.png +0 -0
- data/website/static/assets/img/legacy/legacy-05bbd3e5fd.png +0 -0
- data/website/static/assets/img/legacy/legacy-07aa104495.png +0 -0
- data/website/static/assets/img/legacy/legacy-0c75a16b3a.gif +0 -0
- data/website/static/assets/img/legacy/legacy-3076df6209.png +0 -0
- data/website/static/assets/img/legacy/legacy-7f6889bc89.png +0 -0
- data/website/static/assets/img/legacy/legacy-a2cc4363c3.png +0 -0
- data/website/static/assets/img/legacy/legacy-f67cfa89ab.png +0 -0
- data/website/static/assets/img/meta_total_count.png +0 -0
- data/website/static/img/docusaurus-social-card.jpg +0 -0
- data/website/static/img/docusaurus.png +0 -0
- data/website/static/img/favicon.ico +0 -0
- data/website/static/img/logo.png +0 -0
- data/website/static/img/logo.svg +1 -0
- data/website/static/img/undraw_docusaurus_mountain.svg +171 -0
- data/website/static/img/undraw_docusaurus_react.svg +170 -0
- data/website/static/img/undraw_docusaurus_tree.svg +40 -0
- metadata +245 -46
- data/gemfiles/rails_6.gemfile +0 -18
- data/gemfiles/rails_6_graphiti_rails.gemfile +0 -19
- data/gemfiles/rails_7.gemfile +0 -18
- data/gemfiles/rails_7_1_graphiti_rails.gemfile +0 -19
- data/gemfiles/rails_7_graphiti_rails.gemfile +0 -19
- data/lib/graphiti/railtie.rb +0 -121
- /data/{deprecated_generators → lib/generators}/graphiti/resource_test_generator.rb +0 -0
- /data/{deprecated_generators → lib/generators}/graphiti/templates/application_resource.rb.erb +0 -0
- /data/{deprecated_generators → lib/generators}/graphiti/templates/controller.rb.erb +0 -0
- /data/{deprecated_generators → lib/generators}/graphiti/templates/create_request_spec.rb.erb +0 -0
- /data/{deprecated_generators → lib/generators}/graphiti/templates/destroy_request_spec.rb.erb +0 -0
- /data/{deprecated_generators → lib/generators}/graphiti/templates/resource.rb.erb +0 -0
- /data/{deprecated_generators → lib/generators}/graphiti/templates/resource_writes_spec.rb.erb +0 -0
- /data/{deprecated_generators → lib/generators}/graphiti/templates/update_request_spec.rb.erb +0 -0
|
@@ -0,0 +1,399 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
|
|
4
|
+
<head>
|
|
5
|
+
<meta charset="utf-8">
|
|
6
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
8
|
+
<link href="https://fonts.googleapis.com/css?family=Roboto+Mono" rel="stylesheet">
|
|
9
|
+
<link href="https://fonts.googleapis.com/css?family=Boogaloo" rel="stylesheet">
|
|
10
|
+
|
|
11
|
+
<link rel="apple-touch-icon" sizes="180x180" href="/1.13/assets/favicons/apple-touch-icon.png">
|
|
12
|
+
<link rel="icon" type="image/png" sizes="32x32" href="/1.13/assets/favicons/favicon-32x32.png">
|
|
13
|
+
<link rel="icon" type="image/png" sizes="16x16" href="/1.13/assets/favicons/favicon-16x16.png">
|
|
14
|
+
<link rel="manifest" href="/1.13/assets/favicons/site.webmanifest">
|
|
15
|
+
<link rel="mask-icon" href="/1.13/assets/favicons/safari-pinned-tab.svg" color="#F86DA7">
|
|
16
|
+
<link rel="shortcut icon" href="/1.13/assets/favicons/favicon.ico">
|
|
17
|
+
<meta name="msapplication-TileColor" content="#F86DA7">
|
|
18
|
+
<meta name="msapplication-config" content="/1.13/assets/favicons/browserconfig.xml">
|
|
19
|
+
<meta name="theme-color" content="#F86DA7">
|
|
20
|
+
|
|
21
|
+
<title>Graphiti</title>
|
|
22
|
+
<meta name="description" content="Stylish Graph APIs">
|
|
23
|
+
|
|
24
|
+
<link rel="stylesheet" href="/1.13/assets/main.css?ref=wh4t3v45">
|
|
25
|
+
<link rel="alternate" type="application/rss+xml" title="Graphiti" href="/1.13/feed.xml">
|
|
26
|
+
|
|
27
|
+
<!-- Global site tag (gtag.js) - Google Analytics -->
|
|
28
|
+
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-127904727-1"></script>
|
|
29
|
+
<script>
|
|
30
|
+
window.dataLayer = window.dataLayer || [];
|
|
31
|
+
function gtag(){dataLayer.push(arguments);}
|
|
32
|
+
gtag('js', new Date());
|
|
33
|
+
|
|
34
|
+
gtag('config', 'UA-127904727-1');
|
|
35
|
+
</script>
|
|
36
|
+
|
|
37
|
+
<!-- javascript -->
|
|
38
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
|
|
39
|
+
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
</head>
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
<body>
|
|
46
|
+
<main class="page-content" aria-label="Content">
|
|
47
|
+
<div class="wrapper">
|
|
48
|
+
<header class="navbar navbar-inverse normal" role="banner">
|
|
49
|
+
<div class="container">
|
|
50
|
+
<div class="navbar-header">
|
|
51
|
+
<a href="/1.13/1.13" class="navbar-brand">
|
|
52
|
+
<img alt="logo" src="/1.13/assets/img/logo.png">
|
|
53
|
+
</a>
|
|
54
|
+
</div>
|
|
55
|
+
<nav class="" role="navigation">
|
|
56
|
+
<ul class="nav navbar-nav nav-links">
|
|
57
|
+
<li>
|
|
58
|
+
<a class="quickstart nav-link" href="/1.13/quickstart">Quickstart</a>
|
|
59
|
+
</li>
|
|
60
|
+
<li>
|
|
61
|
+
<a class="guides nav-link" href="/1.13/guides">Guides</a>
|
|
62
|
+
</li>
|
|
63
|
+
<li>
|
|
64
|
+
<a class="tutorial nav-link" href="/1.13/tutorial">Tutorial</a>
|
|
65
|
+
</li>
|
|
66
|
+
<li>
|
|
67
|
+
<a class="spraypaint nav-link" href="/1.13/js">Spraypaint</a>
|
|
68
|
+
</li>
|
|
69
|
+
</ul>
|
|
70
|
+
<ul class="nav gh navbar-nav navbar-right visible-lg visible-md">
|
|
71
|
+
<li>
|
|
72
|
+
<span class="star">⭐</span>
|
|
73
|
+
<a href="https://github.com/graphiti-api/graphiti">
|
|
74
|
+
<img alt="github-star" style="margin-right: 65px;margin-top: -20px" src="/1.13/assets/img/gh.png">
|
|
75
|
+
</a>
|
|
76
|
+
</li>
|
|
77
|
+
</ul>
|
|
78
|
+
</nav>
|
|
79
|
+
</div>
|
|
80
|
+
</header>
|
|
81
|
+
|
|
82
|
+
<div class="container">
|
|
83
|
+
<h1>
|
|
84
|
+
Spraypaint
|
|
85
|
+
<small>the isomorphic, framework-agnostic Graphiti ORM</small>
|
|
86
|
+
</h1>
|
|
87
|
+
|
|
88
|
+
<div class="js-toc col-md-3">
|
|
89
|
+
<ul>
|
|
90
|
+
<li><a href="/1.13/js/index">Home</a></li>
|
|
91
|
+
<li><a href="/1.13/js/introduction">Introduction</a></li>
|
|
92
|
+
<li><a href="/1.13/js/installation">Installation</a>
|
|
93
|
+
<ul>
|
|
94
|
+
<li><a href="/1.13/js/installation#typescript">Typescript</a></li>
|
|
95
|
+
<li><a href="/1.13/js/installation#defining-models">Defining Models</a></li>
|
|
96
|
+
<li><a href="/1.13/js/installation#connecting-to-the-api">Connecting to the API</a></li>
|
|
97
|
+
<li><a href="/1.13/js/installation#defining-attributes">Defining Attributes</a></li>
|
|
98
|
+
<li><a href="/1.13/js/installation#defining-relationships">Defining Relationships</a></li>
|
|
99
|
+
</ul>
|
|
100
|
+
</li>
|
|
101
|
+
<li><a href="/1.13/js/reads">Reads</a>
|
|
102
|
+
<ul>
|
|
103
|
+
<li><a href="/1.13/js/reads/sorting">Sorting</a></li>
|
|
104
|
+
<li><a href="/1.13/js/reads/pagination">Pagination</a></li>
|
|
105
|
+
<li><a href="/1.13/js/reads/filtering">Filtering</a></li>
|
|
106
|
+
<li><a href="/1.13/js/reads/fieldsets">Fieldsets</a></li>
|
|
107
|
+
<li><a href="/1.13/js/reads/statistics">Statistics</a></li>
|
|
108
|
+
<li><a href="/1.13/js/reads/includes">Includes</a></li>
|
|
109
|
+
<li><a href="/1.13/js/reads/nested-queries">Nested Queries</a></li>
|
|
110
|
+
</ul>
|
|
111
|
+
</li>
|
|
112
|
+
<li><a href="/1.13/js/writes">Writes</a>
|
|
113
|
+
<ul>
|
|
114
|
+
<li><a href="/1.13/js/writes/validations">Validations</a></li>
|
|
115
|
+
<li><a href="/1.13/js/writes/dirty-tracking">Dirty Tracking</a></li>
|
|
116
|
+
<li><a href="/1.13/js/writes/nested">Nested Writes</a></li>
|
|
117
|
+
<li><a href="/1.13/js/writes/deferred">Deferred Action</a></li>
|
|
118
|
+
</ul>
|
|
119
|
+
</li>
|
|
120
|
+
<li><a href="/1.13/js/middleware">Middleware</a></li>
|
|
121
|
+
<li><a href="/1.13/js/authentication">Authentication</a></li>
|
|
122
|
+
<li><a href="/1.13/js/state-syncing">State Syncing</a></li>
|
|
123
|
+
<li><a href="/1.13/js/ddau">Data Down, Actions Up</a></li>
|
|
124
|
+
<li><a href="/1.13/js/extra-params">Extra params</a></li>
|
|
125
|
+
</ul>
|
|
126
|
+
</div>
|
|
127
|
+
|
|
128
|
+
<div class="col-md-8 col-md-offset-1">
|
|
129
|
+
<h3 id="dirty-tracking">Dirty Tracking</h3>
|
|
130
|
+
|
|
131
|
+
<p>When an attribute has been modified, but has not yet been saved to the
|
|
132
|
+
server, it is considered “dirty”. Use <code class="language-plaintext highlighter-rouge">#isDirty()</code> to see if any attribute is dirty, use the <code class="language-plaintext highlighter-rouge">#changes()</code> method to see all dirty attributes.</p>
|
|
133
|
+
|
|
134
|
+
<div class="tabs">
|
|
135
|
+
<div class="tab typescript active">
|
|
136
|
+
<span>Typescript</span>
|
|
137
|
+
</div>
|
|
138
|
+
<div class="tab javascript">
|
|
139
|
+
<span>Javascript</span>
|
|
140
|
+
</div>
|
|
141
|
+
</div>
|
|
142
|
+
|
|
143
|
+
<div class="code-tabs">
|
|
144
|
+
|
|
145
|
+
<figure class="highlight"><pre><code class="language-typescript" data-lang="typescript"> <span class="kd">let</span> <span class="nx">post</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">()</span>
|
|
146
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">title</span> <span class="c1">// "original"</span>
|
|
147
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">()</span> <span class="c1">// false</span>
|
|
148
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">changes</span><span class="p">()</span> <span class="c1">// {}</span>
|
|
149
|
+
|
|
150
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">title</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">changed</span><span class="dl">"</span>
|
|
151
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">()</span> <span class="c1">// true</span>
|
|
152
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">changes</span><span class="p">()</span> <span class="c1">// { title: ["original", "changed"] }</span>
|
|
153
|
+
|
|
154
|
+
<span class="k">await</span> <span class="nx">post</span><span class="p">.</span><span class="nf">save</span><span class="p">()</span>
|
|
155
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">()</span> <span class="c1">// false</span>
|
|
156
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">changes</span><span class="p">()</span> <span class="c1">// {}</span>
|
|
157
|
+
</code></pre></figure>
|
|
158
|
+
|
|
159
|
+
<figure class="highlight"><pre><code class="language-javascript" data-lang="javascript"> <span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">().</span><span class="nf">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
|
|
160
|
+
<span class="kd">var</span> <span class="nx">post</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">data</span><span class="p">;</span>
|
|
161
|
+
|
|
162
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">title</span><span class="p">;</span> <span class="c1">// "original"</span>
|
|
163
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">();</span> <span class="c1">// false</span>
|
|
164
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">changes</span><span class="p">();</span> <span class="c1">// {}</span>
|
|
165
|
+
|
|
166
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">title</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">changed</span><span class="dl">"</span><span class="p">;</span>
|
|
167
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">();</span> <span class="c1">// true</span>
|
|
168
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">changes</span><span class="p">();</span> <span class="c1">// { title: ["original", "changed"] }</span>
|
|
169
|
+
|
|
170
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">save</span><span class="p">().</span><span class="nf">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">success</span><span class="p">)</span> <span class="p">{</span> <span class="c1">// true</span>
|
|
171
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">();</span> <span class="c1">// false</span>
|
|
172
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">changes</span><span class="p">();</span> <span class="c1">// {}</span>
|
|
173
|
+
<span class="p">});</span>
|
|
174
|
+
<span class="p">});</span>
|
|
175
|
+
</code></pre></figure>
|
|
176
|
+
|
|
177
|
+
</div>
|
|
178
|
+
|
|
179
|
+
<blockquote>
|
|
180
|
+
<p>Remember, only dirty attributes are sent to the server when <code class="language-plaintext highlighter-rouge">#save()</code>
|
|
181
|
+
is called.</p>
|
|
182
|
+
</blockquote>
|
|
183
|
+
|
|
184
|
+
<p><code class="language-plaintext highlighter-rouge">#isDirty()</code> <em>can</em> take into account relationships - just pass a
|
|
185
|
+
string, array, or object or relationship names. A relationship is
|
|
186
|
+
considered dirty if:</p>
|
|
187
|
+
|
|
188
|
+
<ul>
|
|
189
|
+
<li>Any objects in the relationship have dirty attributes</li>
|
|
190
|
+
<li>An object was removed from a <code class="language-plaintext highlighter-rouge">hasMany</code> relationship</li>
|
|
191
|
+
<li>An object was added to a <code class="language-plaintext highlighter-rouge">hasMany</code> relationship</li>
|
|
192
|
+
<li>Any object within the relationship was replaced with a different
|
|
193
|
+
object.</li>
|
|
194
|
+
</ul>
|
|
195
|
+
|
|
196
|
+
<div class="tabs">
|
|
197
|
+
<div class="tab typescript active">
|
|
198
|
+
<span>Typescript</span>
|
|
199
|
+
</div>
|
|
200
|
+
<div class="tab javascript">
|
|
201
|
+
<span>Javascript</span>
|
|
202
|
+
</div>
|
|
203
|
+
</div>
|
|
204
|
+
|
|
205
|
+
<div class="code-tabs">
|
|
206
|
+
|
|
207
|
+
<figure class="highlight"><pre><code class="language-typescript" data-lang="typescript"> <span class="kd">let</span> <span class="nx">post</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">()</span>
|
|
208
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">comments</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">text</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">my comment</span><span class="dl">"</span>
|
|
209
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">(</span><span class="dl">"</span><span class="s2">comments</span><span class="dl">"</span><span class="p">)</span> <span class="c1">// true</span>
|
|
210
|
+
|
|
211
|
+
<span class="nx">post</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">()</span>
|
|
212
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">comments</span><span class="p">.</span><span class="nf">push</span><span class="p">(</span><span class="k">new</span> <span class="nc">Comment</span><span class="p">())</span>
|
|
213
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">(</span><span class="dl">"</span><span class="s2">comments</span><span class="dl">"</span><span class="p">)</span> <span class="c1">// true</span>
|
|
214
|
+
|
|
215
|
+
<span class="nx">post</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">()</span>
|
|
216
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">comments</span><span class="p">.</span><span class="nf">splice</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">)</span>
|
|
217
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">(</span><span class="dl">"</span><span class="s2">comments</span><span class="dl">"</span><span class="p">)</span> <span class="c1">// true</span>
|
|
218
|
+
|
|
219
|
+
<span class="nx">post</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">()</span>
|
|
220
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">blog</span> <span class="c1">// an existing Blog instance</span>
|
|
221
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">blog</span> <span class="o">=</span> <span class="p">(</span><span class="k">await</span> <span class="nx">Blog</span><span class="p">.</span><span class="nf">first</span><span class="p">()).</span><span class="nx">data</span>
|
|
222
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">(</span><span class="dl">"</span><span class="s2">blog</span><span class="dl">"</span><span class="p">)</span> <span class="c1">// true</span>
|
|
223
|
+
|
|
224
|
+
<span class="c1">// check nested relationships</span>
|
|
225
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">([</span><span class="dl">"</span><span class="s2">blog</span><span class="dl">"</span><span class="p">,</span> <span class="p">{</span> <span class="na">comments</span><span class="p">:</span> <span class="dl">"</span><span class="s2">author</span><span class="dl">"</span> <span class="p">}])</span>
|
|
226
|
+
</code></pre></figure>
|
|
227
|
+
|
|
228
|
+
<figure class="highlight"><pre><code class="language-javascript" data-lang="javascript"> <span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">().</span><span class="nf">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
|
|
229
|
+
<span class="kd">var</span> <span class="nx">post</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">data</span><span class="p">;</span>
|
|
230
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">comments</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nx">text</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">my comment</span><span class="dl">"</span><span class="p">;</span>
|
|
231
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">(</span><span class="dl">"</span><span class="s2">comments</span><span class="dl">"</span><span class="p">);</span> <span class="c1">// true</span>
|
|
232
|
+
<span class="p">});</span>
|
|
233
|
+
|
|
234
|
+
<span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">().</span><span class="nf">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
|
|
235
|
+
<span class="kd">var</span> <span class="nx">post</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">data</span><span class="p">;</span>
|
|
236
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">comments</span><span class="p">.</span><span class="nf">push</span><span class="p">(</span><span class="k">new</span> <span class="nc">Comment</span><span class="p">());</span>
|
|
237
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">(</span><span class="dl">"</span><span class="s2">comments</span><span class="dl">"</span><span class="p">);</span> <span class="c1">// true</span>
|
|
238
|
+
<span class="p">});</span>
|
|
239
|
+
|
|
240
|
+
<span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">().</span><span class="nf">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
|
|
241
|
+
<span class="kd">var</span> <span class="nx">post</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">data</span><span class="p">;</span>
|
|
242
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">comments</span><span class="p">.</span><span class="nf">splice</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
|
|
243
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">(</span><span class="dl">"</span><span class="s2">comments</span><span class="dl">"</span><span class="p">);</span> <span class="c1">// true</span>
|
|
244
|
+
<span class="p">});</span>
|
|
245
|
+
|
|
246
|
+
<span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">().</span><span class="nf">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">response</span><span class="p">)</span> <span class="p">{</span>
|
|
247
|
+
<span class="kd">var</span> <span class="nx">post</span> <span class="o">=</span> <span class="nx">response</span><span class="p">.</span><span class="nx">data</span><span class="p">;</span>
|
|
248
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">blog</span><span class="p">;</span> <span class="c1">// an existing Blog instance</span>
|
|
249
|
+
|
|
250
|
+
<span class="nx">Blog</span><span class="p">.</span><span class="nf">first</span><span class="p">().</span><span class="nf">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">blog</span><span class="p">)</span> <span class="p">{</span>
|
|
251
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">blog</span> <span class="o">=</span> <span class="p">(</span><span class="k">await</span> <span class="nx">Blog</span><span class="p">.</span><span class="nf">first</span><span class="p">()).</span><span class="nx">data</span>
|
|
252
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">(</span><span class="dl">"</span><span class="s2">blog</span><span class="dl">"</span><span class="p">)</span> <span class="c1">// true</span>
|
|
253
|
+
<span class="p">});</span>
|
|
254
|
+
<span class="p">});</span>
|
|
255
|
+
|
|
256
|
+
<span class="c1">// check nested relationships</span>
|
|
257
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">([</span><span class="dl">"</span><span class="s2">blog</span><span class="dl">"</span><span class="p">,</span> <span class="p">{</span> <span class="na">comments</span><span class="p">:</span> <span class="dl">"</span><span class="s2">author</span><span class="dl">"</span> <span class="p">}])</span>
|
|
258
|
+
</code></pre></figure>
|
|
259
|
+
|
|
260
|
+
</div>
|
|
261
|
+
|
|
262
|
+
<p>If you need to reset dirty tracking, call <code class="language-plaintext highlighter-rouge">#reset()</code></p>
|
|
263
|
+
|
|
264
|
+
<div class="tabs">
|
|
265
|
+
<div class="tab typescript active">
|
|
266
|
+
<span>Typescript</span>
|
|
267
|
+
</div>
|
|
268
|
+
<div class="tab javascript">
|
|
269
|
+
<span>Javascript</span>
|
|
270
|
+
</div>
|
|
271
|
+
</div>
|
|
272
|
+
|
|
273
|
+
<div class="code-tabs">
|
|
274
|
+
|
|
275
|
+
<figure class="highlight"><pre><code class="language-typescript" data-lang="typescript"> <span class="kd">let</span> <span class="nx">post</span> <span class="o">=</span> <span class="k">await</span> <span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">()</span>
|
|
276
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">title</span> <span class="c1">// "original"</span>
|
|
277
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">title</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">changed</span><span class="dl">"</span>
|
|
278
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">()</span> <span class="c1">// true</span>
|
|
279
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">reset</span><span class="p">()</span>
|
|
280
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">title</span> <span class="c1">// "changed"</span>
|
|
281
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">()</span> <span class="c1">// false</span></code></pre></figure>
|
|
282
|
+
|
|
283
|
+
<figure class="highlight"><pre><code class="language-javascript" data-lang="javascript"> <span class="nx">Post</span><span class="p">.</span><span class="nf">first</span><span class="p">().</span><span class="nf">then</span><span class="p">(</span><span class="kd">function</span><span class="p">(</span><span class="nx">post</span><span class="p">)</span> <span class="p">{</span>
|
|
284
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">title</span><span class="p">;</span> <span class="c1">// "original"</span>
|
|
285
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">title</span> <span class="o">=</span> <span class="dl">"</span><span class="s2">changed</span><span class="dl">"</span><span class="p">;</span>
|
|
286
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">()</span> <span class="c1">// true</span>
|
|
287
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">reset</span><span class="p">();</span>
|
|
288
|
+
<span class="nx">post</span><span class="p">.</span><span class="nx">title</span><span class="p">;</span> <span class="c1">// "original"</span>
|
|
289
|
+
<span class="nx">post</span><span class="p">.</span><span class="nf">isDirty</span><span class="p">()</span> <span class="c1">// false</span>
|
|
290
|
+
<span class="p">});</span></code></pre></figure>
|
|
291
|
+
|
|
292
|
+
</div>
|
|
293
|
+
|
|
294
|
+
<div class="clearfix">
|
|
295
|
+
<h2 id="next">
|
|
296
|
+
<a href="/1.13/js/writes/nested">
|
|
297
|
+
NEXT:
|
|
298
|
+
<small>Nested Writes</small>
|
|
299
|
+
»
|
|
300
|
+
</a>
|
|
301
|
+
</h2>
|
|
302
|
+
</div>
|
|
303
|
+
</div>
|
|
304
|
+
|
|
305
|
+
</div>
|
|
306
|
+
</div>
|
|
307
|
+
</main>
|
|
308
|
+
<div class="main-footer main-footer--dark">
|
|
309
|
+
<div class="container">
|
|
310
|
+
<div class="row">
|
|
311
|
+
<div class="col-sm-4 menu">
|
|
312
|
+
<h3>Overview</h3>
|
|
313
|
+
<ul>
|
|
314
|
+
<li>
|
|
315
|
+
<a href="/1.13/quickstart">Quickstart</a>
|
|
316
|
+
</li>
|
|
317
|
+
<li>
|
|
318
|
+
<a href="/1.13/tutorial">Tutorial</a>
|
|
319
|
+
</li>
|
|
320
|
+
<li>
|
|
321
|
+
<a href="/1.13/guides">Guides</a>
|
|
322
|
+
</li>
|
|
323
|
+
</ul>
|
|
324
|
+
</div>
|
|
325
|
+
<div class="col-sm-4 menu">
|
|
326
|
+
<h3>Contact</h3>
|
|
327
|
+
<ul>
|
|
328
|
+
<li>
|
|
329
|
+
<a target="_blank" href="https://discord.gg/wgqkMBsSRV">Discord Chat</a>
|
|
330
|
+
</li>
|
|
331
|
+
<li>
|
|
332
|
+
<a href="mailto:richmolj@gmail.com">Email</a>
|
|
333
|
+
</li>
|
|
334
|
+
</ul>
|
|
335
|
+
</div>
|
|
336
|
+
<div class="col-sm-4 menu">
|
|
337
|
+
<h3>Related</h3>
|
|
338
|
+
<ul>
|
|
339
|
+
<li>
|
|
340
|
+
<a target="_blank" href="http://jsonapi.org">JSONAPI Spec</a>
|
|
341
|
+
</li>
|
|
342
|
+
<li>
|
|
343
|
+
<a target="_blank" href="http://jsonapi-rb.org">jsonapi-rb</a>
|
|
344
|
+
</li>
|
|
345
|
+
<li>
|
|
346
|
+
<a target="_blank" href="https://vuejs.org/">VueJS</a>
|
|
347
|
+
</li>
|
|
348
|
+
</ul>
|
|
349
|
+
</div>
|
|
350
|
+
</div>
|
|
351
|
+
</div>
|
|
352
|
+
</div>
|
|
353
|
+
|
|
354
|
+
<script type="text/javascript">
|
|
355
|
+
$(function () {
|
|
356
|
+
|
|
357
|
+
var flipTabs = function() {
|
|
358
|
+
var isTS = true;
|
|
359
|
+
if (localStorage.getItem('js-lang') === 'javascript') {
|
|
360
|
+
isTS = false;
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
$('.code-tabs').each(function(index, el) {
|
|
364
|
+
if (isTS) {
|
|
365
|
+
console.log('hiding js');
|
|
366
|
+
$($(el).children()[1]).hide();
|
|
367
|
+
$($(el).children()[0]).show();
|
|
368
|
+
} else {
|
|
369
|
+
console.log('hiding ts');
|
|
370
|
+
$($(el).children()[0]).hide();
|
|
371
|
+
$($(el).children()[1]).show();
|
|
372
|
+
}
|
|
373
|
+
});
|
|
374
|
+
|
|
375
|
+
if (isTS) {
|
|
376
|
+
$('.tab.typescript').addClass('active');
|
|
377
|
+
$('.tab.javascript').removeClass('active');
|
|
378
|
+
} else {
|
|
379
|
+
$('.tab.typescript').removeClass('active');
|
|
380
|
+
$('.tab.javascript').addClass('active');
|
|
381
|
+
}
|
|
382
|
+
}
|
|
383
|
+
|
|
384
|
+
$('.tab').click(function() {
|
|
385
|
+
if ($(this).hasClass('typescript')) {
|
|
386
|
+
localStorage.setItem('js-lang', 'typescript');
|
|
387
|
+
} else {
|
|
388
|
+
localStorage.setItem('js-lang', 'javascript');
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
flipTabs();
|
|
392
|
+
});
|
|
393
|
+
|
|
394
|
+
flipTabs();
|
|
395
|
+
})
|
|
396
|
+
</script>
|
|
397
|
+
|
|
398
|
+
</body>
|
|
399
|
+
</html>
|