olelo 0.9.3 → 0.9.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.
- data/.travis.yml +4 -0
- data/Rakefile +6 -12
- data/bin/olelo +13 -8
- data/config.ru +21 -15
- data/config/aspects.rb +45 -32
- data/config/config.yml.default +1 -0
- data/config/initializers/00-mime_types.rb +22 -17
- data/config/initializers/01-slim.rb +2 -2
- data/lib/olelo.rb +1 -8
- data/lib/olelo/application.rb +33 -34
- data/lib/olelo/attributes.rb +4 -4
- data/lib/olelo/extensions.rb +0 -7
- data/lib/olelo/helper.rb +13 -25
- data/lib/olelo/html_safe.rb +0 -4
- data/lib/olelo/locale.yml +6 -3
- data/lib/olelo/menu.rb +1 -1
- data/lib/olelo/page.rb +21 -18
- data/lib/olelo/version.rb +1 -1
- data/olelo.gemspec +5 -3
- data/plugins/aspects/changelog.rb +5 -5
- data/plugins/aspects/documentbrowser.rb +5 -5
- data/plugins/{gallery → aspects/gallery}/gallery.css +0 -0
- data/plugins/{gallery → aspects/gallery}/gallery.scss +0 -0
- data/plugins/{gallery → aspects/gallery}/main.rb +3 -3
- data/plugins/aspects/highlight.rb +1 -1
- data/plugins/aspects/image.rb +1 -1
- data/plugins/aspects/imageinfo.rb +3 -3
- data/plugins/aspects/main.rb +21 -21
- data/plugins/aspects/pageinfo.rb +2 -2
- data/plugins/aspects/source.rb +1 -1
- data/plugins/aspects/subpages.rb +7 -7
- data/plugins/aspects/text.rb +1 -1
- data/plugins/authentication/portal.rb +2 -2
- data/plugins/authentication/yamlfile.rb +1 -1
- data/plugins/blog/main.rb +10 -10
- data/plugins/editor/preview.rb +3 -3
- data/plugins/filters/creole.rb +1 -1
- data/plugins/filters/editsection.rb +2 -2
- data/plugins/filters/html2xml.rb +6 -0
- data/plugins/filters/main.rb +1 -1
- data/plugins/filters/remind/main.rb +15 -0
- data/plugins/filters/remind/rem2html +562 -0
- data/plugins/filters/s5/main.rb +1 -1
- data/plugins/login/persistent.rb +1 -1
- data/plugins/misc/system.rb +4 -0
- data/plugins/misc/variables.rb +1 -1
- data/plugins/misc/webdav.rb +10 -10
- data/plugins/repositories/git_grep.rb +2 -2
- data/plugins/repositories/gitrb_repository.rb +10 -10
- data/plugins/repositories/rugged_repository.rb +7 -7
- data/plugins/tags/code.rb +1 -1
- data/plugins/tags/footnotes.rb +4 -3
- data/plugins/tags/gist.rb +2 -2
- data/plugins/tags/html.rb +11 -11
- data/plugins/tags/include.rb +6 -6
- data/plugins/tags/main.rb +10 -10
- data/plugins/tags/math.rb +2 -2
- data/plugins/tags/redirect.rb +3 -3
- data/plugins/tags/scripting.rb +12 -12
- data/plugins/tags/sort.rb +1 -1
- data/plugins/tags/tabs.rb +1 -1
- data/plugins/treeview/main.rb +3 -3
- data/plugins/treeview/script.js +5 -5
- data/plugins/treeview/script/00-jquery.treeview.js +6 -6
- data/plugins/treeview/script/init.js +1 -1
- data/plugins/utils/assets.rb +4 -4
- data/plugins/utils/cache.rb +10 -6
- data/plugins/utils/store.rb +4 -4
- data/static/script.js +124 -126
- data/static/script/{02-jquery.js → 01-jquery.js} +0 -0
- data/static/script/02-olelo.storage.js +54 -0
- data/static/script/10-olelo.historytable.js +2 -2
- data/static/script/13-olelo.tabwidget.js +2 -2
- data/test/helper.rb +5 -4
- data/test/page_test.rb +1 -1
- data/test/request_test.rb +42 -38
- data/test/string_extensions_test.rb +0 -6
- data/test/templates_test.rb +1 -1
- data/test/util_test.rb +1 -1
- data/views/changes.slim +2 -2
- data/views/compare.slim +4 -4
- data/views/delete.slim +2 -2
- data/views/deleted.slim +1 -1
- data/views/edit.slim +31 -26
- data/views/history.slim +5 -5
- data/views/layout.slim +1 -1
- data/views/login.slim +30 -32
- data/views/move.slim +3 -3
- data/views/profile.slim +2 -2
- data/views/show.slim +1 -1
- metadata +43 -104
- data/static/script/01-jstorage.js +0 -217
data/views/move.slim
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
- title :move_page.t(:
|
1
|
+
- title :move_page.t(page: page.title)
|
2
2
|
h1= title
|
3
|
-
|
3
|
+
= flash_messages
|
4
|
+
form action=build_path(page, action: :move) method='post'
|
4
5
|
.box
|
5
|
-
= flash_messages
|
6
6
|
label for='destination' = :destination.t
|
7
7
|
&text#destination name='destination' value={params[:destination] || page.path}
|
8
8
|
br
|
data/views/profile.slim
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
- title :profile_title.t(:
|
1
|
+
- title :profile_title.t(user: Olelo::User.current.name)
|
2
2
|
h1= title
|
3
|
+
= flash_messages
|
3
4
|
form action=build_path(:profile) method='post'
|
4
5
|
.fieldset
|
5
|
-
= flash_messages
|
6
6
|
h2= :change_password.t
|
7
7
|
label for='oldpassword' = :old_password.t
|
8
8
|
&password name='oldpassword' id='oldpassword'
|
data/views/show.slim
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
- title page.title
|
2
2
|
= footer do
|
3
3
|
' #{:version.t}
|
4
|
-
a.version href=build_path(page, :
|
4
|
+
a.version href=build_path(page, version: page.version, force_version: true) title=page.version = page.version.short
|
5
5
|
' #{:by.t} #{page.version.author.name},
|
6
6
|
= date page.version.date
|
7
7
|
- if !page.attributes['no_title']
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: olelo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.
|
4
|
+
version: 0.9.4
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,27 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
|
-
name:
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
15
|
+
name: multi_json
|
16
|
+
requirement: &8726980 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.3.
|
21
|
+
version: 1.3.6
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 1.3.3
|
24
|
+
version_requirements: *8726980
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: slim
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &8725520 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ~>
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: 1.3.3
|
38
33
|
type: :runtime
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 1.3.3
|
35
|
+
version_requirements: *8725520
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: creole
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &8724680 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ~>
|
@@ -53,15 +43,10 @@ dependencies:
|
|
53
43
|
version: 0.4.2
|
54
44
|
type: :runtime
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: 0.4.2
|
46
|
+
version_requirements: *8724680
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: nokogiri
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &8723740 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ~>
|
@@ -69,15 +54,10 @@ dependencies:
|
|
69
54
|
version: 1.5.5
|
70
55
|
type: :runtime
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 1.5.5
|
57
|
+
version_requirements: *8723740
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: mimemagic
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &8722860 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ~>
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: 0.2.0
|
86
66
|
type: :runtime
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: 0.2.0
|
68
|
+
version_requirements: *8722860
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: rack
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &8722040 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ~>
|
@@ -101,47 +76,32 @@ dependencies:
|
|
101
76
|
version: 1.4.1
|
102
77
|
type: :runtime
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ~>
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 1.4.1
|
79
|
+
version_requirements: *8722040
|
110
80
|
- !ruby/object:Gem::Dependency
|
111
81
|
name: redcarpet
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirement: &8721240 !ruby/object:Gem::Requirement
|
113
83
|
none: false
|
114
84
|
requirements:
|
115
85
|
- - ~>
|
116
86
|
- !ruby/object:Gem::Version
|
117
|
-
version: 2.2.
|
87
|
+
version: 2.2.2
|
118
88
|
type: :runtime
|
119
89
|
prerelease: false
|
120
|
-
version_requirements:
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ~>
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: 2.2.1
|
90
|
+
version_requirements: *8721240
|
126
91
|
- !ruby/object:Gem::Dependency
|
127
92
|
name: rugged
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirement: &9145700 !ruby/object:Gem::Requirement
|
129
94
|
none: false
|
130
95
|
requirements:
|
131
96
|
- - ~>
|
132
97
|
- !ruby/object:Gem::Version
|
133
|
-
version: 0.17.
|
98
|
+
version: 0.17.0.b7
|
134
99
|
type: :runtime
|
135
100
|
prerelease: false
|
136
|
-
version_requirements:
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ~>
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: 0.17.0b6
|
101
|
+
version_requirements: *9145700
|
142
102
|
- !ruby/object:Gem::Dependency
|
143
103
|
name: evaluator
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirement: &9144960 !ruby/object:Gem::Requirement
|
145
105
|
none: false
|
146
106
|
requirements:
|
147
107
|
- - ~>
|
@@ -149,15 +109,10 @@ dependencies:
|
|
149
109
|
version: 0.1.6
|
150
110
|
type: :runtime
|
151
111
|
prerelease: false
|
152
|
-
version_requirements:
|
153
|
-
none: false
|
154
|
-
requirements:
|
155
|
-
- - ~>
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: 0.1.6
|
112
|
+
version_requirements: *9144960
|
158
113
|
- !ruby/object:Gem::Dependency
|
159
114
|
name: rake
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirement: &9144460 !ruby/object:Gem::Requirement
|
161
116
|
none: false
|
162
117
|
requirements:
|
163
118
|
- - ! '>='
|
@@ -165,15 +120,10 @@ dependencies:
|
|
165
120
|
version: 0.8.7
|
166
121
|
type: :development
|
167
122
|
prerelease: false
|
168
|
-
version_requirements:
|
169
|
-
none: false
|
170
|
-
requirements:
|
171
|
-
- - ! '>='
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: 0.8.7
|
123
|
+
version_requirements: *9144460
|
174
124
|
- !ruby/object:Gem::Dependency
|
175
125
|
name: sass
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirement: &9143960 !ruby/object:Gem::Requirement
|
177
127
|
none: false
|
178
128
|
requirements:
|
179
129
|
- - ! '>='
|
@@ -181,15 +131,10 @@ dependencies:
|
|
181
131
|
version: 3.1.0
|
182
132
|
type: :development
|
183
133
|
prerelease: false
|
184
|
-
version_requirements:
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - ! '>='
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: 3.1.0
|
134
|
+
version_requirements: *9143960
|
190
135
|
- !ruby/object:Gem::Dependency
|
191
136
|
name: bacon
|
192
|
-
requirement: !ruby/object:Gem::Requirement
|
137
|
+
requirement: &9143380 !ruby/object:Gem::Requirement
|
193
138
|
none: false
|
194
139
|
requirements:
|
195
140
|
- - ~>
|
@@ -197,15 +142,10 @@ dependencies:
|
|
197
142
|
version: 1.1.0
|
198
143
|
type: :development
|
199
144
|
prerelease: false
|
200
|
-
version_requirements:
|
201
|
-
none: false
|
202
|
-
requirements:
|
203
|
-
- - ~>
|
204
|
-
- !ruby/object:Gem::Version
|
205
|
-
version: 1.1.0
|
145
|
+
version_requirements: *9143380
|
206
146
|
- !ruby/object:Gem::Dependency
|
207
147
|
name: rack-test
|
208
|
-
requirement: !ruby/object:Gem::Requirement
|
148
|
+
requirement: &9142860 !ruby/object:Gem::Requirement
|
209
149
|
none: false
|
210
150
|
requirements:
|
211
151
|
- - ~>
|
@@ -213,12 +153,7 @@ dependencies:
|
|
213
153
|
version: 0.6.2
|
214
154
|
type: :development
|
215
155
|
prerelease: false
|
216
|
-
version_requirements:
|
217
|
-
none: false
|
218
|
-
requirements:
|
219
|
-
- - ~>
|
220
|
-
- !ruby/object:Gem::Version
|
221
|
-
version: 0.6.2
|
156
|
+
version_requirements: *9142860
|
222
157
|
description: Olelo is a git-based wiki which supports many markup languages, tags,
|
223
158
|
embedded TeX and much more. It can be extended through plugins.
|
224
159
|
email:
|
@@ -230,6 +165,7 @@ extra_rdoc_files: []
|
|
230
165
|
files:
|
231
166
|
- .gitignore
|
232
167
|
- .gitmodules
|
168
|
+
- .travis.yml
|
233
169
|
- Gemfile
|
234
170
|
- LICENSE
|
235
171
|
- README.creole
|
@@ -272,6 +208,9 @@ files:
|
|
272
208
|
- plugins/aspects/changelog.rb
|
273
209
|
- plugins/aspects/documentbrowser.rb
|
274
210
|
- plugins/aspects/download.rb
|
211
|
+
- plugins/aspects/gallery/gallery.css
|
212
|
+
- plugins/aspects/gallery/gallery.scss
|
213
|
+
- plugins/aspects/gallery/main.rb
|
275
214
|
- plugins/aspects/highlight.rb
|
276
215
|
- plugins/aspects/image.rb
|
277
216
|
- plugins/aspects/imageinfo.rb
|
@@ -302,6 +241,7 @@ files:
|
|
302
241
|
- plugins/filters/disposition.rb
|
303
242
|
- plugins/filters/editsection.rb
|
304
243
|
- plugins/filters/fix_img_tag.rb
|
244
|
+
- plugins/filters/html2xml.rb
|
305
245
|
- plugins/filters/html_wrapper.rb
|
306
246
|
- plugins/filters/interwiki.rb
|
307
247
|
- plugins/filters/link_classifier.rb
|
@@ -310,6 +250,8 @@ files:
|
|
310
250
|
- plugins/filters/markdown_nowiki.rb
|
311
251
|
- plugins/filters/numbering.xsl
|
312
252
|
- plugins/filters/orgmode.rb
|
253
|
+
- plugins/filters/remind/main.rb
|
254
|
+
- plugins/filters/remind/rem2html
|
313
255
|
- plugins/filters/rubypants.rb
|
314
256
|
- plugins/filters/s5/main.rb
|
315
257
|
- plugins/filters/s5/s5.xsl
|
@@ -317,9 +259,6 @@ files:
|
|
317
259
|
- plugins/filters/toc.rb
|
318
260
|
- plugins/filters/xhtml2latex.xsl
|
319
261
|
- plugins/filters/xslt.rb
|
320
|
-
- plugins/gallery/gallery.css
|
321
|
-
- plugins/gallery/gallery.scss
|
322
|
-
- plugins/gallery/main.rb
|
323
262
|
- plugins/login/basic_auth.rb
|
324
263
|
- plugins/login/locale.yml
|
325
264
|
- plugins/login/persistent.rb
|
@@ -399,8 +338,8 @@ files:
|
|
399
338
|
- static/images/favicon.png
|
400
339
|
- static/script.js
|
401
340
|
- static/script/00-json2.js
|
402
|
-
- static/script/01-
|
403
|
-
- static/script/02-
|
341
|
+
- static/script/01-jquery.js
|
342
|
+
- static/script/02-olelo.storage.js
|
404
343
|
- static/script/03-jquery.ui.core.js
|
405
344
|
- static/script/04-jquery.ui.widget.js
|
406
345
|
- static/script/05-jquery.ui.position.js
|
@@ -516,7 +455,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
516
455
|
requirements:
|
517
456
|
- - ! '>='
|
518
457
|
- !ruby/object:Gem::Version
|
519
|
-
version:
|
458
|
+
version: 1.9.2
|
520
459
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
521
460
|
none: false
|
522
461
|
requirements:
|
@@ -525,7 +464,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
525
464
|
version: '0'
|
526
465
|
requirements: []
|
527
466
|
rubyforge_project: olelo
|
528
|
-
rubygems_version: 1.8.
|
467
|
+
rubygems_version: 1.8.15
|
529
468
|
signing_key:
|
530
469
|
specification_version: 3
|
531
470
|
summary: Olelo is a git-based wiki.
|
@@ -1,217 +0,0 @@
|
|
1
|
-
/**
|
2
|
-
* ----------------------------- JSTORAGE -------------------------------------
|
3
|
-
* Simple local storage wrapper to save data on the browser side, supporting
|
4
|
-
* all major browsers - IE6+, Firefox2+, Safari4+, Chrome4+ and Opera 10.5+
|
5
|
-
*
|
6
|
-
* Copyright (c) 2010 Andris Reinman, andris.reinman@gmail.com
|
7
|
-
* Project homepage: www.jstorage.info
|
8
|
-
*
|
9
|
-
* Licensed under MIT-style license:
|
10
|
-
*
|
11
|
-
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
12
|
-
* of this software and associated documentation files (the "Software"), to deal
|
13
|
-
* in the Software without restriction, including without limitation the rights
|
14
|
-
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
15
|
-
* copies of the Software, and to permit persons to whom the Software is
|
16
|
-
* furnished to do so, subject to the following conditions:
|
17
|
-
*
|
18
|
-
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
19
|
-
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
20
|
-
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
21
|
-
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
22
|
-
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
23
|
-
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
24
|
-
* SOFTWARE.
|
25
|
-
*/
|
26
|
-
|
27
|
-
/**
|
28
|
-
* USAGE:
|
29
|
-
*
|
30
|
-
* jStorage requires JSON.parse and JSON.stringify. These
|
31
|
-
* methods are provided by the browser or by
|
32
|
-
* http://www.json.org/json2.js.
|
33
|
-
*
|
34
|
-
* Methods:
|
35
|
-
*
|
36
|
-
* -set(key, value)
|
37
|
-
* jStorage.set(key, value) -> saves a value
|
38
|
-
*
|
39
|
-
* -get(key[, default])
|
40
|
-
* value = jStorage.get(key [, default]) ->
|
41
|
-
* retrieves value if key exists, or default if it doesn't
|
42
|
-
*
|
43
|
-
* -remove(key)
|
44
|
-
* jStorage.remove(key) -> removes a key from the storage
|
45
|
-
*
|
46
|
-
* -flush()
|
47
|
-
* jStorage.flush() -> clears the cache
|
48
|
-
*
|
49
|
-
* <value> can be any JSON-able value, including objects and arrays.
|
50
|
-
*
|
51
|
-
*/
|
52
|
-
|
53
|
-
(function() {
|
54
|
-
var
|
55
|
-
// This is the object, that holds the cached values
|
56
|
-
storage = {},
|
57
|
-
|
58
|
-
// Actual browser storage (localStorage or globalStorage['domain']) */
|
59
|
-
storageService = null,
|
60
|
-
|
61
|
-
// DOM element for older IE versions, holds userData behavior */
|
62
|
-
storageElement = null;
|
63
|
-
|
64
|
-
////////////////////////// PRIVATE METHODS ////////////////////////
|
65
|
-
|
66
|
-
/**
|
67
|
-
* Initialization function. Detects if the browser supports DOM Storage
|
68
|
-
* or userData behavior and behaves accordingly.
|
69
|
-
* @returns undefined
|
70
|
-
*/
|
71
|
-
function init() {
|
72
|
-
try {
|
73
|
-
if (window.localStorage)
|
74
|
-
storageService = window.localStorage;
|
75
|
-
else if (window.globalStorage)
|
76
|
-
storageService = window.globalStorage[window.location.hostname];
|
77
|
-
} catch (e) {
|
78
|
-
// Firefox fails when touching localStorage/globalStorage and cookies are disabled
|
79
|
-
}
|
80
|
-
|
81
|
-
// Check if browser supports userData behavior
|
82
|
-
if (!storageService) {
|
83
|
-
storageElement = document.createElement('link');
|
84
|
-
if (storageElement.addBehavior) {
|
85
|
-
|
86
|
-
// Use a DOM element to act as userData storage
|
87
|
-
storageElement.style.behavior = 'url(#default#userData)';
|
88
|
-
|
89
|
-
// userData element needs to be inserted into the DOM!
|
90
|
-
document.getElementsByTagName('head')[0].appendChild(storageElement);
|
91
|
-
|
92
|
-
storageElement.load('jStorage');
|
93
|
-
var data = '{}';
|
94
|
-
try{
|
95
|
-
data = storageElement.getAttribute('jStorage');
|
96
|
-
} catch (e) {
|
97
|
-
}
|
98
|
-
storageService.jStorage = data;
|
99
|
-
} else {
|
100
|
-
storageElement = null;
|
101
|
-
return;
|
102
|
-
}
|
103
|
-
}
|
104
|
-
|
105
|
-
if (!storageService)
|
106
|
-
storageService = { jStorage: '{}' };
|
107
|
-
|
108
|
-
// if jStorage string is retrieved, then decode it
|
109
|
-
if (storageService.jStorage) {
|
110
|
-
try {
|
111
|
-
storage = JSON.parse(storageService.jStorage);
|
112
|
-
} catch (e) {
|
113
|
-
storageService.jStorage = '{}';
|
114
|
-
}
|
115
|
-
} else {
|
116
|
-
storageService.jStorage = '{}';
|
117
|
-
}
|
118
|
-
}
|
119
|
-
|
120
|
-
/**
|
121
|
-
* This functions provides the "save" mechanism to store the jStorage object
|
122
|
-
* @returns undefined
|
123
|
-
*/
|
124
|
-
function save() {
|
125
|
-
try {
|
126
|
-
storageService.jStorage = JSON.stringify(storage);
|
127
|
-
// If userData is used as the storage engine, additional
|
128
|
-
if (storageElement) {
|
129
|
-
storageElement.setAttribute('jStorage',storageService.jStorage);
|
130
|
-
storageElement.save('jStorage');
|
131
|
-
}
|
132
|
-
} catch (e) {
|
133
|
-
// probably cache is full, nothing is saved this way
|
134
|
-
}
|
135
|
-
}
|
136
|
-
|
137
|
-
/**
|
138
|
-
* Function checks if a key is set and is string or numberic
|
139
|
-
*/
|
140
|
-
function checkKey(key) {
|
141
|
-
if (typeof key != 'string' && typeof key != 'number')
|
142
|
-
throw new TypeError('Key name must be string or numeric');
|
143
|
-
}
|
144
|
-
|
145
|
-
////////////////////////// PUBLIC INTERFACE /////////////////////////
|
146
|
-
|
147
|
-
var jStorage = {
|
148
|
-
/**
|
149
|
-
* Sets a key's value.
|
150
|
-
*
|
151
|
-
* @param {String} key - Key to set. If this value is not set or not
|
152
|
-
* a string an exception is raised.
|
153
|
-
* @param value - Value to set. This can be any value that is JSON
|
154
|
-
* compatible (Numbers, Strings, Objects etc.).
|
155
|
-
* @returns the used value
|
156
|
-
*/
|
157
|
-
set: function(key, value){
|
158
|
-
checkKey(key);
|
159
|
-
storage[key] = value;
|
160
|
-
save();
|
161
|
-
return value;
|
162
|
-
},
|
163
|
-
|
164
|
-
/**
|
165
|
-
* Looks up a key in cache
|
166
|
-
*
|
167
|
-
* @param {String} key - Key to look up.
|
168
|
-
* @param {mixed} def - Default value to return, if key didn't exist.
|
169
|
-
* @returns the key value, default value or <null>
|
170
|
-
*/
|
171
|
-
get: function(key, def){
|
172
|
-
checkKey(key);
|
173
|
-
if (key in storage)
|
174
|
-
return storage[key];
|
175
|
-
return typeof(def) == 'undefined' ? null : def;
|
176
|
-
},
|
177
|
-
|
178
|
-
/**
|
179
|
-
* Removes a key from cache.
|
180
|
-
*
|
181
|
-
* @param {String} key - Key to remove.
|
182
|
-
* @returns true if key existed or false if it didn't
|
183
|
-
*/
|
184
|
-
remove: function(key){
|
185
|
-
checkKey(key);
|
186
|
-
if (key in storage){
|
187
|
-
delete storage[key];
|
188
|
-
save();
|
189
|
-
return true;
|
190
|
-
}
|
191
|
-
return false;
|
192
|
-
},
|
193
|
-
|
194
|
-
/**
|
195
|
-
* Deletes everything in cache.
|
196
|
-
*/
|
197
|
-
flush: function(){
|
198
|
-
storage = {};
|
199
|
-
save();
|
200
|
-
/*
|
201
|
-
* Just to be sure - andris9/jStorage#3
|
202
|
-
*/
|
203
|
-
if (window.localStorage){
|
204
|
-
try {
|
205
|
-
localStorage.clear();
|
206
|
-
} catch (e) {
|
207
|
-
}
|
208
|
-
}
|
209
|
-
}
|
210
|
-
};
|
211
|
-
|
212
|
-
// Initialize jStorage
|
213
|
-
init();
|
214
|
-
|
215
|
-
// Expose api
|
216
|
-
window.jStorage = jStorage;
|
217
|
-
})();
|