Compare commits
278 Commits
0.8.0Beta2
...
1.0.3
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
927ba3cd9d | ||
|
|
6296fc1762 | ||
|
|
60fbe44724 | ||
|
|
29e45da431 | ||
|
|
d82e69eef4 | ||
|
|
8c7d557252 | ||
|
|
7548d9e975 | ||
|
|
b7e2bd9684 | ||
|
|
f0a243e3d3 | ||
|
|
6e108c9ef2 | ||
|
|
89edcc1924 | ||
|
|
8a6aca47a1 | ||
|
|
d03e5780b8 | ||
|
|
209d8f9b40 | ||
|
|
c257b1be3d | ||
|
|
2c48c8de2e | ||
|
|
a767ef6aed | ||
|
|
ad61d1dd03 | ||
|
|
33c3d187a0 | ||
|
|
4eb486d4e2 | ||
|
|
bfb6c167a4 | ||
|
|
44abf3bdf6 | ||
|
|
c950572592 | ||
|
|
3999cb13fd | ||
|
|
af65075f0c | ||
|
|
de2a2b465b | ||
|
|
cd7a77f02d | ||
|
|
f4a5394b63 | ||
|
|
3fb6a8dedb | ||
|
|
50c8f84eba | ||
|
|
2c7ecdee92 | ||
|
|
72390a793a | ||
|
|
04ad4e5d3e | ||
|
|
5ef9c6a433 | ||
|
|
e6baffc839 | ||
|
|
e361eb25a5 | ||
|
|
9b420e91c9 | ||
|
|
3a4bf971b2 | ||
|
|
1128691c5d | ||
|
|
15043aef3f | ||
|
|
2a3b4afa03 | ||
|
|
00a98efa81 | ||
|
|
f013dd7f0d | ||
|
|
7b91b1c769 | ||
|
|
5583cce322 | ||
|
|
b995c5f992 | ||
|
|
214ac4a53d | ||
|
|
c0f2f59fc1 | ||
|
|
b90a847a6f | ||
|
|
a58bb385f5 | ||
|
|
9754baeb1c | ||
|
|
ffcd154966 | ||
|
|
97cfe9488c | ||
|
|
374b6f616a | ||
|
|
e2f51595b6 | ||
|
|
04091a16aa | ||
|
|
9d9d2fd9a2 | ||
|
|
5746115331 | ||
|
|
42f1a4926c | ||
|
|
7d87fd461b | ||
|
|
1ba9976979 | ||
|
|
659c199043 | ||
|
|
81a3f53226 | ||
|
|
1cbff28f67 | ||
|
|
8e15acbf30 | ||
|
|
e07be60db6 | ||
|
|
539c9662ff | ||
|
|
b396014f8d | ||
|
|
1db32415b6 | ||
|
|
b24629db6b | ||
|
|
9b5cdcf8fb | ||
|
|
4831415d14 | ||
|
|
a4c51f0b20 | ||
|
|
ec3ba1fb93 | ||
|
|
61966f7036 | ||
|
|
4f69e81841 | ||
|
|
d0d90581df | ||
|
|
8ea5c27633 | ||
|
|
517500fdf3 | ||
|
|
c4c1c9b6ab | ||
|
|
2388889ede | ||
|
|
55cfe878d7 | ||
|
|
a2daaee468 | ||
|
|
2c360e395e | ||
|
|
399cfee594 | ||
|
|
be646ae6ab | ||
|
|
b470253d9f | ||
|
|
b83c493492 | ||
|
|
991277bb01 | ||
|
|
5626013b81 | ||
|
|
2810d37758 | ||
|
|
c2f08f01e0 | ||
|
|
17ff087e06 | ||
|
|
77de565b7c | ||
|
|
54d238aa4d | ||
|
|
379d09f8cc | ||
|
|
00de72b127 | ||
|
|
f9c84fa7dd | ||
|
|
c8e46691bb | ||
|
|
df1bb636e5 | ||
|
|
ff886fad0d | ||
|
|
6dbee7a413 | ||
|
|
3f8fcd7172 | ||
|
|
d94f7388e6 | ||
|
|
ad8b49fea8 | ||
|
|
ce00270c12 | ||
|
|
8c501f8f58 | ||
|
|
ce313ebc65 | ||
|
|
887ad881a2 | ||
|
|
ce40827552 | ||
|
|
2777d89482 | ||
|
|
727b300a0e | ||
|
|
652b021a8e | ||
|
|
fdf33acfbb | ||
|
|
b001bc9b6f | ||
|
|
8802cb1d8c | ||
|
|
e19a2fbae7 | ||
|
|
53e38f98f9 | ||
|
|
e783e227f6 | ||
|
|
f3dfbe4181 | ||
|
|
bcd8ca8bc4 | ||
|
|
816d6a63cd | ||
|
|
88d3f25700 | ||
|
|
80f69b11db | ||
|
|
81a11f20c8 | ||
|
|
9e2a839953 | ||
|
|
3cefcde270 | ||
|
|
87a1eacfe7 | ||
|
|
7cbc1a8419 | ||
|
|
7b5570eb0b | ||
|
|
1a43a4dcf0 | ||
|
|
2c2a6592c7 | ||
|
|
f31de6ee4e | ||
|
|
8fcd1f6b6c | ||
|
|
1760a20671 | ||
|
|
d7f3a473d7 | ||
|
|
f682f68966 | ||
|
|
2a849c0e97 | ||
|
|
ab2eb0c94e | ||
|
|
e1e05b132d | ||
|
|
04ef0beacf | ||
|
|
060815dabe | ||
|
|
c7d9e5ce90 | ||
|
|
8bc9fd821f | ||
|
|
5a46c8f691 | ||
|
|
aced9d9241 | ||
|
|
cdf8c42d3d | ||
|
|
5e81b85f21 | ||
|
|
9b1d44f98a | ||
|
|
1b477f4885 | ||
|
|
1618e029a7 | ||
|
|
cc34656ffa | ||
|
|
e045533d2b | ||
|
|
d8047eaa12 | ||
|
|
bcf5a75d14 | ||
|
|
a2afe43540 | ||
|
|
1c419c7151 | ||
|
|
610e10d18e | ||
|
|
1e5d44ba9e | ||
|
|
5a60c3f345 | ||
|
|
18bd3e925c | ||
|
|
35f2b14216 | ||
|
|
faf90c36d8 | ||
|
|
d17f339d9a | ||
|
|
7682e593e3 | ||
|
|
9aa927159a | ||
|
|
ea87c29ad4 | ||
|
|
e94fa7e710 | ||
|
|
e9200d2d89 | ||
|
|
779560789c | ||
|
|
45eccebd52 | ||
|
|
cbacac1934 | ||
|
|
91736f069c | ||
|
|
e4bf3acd90 | ||
|
|
92f9bcb61e | ||
|
|
8fab1aa00d | ||
|
|
caf0d3606a | ||
|
|
b4f369b213 | ||
|
|
bb0ee57e1c | ||
|
|
a83e89c8b4 | ||
|
|
e4554192f7 | ||
|
|
57498c3fb3 | ||
|
|
ac3b9951e0 | ||
|
|
3aae3e7e54 | ||
|
|
f3252d8156 | ||
|
|
66450d2b2b | ||
|
|
14beeb712c | ||
|
|
3a1de11e42 | ||
|
|
2cea65f36b | ||
|
|
ac72568e4d | ||
|
|
f28bcbf801 | ||
|
|
3d78329dd3 | ||
|
|
b1f99990fc | ||
|
|
2f00a878a6 | ||
|
|
583c233bd2 | ||
|
|
3b6e9775b0 | ||
|
|
f000212b4e | ||
|
|
68c66de77c | ||
|
|
bd33a729ad | ||
|
|
e96597b417 | ||
|
|
4d9eb56d01 | ||
|
|
289ccba8d3 | ||
|
|
39516d61ea | ||
|
|
da9f11a7c0 | ||
|
|
f4388d2d8a | ||
|
|
4fba40b624 | ||
|
|
503b965bb0 | ||
|
|
4ea9eaea54 | ||
|
|
c3b108abf2 | ||
|
|
164114ab82 | ||
|
|
33f45a4256 | ||
|
|
51b160da3f | ||
|
|
d1c1819e16 | ||
|
|
3adff9ea6b | ||
|
|
3496f93cce | ||
|
|
dcac685cee | ||
|
|
a0cdf79e23 | ||
|
|
a54ccb1f71 | ||
|
|
ebeb950794 | ||
|
|
3b58aff728 | ||
|
|
8ad5ff7b8c | ||
|
|
c210636952 | ||
|
|
91895d8765 | ||
|
|
90019494ce | ||
|
|
9e99d39f2c | ||
|
|
a70addca55 | ||
|
|
d825b40b73 | ||
|
|
bc3d22a06b | ||
|
|
ac1d1cf24d | ||
|
|
05c39b2de8 | ||
|
|
298303a239 | ||
|
|
46d1ba7037 | ||
|
|
9d5d1d90fa | ||
|
|
58f7d563c2 | ||
|
|
83bd8cb3a0 | ||
|
|
c821b583ee | ||
|
|
2898d045de | ||
|
|
f9160d286d | ||
|
|
4e20004f7b | ||
|
|
555aadc83e | ||
|
|
f1029836b0 | ||
|
|
14319ad9f5 | ||
|
|
c9a4e61a3a | ||
|
|
d8d261132c | ||
|
|
a043e78a9a | ||
|
|
4b2533d8d9 | ||
|
|
32074b9be0 | ||
|
|
0aba54fcf3 | ||
|
|
22133e4a53 | ||
|
|
aa698d0591 | ||
|
|
1e4fb79349 | ||
|
|
c01e091c52 | ||
|
|
b9205d98f6 | ||
|
|
dccf961d79 | ||
|
|
217fe143c3 | ||
|
|
69a872eac0 | ||
|
|
0b6395fc1d | ||
|
|
6e5909d283 | ||
|
|
3b48ff7bab | ||
|
|
038a6cca6b | ||
|
|
102eaa966b | ||
|
|
6bb9f3ca94 | ||
|
|
d37cecce09 | ||
|
|
83b582d503 | ||
|
|
53bb66ffab | ||
|
|
1b6de48ac1 | ||
|
|
fe3a0cc7f7 | ||
|
|
2dd26027f7 | ||
|
|
7e329e8196 | ||
|
|
8f1d81cc2c | ||
|
|
e901f3bc35 | ||
|
|
8d85e2887d | ||
|
|
fdd8775564 | ||
|
|
3f174c86a8 | ||
|
|
c80a897ea0 | ||
|
|
b913a7be09 | ||
|
|
be17f051bf | ||
|
|
1c388faf42 |
@@ -1,5 +1,5 @@
|
||||
*******************************************
|
||||
*** This is SABnzbd 0.8.0 ***
|
||||
*** This is SABnzbd 1.0.3 ***
|
||||
*******************************************
|
||||
SABnzbd is an open-source cross-platform binary newsreader.
|
||||
It simplifies the process of downloading from Usenet dramatically,
|
||||
@@ -12,8 +12,8 @@ and offers a complete API for third-party applications to hook into.
|
||||
There is an extensive Wiki on the use of SABnzbd.
|
||||
http://wiki.sabnzbd.org/
|
||||
|
||||
IMPORTANT INFORMATION about release 0.8.0:
|
||||
http://wiki.sabnzbd.org/introducing-0-8-0
|
||||
IMPORTANT INFORMATION about release 1.0.0:
|
||||
http://wiki.sabnzbd.org/introducing-1-0-0
|
||||
|
||||
|
||||
Please also read the file "ISSUES.txt"
|
||||
@@ -37,6 +37,6 @@ Install new version
|
||||
Start SABnzbd.
|
||||
|
||||
The organization of the download queue is different from 0.7.x (and older).
|
||||
0.8.0 will not finish downloading an existing queue.
|
||||
1.0.0 will not finish downloading an existing queue.
|
||||
Also, your sabnzbd.ini file will be upgraded, making it
|
||||
incompatible with older releases.
|
||||
|
||||
428
CHANGELOG.txt
@@ -1,428 +0,0 @@
|
||||
-------------------------------------------------------------------------------
|
||||
0.8.0Beta2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Improvements in IPv6 handling
|
||||
- Extension of SSL protocols (where supported)
|
||||
- Many improvemnts in the Glitter skin
|
||||
- On Windows, Season Sort often failed
|
||||
- Speedlimiting can now be absolute or in percentage
|
||||
- Scheduler action to remove completed history items
|
||||
-------------------------------------------------------------------------------
|
||||
0.8.0Beta1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Newsserver IPv6 load balancing aka Happy Eyeballs / RFC 6555
|
||||
- Glitter fixes and improvements
|
||||
- Removed Classic and Mobile Interfaces
|
||||
- Removed Config parts of smpl and Plush skins
|
||||
- CherryPy upgrade
|
||||
- API-call "history" now accepts one or more "category" parameters in order to filter.
|
||||
- API-call "addurl" now returns a list of nzo_id's, which will be valid for the actual jobs.
|
||||
- Update unrar to release 5.21
|
||||
- Enable renaming of Usenet servers.
|
||||
- Add Pushbullet support.
|
||||
- Implement Pushover support.
|
||||
- Restore Rating function
|
||||
- API: add "action_size" parameter to file bulk operations.
|
||||
-------------------------------------------------------------------------------
|
||||
0.8.0Aplha3 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- New skin: Glitter
|
||||
- Assign servers to categories
|
||||
- Lots of bug fixes
|
||||
-------------------------------------------------------------------------------
|
||||
0.8.0Aplha2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Server priorities instead of primary/backup
|
||||
- Work-arounds to avoid bugs in PyOpenSSL 0.14
|
||||
- Speedlimit 0 wasn't handled properly (in means no limit)
|
||||
- Add 'action_size' parameter to support drag-and-drop of files
|
||||
- Remove unnecessary 7zip warnings
|
||||
- Support RAR's REV files to some extent
|
||||
- Diagnostic dashboard tab for "Status" page
|
||||
- Fix UI for Notification Center, Growl and NtfOSD
|
||||
-------------------------------------------------------------------------------
|
||||
0.8.0Aplha1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
See git log and release notes
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.11Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Bad articles from some servers were accepted as valid data
|
||||
- Show warning when the decoder encounters I/O errors
|
||||
- Generic Sort failed to rename files when an extra folder level was present in the RAR files
|
||||
- Obfuscated file name support caused regular NZBs to verify slower
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.10Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Disable obsolete newzbin bookmark readout
|
||||
- Show speed when downloading in Forced mode while paused
|
||||
- Plush History icons repair and unpack were swapped
|
||||
- Try to repair rar/par sets with obfuscated names
|
||||
- Reset "today" byte counters at midnight even when idle
|
||||
- Display next RSS scan moment in Cfg->RSS
|
||||
- An email about a failed should say that the download failed
|
||||
- Report errors coming from fully encrypted rar files
|
||||
- Accept NNTP error 400 without "too many connection" clues as a transient error.
|
||||
- Accept %fn (next to %fn.%ext) as end parameter in sorting strings.
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.9Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix fatal error in decoder when encountering a malformed article
|
||||
- Fix compatibility with free.xsusenet.com
|
||||
- Small fix in smpl-black CSS
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.8Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix problem with %fn substitution in Sorting
|
||||
- Add special "wait_for_dfolder", enables waiting for external temp download folder
|
||||
- Work-around for servers that do not support STAT command
|
||||
- Removed articles are now listed separately in download report
|
||||
- Add "abort" option to encryption detection
|
||||
- Fix missing Retry link for "Out of retention" jobs.
|
||||
- Option to abort download when it is clear that not enough data is available
|
||||
- Support "nzbname" parameter in addfile/addlocalfile api calls for
|
||||
ZIP files with a single NZB
|
||||
- Support NZB-1.1 meta data "password" and "category"
|
||||
- Don't retry an empty but correct NZB from an indexer
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.7Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Windows/OSX: Update unrar to 4.20
|
||||
- Fix some issues with orphaned items
|
||||
- Generic sort didn't always rename media files in multi-part jobs properly
|
||||
- Optional web-ui watchdog
|
||||
- Always show RSS items in the same order as the original RSS feed
|
||||
- Remove unusable folders from folder selector (Plush skin)
|
||||
- Remove newzbin support
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.6Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Recursive scanning when re-queuing downloaded NZB files
|
||||
- Log "User-Agent" header of API calls
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.6Beta2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- A damaged smallest par2 can block fetching of more par2 files
|
||||
- Fix evaluation of schedules at startup
|
||||
- Make check for running SABnzbd instance more robust
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.6Beta1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Handle par2 sets that were renamed after creation
|
||||
- Prevent blocking assembly of completed files, ( this resulted in
|
||||
excessive CPU and memory usage)
|
||||
- Fix speed issues with some Usenet servers due to unreachable IPv6 addresses
|
||||
- Fix issues with SFV-base checks
|
||||
- Prevent crash on Unix-Pythons that don't have the os.getloadavg() function
|
||||
- Successfully pre-checked job lost its attributes when those were changed during check
|
||||
- Remove version check when looking for a running instance of SABnzbd
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.5Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Add missing %dn formula to Generic Sort
|
||||
- Improve RSS logging
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.5RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Prevent stuck jobs at end of pre-check.
|
||||
- Fix issues with accented and special characters in names of downloaded files.
|
||||
- Adjust nzbmatrix category table.
|
||||
- Add 'prio_sort_list' special
|
||||
- Add special option 'empty_postproc'.
|
||||
- Prevent CherryPy crash when reading a cookie from another app which has a non-standard name.
|
||||
- Prevent crash when trying to open non-existing "complete" folder from Windows System-tray icon.
|
||||
- Fix problem with "Read" button when RSS feed name contains "&".
|
||||
- Prevent unusual SFV files from crashing post-processing.
|
||||
- OSX: Retina compatible menu-bar icons.
|
||||
- Don't show speed and ETA when download is paused during post-processing
|
||||
- Prevent soft-crash when api-function "addfile" is called without parameters.
|
||||
- Add news channel frame
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.4Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Pre-queue script no longer got the show/season/episode information.
|
||||
- Prevent crash on startup when a fully downloaded job is still in download queue.
|
||||
- New RSS feed should no longer be considered new after first, but empty readout.
|
||||
- Make "auth" call backward-compatible with 0.6.x releases.
|
||||
- Config->Notifications: email and growl server addresses should not be marked as "url" type.
|
||||
- OSX: fix top menu queue info so that it shows total queue size
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.4RC2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Pre-check failed to consider extra par2 files
|
||||
- Fixed unjustified warning that can occur with OSX Growl 2.0
|
||||
- Show memory usage on Linux systems
|
||||
- Fix incorrect end-of-month quota reset
|
||||
- Fix UI refresh issue when using Safari on iOS6
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.4RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Remove potential queue stalling when downloading extra par2 files
|
||||
- Make Windows version less eager to use par2-classic
|
||||
- Fixed DMG images
|
||||
- Add missing encoding directive to Plush and Classic skins
|
||||
- Prevent oversized data in API-call "history"
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.4Beta3 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- All three OSX build in one DMG again
|
||||
- Minor bugfixes
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.4Beta2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix failure to fetch more par2-files for posts with badly formatted subject lines
|
||||
- After successful pre-check, preserve a job's position in the queue
|
||||
- Restore SABnzbd icon for Growl
|
||||
- Fix "check new releases" option in Config skin
|
||||
- Separate DMG files for OSX Leopard/SL, Lion and MLion
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.4Beta1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- OSX Mountain Lion Notification Center support
|
||||
- OSX Mountain Lion improved "keep awake" support
|
||||
- OSX: separate builds: one for Mountain Lion and one for all others
|
||||
- OSX removed 64bit code
|
||||
- Scheduler: action can now run on multiple weekdays
|
||||
- Scheduler: add "remove failed jobs" action
|
||||
- Special option: rss_odd_titles (see Wiki)
|
||||
- Support for HTTPS chain files (needed when you buy your own certificate)
|
||||
- Prevent jobs from showing up in queue and history simultaneously
|
||||
- Add parameter 'pp_active' to history elements in qstatus API call
|
||||
- Fix some minor par2 handling bugs
|
||||
- Prevent potential crash when an actively downloading job is deleted from the queue
|
||||
- Special option: 'overwrite_files' (See Wiki)
|
||||
- Don't try an SFV check when a retried job was already successfully verified by par2
|
||||
- Enable compression of API call results
|
||||
- Log failed attempts to log in to the Web UI
|
||||
- A job with "forced" priority should keep that when fetching more par2 files
|
||||
- Updated translations
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.3Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Rename Special "random_server_ip" to "randomize_server_ip" so that we
|
||||
can force the default to "Off". "On" kills speed on some servers.
|
||||
- Ignore pseudo NZB files that start with a period in the name
|
||||
- SFV failure now listed in History instead of issuing warnings
|
||||
- Translation updates
|
||||
- "502" errors about payments/credits will now block a server
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.3Beta2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Try to keep OSX Mountain Lion awake as long as downloading/postprocessing runs
|
||||
- Prevent queue deadlock in case of fatally damaged par2 files
|
||||
- Add RSS filter-enable checkboxes to Plush, Smpl and Classic skins
|
||||
- Fix problem with saving modified paramters of an already enabled server
|
||||
- Extend "check new release" option with test releases
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.3Beta1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Correct several errors in Sort function
|
||||
- Improve organization of Config->Servers
|
||||
- Support for nzbxxx.com
|
||||
- Make detection of samples less aggressive
|
||||
- Some minor corrections
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.2Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix for NZB-icon issue when 0.7.0 was previously installed
|
||||
- Check validity of totals9.sab file
|
||||
- Fix startup problem when localhost has unexpected order of IP addresses
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.2RC2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Improve support for nzbsrus.com
|
||||
- Don't try to show NZB age when not known yet
|
||||
- Prevent systems with unresolvable hostnames from always using 0.0.0.0
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.2RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix fatal error in nzbsrus.com support
|
||||
- Initial "quota left" was not set correctly when enabling quota
|
||||
- Report incorrect RSS filter expressions (instead of aborting analysis)
|
||||
- Improve detection of invalid articles (so that backup server will be tried)
|
||||
- Windows installer: improve NZB association so that a reboot isn't needed
|
||||
- Windows installer: don't remove settimngs by default when uninstalling
|
||||
- Fix sorting of rar files in job so that .rar preceeds .r00
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.1Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Disable VC90 check in Windows Installer as long as we're still on Python 2.5
|
||||
- Windows: make sure \\server\share notation is never seen as a relative path
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.1RC5 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix signing of OSX DMG
|
||||
- Fix endless par2-fetch loop after retrying failed job
|
||||
- Don't send "bad fetch" email when emailing is off
|
||||
- Add some support for nzbrus.com's non-VIP limiting
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.1RC4 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix failure to grab NZBs from indexers that send compressed files.
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.1RC3 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fixed stalling par2 fetches (after first verification run)
|
||||
- Fixed retry behaviour of NZB fetching from URL
|
||||
and add handling of nzbsrus.com error codes
|
||||
- Make sure that all malformed articles are retried on another server
|
||||
- Add no_ipv6 option that suppresses listing on ::1
|
||||
(to be used if your system cannot handle that)
|
||||
- Prevent crash in QuickCheck when expected par2 file wasn't downloaded
|
||||
- Verification/repair would not be executed properly when one more RAR files
|
||||
missed their first article.
|
||||
- API calls "addurl" and "addid" (newzbin) can be used interchangeably
|
||||
(Fixes a problem in Qouch)
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.1RC2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Improved backup of sabnzbd.ini file
|
||||
Will use backup when original is gone or become corrupt
|
||||
- Windows: Using ::1 as single webhost address would start IE instead of default browser
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.1RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Plush skin: fix problems with pull-down menus in Mobile Safari
|
||||
- On some Linux and OSX systems using localhost would still make SABnzbd
|
||||
give access to other computers
|
||||
- Windows: the installer did not set an icon when associating NZB files with SABnzbd
|
||||
- Fix problem that the Opera browser had with Config->Servers
|
||||
- Retry a few times when accessing a mounted drive to create the
|
||||
final destination folder
|
||||
- Reduce load caused by WinTray and OSX topmenu
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Updated translations
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0RC2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Suppress permission errors on paths containing ".AppleDouble" or ".DS_Store"
|
||||
(Required for NAS systems that support Apple AFP shares)
|
||||
- OSX/Windows: Set article cache to 200M when not already set.
|
||||
- Pre-check: lower default minimum completion rate to 100.2%
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix for rare crash in par2 fetching
|
||||
- Another /nomedia fix
|
||||
- Quota reset wasn't done when quota-reset-time was passed while SABnzbd wasn't running.
|
||||
- Pre-check: required ratio for NZB without par2 files should be 100%
|
||||
and not the "safe" ratio
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Beta8 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Disabled the .nomedia marker file feature.
|
||||
Those who want to try it, use the "nomedia_marker" setting in Config->Special
|
||||
It remains an experimental feature without guarantees
|
||||
- Add missing info in email about failed pre-check
|
||||
- Updated translations
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Beta7 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix for .nomedia files not being deleted
|
||||
- Fix NZB re-queueing (due to .nomedia remaining)
|
||||
- Polish was missing in Windows installer and Dutch was incorrect
|
||||
- When Sort renames auxillirary files, it should disregard case
|
||||
- Fix crash in Wizard on some Linux systems
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Beta6 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Upgrade unzip for Windows to 6.00 (supports ZIPs above 2G)
|
||||
- Lower threshold for pre-check to 100.5%
|
||||
- Fix removal of .nomedia file when using Sorting
|
||||
- Add Polish translation (using reduced character set)
|
||||
- Extension-based cleanup list now also removes extension-only files like ".sfv".
|
||||
- Several small issues
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Beta5 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Solved serious connection problem with some providers
|
||||
- Windows Tray has the "restart" entries no under a Troubleshoot menu
|
||||
- Fix newzbin entries in History's "Source" field
|
||||
- During unpacking the destination folder will contain a ".nomedia" file
|
||||
which will keep mediaplayers temporarily from indexing
|
||||
- Pre-check jobs now require 101% completion rate (with a "special" parameter)
|
||||
- Unified OSX DMG
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Beta4 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Add Portuguese (Brazil) language
|
||||
- Updated translations
|
||||
- Some odd NZB files led to blank initial filenames in file overview
|
||||
- Jobs that have 99.91%-99.99% completion rate should not be rounded to 100.0%
|
||||
- Windows Tray icon now has entry to show "complete" folder
|
||||
- Some minor fixes in code and Config skin
|
||||
- Individual RSS filter toggle
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Beta3 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- OSX/Linux: permissions are now also applied to the "temporary download folder"
|
||||
- Fix some issues in the Config skin.
|
||||
- The default for "apply max retries only on optional servers" is now 0,
|
||||
thus enabling the new anti-deadlock behaviour for all servers
|
||||
- Fix incompatibility with nzbsa.co.za indexer
|
||||
- Log all API calls (in debug mode)
|
||||
- Restore Python2.5 compatibility in growler.py
|
||||
- After a language change, register again with Growl
|
||||
- Clean up the api-call auth. It will now give preference to 'apikey'.
|
||||
- Fix detection of retry-able history entries for case-insensitive file systems.
|
||||
- API-calls "addfile" and "addlocalfile" returned an incorrect status value.
|
||||
- Add support for the peculiar Usenet provider "free.xsusenet.com".
|
||||
- OSX menu now uses the same formatting for speed as the skins.
|
||||
- Accept multiple items in API-calls "addurl" and "addid".
|
||||
The "name" and "nzbname" keywords can be repeated.
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Beta2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix behavior when using host address 0.0.0.0 on a system
|
||||
that doesn't resolve localhost properly
|
||||
- Add Spanish translation
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Beta1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Updated nzbmatrix categories
|
||||
- "Special" option allows incomplete/partial NZB files
|
||||
- Forbid "complete" being a subfolder of "incomplete"
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Alpha3 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix failing join-by-par2
|
||||
- Prevent API crash when deleting non-existing history item
|
||||
- Prevent UI crash message when looking at NZB details page of finished job
|
||||
- Config skin: fix path complettion in Config->Folders
|
||||
- Config skin: fixes to support "hide behind proxy"
|
||||
- Keep using unrar 4.10 for OSX Leopard and older, due to PPC support
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Alpha2 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Fix disabled options in Config skin
|
||||
- Remove flags from the Wizard and Config skin
|
||||
- Replace real spaces in RSS-urls with %20
|
||||
- Prevent double entries in History's "Source" section
|
||||
- Prevent crash when OSDNotify doesn't work properly
|
||||
- Small improvents in Windows installer
|
||||
-------------------------------------------------------------------------------
|
||||
0.7.0Alpha1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Not tracked
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.15Final by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Flag post-processing as failed when files cannot be moved/copied to destination
|
||||
- Fixed another newzbin link
|
||||
-------------------------------------------------------------------------------
|
||||
0.6.15RC1 by The SABnzbd-Team
|
||||
-------------------------------------------------------------------------------
|
||||
- Change newzbin URL
|
||||
- Prevent setting watched-folder speed to 0 (while having no watched-folder)
|
||||
from triggering an inifinite loop.
|
||||
- Move "locale" construction from Plush skin to Python code.
|
||||
Some embedded Linux platforms show unstable behavior with the original construction.
|
||||
- Extend OSX menu with troubleshooting options
|
||||
- Add trailing slashes to internal Plush paths to support reverse proxies better.
|
||||
- Ignore whitespace around regular expressions in RSS filters.
|
||||
- Prevent crash on restoring URL-fetches when using --repair-all option
|
||||
- Fix "Repair" button on smpl Connection page. Current path fails when using a reverse proxy
|
||||
- Suppress "incompatible feed" error when doing a scheduled/automatic RSS read-out.
|
||||
- Add special setting to use "pickle" library instead of cPickle.
|
||||
@@ -1,5 +1,5 @@
|
||||
|
||||
(c) Copyright 2007-2015 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2016 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
|
||||
The SABnzbd-team is:
|
||||
|
||||
@@ -16,19 +16,20 @@ Honorary member (and original author)
|
||||
Gregor Kaufmann <tdian@users.sourceforge.net>
|
||||
|
||||
The main contributors and moderators of the translations
|
||||
Danish: Rene (nordjyden6)
|
||||
Dutch: ShyPike
|
||||
French : rAf and Fox Ace
|
||||
German: Severin Heiniger
|
||||
Norwegian: Protx
|
||||
Danish: Rene (nordjyden6), Scott
|
||||
Dutch: ShyPike, Safihre
|
||||
French : rAf, Fox Ace, Fred, Morback, Jih
|
||||
German: Severin Heiniger, Tim Hartmann, DonPizza, Alex
|
||||
Norwegian: Protx, mjelva, TomP, John
|
||||
Romanian: nicusor
|
||||
Serbian: Ozzii
|
||||
Swedish: Malmis
|
||||
Spanish: Syquus
|
||||
Portuguese (Brazil): lrrosa
|
||||
Serbian: Ozzii, Krišan Darko
|
||||
Swedish: Malmis, Kim Joahnsson, Patrik-liind, Chris M
|
||||
Spanish: Syquus, Adolfo Jayme
|
||||
Portuguese (Brazil): lrrosa, diegosps
|
||||
Russian: Pavel Maryanov
|
||||
Polish: Tomasz 'Zen' Napierala
|
||||
Chinese: XsLiDian
|
||||
Finnish: Matti Ylönen
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
|
||||
16
INSTALL.txt
@@ -1,10 +1,10 @@
|
||||
SABnzbd 0.8.0
|
||||
SABnzbd 1.0.3
|
||||
|
||||
-------------------------------------------------------------------------------
|
||||
0) LICENSE
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
(c) Copyright 2007-2015 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2016 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
@@ -64,22 +64,24 @@ OSX Lion/MountainLion
|
||||
Apple Python 2.7 Included in OSX (default)
|
||||
|
||||
Windows
|
||||
Python-2.7.latest http://www.activestate.com
|
||||
Python-2.7.latest http://www.python.com
|
||||
Most versions will work: 2.7.10 recommended
|
||||
PyWin32 use "pip install pypiwin32"
|
||||
|
||||
Essential modules
|
||||
cheetah-2.0.1+ http://www.cheetahtemplate.org/ (or use "pypm install cheetah")
|
||||
cheetah-2.0.1+ use "pip install cheetah"
|
||||
par2cmdline >= 0.4 http://parchive.sourceforge.net/
|
||||
http://chuchusoft.com/par2_tbb/index.html (multi-core)
|
||||
unrar >= 5.00+ http://www.rarlab.com/rar_add.htm
|
||||
|
||||
Optional modules
|
||||
unrar >= 5.00+ http://www.rarlab.com/rar_add.htm
|
||||
unzip >= 5.52 http://www.info-zip.org/
|
||||
7zip >= 9.20 http://www.7zip.org/
|
||||
yenc module >= 0.3 http://sabnzbd.sourceforge.net/yenc-0.3.tar.gz
|
||||
http://sabnzbd.sourceforge.net/yenc-0.3-w32fixed.zip (Win32-only)
|
||||
|
||||
Optional modules Windows
|
||||
pyopenssl >= 0.15 http://pypi.python.org/pypi/pyOpenSSL
|
||||
pyopenssl >= 0.13 "pip install pyopenssl"
|
||||
or http://www.egenix.com/products/python/pyOpenSSL/
|
||||
(Binaries, including the OpenSSL libraries)
|
||||
|
||||
Optional modules Unix/Linux/OSX
|
||||
|
||||
@@ -24,13 +24,13 @@
|
||||
For these the server blocking method is not very favourable.
|
||||
There is an INI-only option that will limit blocks to 1 minute.
|
||||
no_penalties = 1
|
||||
See: http://wiki.sabnzbd.org/configure-special-0-8
|
||||
See: http://wiki.sabnzbd.org/configure-special-1-0
|
||||
|
||||
- Some third-party utilties try to probe SABnzbd API in such a way that you will
|
||||
often see warnings about unauthenticated access.
|
||||
If you are sure these probes are harmless, you can suppress the warnings by
|
||||
setting the option "api_warnings" to 0.
|
||||
See: http://wiki.sabnzbd.org/configure-special-0-8
|
||||
See: http://wiki.sabnzbd.org/configure-special-1-0
|
||||
|
||||
- On OSX you may encounter downloaded files with foreign characters.
|
||||
The par2 repair may fail when the files were created on a Windows system.
|
||||
@@ -41,7 +41,7 @@
|
||||
You will see this only when downloaded files contain accented characters.
|
||||
You need to fix it yourself by running the convmv utility (available for most Linux platforms).
|
||||
Possible the file system override setting 'fsys_type' might be solve things:
|
||||
See: http://wiki.sabnzbd.org/configure-special-0-8
|
||||
See: http://wiki.sabnzbd.org/configure-special-1-0
|
||||
|
||||
- The "Watched Folder" sometimes fails to delete the NZB files it has
|
||||
processed. This happens when other software still accesses these files.
|
||||
@@ -81,4 +81,4 @@
|
||||
- Squeeze Linux
|
||||
There is a "special" option that will allow you to select an alternative library.
|
||||
use_pickle = 1
|
||||
See: http://wiki.sabnzbd.org/configure-special-0-8
|
||||
See: http://wiki.sabnzbd.org/configure-special-1-0
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
(c) Copyright 2007-2015 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
(c) Copyright 2007-2016 by "The SABnzbd-team" <team@sabnzbd.org>
|
||||
|
||||
This program is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU General Public License
|
||||
|
||||
4
PKG-INFO
@@ -1,7 +1,7 @@
|
||||
Metadata-Version: 1.0
|
||||
Name: SABnzbd
|
||||
Version: 0.8.0Beta2
|
||||
Summary: SABnzbd-0.8.0Beta2
|
||||
Version: 1.0.3
|
||||
Summary: SABnzbd-1.0.3
|
||||
Home-page: http://sabnzbd.org
|
||||
Author: The SABnzbd Team
|
||||
Author-email: team@sabnzbd.org
|
||||
|
||||
@@ -24,13 +24,11 @@ SABnzbd has a good deal of dependencies you'll need before you can get running.
|
||||
|
||||
- `python` (We support Python 2.6 and 2.7)
|
||||
- `python-cheetah`
|
||||
- `python-configobj`
|
||||
- `python-feedparser`
|
||||
- `python-dbus`
|
||||
- `python-openssl`
|
||||
- `python-support`
|
||||
- `python-yenc`
|
||||
- `par2` (Multi-threaded par2 can be downloaded from [ChuChuSoft](http://chuchusoft.com/par2_tbb/download.html) )
|
||||
- `par2` (Multi-threaded par2 installation guide can be found [here](https://forums.sabnzbd.org/viewtopic.php?f=16&t=18793#p99702) )
|
||||
- `unrar` (Make sure you get the "official" non-free version of unrar)
|
||||
- `unzip`
|
||||
- `7zip`
|
||||
|
||||
92
README.mkd
@@ -1,55 +1,60 @@
|
||||
Release Notes - SABnzbd 0.8.0Beta2
|
||||
====================================
|
||||
Release Notes - SABnzbd 1.0.3
|
||||
===============================
|
||||
|
||||
## Changes in Beta2
|
||||
- Improvements in IPv6 handling
|
||||
- Extension of SSL protocols (where supported)
|
||||
- Many improvemnts in the Glitter skin
|
||||
- On Windows, Season Sort often failed
|
||||
- Speedlimiting can now be absolute or in percentage
|
||||
- Scheduler action to remove completed history items
|
||||
## Bugfixes in 1.0.3
|
||||
- Fix jobs hanging at 99% or 100%
|
||||
- Support X-DNZB-PASSWORD header for inders that use this
|
||||
- Prevent fatal "too many connections" issue
|
||||
- Show checksum errors reported by unrar
|
||||
- Windows: fix coupling of NZB files to SABnzbd, when the name contains non-US-ASCII characters
|
||||
|
||||
## Changes in Beta1
|
||||
- Glitter is now the default skin
|
||||
- Glitter fixes and improvements
|
||||
- Removed Classic and Mobile skins
|
||||
- Removed Config parts of smpl and Plush skins
|
||||
- API-call "history" now accepts one or more "category" parameters in order to filter.
|
||||
- API-call "addurl" now returns a list of nzo_id's, which will be valid for the actual jobs.
|
||||
- Update unrar to release 5.21
|
||||
- Enable renaming of Usenet servers.
|
||||
- Add Pushbullet support.
|
||||
- Implement Pushover support.
|
||||
- Restore Rating function
|
||||
- Newsserver IPv6 load balancing aka Happy Eyeballs / RFC 6555
|
||||
- Lots of bug fixes
|
||||
|
||||
## Changes in Alpha3
|
||||
- New skin: Glitter
|
||||
- Assign servers to categories
|
||||
- When upgrading from 0.7.x, a backup server will get priority 1
|
||||
- Lots of bug fixes
|
||||
|
||||
## Changes in Alpha2
|
||||
- Server priorities instead of primary/backup ==> REVIEW YOUR SERVER SETTINGS!
|
||||
- Work-arounds to avoid bugs in PyOpenSSL 0.14
|
||||
- Support RAR's REV files to some extent
|
||||
- Diagnostic dashboard tab for "Status" page
|
||||
## Bugfixes in 1.0.2
|
||||
- Fix hangups at 100% when QuickCheck is off and "all-pars" is on
|
||||
- Fix handling of "too many connections" for some Usenet servers
|
||||
|
||||
|
||||
## What's new in 0.8.0
|
||||
## What's new in 1.0.1
|
||||
- Prevent creating orphan items in "incomplete" when deleting downloading jobs.
|
||||
- Forced item with missing articles caused overflow into paused jobs
|
||||
- Do QuickCheck even on files that would be removed by the Cleanup-list (problematic for RAR files).
|
||||
- Fix "Download all par2 files" behavior
|
||||
- Treat ambiguous numeric values as number of minutes for custom pause time.
|
||||
- Accept MIME records that have only LF line endings (error in some third-party utilities)
|
||||
- Fix PushOver support.
|
||||
- Fix breaking Glitter bug with large script_log
|
||||
- Fix issues with deleting jobs via the API
|
||||
- Fix issue where Sonarr could not read using the History-API
|
||||
- Increase default cache to 450M
|
||||
- The pre-queue script can now return an accept value of 2, meaning immediate failure. (Useful for Sonarr.)
|
||||
- Add start script for portable Windows installations
|
||||
|
||||
## What's new in 1.0.0
|
||||
- Full Unicode support with Chinese and Russian translations
|
||||
- Improved Notifications (including Prowl)
|
||||
- New default UI: Glitter
|
||||
- Server priorities instead of primary/backup ==> REVIEW YOUR SERVER SETTINGS!
|
||||
- Newsserver IPv6 load balancing aka Happy Eyeballs / RFC 6555
|
||||
- Duplicate detection for series
|
||||
- Bonjour/ZeroConfig support
|
||||
- More filters in RSS
|
||||
- 7zip support
|
||||
- Option to save repair time by downloading all par2 files
|
||||
- Support for long paths in Windows (above 260)
|
||||
- Improved security for external access
|
||||
- Lots of small improvements and bug fixes
|
||||
- The "Classic" skin is gone
|
||||
- Redesign of notifications classes
|
||||
- More notification services supported
|
||||
- Diagnostic dashboard tab for "Status" page
|
||||
- Bonjour/ZeroConfig support
|
||||
|
||||
## Remarks
|
||||
- SABnzbd's webserver now doesn't listen to IPv6 addresses by default.
|
||||
- Use Config->Special->ipv6_hosting if you want this enabled.
|
||||
- "localhost" will be replaced with "127.0.0.1", check any browser bookmark and third-party tool
|
||||
- Classic skin has been removed
|
||||
- Support extra parameters for par2 on other platforms than Windows
|
||||
- Option to verify HTTPS connections (default off)
|
||||
- Auto-negotiates best Usenet ssl protocol (override possible)
|
||||
- When upgrading from 0.7.x, a backup server will get priority 1
|
||||
|
||||
|
||||
## About
|
||||
SABnzbd is an open-source cross-platform binary newsreader.
|
||||
@@ -58,11 +63,11 @@ Release Notes - SABnzbd 0.8.0Beta2
|
||||
built-in post-processing options that automatically verify, repair,
|
||||
extract and clean up posts downloaded from Usenet.
|
||||
|
||||
(c) Copyright 2007-2015 by "The SABnzbd-team" \<team@sabnzbd.org\>
|
||||
(c) Copyright 2007-2016 by "The SABnzbd-team" \<team@sabnzbd.org\>
|
||||
|
||||
|
||||
### IMPORTANT INFORMATION about release 0.8.0
|
||||
<http://wiki.sabnzbd.org/introducing-0-8-0>
|
||||
### IMPORTANT INFORMATION about release 1.0.0
|
||||
<http://wiki.sabnzbd.org/introducing-1-0-0>
|
||||
|
||||
### Known problems and solutions
|
||||
- Read the file "ISSUES.txt"
|
||||
@@ -74,8 +79,7 @@ Release Notes - SABnzbd 0.8.0Beta2
|
||||
- Start SABnzbd
|
||||
|
||||
The organization of the download queue is different from older versions.
|
||||
0.8.x will not see the existing queue, but you can go to
|
||||
1.0.x will not see the existing queue, but you can go to
|
||||
Status->QueueRepair and "Repair" the old queue.
|
||||
Also, your sabnzbd.ini file will be upgraded, making it
|
||||
incompatible with releases older than 0.7.9
|
||||
|
||||
|
||||
72
SABnzbd.py
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/python -OO
|
||||
# Copyright 2008-2015 The SABnzbd-Team <team@sabnzbd.org>
|
||||
# Copyright 2008-2016 The SABnzbd-Team <team@sabnzbd.org>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
@@ -278,14 +278,14 @@ def print_help():
|
||||
print " --log-all Log all article handling (for developers)"
|
||||
print " --console Force console logging for OSX app"
|
||||
print " --new Run a new instance of SABnzbd"
|
||||
print " --no_ipv6 Do not listen on IPv6 address [::1]"
|
||||
print " --ipv6_hosting <0|1> Listen on IPv6 address [::1]"
|
||||
|
||||
|
||||
def print_version():
|
||||
print """
|
||||
%s-%s
|
||||
|
||||
Copyright (C) 2008-2015, The SABnzbd-Team <team@sabnzbd.org>
|
||||
Copyright (C) 2008-2016, The SABnzbd-Team <team@sabnzbd.org>
|
||||
SABnzbd comes with ABSOLUTELY NO WARRANTY.
|
||||
This is free software, and you are welcome to redistribute it
|
||||
under certain conditions. It is licensed under the
|
||||
@@ -496,7 +496,8 @@ def print_modules():
|
||||
logging.info("par2-classic binary... found (%s)", sabnzbd.newsunpack.PAR2C_COMMAND)
|
||||
|
||||
if sabnzbd.newsunpack.RAR_COMMAND:
|
||||
logging.info("unrar binary... found (%s)", sabnzbd.newsunpack.RAR_COMMAND)
|
||||
logging.info("UNRAR binary... found (%s)", sabnzbd.newsunpack.RAR_COMMAND)
|
||||
|
||||
else:
|
||||
logging.warning(T('unrar binary... NOT found'))
|
||||
|
||||
@@ -525,7 +526,7 @@ def print_modules():
|
||||
if sabnzbd.newswrapper.HAVE_SSL:
|
||||
logging.info("pyOpenSSL... found (%s)", sabnzbd.newswrapper.HAVE_SSL)
|
||||
else:
|
||||
logging.info("pyOpenSSL... NOT found! - Try apt-get install python-pyopenssl (SSL is optional)")
|
||||
logging.info("pyOpenSSL... NOT found! - Try apt-get install python-openssl (SSL is optional)")
|
||||
|
||||
|
||||
def all_localhosts():
|
||||
@@ -698,7 +699,7 @@ def get_webhost(cherryhost, cherryport, https_port):
|
||||
|
||||
def attach_server(host, port, cert=None, key=None, chain=None):
|
||||
""" Define and attach server, optionally HTTPS """
|
||||
if not (sabnzbd.cfg.no_ipv6() and '::1' in host):
|
||||
if sabnzbd.cfg.ipv6_hosting() or '::1' not in host:
|
||||
http_server = _cpwsgi_server.CPWSGIServer()
|
||||
http_server.bind_addr = (host, port)
|
||||
if cert and key:
|
||||
@@ -713,7 +714,10 @@ def is_sabnzbd_running(url, timeout=None):
|
||||
""" Return True when there's already a SABnzbd instance running. """
|
||||
try:
|
||||
url = '%s&mode=version' % (url)
|
||||
# Do this without certificate verification, few installations will have that
|
||||
prev = sabnzbd.set_https_verification(False)
|
||||
ver = sabnzbd.newsunpack.get_from_url(url, timeout=timeout)
|
||||
sabnzbd.set_https_verification(prev)
|
||||
return bool(ver and re.search(r'\d+\.\d+\.', ver))
|
||||
except:
|
||||
return False
|
||||
@@ -742,8 +746,10 @@ def check_for_sabnzbd(url, upload_nzbs, allow_browser=True):
|
||||
# Upload any specified nzb files to the running instance
|
||||
if upload_nzbs:
|
||||
from sabnzbd.utils.upload import upload_file
|
||||
prev = sabnzbd.set_https_verification(0)
|
||||
for f in upload_nzbs:
|
||||
upload_file(url, f)
|
||||
sabnzbd.set_https_verification(prev)
|
||||
else:
|
||||
# Launch the web browser and quit since sabnzbd is already running
|
||||
# Trim away everything after the final slash in the URL
|
||||
@@ -760,6 +766,8 @@ def evaluate_inipath(path):
|
||||
but not a leading dot.
|
||||
foldername is enough, the standard name will be appended.
|
||||
"""
|
||||
if sabnzbd.WIN32:
|
||||
path = unicoder(path)
|
||||
path = os.path.normpath(os.path.abspath(path))
|
||||
inipath = os.path.join(path, DEF_INI_FILE)
|
||||
if os.path.isdir(path):
|
||||
@@ -824,7 +832,7 @@ def commandline_handler(frozen=True):
|
||||
try:
|
||||
opts, args = getopt.getopt(info, "phdvncw:l:s:f:t:b:2:",
|
||||
['pause', 'help', 'daemon', 'nobrowser', 'clean', 'logging=',
|
||||
'weblogging=', 'server=', 'templates', 'no_ipv6',
|
||||
'weblogging=', 'server=', 'templates', 'ipv6_hosting=',
|
||||
'template2', 'browser=', 'config-file=', 'force',
|
||||
'version', 'https=', 'autorestarted', 'repair', 'repair-all',
|
||||
'log-all', 'no-login', 'pid=', 'new', 'sessions', 'console', 'pidfile=',
|
||||
@@ -902,7 +910,7 @@ def main():
|
||||
new_instance = False
|
||||
force_sessions = False
|
||||
osx_console = False
|
||||
no_ipv6 = False
|
||||
ipv6_hosting = None
|
||||
|
||||
_service, sab_opts, _serv_opts, upload_nzbs = commandline_handler()
|
||||
|
||||
@@ -993,9 +1001,9 @@ def main():
|
||||
elif opt in ('--console',):
|
||||
re_argv.append(opt)
|
||||
osx_console = True
|
||||
elif opt in ('--no_ipv6',):
|
||||
no_ipv6 = True
|
||||
|
||||
elif opt in ('--ipv6_hosting',):
|
||||
ipv6_hosting = arg
|
||||
|
||||
sabnzbd.MY_FULLNAME = os.path.normpath(os.path.abspath(sabnzbd.MY_FULLNAME))
|
||||
sabnzbd.MY_NAME = os.path.basename(sabnzbd.MY_FULLNAME)
|
||||
sabnzbd.DIR_PROG = os.path.dirname(sabnzbd.MY_FULLNAME)
|
||||
@@ -1072,8 +1080,8 @@ def main():
|
||||
# Set root folders for HTTPS server file paths
|
||||
sabnzbd.cfg.set_root_folders2()
|
||||
|
||||
if no_ipv6:
|
||||
sabnzbd.cfg.no_ipv6.set(True)
|
||||
if ipv6_hosting is not None:
|
||||
sabnzbd.cfg.ipv6_hosting.set(ipv6_hosting)
|
||||
|
||||
# Determine web host address
|
||||
cherryhost, cherryport, browserhost, https_port = get_webhost(cherryhost, cherryport, https_port)
|
||||
@@ -1095,9 +1103,6 @@ def main():
|
||||
except:
|
||||
Bail_Out(browserhost, cherryport, '49')
|
||||
|
||||
# Find external programs
|
||||
sabnzbd.newsunpack.find_programs(sabnzbd.DIR_PROG)
|
||||
|
||||
# Windows instance is reachable through registry
|
||||
url = None
|
||||
if sabnzbd.WIN32 and not new_instance:
|
||||
@@ -1237,6 +1242,7 @@ def main():
|
||||
|
||||
logging.info('--------------------------------')
|
||||
logging.info('%s-%s (rev=%s)', sabnzbd.MY_NAME, sabnzbd.__version__, sabnzbd.__baseline__)
|
||||
logging.info('Full executable path = %s', sabnzbd.MY_FULLNAME)
|
||||
if sabnzbd.WIN32:
|
||||
suffix = ''
|
||||
if vista_plus:
|
||||
@@ -1251,9 +1257,14 @@ def main():
|
||||
logging.info('Platform = %s', os.name)
|
||||
logging.info('Python-version = %s', sys.version)
|
||||
logging.info('Arguments = %s', sabnzbd.CMDLINE)
|
||||
try:
|
||||
logging.info('Preferred encoding = %s', locale.getpreferredencoding())
|
||||
except:
|
||||
logging.info('Preferred encoding = ERROR')
|
||||
|
||||
|
||||
if sabnzbd.cfg.log_level() > 1:
|
||||
from sabnzbd.utils.getipaddress import localipv4, publicipv4, ipv6
|
||||
from sabnzbd.getipaddress import localipv4, publicipv4, ipv6
|
||||
|
||||
mylocalipv4 = localipv4()
|
||||
if mylocalipv4:
|
||||
@@ -1283,7 +1294,7 @@ def main():
|
||||
cpumodel = getcpu() # Linux only
|
||||
if cpumodel:
|
||||
logging.debug('CPU model name is %s', cpumodel)
|
||||
|
||||
|
||||
# OSX 10.5 I/O priority setting
|
||||
if sabnzbd.DARWIN:
|
||||
logging.info('[osx] IO priority setting')
|
||||
@@ -1352,10 +1363,14 @@ def main():
|
||||
except:
|
||||
logging.info("pygtk2 not found. No SysTray.")
|
||||
|
||||
# Find external programs
|
||||
sabnzbd.newsunpack.find_programs(sabnzbd.DIR_PROG)
|
||||
|
||||
print_modules()
|
||||
|
||||
import sabnzbd.utils.sslinfo
|
||||
logging.info("SSL version %s", sabnzbd.utils.sslinfo.ssl_version())
|
||||
logging.info("pyOpenSSL version %s", sabnzbd.utils.sslinfo.pyopenssl_version())
|
||||
logging.info("SSL potentially supported protocols %s", str(sabnzbd.utils.sslinfo.ssl_potential()))
|
||||
logging.info("SSL actually supported protocols %s", str(sabnzbd.utils.sslinfo.ssl_protocols()))
|
||||
|
||||
@@ -1465,9 +1480,10 @@ def main():
|
||||
'error_page.404': sabnzbd.panic.error_page_404
|
||||
})
|
||||
|
||||
static = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dir, 'static')}
|
||||
staticcfg = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dirc, 'staticcfg')}
|
||||
wizard_static = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(wizard_dir, 'static')}
|
||||
forced_mime_types = {'css': 'text/css', 'js': 'application/javascript'}
|
||||
static = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dir, 'static'), 'tools.staticdir.content_types': forced_mime_types}
|
||||
staticcfg = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dirc, 'staticcfg'), 'tools.staticdir.content_types': forced_mime_types}
|
||||
wizard_static = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(wizard_dir, 'static'), 'tools.staticdir.content_types': forced_mime_types}
|
||||
|
||||
appconfig = {'/sabnzbd/api': {'tools.basic_auth.on': False},
|
||||
'/api': {'tools.basic_auth.on': False},
|
||||
@@ -1486,7 +1502,7 @@ def main():
|
||||
}
|
||||
|
||||
if web_dir2:
|
||||
static2 = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dir2, 'static')}
|
||||
static2 = {'tools.staticdir.on': True, 'tools.staticdir.dir': os.path.join(web_dir2, 'static'), 'tools.staticdir.content_types': forced_mime_types}
|
||||
appconfig['/sabnzbd/m/api'] = {'tools.basic_auth.on': False}
|
||||
appconfig['/sabnzbd/m/rss'] = {'tools.basic_auth.on': False}
|
||||
appconfig['/sabnzbd/m/shutdown'] = {'streamResponse': True}
|
||||
@@ -1668,16 +1684,20 @@ def main():
|
||||
sys.argv = re_argv
|
||||
os.chdir(org_dir)
|
||||
if sabnzbd.DARWIN:
|
||||
args = sys.argv[:]
|
||||
args.insert(0, sys.executable)
|
||||
# TODO: when executing from sources on osx, after a restart, process is detached from console
|
||||
# If OSX frozen restart of app instead of embedded python
|
||||
if getattr(sys, 'frozen', None) == 'macosx_app':
|
||||
# [[NSProcessInfo processInfo] processIdentifier]]
|
||||
# logging.info("%s" % (NSProcessInfo.processInfo().processIdentifier()))
|
||||
logging.info(os.getpid())
|
||||
os.system('kill -9 %s && open "%s"' % (os.getpid(), sabnzbd.MY_FULLNAME.replace("/Contents/MacOS/SABnzbd", "")))
|
||||
my_pid = os.getpid()
|
||||
my_name = sabnzbd.MY_FULLNAME.replace('/Contents/MacOS/SABnzbd', '')
|
||||
my_args = ' '.join(sys.argv[1:])
|
||||
cmd = 'kill -9 %s && open "%s" --args %s' % (my_pid, my_name, my_args)
|
||||
logging.info('Launching: ', cmd)
|
||||
os.system(cmd)
|
||||
else:
|
||||
args = sys.argv[:]
|
||||
args.insert(0, sys.executable)
|
||||
pid = os.fork()
|
||||
if pid == 0:
|
||||
os.execv(sys.executable, args)
|
||||
|
||||
@@ -608,10 +608,10 @@ class Part(Entity):
|
||||
# No more data--illegal end of headers
|
||||
raise EOFError("Illegal end of headers.")
|
||||
|
||||
if line == ntob('\r\n'):
|
||||
if line == ntob('\r\n') or line == ntob('\n'):
|
||||
# Normal end of headers
|
||||
break
|
||||
if not line.endswith(ntob('\r\n')):
|
||||
if not line.endswith(ntob('\n')):
|
||||
raise ValueError("MIME requires CRLF terminators: %r" % line)
|
||||
|
||||
if line[0] in ntob(' \t'):
|
||||
|
||||
@@ -146,6 +146,24 @@ class HeaderElement(object):
|
||||
# Split the element into a value and parameters. The 'value' may
|
||||
# be of the form, "token=token", but we don't split that here.
|
||||
atoms = [x.strip() for x in elementstr.split(";") if x.strip()]
|
||||
|
||||
# Clumsy fix for lack of proper handling of constructions like:
|
||||
# form-data; name="name"; filename="one;word.nzb"
|
||||
# A proper parser should be used, but this patch will at least allow
|
||||
# having semicolons in a file name.
|
||||
if 'filename' in elementstr:
|
||||
xatoms = []
|
||||
append_next = False
|
||||
for atom in atoms:
|
||||
if append_next:
|
||||
append_next = False
|
||||
atom = xatoms.pop(-1) + ';' + atom
|
||||
if '"' in atom and not atom.endswith('"'):
|
||||
append_next = True
|
||||
xatoms.append(atom)
|
||||
atoms = xatoms
|
||||
# End of patch
|
||||
|
||||
if not atoms:
|
||||
initial_value = ''
|
||||
else:
|
||||
|
||||
@@ -442,7 +442,13 @@ class Bus(object):
|
||||
def log(self, msg="", level=20, traceback=False):
|
||||
"""Log the given message. Append the last traceback if requested."""
|
||||
if traceback:
|
||||
msg += "\n" + "".join(_traceback.format_exception(*sys.exc_info()))
|
||||
# Work-around for bug in Python's traceback implementation
|
||||
# which crashes when the error message contains %1, %2 etc.
|
||||
errors = sys.exc_info()
|
||||
if '%' in errors[1].message:
|
||||
errors[1].message = errors[1].message.replace('%', '#')
|
||||
errors[1].args = [item.replace('%', '#') for item in errors[1].args]
|
||||
msg += "\n" + "".join(_traceback.format_exception(*errors))
|
||||
self.publish('log', msg, level)
|
||||
|
||||
bus = Bus()
|
||||
|
||||
@@ -694,20 +694,21 @@ class HTTPRequest(object):
|
||||
if path and QUESTION_MARK in path:
|
||||
path, qs = path.split(QUESTION_MARK, 1)
|
||||
|
||||
# Unquote the path+params (e.g. "/this%20path" -> "/this path").
|
||||
# http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.2
|
||||
#
|
||||
# But note that "...a URI must be separated into its components
|
||||
# before the escaped characters within those components can be
|
||||
# safely decoded." http://www.ietf.org/rfc/rfc2396.txt, sec 2.4.2
|
||||
# Therefore, "/this%2Fpath" becomes "/this%2Fpath", not "/this/path".
|
||||
try:
|
||||
atoms = [unquote(x) for x in quoted_slash.split(path)]
|
||||
except ValueError:
|
||||
ex = sys.exc_info()[1]
|
||||
self.simple_response("400 Bad Request", ex.args[0])
|
||||
return False
|
||||
path = "%2F".join(atoms)
|
||||
if path is not None:
|
||||
# Unquote the path+params (e.g. "/this%20path" -> "/this path").
|
||||
# http://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5.1.2
|
||||
#
|
||||
# But note that "...a URI must be separated into its components
|
||||
# before the escaped characters within those components can be
|
||||
# safely decoded." http://www.ietf.org/rfc/rfc2396.txt, sec 2.4.2
|
||||
# Therefore, "/this%2Fpath" becomes "/this%2Fpath", not "/this/path".
|
||||
try:
|
||||
atoms = [unquote(x) for x in quoted_slash.split(path)]
|
||||
except ValueError:
|
||||
ex = sys.exc_info()[1]
|
||||
self.simple_response("400 Bad Request", ex.args[0])
|
||||
return False
|
||||
path = "%2F".join(atoms)
|
||||
self.path = path
|
||||
|
||||
# Note that, like wsgiref and most other HTTP servers,
|
||||
|
||||
@@ -2,6 +2,7 @@
|
||||
uniConfig for SABnzbd 0.7.x
|
||||
zoggy@sabnzbd.org
|
||||
|
||||
Changed by Safihre for 0.8.x
|
||||
|
||||
========================================================
|
||||
LIBRARIES USED
|
||||
@@ -12,43 +13,14 @@ jQuery
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
jQuery UI
|
||||
* Project repository: https://github.com/jquery/jquery-ui
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
jQuery Form Plugin
|
||||
* Project repository: https://github.com/malsup/form
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
jQuery Tools (tabs)
|
||||
* Project repository: https://github.com/jquerytools/jquerytools
|
||||
|
||||
Formalize
|
||||
* Project repository: https://github.com/nathansmith/formalize
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
normalize.css
|
||||
* Project repository: https://github.com/necolas/normalize.css
|
||||
* Licensed under public domain
|
||||
|
||||
qTip2
|
||||
* Project repository: https://github.com/craga89/qtip2
|
||||
* Dual licensed under the MIT and GPL licenses:
|
||||
* http://www.gnu.org/licenses/gpl.html
|
||||
* http://www.opensource.org/licenses/mit-license.php
|
||||
|
||||
|
||||
========================================================
|
||||
IMAGES USED
|
||||
|
||||
/images/loading-*.gif
|
||||
- source: http://www.AjaxLoad.info
|
||||
|
||||
/images/flags/*
|
||||
- source: http://www.famfamfam.com/lab/icons/flags/
|
||||
Bootstrap v3.3.6 (http://getbootstrap.com)
|
||||
* Licensed under the MIT license
|
||||
Changed by Safihre, Nov 2015
|
||||
We include the icon-file directly into the CSS,
|
||||
this way we avoid errors when HTTPS is enabled
|
||||
|
||||
@@ -1,5 +1,30 @@
|
||||
<!-- Content end -->
|
||||
<div class="clearfix"></div>
|
||||
<!-- Content end -->
|
||||
<div class="clearfix"></div>
|
||||
|
||||
<!-- Filebrowser modal -->
|
||||
<div class="modal fade" id="filebrowser_modal">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">×</span></button>
|
||||
<h4 class="modal-title"></h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<!--#if not $nt#-->
|
||||
<div class="checkbox">
|
||||
<label>
|
||||
<input type="checkbox" id="show_hidden_folders"> <span>$T('systemFolders')</span>
|
||||
</label>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<button type="button" class="btn btn-danger" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span> $T('cancel')</button>
|
||||
<button type="button" class="btn btn-default" id="filebrowser_modal_accept"><span class="glyphicon glyphicon-ok"></span> $T('rss-accept')</button>
|
||||
</div>
|
||||
</div><!-- /.modal-content -->
|
||||
</div><!-- /.modal-dialog -->
|
||||
</div><!-- /.modal -->
|
||||
</div>
|
||||
<div class="main-restarting modal-backdrop fade in" style="display: none;">
|
||||
<div>
|
||||
@@ -7,38 +32,5 @@
|
||||
<small><span class="restarting-url"></span><span class="dotOne">.</span><span class="dotTwo">.</span><span class="dotThree">.</span></small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
// Fix for touch devices needing double click on the menu
|
||||
\$('.navbar-nav li a').on('touchstart', function(e) {
|
||||
\$(this).click()
|
||||
})
|
||||
|
||||
/*
|
||||
* Notifies the user if he tries to leave without saving
|
||||
* Has to be in footer, otherwise the filebrowser over-writes the change-event
|
||||
*/
|
||||
\$(document).ready(function () {
|
||||
\$(document).on('change', 'form input[type!="submit"][type!="button"], form select, form textarea', function (e) {
|
||||
formHasChanged = true;
|
||||
formWasSubmitted = false;
|
||||
});
|
||||
window.onbeforeunload = function (e) {
|
||||
if (formHasChanged && !formWasSubmitted) {
|
||||
var message = "$T('confirmWithoutSavingPrompt')", e = e || window.event;
|
||||
if (e) {
|
||||
e.returnValue = message;
|
||||
}
|
||||
return message;
|
||||
}
|
||||
}
|
||||
// Form Submit
|
||||
\$(document).on("submit", "form", function(event){
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,3 +1,8 @@
|
||||
#if $pane == "Config"#
|
||||
#set global $root = '../'#
|
||||
#else#
|
||||
#set global $root = '../../'#
|
||||
#end if#
|
||||
<!DOCTYPE HTML>
|
||||
<html lang="$active_lang">
|
||||
<head>
|
||||
@@ -15,206 +20,69 @@
|
||||
#if $pane == "Special" then $T('cmenu-special') else ""#
|
||||
#if $pane == "RSS" then $T('cmenu-rss') else ""#
|
||||
</title>
|
||||
#if $pane == "Config"#
|
||||
#set global $root = '../'#
|
||||
#else#
|
||||
#set global $root = '../../'#
|
||||
#end if#
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="apple-mobile-web-app-title" content="SABnzbd" />
|
||||
|
||||
<script src="${root}staticcfg/js/jquery-1.11.2.min.js"></script>
|
||||
<script type="text/javascript" src="${root}staticcfg/bootstrap/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript">
|
||||
$.noConflict()
|
||||
var browseText = "$T('browse-folder')";
|
||||
</script>
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="${root}staticcfg/ico/apple-touch-icon-76x76-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="${root}staticcfg/ico/apple-touch-icon-120x120-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="${root}staticcfg/ico/apple-touch-icon-152x152-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="${root}staticcfg/ico/apple-touch-icon-180x180-precomposed.png" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/bootstrap/css/bootstrap.min.css" />
|
||||
<link rel="stylesheet" type="text/css" href="${root}staticcfg/css/style.css?p=$pid" />
|
||||
<link rel="shortcut icon" href="${root}staticcfg/ico/favicon.ico" />
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="${root}staticcfg/ico/apple-touch-icon-57x57.png" />
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="${root}staticcfg/ico/apple-touch-icon-60x60.png" />
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="${root}staticcfg/ico/apple-touch-icon-72x72.png" />
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="${root}staticcfg/ico/apple-touch-icon-76x76.png" />
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="${root}staticcfg/ico/apple-touch-icon-114x114.png" />
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="${root}staticcfg/ico/apple-touch-icon-120x120.png" />
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="${root}staticcfg/ico/apple-touch-icon-144x144.png" />
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="${root}staticcfg/ico/apple-touch-icon-152x152.png" />
|
||||
|
||||
<script src="${root}staticcfg/js/script.js"></script>
|
||||
<script type="text/javascript">
|
||||
// Keeping track
|
||||
// Keeping track of the form state
|
||||
var formHasChanged = false;
|
||||
var formWasSubmitted = false;
|
||||
|
||||
\$.Browser = {
|
||||
defaults: {
|
||||
title: 'Choose Directory',
|
||||
url: '${root}tapi?mode=browse&output=json&apikey=$session',
|
||||
autocompleteURL: '${root}tapi?mode=browse&output=json&compact=1&apikey=$session'
|
||||
}
|
||||
};
|
||||
|
||||
function config_success() {
|
||||
\$('.saveButton').each(function () {
|
||||
\$(this).removeAttr("disabled").html('<span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')');
|
||||
});
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
}
|
||||
function config_failure() {
|
||||
\$('.saveButton').each(function () {
|
||||
\$(this).removeAttr("disabled").html('<span class="glyphicon glyphicon-remove"></span> $T('smpl-failed')');
|
||||
});
|
||||
// Can't go yet..
|
||||
formWasSubmitted = false;
|
||||
}
|
||||
function do_restart() {
|
||||
// Show overlay
|
||||
\$('.main-restarting').show()
|
||||
|
||||
// What template
|
||||
var arrPath = window.location.pathname.split('/');
|
||||
var urlPath = (arrPath[1] == "m" || arrPath[2] == "m") ? '/sabnzbd/m/' : '/sabnzbd/';
|
||||
|
||||
// Are we on settings page?
|
||||
if(!\$('body').hasClass('General')) {
|
||||
// Same as before, with fall-back in case location.origin is not supported (<IE9)
|
||||
var urlTotal = window.location.origin ? (window.location.origin + urlPath) : window.location;
|
||||
} else {
|
||||
// Protocol and port depend on http(s) setting
|
||||
if(\$('#enable_https').is(':checked') && window.location.protocol == 'https:') {
|
||||
// Https on and we visited this page from HTTPS
|
||||
var urlProtocol = 'https:'
|
||||
var urlPort = \$('#https_port').val();
|
||||
} else {
|
||||
// Regular
|
||||
var urlProtocol = 'http:';
|
||||
var urlPort = \$('#port').val();
|
||||
}
|
||||
|
||||
// We cannot make a good guess for the IP, so at least we assume that stays the same
|
||||
var urlTotal = urlProtocol + '//' + window.location.hostname + ':' + urlPort + urlPath;
|
||||
}
|
||||
|
||||
// Show where we are going to connect
|
||||
\$('.main-restarting .restarting-url').text(urlTotal)
|
||||
|
||||
// Initiate restart
|
||||
\$.ajax({ url: '${root}config/restart?session=$session',
|
||||
complete: function() {
|
||||
// Keep counter of failures
|
||||
var failureCounter = 0;
|
||||
|
||||
// Now we try untill we can connect
|
||||
var refreshInterval = setInterval(function() {
|
||||
$.ajax({ url: urlTotal,
|
||||
success: function() {
|
||||
// Back to base
|
||||
location.href = urlTotal;
|
||||
},
|
||||
error: function(status, text) {
|
||||
failureCounter = failureCounter+1;
|
||||
// Too many failuers and we give up
|
||||
if(failureCounter >= 7) {
|
||||
// If the port has changed 'Access-Control-Allow-Origin' header will not allow
|
||||
// us to check if the server is back up. So after 7 failures we redirect
|
||||
// anyway in the hopes it works anyway..
|
||||
location.href = urlTotal;
|
||||
}
|
||||
}
|
||||
})
|
||||
}, 5000)
|
||||
|
||||
// Exception if we go from HTTPS to HTTP
|
||||
// (this is not allowed by browsers and all of the above will be ignored)
|
||||
if(window.location.protocol != urlProtocol) {
|
||||
// Saftey redirect after 40 sec
|
||||
setTimeout(function() {
|
||||
location.href = urlTotal;
|
||||
}, 40*1000)
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
\$(document).ready(function () {
|
||||
#if $pane != "Servers"#
|
||||
\$('.col2 H3').click(function () { \$(this).parent().next().toggle() });
|
||||
#end if#
|
||||
|
||||
\$('.sabnzbd_restart').click(function () {
|
||||
\$('.sabnzbd_restart').each(function () {
|
||||
\$(this).attr("disabled", "disabled");
|
||||
});
|
||||
var msg = "$T('explain-Restart')";
|
||||
if (confirm(msg.replace(/\<br(\s*\/|)\>/g, '\n'))) {
|
||||
\$(this).attr("value", "$T('wizard-restarting')");
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
do_restart();
|
||||
}
|
||||
\$('.sabnzbd_restart').each(function () {
|
||||
\$(this).removeAttr("disabled");
|
||||
});
|
||||
return false;
|
||||
});
|
||||
|
||||
\$('.fullform').ajaxForm({
|
||||
datatype: 'json',
|
||||
beforeSubmit: function () {
|
||||
\$('.saveButton').each(function () {
|
||||
\$(this).attr("disabled", "disabled").attr("value", "$T('smpl-saving')");
|
||||
\$(this).attr("disabled", "disabled").html('<span class="glyphicon glyphicon-transfer"></span> $T('smpl-saving')');
|
||||
});
|
||||
},
|
||||
success: function (json) {
|
||||
if (json.error) {
|
||||
\$('#config_err_msg').text(json.error);
|
||||
setTimeout(config_failure, 1000);
|
||||
} else if(json.value && json.value.restart_req) {
|
||||
// Trigger restart question
|
||||
if(confirm("$T('restartRequired')\n$T('button-restart') SABnzbd?")) {
|
||||
// No more questions
|
||||
do_restart();
|
||||
} else {
|
||||
\$('#config_err_msg').text(" ");
|
||||
setTimeout(config_success, 1000);
|
||||
}
|
||||
} else {
|
||||
\$('#config_err_msg').text(" ");
|
||||
setTimeout(config_success, 1000);
|
||||
}
|
||||
},
|
||||
error: function () {
|
||||
setTimeout(config_failure, 1000);
|
||||
},
|
||||
timeout: 3000
|
||||
});
|
||||
});
|
||||
|
||||
/*
|
||||
* Takes the inputs-elements found in the current selector
|
||||
* and extracts the values into the provided data-object.
|
||||
*/
|
||||
\$.fn.extractFormDataTo = function(target) {
|
||||
var inputs = \$("input[type != 'submit'][type != 'button']", this);
|
||||
// Information we need
|
||||
var sabSession = '$session';
|
||||
var folderBrowseUrl = '${root}tapi?mode=browse&output=json&apikey=$session';
|
||||
var folderSeperator = '#if $os.sep == '\\' then '\\\\' else '/'#'
|
||||
|
||||
// could use .serializeArray() but that omits unchecked items
|
||||
inputs.each(function (i,elem) {
|
||||
target[elem.name] = elem.value;
|
||||
});
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
// Translations
|
||||
var configTranslate = new Object();
|
||||
configTranslate.browseText = "$T('browse-folder')";
|
||||
configTranslate.saveChanges = "$T('button-saveChanges')";
|
||||
configTranslate.saving = "$T('smpl-saving')";
|
||||
configTranslate.failed = "$T('smpl-failed')";
|
||||
configTranslate.explainRestart = "$T('explain-Restart')";
|
||||
configTranslate.wizzardRestart = "$T('wizard-restarting')";
|
||||
configTranslate.needRestart = "$T('restartRequired')";
|
||||
configTranslate.buttonRestart = "$T('button-restart')";
|
||||
configTranslate.confirmLeave = "$T('confirmWithoutSavingPrompt')";
|
||||
</script>
|
||||
<script type="text/javascript" src="${root}staticcfg/js/jquery-1.11.2.min.js"></script>
|
||||
<script type="text/javascript" src="${root}staticcfg/bootstrap/js/bootstrap.min.js"></script>
|
||||
<script type="text/javascript" src="${root}staticcfg/js/script.js?p=$pid"></script>
|
||||
<script type="text/javascript">
|
||||
// Set default functions for the autocomplete everywhere
|
||||
\$.extend(\$.fn.typeahead.defaults, {
|
||||
source: function (query, process) {
|
||||
// If there's no seperator, it must be a relative path
|
||||
if(query.split(folderSeperator).length < 2 && this.\$element.data('initialdir')) {
|
||||
query = this.\$element.data('initialdir') + folderSeperator + query;
|
||||
}
|
||||
// Get info from the API
|
||||
return \$.get(folderBrowseUrl + '&compact=1&term=' + query, function (data) {
|
||||
return process(data);
|
||||
});
|
||||
},
|
||||
updater: function(item) {
|
||||
// Is it a relative path?
|
||||
if(item.indexOf(this.\$element.data('initialdir')) === 0) {
|
||||
// Remove start
|
||||
return item.replace(this.\$element.data('initialdir')+folderSeperator, '');
|
||||
}
|
||||
// Full path
|
||||
return item
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--[if lt IE 9]>
|
||||
<script src="${root}staticcfg/js/html5shiv.min.js"></script>
|
||||
<script src="${root}staticcfg/js/respond.min.js"></script>
|
||||
<![endif]-->
|
||||
</head>
|
||||
|
||||
<body class="$pane">
|
||||
@@ -227,15 +95,15 @@
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<!--#if $active_lang in ('pl', 'es', 'ru', 'sr') #-->
|
||||
<a class="navbar-brand navbar-brand-small" href="${root}"><img src="${root}staticcfg/images/logo-small.png" width="47" height="45" id="logo" alt="[home]" /></a>
|
||||
<!--#if $active_lang in ('pl', 'es', 'ru', 'sr', 'fi') #-->
|
||||
<a class="navbar-brand navbar-brand-small" href="${root}" title="$T('Home')"><img src="${root}staticcfg/images/logo-small.png" width="47" height="45" id="logo" alt="$T('Home')" /></a>
|
||||
<a class="navbar-brand navbar-brand-mobile" href="${root}" title="$T('Home')"><img src="${root}staticcfg/images/logo.png" width="120" height="45" id="logo" alt="$T('Home')" /></a>
|
||||
<!--#else#-->
|
||||
<a class="navbar-brand" href="${root}"><img src="${root}staticcfg/images/logo.png" width="120" height="45" id="logo" alt="[home]" /></a>
|
||||
<a class="navbar-brand" href="${root}" title="$T('Home')"><img src="${root}staticcfg/images/logo.png" width="120" height="45" id="logo" alt="$T('Home')" /></a>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<div id="navbar" class="navbar-collapse collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<!--<li><a href="${root}config/" #if $pane == "Config" then 'class="active"' else ""#>$T('menu-config')</a></li>-->
|
||||
<li>
|
||||
<a href="${root}config/general/" #if $pane == "General" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-cog"></span>
|
||||
@@ -248,36 +116,24 @@
|
||||
<strong>$T('cmenu-folders')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/switches/" #if $pane == "Switches" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
<strong>$T('cmenu-switches')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/server/" #if $pane == "Servers" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-sort"></span>
|
||||
<strong>$T('cmenu-servers')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/scheduling/" #if $pane == "Scheduling" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-time"></span>
|
||||
<strong>$T('cmenu-scheduling')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/notify/" #if $pane == "Email" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-comment"></span>
|
||||
<strong>$T('cmenu-notif')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/categories/" #if $pane == "Categories" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-tag"></span>
|
||||
<strong>$T('cmenu-cat')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/switches/" #if $pane == "Switches" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
<strong>$T('cmenu-switches')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/sorting/" #if $pane == "Sorting" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-sort-by-alphabet"></span>
|
||||
@@ -285,17 +141,34 @@
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/special/" #if $pane == "Special" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-education"></span>
|
||||
<strong>$T('cmenu-special')</strong>
|
||||
<a href="${root}config/notify/" #if $pane == "Email" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-comment"></span>
|
||||
<strong>$T('cmenu-notif')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/scheduling/" #if $pane == "Scheduling" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-time"></span>
|
||||
<strong>$T('cmenu-scheduling')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/rss/" #if $pane == "RSS" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-cloud-download"></span>
|
||||
<svg class="rss-icon-svg" viewBox="0 0 8 8">
|
||||
<rect class="rss-button" width="8" height="8" />
|
||||
<circle class="rss-symbol" cx="2" cy="6" r="1" />
|
||||
<path class="rss-symbol" d="m 1,4 a 3,3 0 0 1 3,3 h 1 a 4,4 0 0 0 -4,-4 z" />
|
||||
<path class="rss-symbol" d="m 1,2 a 5,5 0 0 1 5,5 h 1 a 6,6 0 0 0 -6,-6 z" />
|
||||
</svg>
|
||||
<strong>$T('cmenu-rss')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="${root}config/special/" #if $pane == "Special" then 'class="active"' else ""#>
|
||||
<span class="glyphicon glyphicon-education"></span>
|
||||
<strong>$T('cmenu-special')</strong>
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="$helpuri$help_uri" target="_blank">
|
||||
<span class="glyphicon glyphicon-question-sign"></span>
|
||||
|
||||
@@ -1,29 +1,117 @@
|
||||
<!--#set global $pane="Config"#-->
|
||||
<!--#set global $help_uri="configure-0-7"#-->
|
||||
<!--#set global $help_uri="configure-1-0"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
<div class="section padTable">
|
||||
<table id="infoTable">
|
||||
<tbody>
|
||||
<tr class="alt"><td class="infoTableHeader">$T('version'): </td><td class="infoTableCell">$version [$build]</td></tr>
|
||||
<tr><td class="infoTableHeader">$T('uptime'): </td><td class="infoTableCell">$uptime</td></tr>
|
||||
<tr class="alt"><td class="infoTableHeader">$T('confgFile'): </td><td class="infoTableCell">$configfn</td></tr>
|
||||
<tr><td class="infoTableHeader">$T('cache').capitalize(): </td><td class="infoTableCell"><!--#set $msg=$T('ft-buffer@2')%($cache_art, $cache_size)#-->$msg</td></tr>
|
||||
<tr class="alt"><td class="infoTableHeader">$T('parameters'): </td><td class="infoTableCell">$cmdline</td></tr>
|
||||
<tr><td class="infoTableHeader">$T('pythonVersion'): </td><td class="infoTableCell">$sys.version[:120]</td></tr>
|
||||
<tr class="infoTableSeperator alt"><td class="infoTableHeader">$T('homePage') </td><td class="infoTableCell"><a href="http://sabnzbd.org/" target="_blank">http://sabnzbd.org/</a></td></tr>
|
||||
<tr><td class="infoTableHeader">$T('menu-wiki') </td><td class="infoTableCell"><a href="http://wiki.sabnzbd.org/faq" target="_blank">http://wiki.sabnzbd.org/faq</a></td></tr>
|
||||
<tr class="alt"><td class="infoTableHeader">$T('menu-forums') </td><td class="infoTableCell"><a href="http://forums.sabnzbd.org/" target="_blank">http://forums.sabnzbd.org/</a></td></tr>
|
||||
<tr><td class="infoTableHeader">$T('source') </td><td class="infoTableCell"><a href="https://github.com/sabnzbd/sabnzbd" target="_blank">https://github.com/sabnzbd/sabnzbd</a></td></tr>
|
||||
<tr class="alt"><td class="infoTableHeader">$T('menu-irc') </td><td class="infoTableCell"><a href="irc://irc.synirc.net/#sabnzbd"><i>#sabnzbd</i> on <i>irc.synirc.net</i></a> $T('or') (<a href="http://sabnzbd.org/live-chat/" target="_blank">webchat</a>)</td></tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="padding alt">
|
||||
<h5 class="copyright">Copyright © 2008-2015 The SABnzbd Team <<a href="mailto:team@sabnzbd.org">team@sabnzbd.org</a>></h5>
|
||||
<p class="copyright"><small>$T('yourRights')</small></p>
|
||||
<!--#from sabnzbd.newswrapper import HAVE_SSL#-->
|
||||
<!--#import sabnzbd.utils.sslinfo#-->
|
||||
<!--#from sabnzbd.decoder import HAVE_YENC#-->
|
||||
<!--#from sabnzbd.newsunpack import PAR2_COMMAND, PAR2C_COMMAND, RAR_COMMAND, ZIP_COMMAND, SEVEN_COMMAND, NICE_COMMAND, IONICE_COMMAND#-->
|
||||
|
||||
<div class="colmask">
|
||||
<div class="section padTable">
|
||||
<table class="table table-striped">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">$T('version'): </th>
|
||||
<td>$version [$build]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('uptime'): </th>
|
||||
<td>$uptime</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('confgFile'): </th>
|
||||
<td>$configfn</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('cache').capitalize(): </th>
|
||||
<td><!--#set $msg=$T('ft-buffer@2')%($cache_art, $cache_size)#-->$msg</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('parameters'): </th>
|
||||
<td>$cmdline</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('pythonVersion'): </th>
|
||||
<td>$sys.version[:120]</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">OpenSSL:</th>
|
||||
<td>
|
||||
<!--#if HAVE_SSL#-->
|
||||
<!--#set $sslversions = ', '.join(sabnzbd.utils.sslinfo.ssl_protocols())#-->
|
||||
$sabnzbd.utils.sslinfo.ssl_version() <em>[$sslversions]</em>
|
||||
<!--#else#-->
|
||||
<span class="label label-warning">$T('notAvailable')</span>
|
||||
<a href="$helpuri$help_uri#no_ssl" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">pyOpenSSL:</th>
|
||||
<td>
|
||||
<!--#if HAVE_SSL#-->
|
||||
$sabnzbd.utils.sslinfo.pyopenssl_version()
|
||||
<!--#else#-->
|
||||
<span class="label label-warning">$T('notAvailable')</span>
|
||||
<a href="$helpuri$help_uri#no_ssl" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">yEnc:</th>
|
||||
<td>
|
||||
<!--#if HAVE_YENC#-->
|
||||
<span class="glyphicon glyphicon-ok"></span>
|
||||
<!--#else#-->
|
||||
<span class="label label-warning">$T('notAvailable')</span>
|
||||
<a href="$helpuri$help_uri#no_yenc" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
<div class="colmask">
|
||||
<div class="section padTable">
|
||||
<table class="table table-striped">
|
||||
<tbody>
|
||||
<tr>
|
||||
<th scope="row">$T('homePage') </th>
|
||||
<td><a href="http://sabnzbd.org/" target="_blank">http://sabnzbd.org/</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('menu-wiki') </th>
|
||||
<td><a href="http://wiki.sabnzbd.org/faq" target="_blank">http://wiki.sabnzbd.org/faq</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('menu-forums') </th>
|
||||
<td><a href="http://forums.sabnzbd.org/" target="_blank">http://forums.sabnzbd.org/</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('source') </th>
|
||||
<td><a href="https://github.com/sabnzbd/sabnzbd" target="_blank">https://github.com/sabnzbd/sabnzbd</a></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('menu-irc') </th>
|
||||
<td><a href="irc://irc.synirc.net/#sabnzbd"><i>#sabnzbd</i> on <i>irc.synirc.net</i></a> $T('or') (<a href="http://sabnzbd.org/live-chat/" target="_blank">webchat</a>)</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<th scope="row">$T('menu-issues') </th>
|
||||
<td><a href="http://wiki.sabnzbd.org/issues-1-0-0" target="_blank">http://wiki.sabnzbd.org/issues-1-0-0</a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="colmask">
|
||||
<div class="padding alt">
|
||||
<h5 class="copyright">Copyright © 2008-2016 The SABnzbd Team <<a href="mailto:team@sabnzbd.org">team@sabnzbd.org</a>></h5>
|
||||
<p class="copyright"><small>$T('yourRights')</small></p>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--#include $webdir + "/_inc_footer_uc.tmpl"#-->
|
||||
|
||||
@@ -1,115 +1,109 @@
|
||||
<!--#set global $pane="Categories"#-->
|
||||
<!--#set global $help_uri="configure-categories-0-7"#-->
|
||||
<!--#set global $help_uri="configure-categories-1-0"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
|
||||
<div class="section">
|
||||
<div class="padTable">
|
||||
<p>
|
||||
$T('explain-catTags') $T('explain-catTags2')<br/>
|
||||
</p>
|
||||
<div class="field-pair">
|
||||
<h5 class="darkred nomargin">$T('explain-relFolder'): <span class="path">$defdir</span></h5>
|
||||
</div>
|
||||
|
||||
<!--#set $odd = False#-->
|
||||
<!--#set $cur = 0#-->
|
||||
<!--#for $slot in $slotinfo#-->
|
||||
<!--#set $odd = not $odd#-->
|
||||
<!--#set $cur = $cur+1#-->
|
||||
|
||||
<form action="save" method="get">
|
||||
|
||||
<table class="catTable">
|
||||
|
||||
<!--#if $cur == 1#-->
|
||||
<tr>
|
||||
<th>$T('category')</th>
|
||||
<th>$T('priority')</th>
|
||||
<th>$T('mode')</th>
|
||||
<!--#if $script_list#--><th>$T('script')</th><!--#end if#-->
|
||||
<th>$T('catFolderPath')</th>
|
||||
<th>$T('catTags')</th>
|
||||
<th> </th>
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
|
||||
<tr class="<!--#if $odd then "alt" else ""#-->" <!--#if $slot.name == '*'#-->style="background-color: #FFFFE0;"<!--#end if#-->>
|
||||
|
||||
<td>
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" value="$slot.name" name="name" />
|
||||
<!--#if $slot.name != '*'#-->
|
||||
<input type="text" name="newname" value="$slot.name" size="10" />
|
||||
<!--#else#-->
|
||||
<input type="text" name="newname" value="$T('default')" disabled="disabled" size="10" />
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<select name="priority">
|
||||
<!--#if $slot.name != '*'#-->
|
||||
<option value="-100" <!--#if $slot.priority == -100 then 'selected="selected"' else ""#-->>$T('default')</option>
|
||||
<!--#end if#-->
|
||||
<option value="2" <!--#if $slot.priority == 2 then 'selected="selected"' else ""#-->>$T('pr-force')</option>
|
||||
<option value="1" <!--#if $slot.priority == 1 then 'selected="selected"' else ""#-->>$T('pr-high')</option>
|
||||
<option value="0" <!--#if $slot.priority == 0 then 'selected="selected"' else ""#-->>$T('pr-normal')</option>
|
||||
<option value="-1" <!--#if $slot.priority == -1 then 'selected="selected"' else ""#-->>$T('pr-low')</option>
|
||||
<option value="-2" <!--#if $slot.priority == -2 then 'selected="selected"' else ""#-->>$T('pr-paused')</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<td>
|
||||
<select name="pp">
|
||||
<!--#if $slot.name != '*'#-->
|
||||
<option value="" <!--#if $slot.pp == "" then 'selected="selected"' else ""#-->>$T('default')</option>
|
||||
<!--#end if#-->
|
||||
<option value="0" <!--#if $slot.pp == "0" then 'selected="selected"' else ""#-->>$T('pp-none')</option>
|
||||
<option value="1" <!--#if $slot.pp == "1" then 'selected="selected"' else ""#-->>$T('pp-repair')</option>
|
||||
<option value="2" <!--#if $slot.pp == "2" then 'selected="selected"' else ""#-->>$T('pp-unpack')</option>
|
||||
<option value="3" <!--#if $slot.pp == "3" then 'selected="selected"' else ""#-->>$T('pp-delete')</option>
|
||||
</select>
|
||||
</td>
|
||||
|
||||
<!--#if $script_list#-->
|
||||
<td>
|
||||
<select name="script">
|
||||
<!--#for $sc in $script_list#-->
|
||||
<!--#if not ($sc == 'Default' and $slot.name == '*')#-->
|
||||
<option value="$sc" <!--#if $slot.script.lower() == $sc.lower() then 'selected="selected"' else ""#-->>$Tspec($sc)</option>
|
||||
<!--#end if#-->
|
||||
<div class="padTable"> <a class="main-helplink" href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<p> $T('explain-catTags') $T('explain-catTags2')<br/> </p>
|
||||
<h5 class="darkred"><strong>$T('explain-relFolder'):</strong> <span class="path">$defdir</span></h5>
|
||||
|
||||
<!--#set $odd = False#-->
|
||||
<!--#set $cur = 0#-->
|
||||
<!--#for $slot in $slotinfo#-->
|
||||
<!--#set $odd = not $odd#-->
|
||||
<!--#set $cur = $cur+1#-->
|
||||
<form action="save" method="get">
|
||||
<table class="catTable">
|
||||
<!--#if $cur == 1#-->
|
||||
<tr>
|
||||
<th>$T('category')</th>
|
||||
<th>$T('priority')</th>
|
||||
<th>$T('mode')</th>
|
||||
<!--#if $script_list#-->
|
||||
<th>$T('script')</th>
|
||||
<!--#end if#-->
|
||||
<th>$T('catFolderPath')</th>
|
||||
<th>$T('catTags')</th>
|
||||
<th> </th>
|
||||
</tr>
|
||||
<!--#end if#-->
|
||||
<tr class="<!--#if $odd then " alt " else " "#-->" <!--#if $slot.name=='*' #-->style="background-color: #FFFFE0;"<!--#end if#-->>
|
||||
<td>
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" value="$slot.name" name="name" />
|
||||
<!--#if $slot.name != '*'#-->
|
||||
<input type="text" name="newname" value="$slot.name" size="10" />
|
||||
<!--#else#-->
|
||||
<input type="text" name="newname" value="$T('default')" disabled="disabled" size="10" />
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
<td>
|
||||
<select name="priority">
|
||||
<!--#if $slot.name != '*'#-->
|
||||
<option value="-100" <!--#if $slot.priority==- 100 then 'selected="selected"' else ""#-->>$T('default')</option>
|
||||
<!--#end if#-->
|
||||
<option value="2" <!--#if $slot.priority==2 then 'selected="selected"' else ""#-->>$T('pr-force')</option>
|
||||
<option value="1" <!--#if $slot.priority==1 then 'selected="selected"' else ""#-->>$T('pr-high')</option>
|
||||
<option value="0" <!--#if $slot.priority==0 then 'selected="selected"' else ""#-->>$T('pr-normal')</option>
|
||||
<option value="-1" <!--#if $slot.priority==- 1 then 'selected="selected"' else ""#-->>$T('pr-low')</option>
|
||||
<option value="-2" <!--#if $slot.priority==- 2 then 'selected="selected"' else ""#-->>$T('pr-paused')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<select name="pp">
|
||||
<!--#if $slot.name != '*'#-->
|
||||
<option value="" <!--#if $slot.pp=="" then 'selected="selected"' else ""#-->>$T('default')</option>
|
||||
<!--#end if#-->
|
||||
<option value="0" <!--#if $slot.pp=="0" then 'selected="selected"' else ""#-->>$T('pp-none')</option>
|
||||
<option value="1" <!--#if $slot.pp=="1" then 'selected="selected"' else ""#-->>$T('pp-repair')</option>
|
||||
<option value="2" <!--#if $slot.pp=="2" then 'selected="selected"' else ""#-->>$T('pp-unpack')</option>
|
||||
<option value="3" <!--#if $slot.pp=="3" then 'selected="selected"' else ""#-->>$T('pp-delete')</option>
|
||||
</select>
|
||||
</td>
|
||||
<!--#if $script_list#-->
|
||||
<td>
|
||||
<select name="script">
|
||||
<!--#for $sc in $script_list#-->
|
||||
<!--#if not ($sc == 'Default' and $slot.name == '*')#-->
|
||||
<option value="$sc" <!--#if $slot.script.lower()==$sc.lower() then 'selected="selected"' else ""#-->>$Tspec($sc)</option>
|
||||
<!--#end if#-->
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td class="nowrap">
|
||||
<input type="text" name="dir" class="fileBrowserSmall" value="$slot.dir" size="20" data-initialdir="$defdir" data-title="$T('catFolderPath')" />
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="newzbin" value="$slot.newzbin" size="20" />
|
||||
</td>
|
||||
<td class="nowrap">
|
||||
<button class="btn btn-default">
|
||||
<!--#if $cur == 2#--><span class="glyphicon glyphicon-plus"></span> $T('button-add')
|
||||
<!--#else#--><span class="glyphicon glyphicon-ok"></span> $T('button-save')
|
||||
<!--#end if#-->
|
||||
</button>
|
||||
<!--#if $slot.name and $slot.name != '*'#-->
|
||||
<button class="btn btn-default delCat" type="button"><span class="glyphicon glyphicon-trash"></span></button>
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
|
||||
<td><input type="text" name="dir" value="$slot.dir" size="20" /></td>
|
||||
<td><input type="text" name="newzbin" value="$slot.newzbin" size="20" /></td>
|
||||
|
||||
<td class="nowrap">
|
||||
<button class="btn btn-default"><!--#if $cur == 2#--><span class="glyphicon glyphicon-plus"></span> $T('button-add')<!--#else#--><span class="glyphicon glyphicon-ok"></span> $T('button-save')<!--#end if#--></button>
|
||||
<!--#if $slot.name and $slot.name != '*'#-->
|
||||
<button class="btn btn-default delCat" type="button"><span class="glyphicon glyphicon-trash"></span></button>
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
<!--#end for#-->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
\$(document).ready(function(){
|
||||
\$('.delCat').click(function(){
|
||||
var theForm = \$(this).closest("form");
|
||||
theForm.attr("action", "delete").submit();
|
||||
\$(document).ready(function() {
|
||||
\$('.delCat').click(function() {
|
||||
var theForm = \$(this).closest("form");
|
||||
theForm.attr("action", "delete").submit();
|
||||
});
|
||||
|
||||
// Add autocomplete and file-browser
|
||||
\$('.fileBrowserSmall').typeahead().fileBrowser();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#include $webdir + "/_inc_footer_uc.tmpl"#-->
|
||||
<!--#include $webdir + "/_inc_footer_uc.tmpl"#-->
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Folders"#-->
|
||||
<!--#set global $help_uri="configure-folders-0-7"#-->
|
||||
<!--#set global $help_uri="configure-folders-1-0"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
@@ -8,7 +8,7 @@
|
||||
<input type="hidden" id="ajax" name="ajax" value="1" />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('userFolders')</h3>
|
||||
<h3>$T('userFolders') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p>$T('explain-folderConfig')</p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
@@ -16,9 +16,9 @@
|
||||
<div class="field-pair">
|
||||
<h5 class="darkred nomargin">$T('base-folder'): <span class="path">$my_home</span></h5>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="download_dir">$T('opt-download_dir')</label>
|
||||
<input type="text" name="download_dir" id="download_dir" value="$download_dir" />
|
||||
<input type="text" name="download_dir" id="download_dir" value="$download_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-download_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -26,21 +26,21 @@
|
||||
<input type="text" name="download_free" id="download_free" value="$download_free" class="smaller_input" />
|
||||
<span class="desc">$T('explain-download_free')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="complete_dir">$T('opt-complete_dir')</label>
|
||||
<input type="text" name="complete_dir" id="complete_dir" value="$complete_dir" />
|
||||
<input type="text" name="complete_dir" id="complete_dir" value="$complete_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-complete_dir')</span>
|
||||
</div>
|
||||
<!--#if not $nt#-->
|
||||
<div class="field-pair">
|
||||
<label class="config" for="permissions">$T('opt-permissions')</label>
|
||||
<input type="text" name="permissions" id="permissions" value="$permissions" class="smaller_input" <!--#if $nt then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<input type="text" name="permissions" id="permissions" value="$permissions" class="smaller_input" />
|
||||
<span class="desc">$T('explain-permissions')</span>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="dirscan_dir">$T('opt-dirscan_dir')</label>
|
||||
<input type="text" name="dirscan_dir" id="dirscan_dir" value="$dirscan_dir" />
|
||||
<input type="text" name="dirscan_dir" id="dirscan_dir" value="$dirscan_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-dirscan_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -48,17 +48,17 @@
|
||||
<input type="number" name="dirscan_speed" id="dirscan_speed" value="$dirscan_speed" min="0" max="3600" />
|
||||
<span class="desc">$T('explain-dirscan_speed')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="script_dir">$T('opt-script_dir')</label>
|
||||
<input type="text" name="script_dir" id="script_dir" value="$script_dir" />
|
||||
<input type="text" name="script_dir" id="script_dir" value="$script_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-script_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="email_dir">$T('opt-email_dir')</label>
|
||||
<input type="text" name="email_dir" id="email_dir" value="$email_dir" />
|
||||
<input type="text" name="email_dir" id="email_dir" value="$email_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-email_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="password_file">$T('opt-password_file')</label>
|
||||
<input type="text" name="password_file" id="password_file" value="$password_file" />
|
||||
<span class="desc">$T('explain-password_file')</span>
|
||||
@@ -74,7 +74,7 @@
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('systemFolders')</h3>
|
||||
<h3>$T('systemFolders') <a href="$helpuri$help_uri#toc1" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p>$T('explain-folderConfig')</p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
@@ -82,20 +82,20 @@
|
||||
<div class="field-pair">
|
||||
<h5 class="darkred nomargin">$T('base-folder'): <span class="path">$my_lcldata</span></h5>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="admin_dir">$T('opt-admin_dir')</label>
|
||||
<input type="text" name="admin_dir" id="admin_dir" value="$admin_dir" />
|
||||
<input type="text" name="admin_dir" id="admin_dir" value="$admin_dir" data-initialdir="$my_lcldata" />
|
||||
<span class="desc">$T('explain-admin_dir1')</span>
|
||||
<span class="desc">$T('explain-admin_dir2')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="log_dir">$T('opt-log_dir')</label>
|
||||
<input type="text" name="log_dir" id="log_dir" value="$log_dir" />
|
||||
<input type="text" name="log_dir" id="log_dir" value="$log_dir" data-initialdir="$my_lcldata" />
|
||||
<span class="desc">$T('explain-log_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="nzb_backup_dir">$T('opt-nzb_backup_dir')</label>
|
||||
<input type="text" name="nzb_backup_dir" id="nzb_backup_dir" value="$nzb_backup_dir" />
|
||||
<input type="text" name="nzb_backup_dir" id="nzb_backup_dir" value="$nzb_backup_dir" data-initialdir="$my_lcldata" />
|
||||
<span class="desc">$T('explain-nzb_backup_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -107,14 +107,10 @@
|
||||
|
||||
</form>
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script>
|
||||
\$(document).ready(function(){
|
||||
\$('#download_dir').fileBrowser({ title: 'Select $T('opt-download_dir')' });
|
||||
\$('#complete_dir').fileBrowser({ title: 'Select $T('opt-complete_dir')' });
|
||||
\$('#dirscan_dir').fileBrowser({ title: 'Select $T('opt-dirscan_dir')' });
|
||||
\$('#script_dir').fileBrowser({ title: 'Select $T('opt-script_dir')' });
|
||||
\$('#email_dir').fileBrowser({ title: 'Select $T('opt-email_dir')' });
|
||||
});
|
||||
<script type="text/javascript">
|
||||
jQuery(document).ready(function() {
|
||||
// Add autocomplete and file-browser
|
||||
\$('.col1 input[name$="_dir"]').typeahead().fileBrowser();
|
||||
})
|
||||
</script>
|
||||
<!--#include $webdir + "/_inc_footer_uc.tmpl"#-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="General"#-->
|
||||
<!--#set global $help_uri="configure-general-0-8"#-->
|
||||
<!--#set global $help_uri="configure-general-1-0"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
@@ -8,12 +8,12 @@
|
||||
<input type="hidden" id="ajax" name="ajax" value=1 />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('webServer')</h3>
|
||||
<h3>$T('webServer') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p><b>$T('restartRequired')</b></p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="host">$T('opt-host')</label>
|
||||
<input type="text" name="host" id="host" value="$host" />
|
||||
<span class="desc">$T('explain-host')</span>
|
||||
@@ -23,7 +23,7 @@
|
||||
<input type="number" name="port" id="port" value="$port" size="8" />
|
||||
<span class="desc">$T('explain-port')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="username">$T('opt-web_username')</label>
|
||||
<input type="text" name="username" id="username" value="$username" />
|
||||
<span class="desc">$T('explain-web_username')</span>
|
||||
@@ -33,7 +33,7 @@
|
||||
<input type="text" name="password" id="password" value="$password" />
|
||||
<span class="desc">$T('explain-web_password')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="web_dir">$T('opt-web_dir')</label>
|
||||
<select name="web_dir" id="web_dir">
|
||||
<!--#for $webline in $web_list#-->
|
||||
@@ -49,6 +49,7 @@
|
||||
<div class="field-pair">
|
||||
<label class="config" for="web_dir2">$T('opt-web_dir2')</label>
|
||||
<select name="web_dir2" id="web_dir2">
|
||||
<option value="None" selected="selected">$T("None")</option>
|
||||
<!--#for $webline in $web_list#-->
|
||||
<!--#if $webline.lower() == $web_dir2.lower()#-->
|
||||
<option value="$webline" selected="selected">$webline</option>
|
||||
@@ -59,7 +60,7 @@
|
||||
</select>
|
||||
<span class="desc">$T('explain-web_dir2') <a href="$caller_url2">$caller_url2</a></span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="language">$T('opt-language')</label>
|
||||
<select name="language" id="language" class="select">
|
||||
<!--#for $webline in $lang_list#-->
|
||||
@@ -77,7 +78,7 @@
|
||||
<input type="text" name="local_ranges" id="local_ranges" value="$local_ranges" />
|
||||
<span class="desc">$T('explain-local_ranges')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="inet_exposure">$T('opt-inet_exposure')</label>
|
||||
<select name="inet_exposure" id="inet_exposure" class="select">
|
||||
<option value="0" <!--#if $inet_exposure == 0 then 'selected="selected"' else ""#-->>$T('inet-local')</option>
|
||||
@@ -93,7 +94,7 @@
|
||||
<input type="checkbox" name="disable_api_key" id="disable_api_key" value="1" <!--#if int($disable_api_key) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-disableApikey')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="apikey">$T('opt-apikey')</label>
|
||||
<input type="text" id="apikey" class="fileBrowserField" value="$session" />
|
||||
<button class="btn btn-default show_qrcode" title="$T('explain-qr-code')" rel="$session" ><span class="glyphicon glyphicon-qrcode"></span></button>
|
||||
@@ -116,7 +117,7 @@
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('httpsSupport')</h3>
|
||||
<h3>$T('httpsSupport') <a href="$helpuri$help_uri#toc1" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p><b>$T('restartRequired')</b></p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
@@ -124,7 +125,7 @@
|
||||
<div class="field-pair">
|
||||
<h5 class="darkred nomargin">$T('base-folder'): <span class="path">$my_lcldata</span></h5>
|
||||
</div>
|
||||
<div class="field-pair alt <!--#if int($have_ssl) == 0 then "disabled" else ""#-->">
|
||||
<div class="field-pair <!--#if int($have_ssl) == 0 then "disabled" else ""#-->">
|
||||
<label class="config" for="enable_https">$T('opt-enable_https')</label>
|
||||
<input type="checkbox" name="enable_https" id="enable_https" value="1" <!--#if int($enable_https) > 0 then 'checked="checked"' else ""#--> <!--#if int($have_ssl) == 0 then "disabled" else ""#--> />
|
||||
<span class="desc">$T('explain-enable_https')</span>
|
||||
@@ -134,7 +135,7 @@
|
||||
<input type="number" name="https_port" id="https_port" value="$https_port" size="8" />
|
||||
<span class="desc">$T('explain-https_port')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="https_cert">$T('opt-https_cert')</label>
|
||||
<input type="text" name="https_cert" id="https_cert" value="$https_cert" />
|
||||
<span class="desc">$T('explain-https_cert')</span>
|
||||
@@ -144,7 +145,7 @@
|
||||
<input type="text" name="https_key" id="https_key" value="$https_key" />
|
||||
<span class="desc">$T('explain-https_key')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="https_chain">$T('opt-https_chain')</label>
|
||||
<input type="text" name="https_chain" id="https_chain" value="$https_chain" />
|
||||
<span class="desc">$T('explain-https_chain')</span>
|
||||
@@ -158,11 +159,11 @@
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('tuning')</h3>
|
||||
<h3>$T('tuning') <a href="$helpuri$help_uri#toc2" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="bandwidth_max">$T('opt-bandwidth_max')</label>
|
||||
<input type="text" name="bandwidth_max" id="bandwidth_max" value="$bandwidth_max" class="smaller_input" />
|
||||
<span class="desc">$T('explain-bandwidth_max')<br />$T('wizard-bandwidth-explain')</span>
|
||||
@@ -172,7 +173,7 @@
|
||||
<input type="number" name="bandwidth_perc" id="bandwidth_perc" value="$bandwidth_perc" step="10" min="0" max="100"/>
|
||||
<span class="desc">$T('explain-bandwidth_perc')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="cache_limit">$T('opt-cache_limitstr')</label>
|
||||
<input type="text" name="cache_limit" id="cache_limit" value="$cache_limit" class="smaller_input" />
|
||||
<span class="desc">$T('explain-cache_limitstr')</span>
|
||||
@@ -186,7 +187,17 @@
|
||||
</form>
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script>
|
||||
<div class="modal fade" id="modal_qr">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-body">
|
||||
<!-- For the QR code -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
\$(document).ready(function(){
|
||||
\$('#apikey, #nzbkey').click(function () { \$(this).select() });
|
||||
\$('#generate_new_apikey').click(function () {
|
||||
@@ -216,37 +227,25 @@
|
||||
}
|
||||
});
|
||||
|
||||
\$('.show_qrcode').each(function () {
|
||||
var qrkey = \$(this).attr('rel'),
|
||||
qrcode = \$('<img />', {
|
||||
src: 'https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=' + qrkey,
|
||||
\$('.show_qrcode').click(function (e) {
|
||||
// Make QR code
|
||||
var qrcode = \$('<img />', {
|
||||
src: 'https://chart.googleapis.com/chart?chs=300x300&cht=qr&chl=' + \$(this).attr('rel'),
|
||||
alt: 'loading...',
|
||||
width: 300,
|
||||
height: 300
|
||||
});
|
||||
\$(this).qtip( {
|
||||
content: {
|
||||
text: qrcode
|
||||
},
|
||||
position: {
|
||||
my: 'center',
|
||||
at: 'center',
|
||||
target: \$(window)
|
||||
},
|
||||
show: {
|
||||
event: 'click',
|
||||
solo: true,
|
||||
modal: true
|
||||
},
|
||||
hide: false,
|
||||
style: 'ui-tooltip-light ui-tooltip-rounded ui-tooltip-shadow ui-tooltip-qrcode'
|
||||
});
|
||||
\$(this).click(function(e) {
|
||||
e.preventDefault();
|
||||
})
|
||||
|
||||
// Show in modal
|
||||
\$('#modal_qr .modal-dialog').width(330)
|
||||
\$('#modal_qr .modal-body').html(qrcode)
|
||||
\$('#modal_qr').modal('show');
|
||||
|
||||
// No save on this button click
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
<!--#include $webdir + "/_inc_footer_uc.tmpl"#-->
|
||||
|
||||
@@ -1,18 +1,18 @@
|
||||
<!--#set global $pane="Email"#-->
|
||||
<!--#set global $help_uri="configure-notifications-0-7"#-->
|
||||
<!--#set global $help_uri="configure-notifications-1-0"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
<form action="saveEmail" method="post" name="fullform" class="fullform" autocomplete="off" novalidate>
|
||||
<input type="hidden" id="session" name="session" value="$session" />
|
||||
<input type="hidden" id="ajax" name="ajax" value=1 />
|
||||
<input type="hidden" id="ajax" name="ajax" value="1" />
|
||||
<div class="section" id="email">
|
||||
<div class="col2">
|
||||
<h3>$T('cmenu-email')</h3>
|
||||
<h3>$T('cmenu-email') <a href="$helpuri$help_uri#toc0" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="email_endjob">$T('opt-email_endjob')</label>
|
||||
<select name="email_endjob" id="email_endjob">
|
||||
<option value="0" <!--#if int($email_endjob) == 0 then 'selected="selected"' else ""#--> >$T('email-never')</option>
|
||||
@@ -25,17 +25,17 @@
|
||||
<input type="checkbox" name="email_full" id="email_full" value="1" <!--#if int($email_full) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-email_full')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="email_rss">$T('opt-email_rss')</label>
|
||||
<input type="checkbox" name="email_rss" id="email_rss" value="1" <!--#if int($email_rss) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-email_rss')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="email_dir">$T('opt-email_dir')</label>
|
||||
<input type="text" name="email_dir" id="email_dir" value="$email_dir" />
|
||||
<input type="text" name="email_dir" id="email_dir" value="$email_dir" data-initialdir="$my_home" />
|
||||
<span class="desc">$T('explain-email_dir')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="email_server">$T('opt-email_server')</label>
|
||||
<input type="text" name="email_server" id="email_server" value="$email_server" />
|
||||
<span class="desc">$T('explain-email_server') ($T('host').lower():$T('srv-port').lower())</span>
|
||||
@@ -45,7 +45,7 @@
|
||||
<input type="text" name="email_to" id="email_to" value="$email_to" />
|
||||
<span class="desc">$T('explain-email_to')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="email_from">$T('opt-email_from')</label>
|
||||
<input type="text" name="email_from" id="email_from" value="$email_from" />
|
||||
<span class="desc">$T('explain-email_from')</span>
|
||||
@@ -55,7 +55,7 @@
|
||||
<input type="text" name="email_account" id="email_account" value="$email_account" />
|
||||
<span class="desc">$T('explain-email_account')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="email_pwd">$T('opt-email_pwd')</label>
|
||||
<input type="text" name="email_pwd" id="email_pwd" value="$email_pwd" />
|
||||
<span class="desc">$T('explain-email_pwd')</span>
|
||||
@@ -69,125 +69,57 @@
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section" id="growl">
|
||||
<div class="col2">
|
||||
<h3>$T('growlSettings')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair" >
|
||||
<label class="config" for="growl_enable">$T('opt-growl_enable')</label>
|
||||
<input type="checkbox" name="growl_enable" id="growl_enable" value="1" <!--#if int($growl_enable) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-growl_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="growl_server">$T('opt-growl_server')</label>
|
||||
<input type="text" name="growl_server" id="growl_server" value="$growl_server" />
|
||||
<span class="desc">$T('explain-growl_server')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="growl_password">$T('opt-growl_password')</label>
|
||||
<input type="text" name="growl_password" id="growl_password" value="$growl_password" />
|
||||
<span class="desc">$T('explain-growl_password')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="growl_prio_startup">$T($notify_texts['startup'])</label>
|
||||
<input type="checkbox" name="growl_prio_startup" id="growl_prio_startup" value="1" <!--#if int($growl_prio_startup) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="growl_prio_download">$T($notify_texts['download'])</label>
|
||||
<input type="checkbox" name="growl_prio_download" id="growl_prio_download" value="1" <!--#if int($growl_prio_download) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="growl_prio_pp">$T($notify_texts['pp'])</label>
|
||||
<input type="checkbox" name="growl_prio_pp" id="growl_prio_pp" value="1" <!--#if int($growl_prio_pp) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="growl_prio_complete">$T($notify_texts['complete'])</label>
|
||||
<input type="checkbox" name="growl_prio_complete" id="growl_prio_complete" value="1" <!--#if int($growl_prio_complete) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="growl_prio_failed">$T($notify_texts['failed'])</label>
|
||||
<input type="checkbox" name="growl_prio_failed" id="growl_prio_failed" value="1" <!--#if int($growl_prio_failed) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="growl_prio_queue_done">$T($notify_texts['queue_done'])</label>
|
||||
<input type="checkbox" name="growl_prio_queue_done" id="growl_prio_queue_done" value="1" <!--#if int($growl_prio_queue_done) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="growl_prio_disk_full">$T($notify_texts['disk_full'])</label>
|
||||
<input type="checkbox" name="growl_prio_disk_full" id="growl_prio_disk_full" value="1" <!--#if int($growl_prio_disk_full) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="growl_prio_warning">$T($notify_texts['warning'])</label>
|
||||
<input type="checkbox" name="growl_prio_warning" id="growl_prio_warning" value="1" <!--#if int($growl_prio_warning) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="growl_prio_error">$T($notify_texts['error'])</label>
|
||||
<input type="checkbox" name="growl_prio_error" id="growl_prio_error" value="1" <!--#if int($growl_prio_error) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="growl_prio_other">$T($notify_texts['other'])</label>
|
||||
<input type="checkbox" name="growl_prio_other" id="growl_prio_other" value="1" <!--#if int($growl_prio_other) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_growl"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
<span id="testgrowl-result" class="icon path darkred"> </span>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<!--#if $have_ncenter#-->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('section-NC')</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="ncenter_enable" id="ncenter_enable" value="1" <!--#if int($ncenter_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="ncenter_enable"> $T('opt-ncenter_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<div class="col1" <!--#if int($ncenter_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ncenter_enable">$T('opt-ncenter_enable')</label>
|
||||
<input type="checkbox" name="ncenter_enable" id="ncenter_enable" value="1" <!--#if int($ncenter_enable) > 0 then 'checked="checked"' else ""#--> <!--#if not $have_ncenter then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-ncenter_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ncenter_prio_startup">$T($notify_texts['startup'])</label>
|
||||
<label class="config wide" for="ncenter_prio_startup">$T($notify_texts['startup']).replace('/', ' / ')</label>
|
||||
<input type="checkbox" name="ncenter_prio_startup" id="ncenter_prio_startup" value="1" <!--#if int($ncenter_prio_startup) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ncenter_prio_download">$T($notify_texts['download'])</label>
|
||||
<label class="config wide" for="ncenter_prio_download">$T($notify_texts['download']) / $T('link-pause') / $T('link-resume')</label>
|
||||
<input type="checkbox" name="ncenter_prio_download" id="ncenter_prio_download" value="1" <!--#if int($ncenter_prio_download) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ncenter_prio_pp">$T($notify_texts['pp'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="ncenter_prio_pp">$T($notify_texts['pp'])</label>
|
||||
<input type="checkbox" name="ncenter_prio_pp" id="ncenter_prio_pp" value="1" <!--#if int($ncenter_prio_pp) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ncenter_prio_complete">$T($notify_texts['complete'])</label>
|
||||
<label class="config wide" for="ncenter_prio_complete">$T($notify_texts['complete'])</label>
|
||||
<input type="checkbox" name="ncenter_prio_complete" id="ncenter_prio_complete" value="1" <!--#if int($ncenter_prio_complete) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ncenter_prio_failed">$T($notify_texts['failed'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="ncenter_prio_failed">$T($notify_texts['failed'])</label>
|
||||
<input type="checkbox" name="ncenter_prio_failed" id="ncenter_prio_failed" value="1" <!--#if int($ncenter_prio_failed) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ncenter_prio_queue_done">$T($notify_texts['queue_done'])</label>
|
||||
<label class="config wide" for="ncenter_prio_queue_done">$T($notify_texts['queue_done'])</label>
|
||||
<input type="checkbox" name="ncenter_prio_queue_done" id="ncenter_prio_queue_done" value="1" <!--#if int($ncenter_prio_queue_done) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ncenter_prio_disk_full">$T($notify_texts['disk_full'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="ncenter_prio_disk_full">$T($notify_texts['disk_full'])</label>
|
||||
<input type="checkbox" name="ncenter_prio_disk_full" id="ncenter_prio_disk_full" value="1" <!--#if int($ncenter_prio_disk_full) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ncenter_prio_warning">$T($notify_texts['warning'])</label>
|
||||
<label class="config wide" for="ncenter_prio_warning">$T($notify_texts['warning'])</label>
|
||||
<input type="checkbox" name="ncenter_prio_warning" id="ncenter_prio_warning" value="1" <!--#if int($ncenter_prio_warning) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ncenter_prio_error">$T($notify_texts['error'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="ncenter_prio_error">$T($notify_texts['error'])</label>
|
||||
<input type="checkbox" name="ncenter_prio_error" id="ncenter_prio_error" value="1" <!--#if int($ncenter_prio_error) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ncenter_prio_other">$T($notify_texts['other'])</label>
|
||||
<label class="config wide" for="ncenter_prio_other">$T($notify_texts['other'])</label>
|
||||
<input type="checkbox" name="ncenter_prio_other" id="ncenter_prio_other" value="1" <!--#if int($ncenter_prio_other) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -199,56 +131,119 @@
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<!--#end if#-->
|
||||
<!--#if $nt#-->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('section-AC')</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="acenter_enable" id="acenter_enable" value="1" <!--#if int($acenter_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="acenter_enable"> $T('opt-acenter_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1" <!--#if int($acenter_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="acenter_prio_startup">$T($notify_texts['startup']).replace('/', ' / ')</label>
|
||||
<input type="checkbox" name="acenter_prio_startup" id="acenter_prio_startup" value="1" <!--#if int($acenter_prio_startup) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="acenter_prio_download">$T($notify_texts['download']) / $T('link-pause') / $T('link-resume')</label>
|
||||
<input type="checkbox" name="acenter_prio_download" id="acenter_prio_download" value="1" <!--#if int($acenter_prio_download) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="acenter_prio_pp">$T($notify_texts['pp'])</label>
|
||||
<input type="checkbox" name="acenter_prio_pp" id="acenter_prio_pp" value="1" <!--#if int($acenter_prio_pp) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="acenter_prio_complete">$T($notify_texts['complete'])</label>
|
||||
<input type="checkbox" name="acenter_prio_complete" id="acenter_prio_complete" value="1" <!--#if int($acenter_prio_complete) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="acenter_prio_failed">$T($notify_texts['failed'])</label>
|
||||
<input type="checkbox" name="acenter_prio_failed" id="acenter_prio_failed" value="1" <!--#if int($acenter_prio_failed) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="acenter_prio_queue_done">$T($notify_texts['queue_done'])</label>
|
||||
<input type="checkbox" name="acenter_prio_queue_done" id="acenter_prio_queue_done" value="1" <!--#if int($acenter_prio_queue_done) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="acenter_prio_disk_full">$T($notify_texts['disk_full'])</label>
|
||||
<input type="checkbox" name="acenter_prio_disk_full" id="acenter_prio_disk_full" value="1" <!--#if int($acenter_prio_disk_full) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="acenter_prio_warning">$T($notify_texts['warning'])</label>
|
||||
<input type="checkbox" name="acenter_prio_warning" id="acenter_prio_warning" value="1" <!--#if int($acenter_prio_warning) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="acenter_prio_error">$T($notify_texts['error'])</label>
|
||||
<input type="checkbox" name="acenter_prio_error" id="acenter_prio_error" value="1" <!--#if int($acenter_prio_error) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="acenter_prio_other">$T($notify_texts['other'])</label>
|
||||
<input type="checkbox" name="acenter_prio_other" id="acenter_prio_other" value="1" <!--#if int($acenter_prio_other) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_windows_notification"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
<span id="testnotice-result" class="icon path darkred"> </span>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<!--#end if#-->
|
||||
<!--#if $have_ntfosd#-->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('section-OSD')</h3>
|
||||
<h3>$T('section-OSD') <a href="$helpuri$help_uri#toc4" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="ntfosd_enable" id="ntfosd_enable" value="1" <!--#if int($ntfosd_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="ntfosd_enable"> $T('opt-ntfosd_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<div class="col1" <!--#if int($ntfosd_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ntfosd_enable">$T('opt-ntfosd_enable')</label>
|
||||
<input type="checkbox" name="ntfosd_enable" id="ntfosd_enable" value="1" <!--#if int($ntfosd_enable) > 0 then 'checked="checked"' else ""#--> <!--#if not $have_ntfosd then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-ntfosd_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ntfosd_prio_startup">$T($notify_texts['startup'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="ntfosd_prio_startup">$T($notify_texts['startup']).replace('/', ' / ')</label>
|
||||
<input type="checkbox" name="ntfosd_prio_startup" id="ntfosd_prio_startup" value="1" <!--#if int($ntfosd_prio_startup) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ntfosd_prio_download">$T($notify_texts['download'])</label>
|
||||
<label class="config wide" for="ntfosd_prio_download">$T($notify_texts['download']) / $T('link-pause') / $T('link-resume')</label>
|
||||
<input type="checkbox" name="ntfosd_prio_download" id="ntfosd_prio_download" value="1" <!--#if int($ntfosd_prio_download) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ntfosd_prio_pp">$T($notify_texts['pp'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="ntfosd_prio_pp">$T($notify_texts['pp'])</label>
|
||||
<input type="checkbox" name="ntfosd_prio_pp" id="ntfosd_prio_pp" value="1" <!--#if int($ntfosd_prio_pp) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ntfosd_prio_complete">$T($notify_texts['complete'])</label>
|
||||
<label class="config wide" for="ntfosd_prio_complete">$T($notify_texts['complete'])</label>
|
||||
<input type="checkbox" name="ntfosd_prio_complete" id="ntfosd_prio_complete" value="1" <!--#if int($ntfosd_prio_complete) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ntfosd_prio_failed">$T($notify_texts['failed'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="ntfosd_prio_failed">$T($notify_texts['failed'])</label>
|
||||
<input type="checkbox" name="ntfosd_prio_failed" id="ntfosd_prio_failed" value="1" <!--#if int($ntfosd_prio_failed) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ntfosd_prio_queue_done">$T($notify_texts['queue_done'])</label>
|
||||
<label class="config wide" for="ntfosd_prio_queue_done">$T($notify_texts['queue_done'])</label>
|
||||
<input type="checkbox" name="ntfosd_prio_queue_done" id="ntfosd_prio_queue_done" value="1" <!--#if int($ntfosd_prio_queue_done) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ntfosd_prio_disk_full">$T($notify_texts['disk_full'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="ntfosd_prio_disk_full">$T($notify_texts['disk_full'])</label>
|
||||
<input type="checkbox" name="ntfosd_prio_disk_full" id="ntfosd_prio_disk_full" value="1" <!--#if int($ntfosd_prio_disk_full) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ntfosd_prio_warning">$T($notify_texts['warning'])</label>
|
||||
<label class="config wide" for="ntfosd_prio_warning">$T($notify_texts['warning'])</label>
|
||||
<input type="checkbox" name="ntfosd_prio_warning" id="ntfosd_prio_warning" value="1" <!--#if int($ntfosd_prio_warning) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ntfosd_prio_error">$T($notify_texts['error'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="ntfosd_prio_error">$T($notify_texts['error'])</label>
|
||||
<input type="checkbox" name="ntfosd_prio_error" id="ntfosd_prio_error" value="1" <!--#if int($ntfosd_prio_error) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ntfosd_prio_other">$T($notify_texts['other'])</label>
|
||||
<label class="config wide" for="ntfosd_prio_other">$T($notify_texts['other'])</label>
|
||||
<input type="checkbox" name="ntfosd_prio_other" id="ntfosd_prio_other" value="1" <!--#if int($ntfosd_prio_other) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -260,24 +255,96 @@
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<!--#end if#-->
|
||||
<div class="section" id="growl">
|
||||
<div class="col2">
|
||||
<h3>$T('growlSettings') <a href="$helpuri$help_uri#toc3" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="growl_enable" id="growl_enable" value="1" <!--#if int($growl_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="growl_enable"> $T('opt-growl_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1" <!--#if int($growl_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="growl_server">$T('opt-growl_server')</label>
|
||||
<input type="text" name="growl_server" id="growl_server" value="$growl_server" />
|
||||
<span class="desc">$T('explain-growl_server')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="growl_password">$T('opt-growl_password')</label>
|
||||
<input type="text" name="growl_password" id="growl_password" value="$growl_password" />
|
||||
<span class="desc">$T('explain-growl_password')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="growl_prio_startup">$T($notify_texts['startup']).replace('/', ' / ')</label>
|
||||
<input type="checkbox" name="growl_prio_startup" id="growl_prio_startup" value="1" <!--#if int($growl_prio_startup) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="growl_prio_download">$T($notify_texts['download']) / $T('link-pause') / $T('link-resume')</label>
|
||||
<input type="checkbox" name="growl_prio_download" id="growl_prio_download" value="1" <!--#if int($growl_prio_download) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="growl_prio_pp">$T($notify_texts['pp'])</label>
|
||||
<input type="checkbox" name="growl_prio_pp" id="growl_prio_pp" value="1" <!--#if int($growl_prio_pp) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="growl_prio_complete">$T($notify_texts['complete'])</label>
|
||||
<input type="checkbox" name="growl_prio_complete" id="growl_prio_complete" value="1" <!--#if int($growl_prio_complete) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="growl_prio_failed">$T($notify_texts['failed'])</label>
|
||||
<input type="checkbox" name="growl_prio_failed" id="growl_prio_failed" value="1" <!--#if int($growl_prio_failed) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="growl_prio_queue_done">$T($notify_texts['queue_done'])</label>
|
||||
<input type="checkbox" name="growl_prio_queue_done" id="growl_prio_queue_done" value="1" <!--#if int($growl_prio_queue_done) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="growl_prio_disk_full">$T($notify_texts['disk_full'])</label>
|
||||
<input type="checkbox" name="growl_prio_disk_full" id="growl_prio_disk_full" value="1" <!--#if int($growl_prio_disk_full) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="growl_prio_warning">$T($notify_texts['warning'])</label>
|
||||
<input type="checkbox" name="growl_prio_warning" id="growl_prio_warning" value="1" <!--#if int($growl_prio_warning) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="growl_prio_error">$T($notify_texts['error'])</label>
|
||||
<input type="checkbox" name="growl_prio_error" id="growl_prio_error" value="1" <!--#if int($growl_prio_error) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="growl_prio_other">$T($notify_texts['other'])</label>
|
||||
<input type="checkbox" name="growl_prio_other" id="growl_prio_other" value="1" <!--#if int($growl_prio_other) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default" type="button" id="test_growl"><span class="glyphicon glyphicon-comment"></span> $T('testNotify')</button>
|
||||
<span id="testgrowl-result" class="icon path darkred"> </span>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section" id="prowl">
|
||||
<div class="col2">
|
||||
<h3>$T('section-Prowl')</h3>
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="prowl_enable" id="prowl_enable" value="1" <!--#if int($prowl_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="prowl_enable"> $T('opt-prowl_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<em>$T('explain-prowl_enable')</em>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<div class="col1" <!--#if int($prowl_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair alt" >
|
||||
<label class="config" for="prowl_enable">$T('opt-prowl_enable')</label>
|
||||
<input type="checkbox" name="prowl_enable" id="prowl_enable" value="1" <!--#if int($prowl_enable) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-prowl_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="prowl_apikey">$T('opt-prowl_apikey')</label>
|
||||
<input type="text" name="prowl_apikey" id="prowl_apikey" value="$prowl_apikey" />
|
||||
<span class="desc">$T('explain-prowl_apikey')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="prowl_prio_startup">$T($notify_texts['startup'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="prowl_prio_startup">$T($notify_texts['startup']).replace('/', ' / ')</label>
|
||||
<select name="prowl_prio_startup" id="prowl_prio_startup">
|
||||
<option value="-3" <!--#if $prowl_prio_startup == -3 then 'selected="selected"' else ""#--> >$T('prowl-off')</option>
|
||||
<option value="-2" <!--#if $prowl_prio_startup == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
@@ -288,7 +355,7 @@
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="prowl_prio_download">$T($notify_texts['download'])</label>
|
||||
<label class="config" for="prowl_prio_download">$T($notify_texts['download']) / $T('link-pause') / $T('link-resume')</label>
|
||||
<select name="prowl_prio_download" id="prowl_prio_download">
|
||||
<option value="-3" <!--#if $prowl_prio_download == -3 then 'selected="selected"' else ""#--> >$T('prowl-off')</option>
|
||||
<option value="-2" <!--#if $prowl_prio_download == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
@@ -298,7 +365,7 @@
|
||||
<option value="2" <!--#if $prowl_prio_download == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="prowl_prio_pp">$T($notify_texts['pp'])</label>
|
||||
<select name="prowl_prio_pp" id="prowl_prio_pp">
|
||||
<option value="-3" <!--#if $prowl_prio_pp == -3 then 'selected="selected"' else ""#--> >$T('prowl-off')</option>
|
||||
@@ -320,7 +387,7 @@
|
||||
<option value="2" <!--#if $prowl_prio_complete == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="prowl_prio_failed">$T($notify_texts['failed'])</label>
|
||||
<select name="prowl_prio_failed" id="prowl_prio_failed">
|
||||
<option value="-3" <!--#if $prowl_prio_failed == -3 then 'selected="selected"' else ""#--> >$T('prowl-off')</option>
|
||||
@@ -342,7 +409,7 @@
|
||||
<option value="2" <!--#if $prowl_prio_queue_done == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="prowl_prio_disk_full">$T($notify_texts['disk_full'])</label>
|
||||
<select name="prowl_prio_disk_full" id="prowl_prio_disk_full">
|
||||
<option value="-3" <!--#if $prowl_prio_disk_full == -3 then 'selected="selected"' else ""#--> >$T('prowl-off')</option>
|
||||
@@ -364,7 +431,7 @@
|
||||
<option value="2" <!--#if $prowl_prio_warning == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="prowl_prio_error">$T($notify_texts['error'])</label>
|
||||
<select name="prowl_prio_error" id="prowl_prio_error">
|
||||
<option value="-3" <!--#if $prowl_prio_error == -3 then 'selected="selected"' else ""#--> >$T('prowl-off')</option>
|
||||
@@ -398,20 +465,22 @@
|
||||
<div class="section" id="pushover">
|
||||
<div class="col2">
|
||||
<h3>$T('section-Pushover')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="pushover_enable" id="pushover_enable" value="1" <!--#if int($pushover_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="pushover_enable"> $T('opt-pushover_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<em>$T('explain-pushover_enable')</em>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1" <!--#if int($pushover_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair alt" >
|
||||
<label class="config" for="pushover_enable">$T('opt-pushover_enable')</label>
|
||||
<input type="checkbox" name="pushover_enable" id="pushover_enable" value="1" <!--#if int($pushover_enable) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-pushover_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_token">$T('opt-pushover_token')</label>
|
||||
<input type="text" name="pushover_token" id="pushover_token" value="$pushover_token" />
|
||||
<span class="desc">$T('explain-pushover_token')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_userkey">$T('opt-pushover_userkey')</label>
|
||||
<input type="text" name="pushover_userkey" id="pushover_userkey" value="$pushover_userkey" />
|
||||
<span class="desc">$T('explain-pushover_userkey')</span>
|
||||
@@ -421,94 +490,114 @@
|
||||
<input type="text" name="pushover_device" id="pushover_device" value="$pushover_device" />
|
||||
<span class="desc">$T('explain-pushover_device')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="pushover_prio_startup">$T($notify_texts['startup'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_prio_startup">$T($notify_texts['startup']).replace('/', ' / ')</label>
|
||||
<select name="pushover_prio_startup" id="pushover_prio_startup">
|
||||
<option value="-2" <!--#if $pushover_prio_startup == -2 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-3" <!--#if $pushover_prio_startup == -3 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $pushover_prio_startup == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $pushover_prio_startup == -1 then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $pushover_prio_startup == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $pushover_prio_startup == 1 then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $pushover_prio_startup == 2 then 'selected="selected"' else ""#--> >$T('pushover-confirm')</option>
|
||||
<option value="2" <!--#if $pushover_prio_startup == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_prio_download">$T($notify_texts['download'])</label>
|
||||
<label class="config" for="pushover_prio_download">$T($notify_texts['download']) / $T('link-pause') / $T('link-resume')</label>
|
||||
<select name="pushover_prio_download" id="pushover_prio_download">
|
||||
<option value="-2" <!--#if $pushover_prio_download == -2 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-3" <!--#if $pushover_prio_download == -3 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $pushover_prio_download == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $pushover_prio_download == -1 then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $pushover_prio_download == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $pushover_prio_download == 1 then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $pushover_prio_download == 2 then 'selected="selected"' else ""#--> >$T('pushover-confirm')</option>
|
||||
<option value="2" <!--#if $pushover_prio_download == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_prio_pp">$T($notify_texts['pp'])</label>
|
||||
<select name="pushover_prio_pp" id="pushover_prio_pp">
|
||||
<option value="-2" <!--#if $pushover_prio_pp == -2 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-3" <!--#if $pushover_prio_pp == -3 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $pushover_prio_pp == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $pushover_prio_pp == -1 then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $pushover_prio_pp == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $pushover_prio_pp == 1 then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $pushover_prio_pp == 2 then 'selected="selected"' else ""#--> >$T('pushover-confirm')</option>
|
||||
<option value="2" <!--#if $pushover_prio_pp == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_prio_complete">$T($notify_texts['complete'])</label>
|
||||
<select name="pushover_prio_complete" id="pushover_prio_complete">
|
||||
<option value="-2" <!--#if $pushover_prio_complete == -2 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-3" <!--#if $pushover_prio_complete == -3 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $pushover_prio_complete == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $pushover_prio_complete == -1 then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $pushover_prio_complete == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $pushover_prio_complete == 1 then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $pushover_prio_complete == 2 then 'selected="selected"' else ""#--> >$T('pushover-confirm')</option>
|
||||
<option value="2" <!--#if $pushover_prio_complete == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_prio_failed">$T($notify_texts['failed'])</label>
|
||||
<select name="pushover_prio_failed" id="pushover_prio_failed">
|
||||
<option value="-2" <!--#if $pushover_prio_failed == -2 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-3" <!--#if $pushover_prio_failed == -3 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $pushover_prio_failed == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $pushover_prio_failed == -1 then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $pushover_prio_failed == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $pushover_prio_failed == 1 then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $pushover_prio_failed == 2 then 'selected="selected"' else ""#--> >$T('pushover-confirm')</option>
|
||||
<option value="2" <!--#if $pushover_prio_failed == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_prio_queue_done">$T($notify_texts['queue_done'])</label>
|
||||
<select name="pushover_prio_queue_done" id="pushover_prio_queue_done">
|
||||
<option value="-2" <!--#if $pushover_prio_queue_done == -2 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-3" <!--#if $pushover_prio_queue_done == -3 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $pushover_prio_queue_done == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $pushover_prio_queue_done == -1 then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $pushover_prio_queue_done == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $pushover_prio_queue_done == 1 then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $pushover_prio_queue_done == 2 then 'selected="selected"' else ""#--> >$T('pushover-confirm')</option>
|
||||
<option value="2" <!--#if $pushover_prio_queue_done == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_prio_disk_full">$T($notify_texts['disk_full'])</label>
|
||||
<select name="pushover_prio_disk_full" id="pushover_prio_disk_full">
|
||||
<option value="-2" <!--#if $pushover_prio_disk_full == -2 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-3" <!--#if $pushover_prio_disk_full == -3 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $pushover_prio_disk_full == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $pushover_prio_disk_full == -1 then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $pushover_prio_disk_full == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $pushover_prio_disk_full == 1 then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $pushover_prio_disk_full == 2 then 'selected="selected"' else ""#--> >$T('pushover-confirm')</option>
|
||||
<option value="2" <!--#if $pushover_prio_disk_full == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_prio_warning">$T($notify_texts['warning'])</label>
|
||||
<select name="pushover_prio_warning" id="pushover_prio_warning">
|
||||
<option value="-2" <!--#if $pushover_prio_warning == -2 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-3" <!--#if $pushover_prio_warning == -3 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $pushover_prio_warning == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $pushover_prio_warning == -1 then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $pushover_prio_warning == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $pushover_prio_warning == 1 then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $pushover_prio_warning == 2 then 'selected="selected"' else ""#--> >$T('pushover-confirm')</option>
|
||||
<option value="2" <!--#if $pushover_prio_warning == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_prio_error">$T($notify_texts['error'])</label>
|
||||
<select name="pushover_prio_error" id="pushover_prio_error">
|
||||
<option value="-2" <!--#if $pushover_prio_error == -2 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-3" <!--#if $pushover_prio_error == -3 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $pushover_prio_error == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $pushover_prio_error == -1 then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $pushover_prio_error == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $pushover_prio_error == 1 then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $pushover_prio_error == 2 then 'selected="selected"' else ""#--> >$T('pushover-confirm')</option>
|
||||
<option value="2" <!--#if $pushover_prio_error == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushover_prio_other">$T($notify_texts['other'])</label>
|
||||
<select name="pushover_prio_other" id="pushover_prio_other">
|
||||
<option value="-2" <!--#if $pushover_prio_other == -2 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-3" <!--#if $pushover_prio_other == -3 then 'selected="selected"' else ""#--> >$T('pushover-off')</option>
|
||||
<option value="-2" <!--#if $pushover_prio_other == -2 then 'selected="selected"' else ""#--> >$T('prowl-very-low')</option>
|
||||
<option value="-1" <!--#if $pushover_prio_other == -1 then 'selected="selected"' else ""#--> >$T('pushover-low')</option>
|
||||
<option value="0" <!--#if $pushover_prio_other == 0 then 'selected="selected"' else ""#--> >$T('prowl-normal')</option>
|
||||
<option value="1" <!--#if $pushover_prio_other == 1 then 'selected="selected"' else ""#--> >$T('pushover-high')</option>
|
||||
<option value="2" <!--#if $pushover_prio_other == 2 then 'selected="selected"' else ""#--> >$T('pushover-confirm')</option>
|
||||
<option value="2" <!--#if $pushover_prio_other == 2 then 'selected="selected"' else ""#--> >$T('prowl-emergency')</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
@@ -523,15 +612,17 @@
|
||||
<div class="section" id="pushbullet">
|
||||
<div class="col2">
|
||||
<h3>$T('section-Pushbullet')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<table>
|
||||
<tr>
|
||||
<td><input type="checkbox" name="pushbullet_enable" id="pushbullet_enable" value="1" <!--#if int($pushbullet_enable) > 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="pushbullet_enable"> $T('opt-pushbullet_enable')</label></td>
|
||||
</tr>
|
||||
</table>
|
||||
<em>$T('explain-pushbullet_enable')</em>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1" <!--#if int($pushbullet_enable) > 0 then '' else 'style="display:none"'#-->>
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushbullet_enable">$T('opt-pushbullet_enable')</label>
|
||||
<input type="checkbox" name="pushbullet_enable" id="pushbullet_enable" value="1" <!--#if int($pushbullet_enable) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-pushbullet_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="pushbullet_apikey">$T('opt-pushbullet_apikey')</label>
|
||||
<input type="text" name="pushbullet_apikey" id="pushbullet_apikey" value="$pushbullet_apikey" />
|
||||
<span class="desc">$T('explain-pushbullet_apikey')</span>
|
||||
@@ -543,44 +634,44 @@
|
||||
<span class="desc">$T('explain-pushbullet_device')</span>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="pushbullet_prio_startup">$T($notify_texts['startup'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="pushbullet_prio_startup">$T($notify_texts['startup']).replace('/', ' / ')</label>
|
||||
<input type="checkbox" name="pushbullet_prio_startup" id="pushbullet_prio_startup" value="1" <!--#if int($pushbullet_prio_startup) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushbullet_prio_download">$T($notify_texts['download'])</label>
|
||||
<label class="config wide" for="pushbullet_prio_download">$T($notify_texts['download']) / $T('link-pause') / $T('link-resume')</label>
|
||||
<input type="checkbox" name="pushbullet_prio_download" id="pushbullet_prio_download" value="1" <!--#if int($pushbullet_prio_download) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="pushbullet_prio_pp">$T($notify_texts['pp'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="pushbullet_prio_pp">$T($notify_texts['pp'])</label>
|
||||
<input type="checkbox" name="pushbullet_prio_pp" id="pushbullet_prio_pp" value="1" <!--#if int($pushbullet_prio_pp) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushbullet_prio_complete">$T($notify_texts['complete'])</label>
|
||||
<label class="config wide" for="pushbullet_prio_complete">$T($notify_texts['complete'])</label>
|
||||
<input type="checkbox" name="pushbullet_prio_complete" id="pushbullet_prio_complete" value="1" <!--#if int($pushbullet_prio_complete) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="pushbullet_prio_failed">$T($notify_texts['failed'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="pushbullet_prio_failed">$T($notify_texts['failed'])</label>
|
||||
<input type="checkbox" name="pushbullet_prio_failed" id="pushbullet_prio_failed" value="1" <!--#if int($pushbullet_prio_failed) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushbullet_prio_queue_done">$T($notify_texts['queue_done'])</label>
|
||||
<label class="config wide" for="pushbullet_prio_queue_done">$T($notify_texts['queue_done'])</label>
|
||||
<input type="checkbox" name="pushbullet_prio_queue_done" id="pushbullet_prio_queue_done" value="1" <!--#if int($pushbullet_prio_queue_done) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="pushbullet_prio_disk_full">$T($notify_texts['disk_full'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="pushbullet_prio_disk_full">$T($notify_texts['disk_full'])</label>
|
||||
<input type="checkbox" name="pushbullet_prio_disk_full" id="pushbullet_prio_disk_full" value="1" <!--#if int($pushbullet_prio_disk_full) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushbullet_prio_warning">$T($notify_texts['warning'])</label>
|
||||
<label class="config wide" for="pushbullet_prio_warning">$T($notify_texts['warning'])</label>
|
||||
<input type="checkbox" name="pushbullet_prio_warning" id="pushbullet_prio_warning" value="1" <!--#if int($pushbullet_prio_warning) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="pushbullet_prio_error">$T($notify_texts['error'])</label>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="pushbullet_prio_error">$T($notify_texts['error'])</label>
|
||||
<input type="checkbox" name="pushbullet_prio_error" id="pushbullet_prio_error" value="1" <!--#if int($pushbullet_prio_error) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pushbullet_prio_other">$T($notify_texts['other'])</label>
|
||||
<label class="config wide" for="pushbullet_prio_other">$T($notify_texts['other'])</label>
|
||||
<input type="checkbox" name="pushbullet_prio_other" id="pushbullet_prio_other" value="1" <!--#if int($pushbullet_prio_other) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
@@ -594,9 +685,24 @@
|
||||
</form>
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script>
|
||||
<script type="text/javascript">
|
||||
\$(document).ready(function(){
|
||||
\$('#email_dir').fileBrowser({ title: 'Select $T('opt-email_dir')' });
|
||||
// Autocomplete and filebrowser
|
||||
\$('#email_dir').typeahead().fileBrowser();
|
||||
|
||||
// Expand on enable
|
||||
\$('.col2 input[name$="enable"]').change(function() {
|
||||
if(this.checked) {
|
||||
\$(this).parents('.section').find('.col1').show()
|
||||
} else {
|
||||
\$(this).parents('.section').find('.col1').hide()
|
||||
}
|
||||
\$('form').submit()
|
||||
})
|
||||
|
||||
/**
|
||||
Testing functions
|
||||
**/
|
||||
\$('#test_email').click(function () {
|
||||
if (confirm(\$('#test_email').attr('rel'))) {
|
||||
var data = { mode: 'test_email', apikey: '$session', output: 'json' };
|
||||
@@ -645,6 +751,28 @@
|
||||
}
|
||||
});
|
||||
});
|
||||
\$('#test_windows_notification').click(function () {
|
||||
\$.ajax({
|
||||
type: "GET",
|
||||
url: "../../tapi",
|
||||
data: {mode: 'test_windows', apikey: '$session', output: 'json' },
|
||||
beforeSend: function () {
|
||||
\$('#test_notification').attr("disabled", "disabled");
|
||||
\$('#testnotice-result').removeClass("success failure").addClass("loading").html('$T('post-Verifying')');
|
||||
},
|
||||
complete: function () {
|
||||
\$('#test_notification').removeAttr("disabled");
|
||||
\$('#testnotice-result').removeClass("loading");
|
||||
},
|
||||
success: function (data) {
|
||||
if (data.status == true) {
|
||||
\$('#testnotice-result').addClass("success").html('$T('smpl-notesent')');
|
||||
} else {
|
||||
\$('#testnotice-result').addClass("failure").html(data.error);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
\$('#test_pushbullet').click(function () {
|
||||
var data = { mode: 'test_pushbullet', apikey: '$session', output: 'json' };
|
||||
\$("#pushbullet").extractFormDataTo(data);
|
||||
|
||||
@@ -1,534 +1,498 @@
|
||||
<!--#set global $pane="RSS"#-->
|
||||
<!--#set global $help_uri="configure-rss-0-8"#-->
|
||||
<!--#set global $help_uri="configure-rss-1-0"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
<!--#if not $active_feed#-->
|
||||
<!--#if not $active_feed#-->
|
||||
<div class="section">
|
||||
<div class="padTable">
|
||||
|
||||
<p>$T('explain-RSS')</p>
|
||||
|
||||
<form action="add_rss_feed" method="post" novalidate>
|
||||
<input type="hidden" name="session" value="$session"/>
|
||||
<div class="padTable">
|
||||
<a class="main-helplink" href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<p>$T('explain-RSS')</p>
|
||||
<form action="add_rss_feed" method="post" autocomplete="off" novalidate>
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<table class="catTable">
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th>$T('name')</th>
|
||||
<th>$T('feed') URL</th>
|
||||
<th> </th>
|
||||
<th> </th>
|
||||
<th>$T('name')</th>
|
||||
<th>$T('feed') URL</th>
|
||||
<th> </th>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td><input type="checkbox" name="enable" value="1" checked /></td>
|
||||
<td><input type="text" name="feed" class="smaller_input" value="$feed" /></td>
|
||||
<td><input type="text" name="uri" /></td>
|
||||
<td>
|
||||
<input type="checkbox" name="enable" value="1" checked />
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="feed" class="smaller_input" value="$feed" />
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="uri" />
|
||||
</td>
|
||||
<td class="nowrap">
|
||||
<button type="submit" class="btn btn-default Save"><span class="glyphicon glyphicon-plus"></span> $T('button-add')</button>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<br/>
|
||||
|
||||
<form action="save_rss_feed" method="post" novalidate>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<!--#if $rss#-->
|
||||
<div class="section">
|
||||
<div class="padTable">
|
||||
<form action="save_rss_feed" method="post" autocomplete="off" novalidate>
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<table id="subscriptions">
|
||||
<tbody>
|
||||
|
||||
<!--#set $feeds = sorted($rss.keys(), cmp=lambda x,y: cmp(x.lower(), y.lower()))#--><!--#slurp#-->
|
||||
<!--#set $odd = False#--><!--#slurp#-->
|
||||
<!--#for $feed_item in $feeds#--><!--#slurp#-->
|
||||
<!--#set $odd = not $odd#--><!--#slurp#-->
|
||||
|
||||
<tr class="data-row <!--#if $odd then "alt" else ""#-->" >
|
||||
<td class="chk">
|
||||
<input type="checkbox" class="toggleFeedCheckbox" name="enable" value="1" <!--#if int($rss[$feed_item]['enable']) != 0 then 'checked="checked"' else ""#--> rel="$feed_item" />
|
||||
</td>
|
||||
<td class="title">
|
||||
<div class="subscription-title">
|
||||
<a href="?feed=$rss[$feed_item]['link']" class="path feed">
|
||||
<div class="favicon" style="background-image: url(http://www.google.com/s2/favicons?domain=$rss[$feed_item]['baselink']&alt=feed);"></div>
|
||||
<span class="<!--#if int($rss[$feed_item]['enable']) != 0 then 'feed_enabled"' else "feed_disabled"#-->">$feed_item</span>
|
||||
</a>
|
||||
</div>
|
||||
<!-- <input type="text" name="newfeed" value="$feed_item" size="25" readonly="readonly" class="readonly" /> -->
|
||||
</td>
|
||||
<td class="controls">
|
||||
<button type="button" class="btn btn-default testFeed" rel="$feed_item"><span class="glyphicon glyphicon-sort"></span> $T('button-preFeed')</button>
|
||||
<input type="hidden" name="uri" value="$rss[$feed_item]['uri']" size="75" />
|
||||
<button type="button" class="btn btn-default editFeed" rel="$feed_item"><span class="glyphicon glyphicon-pencil"></span> $T('Edit')</button>
|
||||
<button type="button" class="btn btn-default delFeed" rel="$feed_item"><span class="glyphicon glyphicon-trash"></span></button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="feed-row <!--#if $odd then "alt" else ""#-->">
|
||||
<td></td>
|
||||
<td colspan="2">
|
||||
<div>$rss[$feed_item]['uri']</div>
|
||||
</td>
|
||||
</tr>
|
||||
|
||||
<!--#end for#-->
|
||||
|
||||
<!--#set $feeds = sorted($rss.keys(), cmp=lambda x,y: cmp(x.lower(), y.lower()))#-->
|
||||
<!--#set $odd = False#-->
|
||||
<!--#for $feed_item in $feeds#-->
|
||||
<!--#set $odd = not $odd#-->
|
||||
<tr class="data-row <!--#if $odd then " alt " else " "#-->">
|
||||
<td class="chk">
|
||||
<input type="checkbox" class="toggleFeedCheckbox" name="enable" value="1" <!--#if int($rss[$feed_item]['enable']) !=0 then 'checked="checked"' else ""#--> rel="$feed_item" />
|
||||
</td>
|
||||
<td class="title">
|
||||
<a href="?feed=$rss[$feed_item]['link']" class="subscription-title path feed <!--#if int($rss[$feed_item]['enable']) != 0 then 'feed_enabled' else 'feed_disabled'#-->">
|
||||
<div class="favicon" style="background-image: url(https://www.google.com/s2/favicons?domain=$rss[$feed_item]['baselink']&alt=feed);"></div> $feed_item
|
||||
</a>
|
||||
</td>
|
||||
<td class="controls">
|
||||
<button type="button" class="btn btn-default testFeed" rel="$feed_item"><span class="glyphicon glyphicon-sort"></span> $T('button-preFeed')</button>
|
||||
<input type="hidden" name="uri" value="$rss[$feed_item]['uri']" />
|
||||
<button type="button" class="btn btn-default editFeed" rel="$feed_item"><span class="glyphicon glyphicon-pencil"></span> $T('Edit')</button>
|
||||
<button type="button" class="btn btn-default delFeed" rel="$feed_item"><span class="glyphicon glyphicon-trash"></span></button>
|
||||
</td>
|
||||
</tr>
|
||||
<tr class="feed-row <!--#if $odd then " alt " else " "#-->">
|
||||
<td></td>
|
||||
<td colspan="2">
|
||||
<div>$rss[$feed_item]['uri']</div>
|
||||
</td>
|
||||
</tr>
|
||||
<!--#end for#-->
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
</form>
|
||||
<!--#if $feeds#-->
|
||||
<br/>
|
||||
|
||||
<form action="rss_now" method="post" novalidate>
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<button type="submit" class="btn btn-default readAll"><span class="glyphicon glyphicon-sort"></span> $T('button-rssNow')</button>
|
||||
</form>
|
||||
<br/>
|
||||
<form action="rss_now" method="post" autocomplete="off" novalidate>
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<button type="submit" class="btn btn-default readAll"><span class="glyphicon glyphicon-sort"></span> $T('button-rssNow')</button>
|
||||
</form>
|
||||
<!--#end if#-->
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--#end if#-->
|
||||
<div class="section">
|
||||
<form action="save_rss_rate" method="post">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config narrow" for="rss_rate">$T('opt-rss_rate')</label>
|
||||
<input type="number" name="rss_rate" id="rss_rate" value="$rss_rate" min="15" max="1440" />
|
||||
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-ok"></span> $T('button-save')</button>
|
||||
<span class="config narrow"> $T('Next scan at:') $rss_next</span>
|
||||
<span class="desc narrow">$T('explain-rss_rate')</span>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
<form action="save_rss_rate" method="post" autocomplete="off">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config narrow" for="rss_rate">$T('opt-rss_rate')</label>
|
||||
<input type="number" name="rss_rate" id="rss_rate" value="$rss_rate" min="15" max="1440" />
|
||||
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-ok"></span> $T('button-save')</button>
|
||||
<span class="config narrow"> $T('Next scan at:') $rss_next</span>
|
||||
<span class="desc narrow">$T('explain-rss_rate')</span>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<!-- /col1 -->
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<!--#end if#-->
|
||||
|
||||
<!--#if $active_feed#-->
|
||||
<!--#set $feed = $active_feed#-->
|
||||
|
||||
<div class="section">
|
||||
<!--#end if#-->
|
||||
<!--#if $active_feed#-->
|
||||
<!--#set $feed = $active_feed#-->
|
||||
<div class="section rss-section">
|
||||
<div class="padTable">
|
||||
<h2 class="nomargin activeRSS">
|
||||
<a href="${root}config/rss/">$T('cmenu-rss')</a> »
|
||||
<a href="$rss[$active_feed]['uri']" onclick="window.open(this.href); return false;">$active_feed</a>
|
||||
</h2>
|
||||
<!--#if $error#-->
|
||||
<h3 class="darkred">$error</h3>
|
||||
<!--#end if#-->
|
||||
|
||||
<form action="upd_rss_feed" method="post">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="feed" value="$feed" />
|
||||
<input type="hidden" name="uri" value="$rss[$feed]['uri']" />
|
||||
<table class="catTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th>$T('rss-order')</th>
|
||||
<th>$T('rss-type')</th>
|
||||
<th>$T('rss-filter')</th>
|
||||
<!--#if $rss[$feed]['pick_cat']#-->
|
||||
<th>$T('category')</th>
|
||||
<!--#end if#-->
|
||||
<th>$T('priority')</th>
|
||||
<th>$T('mode')</th>
|
||||
<!--#if $rss[$feed]['pick_script']#-->
|
||||
<th>$T('script')</th>
|
||||
<!--#end if#-->
|
||||
<th> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<!-- default / global filter -->
|
||||
<tbody>
|
||||
<tr class="default">
|
||||
<td>
|
||||
<input type="checkbox" disabled="disabled" class="hidden" />
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" disabled="disabled" size="1" class="hidden" />
|
||||
</td>
|
||||
<td>
|
||||
<select name="filter_type" disabled="disabled" class="hidden" >
|
||||
<option value="A" selected="selected"> $T('rss-accept')</option>
|
||||
<option value="M"> $T('rss-must')</option>
|
||||
<option value="R"> $T('rss-reject')</option>
|
||||
<option value="C"> $T('rss-mustcat')</option>
|
||||
<option value=">"> $T('rss-atleast')</option>
|
||||
<option value="<"> $T('rss-atmost')</option>
|
||||
<option value="F"> $T('rss-from')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" disabled="disabled" value="" size="25" class="hidden" />
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_cat']#-->
|
||||
<td>
|
||||
<select name="cat">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct == $rss[$feed]['cat'] then 'selected="selected"' else ""#-->>$Tspec($ct)</option><!--#slurp#-->
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td>
|
||||
<select name="priority">
|
||||
<option value="-100" <!--#if $rss[$feed]['priority'] == -100 then 'selected="selected"' else ''#-->>$T('default')</option>
|
||||
<option value="2" <!--#if $rss[$feed]['priority'] == 2 then 'selected="selected"' else ''#-->>$T('pr-force')</option>
|
||||
<option value="1" <!--#if $rss[$feed]['priority'] == 1 then 'selected="selected"' else ''#-->>$T('pr-high')</option>
|
||||
<option value="0" <!--#if $rss[$feed]['priority'] == 0 then 'selected="selected"' else ''#-->>$T('pr-normal')</option>
|
||||
<option value="-1" <!--#if $rss[$feed]['priority'] == -1 then 'selected="selected"' else ''#-->>$T('pr-low')</option>
|
||||
<option value="-2" <!--#if $rss[$feed]['priority'] == -2 then 'selected="selected"' else ''#-->>$T('pr-paused')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<select name="pp">
|
||||
<option value="" <!--#if $rss[$feed]['pp'] == "" then 'selected="selected"' else ''#-->>$T('default')</option>
|
||||
<option value="0" <!--#if $rss[$feed]['pp'] == "0" then 'selected="selected"' else ''#-->>$T('pp-none')</option>
|
||||
<option value="1" <!--#if $rss[$feed]['pp'] == "1" then 'selected="selected"' else ''#-->>$T('pp-repair')</option>
|
||||
<option value="2" <!--#if $rss[$feed]['pp'] == "2" then 'selected="selected"' else ''#-->>$T('pp-unpack')</option>
|
||||
<option value="3" <!--#if $rss[$feed]['pp'] == "3" then 'selected="selected"' else ''#-->>$T('pp-delete')</option>
|
||||
</select>
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_script']#-->
|
||||
<td>
|
||||
<select name="script">
|
||||
<!--#for $sc in $script_list#-->
|
||||
<option value="$sc" <!--#if $sc == $rss[$feed]['script'] then 'selected="selected"' else ""#-->>$Tspec($sc)</option><!--#slurp#-->
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td>
|
||||
<button type="submit" class="btn btn-default Save"><span class="glyphicon glyphicon-ok"></span> $T('button-save')</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<a class="main-helplink" href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a>
|
||||
<h2 class="nomargin activeRSS">
|
||||
<a href="${root}config/rss/">$T('cmenu-rss')</a> »
|
||||
<a href="$rss[$active_feed]['uri']" onclick="window.open(this.href); return false;">$active_feed</a>
|
||||
</h2>
|
||||
<!--#if $error#-->
|
||||
<div class="alert alert-danger">
|
||||
<span class="glyphicon glyphicon-exclamation-sign"></span>
|
||||
$error
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<form action="upd_rss_feed" method="post">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="feed" value="$feed" />
|
||||
<input type="hidden" name="uri" value="$rss[$feed]['uri']" />
|
||||
<table class="catTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th> </th>
|
||||
<th>$T('rss-order')</th>
|
||||
<th>$T('rss-type')</th>
|
||||
<th>$T('rss-filter')</th>
|
||||
<!--#if $rss[$feed]['pick_cat']#-->
|
||||
<th>$T('category')</th>
|
||||
<!--#end if#-->
|
||||
<th>$T('priority')</th>
|
||||
<th>$T('mode')</th>
|
||||
<!--#if $rss[$feed]['pick_script']#-->
|
||||
<th>$T('script')</th>
|
||||
<!--#end if#-->
|
||||
<th> </th>
|
||||
</tr>
|
||||
</thead>
|
||||
<!-- default / global filter -->
|
||||
<tbody>
|
||||
<tr class="default">
|
||||
<td>
|
||||
<input type="checkbox" disabled="disabled" class="hidden" />
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" disabled="disabled" size="1" class="hidden" />
|
||||
</td>
|
||||
<td>
|
||||
<select name="filter_type" disabled="disabled" class="hidden">
|
||||
<option value="A" selected="selected"> $T('rss-accept')</option>
|
||||
<option value="M"> $T('rss-must')</option>
|
||||
<option value="R"> $T('rss-reject')</option>
|
||||
<option value="C"> $T('rss-mustcat')</option>
|
||||
<option value=">"> $T('rss-atleast')</option>
|
||||
<option value="<"> $T('rss-atmost')</option>
|
||||
<option value="F"> $T('rss-from')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" disabled="disabled" value="" class="hidden" />
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_cat']#-->
|
||||
<td>
|
||||
<select name="cat">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct==$rss[$feed]['cat'] then 'selected="selected"' else ""#-->>$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td>
|
||||
<select name="priority">
|
||||
<option value="-100" <!--#if $rss[$feed]['priority']==- 100 then 'selected="selected"' else ''#-->>$T('default')</option>
|
||||
<option value="2" <!--#if $rss[$feed]['priority']==2 then 'selected="selected"' else ''#-->>$T('pr-force')</option>
|
||||
<option value="1" <!--#if $rss[$feed]['priority']==1 then 'selected="selected"' else ''#-->>$T('pr-high')</option>
|
||||
<option value="0" <!--#if $rss[$feed]['priority']==0 then 'selected="selected"' else ''#-->>$T('pr-normal')</option>
|
||||
<option value="-1" <!--#if $rss[$feed]['priority']==- 1 then 'selected="selected"' else ''#-->>$T('pr-low')</option>
|
||||
<option value="-2" <!--#if $rss[$feed]['priority']==- 2 then 'selected="selected"' else ''#-->>$T('pr-paused')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<select name="pp">
|
||||
<option value="" <!--#if $rss[$feed]['pp']=="" then 'selected="selected"' else ''#-->>$T('default')</option>
|
||||
<option value="0" <!--#if $rss[$feed]['pp']=="0" then 'selected="selected"' else ''#-->>$T('pp-none')</option>
|
||||
<option value="1" <!--#if $rss[$feed]['pp']=="1" then 'selected="selected"' else ''#-->>$T('pp-repair')</option>
|
||||
<option value="2" <!--#if $rss[$feed]['pp']=="2" then 'selected="selected"' else ''#-->>$T('pp-unpack')</option>
|
||||
<option value="3" <!--#if $rss[$feed]['pp']=="3" then 'selected="selected"' else ''#-->>$T('pp-delete')</option>
|
||||
</select>
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_script']#-->
|
||||
<td>
|
||||
<select name="script">
|
||||
<!--#for $sc in $script_list#-->
|
||||
<option value="$sc" <!--#if $sc==$rss[$feed]['script'] then 'selected="selected"' else ""#-->>$Tspec($sc)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td class="nowrap">
|
||||
<button type="submit" class="btn btn-default Save"><span class="glyphicon glyphicon-ok"></span> $T('button-save')</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<!-- add new filter -->
|
||||
<form action="upd_rss_filter" method="post">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="index" value="$rss[$feed]['filtercount']" />
|
||||
<input type="hidden" name="feed" value="$feed" />
|
||||
<table class="catTable">
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" name="enabled" value="1" checked="checked" />
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="new_index" size="1" />
|
||||
</td>
|
||||
<td>
|
||||
<select name="filter_type">
|
||||
<option value="A" selected="selected"> $T('rss-accept')</option>
|
||||
<option value="M"> $T('rss-must')</option>
|
||||
<option value="R"> $T('rss-reject')</option>
|
||||
<option value="C"> $T('rss-mustcat')</option>
|
||||
<option value=">"> $T('rss-atleast')</option>
|
||||
<option value="<"> $T('rss-atmost')</option>
|
||||
<option value="F"> $T('rss-from')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="filter_text" value="" size="25" />
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_cat']#-->
|
||||
<td>
|
||||
<select name="cat">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct == 'Default' then 'selected="selected"' else ""#-->>$Tspec($ct)</option><!--#slurp#-->
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td>
|
||||
<select name="priority">
|
||||
<option value="-100" selected="selected">$T('default')</option>
|
||||
<option value="2">$T('pr-force')</option>
|
||||
<option value="1">$T('pr-high')</option>
|
||||
<option value="0">$T('pr-normal')</option>
|
||||
<option value="-1">$T('pr-low')</option>
|
||||
<option value="-2">$T('pr-paused')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<select name="pp">
|
||||
<option value="" selected="selected">$T('default')</option>
|
||||
<option value="0">$T('pp-none')</option>
|
||||
<option value="1">$T('pp-repair')</option>
|
||||
<option value="2">$T('pp-unpack')</option>
|
||||
<option value="3">$T('pp-delete')</option>
|
||||
</select>
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_script']#-->
|
||||
<td>
|
||||
<select name="script">
|
||||
<!--#for $sc in $script_list#-->
|
||||
<option value="$sc" <!--#if $sc == 'Default' then 'selected="selected"' else ""#-->>$Tspec($sc)</option><!--#slurp#-->
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td>
|
||||
<button type="submit" class="btn btn-default Save"><span class="glyphicon glyphicon-plus"></span> $T('button-add')</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<!--#set $odd = False#--><!--#slurp#-->
|
||||
<!--#set $fnum = 0#--><!--#slurp#-->
|
||||
<!--#for $filter in $rss[$feed].filters#--><!--#slurp#-->
|
||||
<!--#set $odd = not $odd#--><!--#slurp#-->
|
||||
|
||||
<form action="upd_rss_filter" method="post">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="index" value="$fnum" />
|
||||
<input type="hidden" name="index" value="$rss[$feed]['filtercount']" />
|
||||
<input type="hidden" name="feed" value="$feed" />
|
||||
<table class="catTable">
|
||||
<tbody>
|
||||
<tr class="<!--#if $odd then "alt" else ""#-->">
|
||||
<td>
|
||||
<input type="checkbox" name="enabled" value="1" <!--#if $filter[6] == '1' then 'checked="checked"' else ""#--> />
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="new_index" value="$fnum" size="1" />
|
||||
</td>
|
||||
<td>
|
||||
<select name="filter_type">
|
||||
<option value="A" <!--#if $filter[3] == "A" then 'selected="selected"' else ""#-->> $T('rss-accept')</option>
|
||||
<option value="M" <!--#if $filter[3] == "M" then 'selected="selected"' else ""#-->> $T('rss-must')</option>
|
||||
<option value="R" <!--#if $filter[3] == "R" then 'selected="selected"' else ""#-->> $T('rss-reject')</option>
|
||||
<option value="C" <!--#if $filter[3] == "C" then 'selected="selected"' else ""#-->> $T('rss-mustcat')</option>
|
||||
<option value=">" <!--#if $filter[3] == ">" then 'selected="selected"' else ""#-->> $T('rss-atleast')</option>
|
||||
<option value="<" <!--#if $filter[3] == "<" then 'selected="selected"' else ""#-->> $T('rss-atmost')</option>
|
||||
<option value="F" <!--#if $filter[3] == "F" then 'selected="selected"' else ""#-->> $T('rss-from')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="filter_text" value="$filter[4]" size="25" />
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_cat']#-->
|
||||
<td>
|
||||
<select name="cat">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct == $filter[0] then 'selected="selected"' else ""#-->>$Tspec($ct)</option><!--#slurp#-->
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td>
|
||||
<select name="priority">
|
||||
<option value="-100" <!--#if $filter[5] == "-100" then 'selected="selected"' else ""#-->>$T('default')</option>
|
||||
<option value="2" <!--#if $filter[5] == "2" then 'selected="selected"' else ""#-->>$T('pr-force')</option>
|
||||
<option value="1" <!--#if $filter[5] == "1" then 'selected="selected"' else ""#-->>$T('pr-high')</option>
|
||||
<option value="0" <!--#if $filter[5] == "0" then 'selected="selected"' else ""#-->>$T('pr-normal')</option>
|
||||
<option value="-1" <!--#if $filter[5] == "-1" then 'selected="selected"' else ""#-->>$T('pr-low')</option>
|
||||
<option value="-2" <!--#if $filter[5] == "-2" then 'selected="selected"' else ""#-->>$T('pr-paused')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<select name="pp">
|
||||
<option value="" <!--#if $filter[1] == "" then 'selected="selected"' else ""#-->>$T('default')</option>
|
||||
<option value="0" <!--#if $filter[1] == "0" then 'selected="selected"' else ""#-->>$T('pp-none')</option>
|
||||
<option value="1" <!--#if $filter[1] == "1" then 'selected="selected"' else ""#-->>$T('pp-repair')</option>
|
||||
<option value="2" <!--#if $filter[1] == "2" then 'selected="selected"' else ""#-->>$T('pp-unpack')</option>
|
||||
<option value="3" <!--#if $filter[1] == "3" then 'selected="selected"' else ""#-->>$T('pp-delete')</option>
|
||||
</select>
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_script']#-->
|
||||
<td>
|
||||
<select name="script">
|
||||
<!--#for $sc in $script_list#-->
|
||||
<option value="$sc" <!--#if $sc == $filter[2] then 'selected="selected"' else ""#-->>$Tspec($sc)</option><!--#slurp#-->
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td>
|
||||
<button type="submit" class="btn btn-default Save"><span class="glyphicon glyphicon-ok"></span> $T('button-save')</button>
|
||||
<button class="btn btn-default delFilter" type="button"><span class="glyphicon glyphicon-trash"></span></button>
|
||||
<!--#if not $rss[$feed].filter_states[$fnum]#--> $T('Incorrect filter')<!--#end if#-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td>
|
||||
<input type="checkbox" name="enabled" value="1" checked="checked" />
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="new_index" size="1" />
|
||||
</td>
|
||||
<td>
|
||||
<select name="filter_type">
|
||||
<option value="A" selected="selected"> $T('rss-accept')</option>
|
||||
<option value="M"> $T('rss-must')</option>
|
||||
<option value="R"> $T('rss-reject')</option>
|
||||
<option value="C"> $T('rss-mustcat')</option>
|
||||
<option value=">"> $T('rss-atleast')</option>
|
||||
<option value="<"> $T('rss-atmost')</option>
|
||||
<option value="F"> $T('rss-from')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="filter_text" value="" />
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_cat']#-->
|
||||
<td>
|
||||
<select name="cat">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct=='Default' then 'selected="selected"' else ""#-->>$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td>
|
||||
<select name="priority">
|
||||
<option value="-100" selected="selected">$T('default')</option>
|
||||
<option value="2">$T('pr-force')</option>
|
||||
<option value="1">$T('pr-high')</option>
|
||||
<option value="0">$T('pr-normal')</option>
|
||||
<option value="-1">$T('pr-low')</option>
|
||||
<option value="-2">$T('pr-paused')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<select name="pp">
|
||||
<option value="" selected="selected">$T('default')</option>
|
||||
<option value="0">$T('pp-none')</option>
|
||||
<option value="1">$T('pp-repair')</option>
|
||||
<option value="2">$T('pp-unpack')</option>
|
||||
<option value="3">$T('pp-delete')</option>
|
||||
</select>
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_script']#-->
|
||||
<td>
|
||||
<select name="script">
|
||||
<!--#for $sc in $script_list#-->
|
||||
<option value="$sc" <!--#if $sc=='Default' then 'selected="selected"' else ""#-->>$Tspec($sc)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td class="nowrap">
|
||||
<button type="submit" class="btn btn-default Save"><span class="glyphicon glyphicon-plus"></span> $T('button-add')</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
<!--#set $odd = False#-->
|
||||
<!--#set $fnum = 0#-->
|
||||
<!--#for $filter in $rss[$feed].filters#-->
|
||||
<!--#set $odd = not $odd#-->
|
||||
<form action="upd_rss_filter" method="post" autocomplete="off">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="index" value="$fnum" />
|
||||
<input type="hidden" name="feed" value="$feed" />
|
||||
<table class="catTable">
|
||||
<tbody>
|
||||
<tr class="<!--#if $odd then " alt " else " "#-->">
|
||||
<td>
|
||||
<input type="checkbox" name="enabled" value="1" <!--#if $filter[6]=='1' then 'checked="checked"' else ""#--> />
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="new_index" value="$fnum" size="1" />
|
||||
</td>
|
||||
<td>
|
||||
<select name="filter_type">
|
||||
<option value="A" <!--#if $filter[3]=="A" then 'selected="selected"' else ""#-->> $T('rss-accept')</option>
|
||||
<option value="M" <!--#if $filter[3]=="M" then 'selected="selected"' else ""#-->> $T('rss-must')</option>
|
||||
<option value="R" <!--#if $filter[3]=="R" then 'selected="selected"' else ""#-->> $T('rss-reject')</option>
|
||||
<option value="C" <!--#if $filter[3]=="C" then 'selected="selected"' else ""#-->> $T('rss-mustcat')</option>
|
||||
<option value=">" <!--#if $filter[3]==">" then 'selected="selected"' else ""#-->> $T('rss-atleast')</option>
|
||||
<option value="<" <!--#if $filter[3]=="<" then 'selected="selected"' else ""#-->> $T('rss-atmost')</option>
|
||||
<option value="F" <!--#if $filter[3]=="F" then 'selected="selected"' else ""#-->> $T('rss-from')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<input type="text" name="filter_text" value="$filter[4]" />
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_cat']#-->
|
||||
<td>
|
||||
<select name="cat">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct==$filter[0] then 'selected="selected"' else ""#-->>$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td>
|
||||
<select name="priority">
|
||||
<option value="-100" <!--#if $filter[5]=="-100" then 'selected="selected"' else ""#-->>$T('default')</option>
|
||||
<option value="2" <!--#if $filter[5]=="2" then 'selected="selected"' else ""#-->>$T('pr-force')</option>
|
||||
<option value="1" <!--#if $filter[5]=="1" then 'selected="selected"' else ""#-->>$T('pr-high')</option>
|
||||
<option value="0" <!--#if $filter[5]=="0" then 'selected="selected"' else ""#-->>$T('pr-normal')</option>
|
||||
<option value="-1" <!--#if $filter[5]=="-1" then 'selected="selected"' else ""#-->>$T('pr-low')</option>
|
||||
<option value="-2" <!--#if $filter[5]=="-2" then 'selected="selected"' else ""#-->>$T('pr-paused')</option>
|
||||
</select>
|
||||
</td>
|
||||
<td>
|
||||
<select name="pp">
|
||||
<option value="" <!--#if $filter[1]=="" then 'selected="selected"' else ""#-->>$T('default')</option>
|
||||
<option value="0" <!--#if $filter[1]=="0" then 'selected="selected"' else ""#-->>$T('pp-none')</option>
|
||||
<option value="1" <!--#if $filter[1]=="1" then 'selected="selected"' else ""#-->>$T('pp-repair')</option>
|
||||
<option value="2" <!--#if $filter[1]=="2" then 'selected="selected"' else ""#-->>$T('pp-unpack')</option>
|
||||
<option value="3" <!--#if $filter[1]=="3" then 'selected="selected"' else ""#-->>$T('pp-delete')</option>
|
||||
</select>
|
||||
</td>
|
||||
<!--#if $rss[$feed]['pick_script']#-->
|
||||
<td>
|
||||
<select name="script">
|
||||
<!--#for $sc in $script_list#-->
|
||||
<option value="$sc" <!--#if $sc==$filter[2] then 'selected="selected"' else ""#-->>$Tspec($sc)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</td>
|
||||
<!--#end if#-->
|
||||
<td class="nowrap">
|
||||
<button type="submit" class="btn btn-default Save"><span class="glyphicon glyphicon-ok"></span> $T('button-save')</button>
|
||||
<button class="btn btn-default delFilter" type="button"><span class="glyphicon glyphicon-trash"></span></button>
|
||||
<!--#if not $rss[$feed].filter_states[$fnum]#-->
|
||||
$T('Incorrect filter')
|
||||
<!--#end if#-->
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<!--#set $fnum = $fnum+1#-->
|
||||
<!--#end for#-->
|
||||
|
||||
<form action="download_rss_feed" method="post">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="feed" value="$feed" />
|
||||
<!--#set $fnum = $fnum+1#-->
|
||||
<!--#end for#-->
|
||||
<form action="download_rss_feed" method="post">
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="feed" value="$feed" />
|
||||
<div class="padding">
|
||||
<button type="button" class="btn btn-default testFeed" rel="$feed"><span class="glyphicon glyphicon-sort"></span> $T('button-preFeed')</button>
|
||||
<button type="submit" class="btn btn-default Save"><span class="glyphicon glyphicon-forward"></span> $T('button-forceFeed')</button>
|
||||
<button type="button" class="btn btn-default cleanFeed"><span class="glyphicon glyphicon-trash"></span> $T('button-clear') $T('link-download')</button>
|
||||
</div>
|
||||
</form>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<br/>
|
||||
<div style="padding-left: 10px; border-bottom: 1px solid #DFDEDE;">
|
||||
<ul class="tabs">
|
||||
<li><a href="#">$T('rss-matched') <span class="count"><!--#echo len($matched)#--></span></a></li>
|
||||
<li><a href="#">$T('rss-notMatched') <span class="count"><!--#echo len($unmatched)#--></span></a></li>
|
||||
<li><a href="#">$T('rss-done') <span class="count"><!--#echo len($downloaded)#--></span></a></li>
|
||||
<li class="active"><a href="#rss-tab-matched" data-toggle="tab">$T('rss-matched') <span class="count"><!--#echo len($matched)#--></span></a></li>
|
||||
<li><a href="#rss-tab-not-matched">$T('rss-notMatched') <span class="count"><!--#echo len($unmatched)#--></span></a></li>
|
||||
<li><a href="#rss-tab-done">$T('rss-done') <span class="count"><!--#echo len($downloaded)#--></span></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div class="tab-content padTable">
|
||||
<!--#if $matched#-->
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade in active padTable" id="rss-tab-matched">
|
||||
<!--#if $matched#-->
|
||||
<table class="catTable">
|
||||
|
||||
<!--#set $odd = False#--><!--#slurp#-->
|
||||
<!--#set $cur = 0#--><!--#slurp#-->
|
||||
<!--#for $job in $matched#--><!--#slurp#-->
|
||||
<!--#set $odd = not $odd#--><!--#slurp#-->
|
||||
<!--#set $cur = $cur+1#--><!--#slurp#-->
|
||||
|
||||
<!--#if $cur == 1#-->
|
||||
<thead>
|
||||
<tr>
|
||||
<th>$T('link-download')</th>
|
||||
<th>$T('rss-skip')</th>
|
||||
<th>$T('rss-filter')</th>
|
||||
<th>$T('size')</th>
|
||||
<th>$T('sort-title')</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>$T('link-download')</th>
|
||||
<th>$T('rss-skip')</th>
|
||||
<th>$T('rss-filter')</th>
|
||||
<th>$T('size')</th>
|
||||
<th>$T('sort-title')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<!--#end if#-->
|
||||
<tr class="infoTableSeperator <!--#if $odd then "alt" else ""#-->">
|
||||
<td>
|
||||
<form action="download" method="get">
|
||||
<input type="hidden" value="$feed" name="feed" />
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="url" value="$job[0]" />
|
||||
<input type="hidden" name="nzbname" value="$job[4]" />
|
||||
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-plus-sign"></span> $T('link-download')</button>
|
||||
</form>
|
||||
</td>
|
||||
<td class="align-center">$job[2]</td>
|
||||
<td class="align-center">
|
||||
<span>$job[3]</span>
|
||||
</td>
|
||||
<td>$job[5]</td>
|
||||
<td>$job[1]</td>
|
||||
</tr>
|
||||
<!--#end for#-->
|
||||
<!--#for $job in $matched#-->
|
||||
<tr class="infoTableSeperator">
|
||||
<td>
|
||||
<form action="download" method="get">
|
||||
<input type="hidden" value="$feed" name="feed" />
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="url" value="$job[0]" />
|
||||
<input type="hidden" name="nzbname" value="$job[4]" />
|
||||
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-plus-sign"></span> $T('link-download')</button>
|
||||
</form>
|
||||
</td>
|
||||
<td class="align-center">$job[2]</td>
|
||||
<td class="align-center"> <span>$job[3]</span> </td>
|
||||
<td>$job[5]</td>
|
||||
<td>$job[1]</td>
|
||||
</tr>
|
||||
<!--#end for#-->
|
||||
</table>
|
||||
|
||||
<!--#else#-->
|
||||
<!--#else#-->
|
||||
$T('none')
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
|
||||
<div class="tab-content padTable">
|
||||
<!--#if $unmatched#-->
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<div class="tab-pane padTable" id="rss-tab-not-matched">
|
||||
<!--#if $unmatched#-->
|
||||
<table class="catTable">
|
||||
|
||||
<!--#set $odd = False#--><!--#slurp#-->
|
||||
<!--#set $cur = 0#--><!--#slurp#-->
|
||||
<!--#for $job in $unmatched#--><!--#slurp#-->
|
||||
<!--#set $odd = not $odd#--><!--#slurp#-->
|
||||
<!--#set $cur = $cur+1#--><!--#slurp#-->
|
||||
|
||||
<!--#if $cur == 1#-->
|
||||
<thead>
|
||||
<tr>
|
||||
<th>$T('link-download')</th>
|
||||
<th>$T('rss-skip')</th>
|
||||
<th>$T('rss-filter')</th>
|
||||
<th>$T('size')</th>
|
||||
<th>$T('sort-title')</th>
|
||||
</tr>
|
||||
<tr>
|
||||
<th>$T('link-download')</th>
|
||||
<th>$T('rss-skip')</th>
|
||||
<th>$T('rss-filter')</th>
|
||||
<th>$T('size')</th>
|
||||
<th>$T('sort-title')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<!--#end if#-->
|
||||
<tr class="infoTableSeperator <!--#if $odd then "alt" else ""#-->">
|
||||
<td>
|
||||
<form action="download" method="get">
|
||||
<input type="hidden" value="$feed" name="feed" />
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="url" value="$job[0]" />
|
||||
<input type="hidden" name="nzbname" value="$job[4]" />
|
||||
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-plus-sign"></span> $T('link-download')</button>
|
||||
</form>
|
||||
</td>
|
||||
<td class="align-center">$job[2]</td>
|
||||
<td class="align-center">
|
||||
<span>$job[3]</span>
|
||||
</td>
|
||||
<td>$job[5]</td>
|
||||
<td>$job[1]</td>
|
||||
</tr>
|
||||
<!--#end for#-->
|
||||
<!--#for $job in $unmatched#-->
|
||||
<tr class="infoTableSeperator">
|
||||
<td>
|
||||
<form action="download" method="get">
|
||||
<input type="hidden" value="$feed" name="feed" />
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="url" value="$job[0]" />
|
||||
<input type="hidden" name="nzbname" value="$job[4]" />
|
||||
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-plus-sign"></span> $T('link-download')</button>
|
||||
</form>
|
||||
</td>
|
||||
<td class="align-center">$job[2]</td>
|
||||
<td class="align-center"> <span>$job[3]</span> </td>
|
||||
<td>$job[5]</td>
|
||||
<td>$job[1]</td>
|
||||
</tr>
|
||||
<!--#end for#-->
|
||||
</table>
|
||||
|
||||
<!--#else#-->
|
||||
$T('none')
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
|
||||
|
||||
<div class="tab-content padTable">
|
||||
<!--#if $downloaded#-->
|
||||
<!--#else#-->
|
||||
$T('none')
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<div class="tab-pane padTable" id="rss-tab-done">
|
||||
<!--#if $downloaded#-->
|
||||
<form action="clean_rss_jobs" method="post">
|
||||
<input type="hidden" value="$feed" name="feed" />
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<table class="catTable">
|
||||
|
||||
<!--#set $odd = False#--><!--#slurp#-->
|
||||
<!--#set $cur = 0#--><!--#slurp#-->
|
||||
<!--#for $job in $downloaded#--><!--#slurp#-->
|
||||
<!--#set $odd = not $odd#--><!--#slurp#-->
|
||||
<!--#set $cur = $cur+1#--><!--#slurp#-->
|
||||
|
||||
<!--#if $cur == 1#-->
|
||||
<thead>
|
||||
<tr>
|
||||
<th>$T('sort-title')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<!--#end if#-->
|
||||
<tr class="infoTableSeperator <!--#if $odd then "alt" else ""#-->">
|
||||
<td>$job</td>
|
||||
</tr>
|
||||
<!--#end for#-->
|
||||
</table>
|
||||
<input type="hidden" value="$feed" name="feed" />
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<table class="catTable">
|
||||
<thead>
|
||||
<tr>
|
||||
<th>$T('sort-title')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<!--#for $job in $downloaded#-->
|
||||
<tr class="infoTableSeperator">
|
||||
<td>$job</td>
|
||||
</tr>
|
||||
<!--#end for#-->
|
||||
</table>
|
||||
</form>
|
||||
|
||||
<!--#else#-->
|
||||
$T('none')
|
||||
<!--#end if#-->
|
||||
<!--#else#-->
|
||||
$T('none')
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<!-- /colmask -->
|
||||
|
||||
<!--#end if#-->
|
||||
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script>
|
||||
<script type="text/javascript">
|
||||
function urlencode(str) {
|
||||
return encodeURIComponent(str).replace(/!/g, '%21').replace(/'/g, '%27').replace(/\(/g, '%28').replace(/\)/g, '%29').replace(/\*/g, '%2A').replace(/%20/g, '+');
|
||||
}
|
||||
|
||||
\$(document).ready(function(){
|
||||
\$('.tabs a').click(function (e) {
|
||||
e.preventDefault()
|
||||
\$(this).tab('show')
|
||||
})
|
||||
|
||||
\$('.editFeed').click(function(){
|
||||
var oldURI = \$(this).prev().val();
|
||||
var newURI = prompt("$T('feed') URL", oldURI );
|
||||
if(newURI != "" && newURI !== null) {
|
||||
var whichFeed = \$(this).attr("rel");
|
||||
var isEnabled = \$('.toggleFeedCheckbox[rel="'+whichFeed+'"]').attr('checked') == "checked"? 1 : 0;
|
||||
\$.ajax({
|
||||
type: "POST",
|
||||
url: "save_rss_feed",
|
||||
data: {feed: whichFeed, uri: newURI, session: "$session" }
|
||||
data: {feed: whichFeed, uri: newURI, enable: isEnabled, session: "$session" }
|
||||
}).done(function( msg ) {
|
||||
location.reload();
|
||||
});
|
||||
@@ -586,14 +550,11 @@ function urlencode(str) {
|
||||
var theForm = \$(this).closest("form");
|
||||
theForm.attr("action", "clean_rss_jobs").submit();
|
||||
});
|
||||
|
||||
\$('.delFilter').click(function(){
|
||||
var theForm = \$(this).closest("form");
|
||||
theForm.attr("action", "del_rss_filter").submit();
|
||||
});
|
||||
\$(function() {
|
||||
\$("ul.tabs").tabs("div.tab-content");
|
||||
});
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Scheduling"#-->
|
||||
<!--#set global $help_uri="configure-scheduling-0-8"#-->
|
||||
<!--#set global $help_uri="configure-scheduling-1-0"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<%
|
||||
@@ -15,13 +15,13 @@ else:
|
||||
<div class="colmask">
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('addSchedule')</h3>
|
||||
<h3>$T('addSchedule') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<form action="addSchedule" method="post">
|
||||
<form action="addSchedule" method="post" autocomplete="off">
|
||||
<input type="hidden" id="session" name="session" value="$session" />
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="hour">$T('hour').capitalize() : $T('minute').capitalize()</label>
|
||||
<select name="hour" id="hour">
|
||||
<!--#for $i in range(24)#-->
|
||||
@@ -45,15 +45,23 @@ else:
|
||||
<label><input type="checkbox" name="daysofweek" value="7"/> $T('sunday')</label>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="action">$T('sch-action')</label>
|
||||
<select name="action" id="action">
|
||||
<!--#for $action in $actions#-->
|
||||
<option value="$action">$actions_lng[$action]</option>
|
||||
<!--#end for#-->
|
||||
<optgroup label="$T('sch-action')">
|
||||
<!--#for $action in $actions#-->
|
||||
<option value="$action" data-action="" data-noarg="<!--#if $action is 'speedlimit' then 0 else 1#-->">$actions_lng[$action]</option>
|
||||
<!--#end for#-->
|
||||
</optgroup>
|
||||
<optgroup label="$T('cmenu-servers')">
|
||||
<!--#for $server in $actions_servers.keys()#-->
|
||||
<option value="$server" data-action="1"data-noarg="1">$T('sch-enable_server') "$actions_servers[$server]"</option>
|
||||
<option value="$server" data-action="0"data-noarg="1">$T('sch-disable_server') "$actions_servers[$server]"</option>
|
||||
<!--#end for#-->
|
||||
</optgroup>
|
||||
</select>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<div class="field-pair" id="hidden_arguments" style="display: none">
|
||||
<label class="config" for="arguments">$T('sch-arguments')</label>
|
||||
<input type="text" name="arguments" id="arguments" class="select_width" />
|
||||
</div>
|
||||
@@ -79,7 +87,7 @@ else:
|
||||
<form action="delSchedule" method="post">
|
||||
<input type="hidden" name="session" value="$session"/>
|
||||
<input type="hidden" name="line" id="line" value="$line"/>
|
||||
<div class="field-pair infoTableSeperator<!--#if $odd then "" else " alt"#-->">
|
||||
<div class="field-pair infoTableSeperator <!--#if $odd then "" else " alt"#-->">
|
||||
<button class="btn btn-default float-left"><span class="glyphicon glyphicon-trash"></span></button>
|
||||
<div class="scheduleEntry">
|
||||
<span class="time">$taskinfo[$schednum][1]:$taskinfo[$schednum][2]</span><span class="frequency">$taskinfo[$schednum][3]</span> <span class="darkred">$taskinfo[$schednum][4]</span>
|
||||
@@ -97,5 +105,16 @@ else:
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script type="text/javascript">
|
||||
\$('#action').on('change', function() {
|
||||
// Set the action
|
||||
\$('#arguments').val((\$(this).find('option:selected').data('action')))
|
||||
// Arguments
|
||||
if(\$(this).find('option:selected').data('noarg')) {
|
||||
\$('#hidden_arguments').hide()
|
||||
} else {
|
||||
\$('#hidden_arguments').show()
|
||||
}
|
||||
})
|
||||
</script>
|
||||
<!--#include $webdir + "/_inc_footer_uc.tmpl"#-->
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
<!--#set global $pane="Servers"#-->
|
||||
<!--#set global $help_uri="configure-servers-0-8"#-->
|
||||
<!--#set global $help_uri="configure-servers-1-0"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
@@ -12,11 +12,11 @@
|
||||
</div>
|
||||
<div class="section" id="addServerContent" style="display: none;">
|
||||
<div class="col2">
|
||||
<h3>$T('addServer')</h3>
|
||||
<h3>$T('addServer') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="enable">$T('srv-enable')</label>
|
||||
<input type="checkbox" name="enable" id="enable" value="1" checked="checked" />
|
||||
<span class="desc">$T('srv-enable')</span>
|
||||
@@ -25,7 +25,7 @@
|
||||
<label class="config" for="host">$T('srv-host')</label>
|
||||
<input type="text" name="host" id="host" />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="port">$T('srv-port')</label>
|
||||
<input type="number" name="port" id="port" size="8" />
|
||||
</div>
|
||||
@@ -33,7 +33,7 @@
|
||||
<label class="config" for="username">$T('srv-username')</label>
|
||||
<input type="text" name="username" id="username" />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="password">$T('srv-password')</label>
|
||||
<input type="text" name="password" id="password" />
|
||||
</div>
|
||||
@@ -41,7 +41,7 @@
|
||||
<label class="config" for="connections">$T('srv-connections')</label>
|
||||
<input type="number" name="connections" id="connections" min="0" max="100" />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="priority">$T('srv-priority')</label>
|
||||
<input type="number" name="priority" id="priority" min="0" max="100" /> <i>$T('explain-svrprio')</i>
|
||||
</div>
|
||||
@@ -53,7 +53,7 @@
|
||||
<label class="config" for="timeout">$T('srv-timeout')</label>
|
||||
<input type="number" name="timeout" id="timeout" min="30" /> <i>$T('seconds')</i>
|
||||
</div>
|
||||
<div class="field-pair alt <!--#if int($have_ssl) == 0 then "disabled" else ""#-->">
|
||||
<div class="field-pair <!--#if int($have_ssl) == 0 then "disabled" else ""#-->">
|
||||
<label class="config" for="ssl">$T('srv-ssl')</label>
|
||||
<input type="checkbox" name="ssl" id="ssl" value="1" <!--#if int($have_ssl) == 0 then "disabled=\"disabled\"" else ""#--> />
|
||||
<span class="desc">$T('srv-ssl')</span>
|
||||
@@ -62,6 +62,7 @@
|
||||
<label class="config" for="ssl_type">$T('srv-ssl_type')</label>
|
||||
<!--#if int($have_ssl) == 1#-->
|
||||
<select name="ssl_type" id="ssl_type">
|
||||
<option value="">$T('Default')</option>
|
||||
<!--#if 't12' in $ssl_protocols#-->
|
||||
<option value="t12">TLS v1.2</option>
|
||||
<!--#end if#-->
|
||||
@@ -71,9 +72,6 @@
|
||||
<!--#if 't1' in $ssl_protocols#-->
|
||||
<option value="t1">TLS v1</option>
|
||||
<!--#end if#-->
|
||||
<!--#if 'v23' in $ssl_protocols#-->
|
||||
<option value="v23">SSL v23</option>
|
||||
<!--#end if#-->
|
||||
<!--#if 'v3' in $ssl_protocols#-->
|
||||
<option value="v3">SSL v3</option>
|
||||
<!--#end if#-->
|
||||
@@ -89,7 +87,7 @@
|
||||
<input type="checkbox" name="send_group" id="send_group" value="1" />
|
||||
<span class="desc">$T('srv-explain-send_group')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="optional">$T('srv-optional')</label>
|
||||
<input type="checkbox" name="optional" id="optional" value="1" />
|
||||
<span class="desc">$T('srv-optional')</span>
|
||||
@@ -98,12 +96,14 @@
|
||||
<label class="config" for="categories">$T('srv-categories')</label>
|
||||
<select name="categories" id="categories" multiple>
|
||||
<!--#for $cat in $cats#-->
|
||||
<option value="$cat" <!--#if $cat == "Default"#-->selected<!--#end if#-->>$cat</option>
|
||||
<option value="$cat" <!--#if $cat == "Default"#-->selected<!--#end if#-->>
|
||||
<!--#if $cat == "Default" then $T('Default') else $cat#-->
|
||||
</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<span class="desc">$T('srv-explain-categories')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="displayname">$T('srv-displayname')</label>
|
||||
<input type="text" name="displayname" id="displayname" />
|
||||
</div>
|
||||
@@ -118,40 +118,39 @@
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
</form>
|
||||
</form>
|
||||
|
||||
<!--#set $cur = 0#-->
|
||||
<!--#for $server in $servers#-->
|
||||
<!--#set $cur = $cur + 1#-->
|
||||
|
||||
<form action="saveServer" method="post" class="fullform" novalidate>
|
||||
<form action="saveServer" method="post" class="fullform" autocomplete="off" novalidate>
|
||||
<input type="hidden" name="session" value="$session" />
|
||||
<input type="hidden" name="server" value="$server['name']" />
|
||||
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$server['displayname']</h3>
|
||||
<span class="label label-primary">$T('srv-priority'): $server['priority']</span>
|
||||
<div class="section <!--#if int($server['enable']) == 0 then 'server-disabled' else ""#-->">
|
||||
<div class="col2 <!--#if int($server['enable']) == 0 then 'server-disabled' else ""#-->">
|
||||
<h3>$server['displayname'] <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<!--#if int($server['enable']) != 0#-->
|
||||
<span class="label label-primary" data-priority="$server['priority']#-->">$server['priority']</span>
|
||||
<span class="label label-primary" data-priority="$server['priority']#-->">$T('srv-priority'):</span>
|
||||
<!--#end if#-->
|
||||
<table><tr>
|
||||
<td><input type="checkbox" class="toggleServerCheckbox" id="enable_$server['host']" rel="$server['host']" name="q_enable" value="1" <!--#if int($server['enable']) != 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="enable_$server['host']"> $T('enabled')</label></td>
|
||||
<td><input type="checkbox" class="toggleServerCheckbox" id="enable_$cur" name="$server['name']" value="1" <!--#if int($server['enable']) != 0 then 'checked="checked"' else ""#--> /></td>
|
||||
<td><label for="enable_$cur">$T('enabled')</label></td>
|
||||
</tr></table>
|
||||
|
||||
<button type="button" class="btn btn-default showserver"><span class="glyphicon glyphicon-pencil"></span> $T('showDetails')</button>
|
||||
<button type="button" class="btn btn-default clrServer"><span class="glyphicon glyphicon-remove"></span> $T('button-clrServer')</button>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1" style="display:none;">
|
||||
<input type="hidden" name="enable" id="enable$cur" value="$int($server['enable'])" />
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="enable$cur">$T('srv-enable')</label>
|
||||
<input type="checkbox" name="enable" id="enable$cur" value="1" <!--#if int($server['enable']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('srv-enable')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="host$cur">$T('srv-host')</label>
|
||||
<input type="text" name="host" id="host$cur" value="$server['host']" />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="port$cur">$T('srv-port')</label>
|
||||
<input type="number" name="port" id="port$cur" value="$server['port']" size="8" />
|
||||
</div>
|
||||
@@ -159,7 +158,7 @@
|
||||
<label class="config" for="username$cur">$T('srv-username')</label>
|
||||
<input type="text" name="username" id="username$cur" value="$server['username']" />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="password$cur">$T('srv-password')</label>
|
||||
<input type="text" name="password" id="password$cur" value="$server['password']" />
|
||||
</div>
|
||||
@@ -171,7 +170,7 @@
|
||||
<label class="config" for="priority$cur">$T('srv-priority')</label>
|
||||
<input type="number" name="priority" id="priority$cur" value="$server['priority']" min="0" max="100" /> <i>$T('explain-svrprio')</i>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="retention$cur">$T('srv-retention')</label>
|
||||
<input type="number" name="retention" id="retention$cur" value="$server['retention']" min="0" /> <i>$T('days')</i>
|
||||
</div>
|
||||
@@ -179,7 +178,7 @@
|
||||
<label class="config" for="timeout$cur">$T('srv-timeout')</label>
|
||||
<input type="number" name="timeout" id="timeout$cur" value="$server['timeout']" min="30" /> <i>$T('seconds')</i>
|
||||
</div>
|
||||
<div class="field-pair alt <!--#if int($have_ssl) == 0 then "disabled" else ""#-->">
|
||||
<div class="field-pair <!--#if int($have_ssl) == 0 then "disabled" else ""#-->">
|
||||
<label class="config" for="ssl$cur">$T('srv-ssl')</label>
|
||||
<input type="checkbox" name="ssl" id="ssl$cur" value="1" <!--#if int($server['ssl']) != 0 and int($have_ssl) == 1 then 'checked="checked"' else ""#--> <!--#if int($have_ssl) == 0 then "disabled=\"disabled\"" else ""#--> />
|
||||
<span class="desc">$T('srv-ssl')</span>
|
||||
@@ -188,6 +187,7 @@
|
||||
<label class="config" for="ssl_type$cur">$T('srv-ssl_type')</label>
|
||||
<!--#if int($have_ssl) == 1#-->
|
||||
<select name="ssl_type" id="ssl_type$cur">
|
||||
<option value="" <!--#if $server['ssl_type'] == "" then 'selected="selected"' else ""#--> >$T('Default')</option>
|
||||
<!--#if 't12' in $ssl_protocols#-->
|
||||
<option value="t12" <!--#if $server['ssl_type'] == "t12" then 'selected="selected"' else ""#--> >TLS v1.2</option>
|
||||
<!--#end if#-->
|
||||
@@ -197,9 +197,6 @@
|
||||
<!--#if 't1' in $ssl_protocols#-->
|
||||
<option value="t1" <!--#if $server['ssl_type'] == "t1" then 'selected="selected"' else ""#--> >TLS v1</option>
|
||||
<!--#end if#-->
|
||||
<!--#if 'v23' in $ssl_protocols#-->
|
||||
<option value="v23" <!--#if $server['ssl_type'] == "v23" then 'selected="selected"' else ""#--> >SSL v23</option>
|
||||
<!--#end if#-->
|
||||
<!--#if 'v3' in $ssl_protocols#-->
|
||||
<option value="v3" <!--#if $server['ssl_type'] == "v3" then 'selected="selected"' else ""#--> >SSL v3</option>
|
||||
<!--#end if#-->
|
||||
@@ -215,7 +212,7 @@
|
||||
<input type="checkbox" name="optional" id="optional$cur" value="1" <!--#if int($server['optional']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('srv-optional')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="send_group$cur">$T('srv-send_group')</label>
|
||||
<input type="checkbox" name="send_group" id="send_group$cur" value="1" <!--#if int($server['send_group']) != 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('srv-explain-send_group')</span>
|
||||
@@ -224,12 +221,14 @@
|
||||
<label class="config" for="categories$cur">$T('srv-categories')</label>
|
||||
<select name="categories" id="categories$cur" multiple>
|
||||
<!--#for $cat in $cats#-->
|
||||
<option value="$cat" <!--#if $cat in $server['categories'] then 'selected' else ""#-->>$cat</option>
|
||||
<option value="$cat" <!--#if $cat in $server['categories'] then 'selected' else ""#-->>
|
||||
<!--#if $cat == "Default" then $T('Default') else $cat#-->
|
||||
</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<span class="desc">$T('srv-explain-categories')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="displayname$cur">$T('srv-displayname')</label>
|
||||
<input type="text" name="displayname" id="displayname$cur" value="$server['displayname']" />
|
||||
</div>
|
||||
@@ -259,9 +258,41 @@
|
||||
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script>
|
||||
<script type="text/javascript">
|
||||
\$(document).ready(function(){
|
||||
// Exception when change of priority, reload
|
||||
\$('input[name="priority"], input[name="displayname"]').on('change', function() {
|
||||
\$('.fullform').submit(function() {
|
||||
// Skip the fancy stuff, just submit
|
||||
this.submit()
|
||||
})
|
||||
})
|
||||
|
||||
/**
|
||||
Color the priority labels
|
||||
**/
|
||||
// They are already sorted
|
||||
var colorList = ["#cc3333", "#cc33a6", "#7f33cc", "#3366cc", "#59cc33"];
|
||||
var lastColor = colorList[0];
|
||||
var lastPrio = '-1';
|
||||
var theColor = '';
|
||||
\$('[data-priority]').each(function() {
|
||||
// New one?
|
||||
if(\$(this).data('priority') != lastPrio) {
|
||||
// Update
|
||||
theColor = colorList.pop() || lastColor;
|
||||
lastPrio = \$(this).data('priority');
|
||||
}
|
||||
\$(this).css('background-color', theColor)
|
||||
})
|
||||
|
||||
/**
|
||||
Click events
|
||||
**/
|
||||
\$('.showserver').click(function () {
|
||||
if(\$(this).parent().hasClass('server-disabled')) {
|
||||
\$(this).parent().parent().toggleClass('server-disabled')
|
||||
}
|
||||
\$(this).parent().next().toggle();
|
||||
\$(this).parent().next().next().toggle();
|
||||
if (\$(this).attr("value") == "$T('showDetails')") {
|
||||
@@ -292,7 +323,7 @@
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
location.reload();
|
||||
setTimeout(function() { location.reload(); }, 100)
|
||||
}
|
||||
return false;
|
||||
});
|
||||
@@ -302,12 +333,12 @@
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
location.reload();
|
||||
setTimeout(function() { location.reload(); }, 100)
|
||||
}
|
||||
return false;
|
||||
});
|
||||
\$('.toggleServerCheckbox').click(function(){
|
||||
var whichServer = \$(this).attr("rel");
|
||||
var whichServer = \$(this).attr("name");
|
||||
\$.ajax({
|
||||
type: "POST",
|
||||
url: "toggleServer",
|
||||
@@ -316,7 +347,7 @@
|
||||
// Let us leave!
|
||||
formWasSubmitted = true;
|
||||
formHasChanged = false;
|
||||
location.reload();
|
||||
setTimeout(function() { location.reload(); }, 100)
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
@@ -1,432 +1,440 @@
|
||||
<!--#set global $pane="Sorting"#-->
|
||||
<!--#set global $help_uri="configure-sorting-0-7"#-->
|
||||
<!--#set global $help_uri="configure-sorting-1-0"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
<form action="saveSorting" method="post" name="fullform" class="fullform">
|
||||
<input type="hidden" id="session" name="session" value="$session" />
|
||||
<input id="complete_dir" type="hidden" value="$complete_dir" />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('seriesSorting')</h3>
|
||||
<p>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="tv_cat" multiple="multiple" class="multiple_cats">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct in $tv_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<h5 class="darkred nomargin">$T('ft-download'): <span class="path">$complete_dir</span></h5>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config wide" for="enable_tv_sorting">$T('opt-tvsort')</label>
|
||||
<input type="checkbox" name="enable_tv_sorting" id="enable_tv_sorting" value="1" <!--#if int($enable_tv_sorting) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="tvfoldername">$T('sortString')</label>
|
||||
<input type="text" id="tvfoldername" name="tv_sort_string" value="$tv_sort_string" />
|
||||
<button class="btn btn-default clearBtn" type="button" class="clearBtn"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config">$T('presetSort')</label>
|
||||
<div class="presets float-left">
|
||||
<input type="button" onclick="tvSet('%sn/Season %s/%sn - %sx%0e - %en.%ext')" value="$T('button-Season1x05')" />
|
||||
<input type="button" onclick="tvSet('%sn/Season %s/%sn - S%0sE%0e - %en.%ext')" value="$T('button-SeasonS01E05')" /><br/>
|
||||
<input type="button" onclick="tvSet('%sn/%sx%0e - %en/%sn - %sx%0e - %en.%ext')" value="$T('button-Ep1x05')" />
|
||||
<input type="button" onclick="tvSet('%sn/S%0sE%0e - %en/%sn - S%0sE%0e - %en.%ext')" value="$T('button-EpS01E05')" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="previewtv" class="example">
|
||||
<form action="saveSorting" method="post" name="fullform" class="fullform" autocomplete="off">
|
||||
<input type="hidden" id="session" name="session" value="$session" />
|
||||
<input id="complete_dir" type="hidden" value="$complete_dir" />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('seriesSorting') <a href="$helpuri$help_uri#toc0" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="tv_cat" multiple="multiple" class="multiple_cats">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct in $tv_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
<!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="tvsamplename">Test Data</label>
|
||||
<input type="text" id="tvsamplename" name="tvsamplename" placeholder="$T('show-name') S01E05 - $T('ep-name') [DTS]" />
|
||||
<button class="btn btn-default clearBtn" type="button" class="clearBtn"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
<h5 class="darkred nomargin">$T('ft-download'): <span class="path">$complete_dir</span></h5>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sortResult')</label>
|
||||
<span class="desc path" id="previewtv-result"> </span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sort-legenda')</label>
|
||||
<input type="button" value="$T('sort-legenda')" onclick="jQuery(this).hide(); jQuery('#Key1').show();" />
|
||||
<table id="Key1" class="Key">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="align-right">$T('sort-meaning')</th>
|
||||
<th>$T('sort-pattern')</th>
|
||||
<th>$T('sort-result')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('show-name'):</b></td>
|
||||
<td>%sn</td>
|
||||
<td>$T('show-sp-name') ($T('case-adjusted'))</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td> </td>
|
||||
<td>%s.n</td>
|
||||
<td>$T('show-dot-name') ($T('case-adjusted'))</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%s_n</td>
|
||||
<td>$T('show-us-name') ($T('case-adjusted'))</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td class="align-right"><b>$T('show-name'):</b></td>
|
||||
<td>%sN</td>
|
||||
<td>$T('show-sp-name') </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%s.N</td>
|
||||
<td>$T('show-dot-name')</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td> </td>
|
||||
<td>%s_N</td>
|
||||
<td>$T('show-us-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('show-seasonNum'):</b></td>
|
||||
<td>%s</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td> </td>
|
||||
<td>%0s</td>
|
||||
<td>01</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('show-epNum'):</b></td>
|
||||
<td>%e</td>
|
||||
<td>5</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td> </td>
|
||||
<td>%0e</td>
|
||||
<td>05</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('ep-name'):</b></td>
|
||||
<td>%en</td>
|
||||
<td>$T('ep-sp-name')</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td> </td>
|
||||
<td>%e.n</td>
|
||||
<td>$T('ep-dot-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%e_n</td>
|
||||
<td>$T('ep-us-name')</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td class="align-right"><b>$T('fileExt'):</b></td>
|
||||
<td>%ext</td>
|
||||
<td>avi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgFilename'):</b></td>
|
||||
<td>%fn</td>
|
||||
<td>$T("sort-File")</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td class="align-right"><b>$T('orgDirname'):</b></td>
|
||||
<td>%dn</td>
|
||||
<td>$T("sort-Folder")</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('lowercase'):</b></td>
|
||||
<td>{$T('TEXT')}</td>
|
||||
<td>$T('text')</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('movieSort')</h3>
|
||||
<p>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="movie_cat" multiple="multiple" class="multiple_cats">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct in $movie_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<h5 class="darkred nomargin">$T('ft-download'): <span class="path">$complete_dir</span></h5>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config wide" for="enable_movie_sorting">$T('opt-movieSort')</label>
|
||||
<input type="checkbox" name="enable_movie_sorting" id="enable_movie_sorting" value="1" <!--#if int($enable_movie_sorting) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="movie_extra_folder">$T('opt-movieExtra')</label>
|
||||
<input type="checkbox" name="movie_extra_folder" id="movie_extra_folder" value="1" <!--#if int($movie_extra_folder) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="moviefoldername">$T('sortString')</label>
|
||||
<input type="text" name="movie_sort_string" id="moviefoldername" value="$movie_sort_string" />
|
||||
<button class="btn btn-default clearBtn" type="button" class="clearBtn"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="movieextra">$T('multiPartLabel')</label>
|
||||
<input type="text" name="movie_sort_extra" id="movieextra" value="$movie_sort_extra" />
|
||||
<button class="btn btn-default clearBtn" type="button" class="clearBtn"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config">$T('presetSort')</label>
|
||||
<div class="presets float-left">
|
||||
<input type="button" onclick="movieSet('%title (%y)/%title (%y).%ext',' CD%1');movieExtraFolder(false)" value="$T('button-inFolders')" />
|
||||
<input type="button" onclick="movieSet('%title (%y).%ext',' CD%1');movieExtraFolder(true)" value="$T('button-noFolders')" />
|
||||
<input type="button" onclick="movieSet('%0decade/%title (%y).%ext',' CD%1');movieExtraFolder(true)" value="Decades 1" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="previewmovie" class="example">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="moviesamplename">Test Data</label>
|
||||
<input type="text" id="moviesamplename" name="moviesamplename" placeholder="$T('movie-sp-name') (2009)" />
|
||||
<button class="btn btn-default clearBtn" type="button" class="clearBtn"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
<label class="config wide" for="enable_tv_sorting">$T('opt-tvsort')</label>
|
||||
<input type="checkbox" name="enable_tv_sorting" id="enable_tv_sorting" value="1" <!--#if int($enable_tv_sorting)> 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sortResult')</label>
|
||||
<span class="desc path" id="previewmovie-result"> </span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sort-legenda')</label>
|
||||
<input type="button" value="$T('sort-legenda')" onclick="jQuery(this).hide(); jQuery('#Key2').show();" />
|
||||
<table id="Key2" class="Key">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="align-right">$T('sort-meaning')</th>
|
||||
<th>$T('sort-pattern')</th>
|
||||
<th>$T('sort-result')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('sort-title'):</b></td>
|
||||
<td>%title</td>
|
||||
<td>$T('movie-sp-name')</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td> </td>
|
||||
<td>%.title</td>
|
||||
<td>$T('movie-dot-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%_title</td>
|
||||
<td>$T('movie-us-name')</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td class="align-right"><b>$T('year'):</b></td>
|
||||
<td>%y</td>
|
||||
<td>2009</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('extension'):</b></td>
|
||||
<td>%ext</td>
|
||||
<td>avi</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td class="align-right"><b>$T('decade'):</b></td>
|
||||
<td>%decade</td>
|
||||
<td>00</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%0decade</td>
|
||||
<td>2000</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td class="align-right"><b>$T('orgFilename'):</b></td>
|
||||
<td>%fn</td>
|
||||
<td>$T('sort-File')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgDirname'):</b></td>
|
||||
<td>%dn</td>
|
||||
<td>$T("sort-Folder")</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td class="align-right"><b>$T('lowercase'):</b></td>
|
||||
<td>{$T('TEXT')}</td>
|
||||
<td>$T('text')</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="align-right"><b>$T('multiPartLabel')</b></th>
|
||||
<th>$T('sort-pattern')</th>
|
||||
<th>$T('sort-result')</th>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('partNumber'):</b></td>
|
||||
<td>%1</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('dateSorting')</h3>
|
||||
<p>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="date_cat" multiple="multiple" class="multiple_cats">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct in $date_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<h5 class="darkred nomargin">$T('ft-download'): <span class="path">$complete_dir</span></h5>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config wide" for="enable_date_sorting">$T('opt-dateSort')</label>
|
||||
<input type="checkbox" name="enable_date_sorting" id="enable_date_sorting" value="1" <!--#if int($enable_date_sorting) > 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="datefoldername">$T('sortString')</label>
|
||||
<input type="text" name="date_sort_string" id="datefoldername" value="$date_sort_string" />
|
||||
<button class="btn btn-default clearBtn" type="button" class="clearBtn"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config">$T('presetSort')</label>
|
||||
<div class="presets float-left">
|
||||
<input type="button" onclick="dateSet('%t/%t - %y-%0m-%0d - %desc.%ext')" value="$T('button-ShowNameF')" />
|
||||
<input type="button" onclick="dateSet('%y-%0m/%t - %y-%0m-%0d - %desc.%ext')" value="$T('button-YMF')" />
|
||||
<input type="button" onclick="dateSet('%y-%0m-%0d/%t - %y-%0m-%0d - %desc.%ext')" value="$T('button-DailyF')" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="previewdate" class="example">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="datesamplename">Test Data</label>
|
||||
<input type="text" id="datesamplename" name="datesamplename" placeholder="$T('show-name') 2009-01-02" />
|
||||
<button class="btn btn-default clearBtn" type="button" class="clearBtn"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
<label class="config" for="tvfoldername">$T('sortString')</label>
|
||||
<input type="text" id="tvfoldername" name="tv_sort_string" value="$tv_sort_string" />
|
||||
<button class="btn btn-default clearBtn" type="button"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sortResult')</label>
|
||||
<span class="desc path" id="previewdate-result"> </span>
|
||||
<label class="config">$T('presetSort')</label>
|
||||
<div class="presets float-left">
|
||||
<input type="button" onclick="tvSet('%sn/Season %s/%sn - %sx%0e - %en.%ext')" value="$T('button-Season1x05')" />
|
||||
<input type="button" onclick="tvSet('%sn/Season %s/%sn - S%0sE%0e - %en.%ext')" value="$T('button-SeasonS01E05')" />
|
||||
<br/>
|
||||
<input type="button" onclick="tvSet('%sn/%sx%0e - %en/%sn - %sx%0e - %en.%ext')" value="$T('button-Ep1x05')" />
|
||||
<input type="button" onclick="tvSet('%sn/S%0sE%0e - %en/%sn - S%0sE%0e - %en.%ext')" value="$T('button-EpS01E05')" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sort-legenda')</label>
|
||||
<input type="button" value="$T('sort-legenda')" onclick="jQuery(this).hide(); jQuery('#Key3').show();" />
|
||||
<table id="Key3" class="Key">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="align-right">$T('sort-meaning')</th>
|
||||
<th>$T('sort-pattern')</th>
|
||||
<th>$T('sort-result')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('show-name'):</b></td>
|
||||
<td>%t</td>
|
||||
<td>$T('show-sp-name')</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td> </td>
|
||||
<td>%.t</td>
|
||||
<td>$T('show-dot-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%_t</td>
|
||||
<td>$T('show-us-name')</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td class="align-right"><b>$T('year'):</b></td>
|
||||
<td>%y</td>
|
||||
<td>2009</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('month'):</b></td>
|
||||
<td>%m</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td> </td>
|
||||
<td>%0m</td>
|
||||
<td>01</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('day-of-month'):</b></td>
|
||||
<td>%d</td>
|
||||
<td>2</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td> </td>
|
||||
<td>%0d</td>
|
||||
<td>02</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('decade'):</b></td>
|
||||
<td>%decade</td>
|
||||
<td>00</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td> </td>
|
||||
<td>%0decade</td>
|
||||
<td>2000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgFilename'):</b></td>
|
||||
<td>%fn</td>
|
||||
<td>$T('sort-File')</td>
|
||||
</tr>
|
||||
<tr class="even">
|
||||
<td class="align-right"><b>$T('lowercase'):</b></td>
|
||||
<td>{$T('TEXT')}</td>
|
||||
<td>$T('text')</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div id="previewtv" class="example">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="tvsamplename">Test Data</label>
|
||||
<input type="text" id="tvsamplename" name="tvsamplename" placeholder="$T('show-name') S01E05 - $T('ep-name') [DTS]" />
|
||||
<button class="btn btn-default clearBtn" type="button"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sortResult')</label> <span class="desc path" id="previewtv-result"> </span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sort-legenda')</label>
|
||||
<input type="button" value="$T('sort-legenda')" onclick="jQuery(this).hide(); jQuery('#Key1').show();" />
|
||||
<table id="Key1" class="Key">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="align-right">$T('sort-meaning')</th>
|
||||
<th>$T('sort-pattern')</th>
|
||||
<th>$T('sort-result')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('show-name'):</b></td>
|
||||
<td>%sn</td>
|
||||
<td>$T('show-sp-name') ($T('case-adjusted'))</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%s.n</td>
|
||||
<td>$T('show-dot-name') ($T('case-adjusted'))</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%s_n</td>
|
||||
<td>$T('show-us-name') ($T('case-adjusted'))</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('show-name'):</b></td>
|
||||
<td>%sN</td>
|
||||
<td>$T('show-sp-name') </td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%s.N</td>
|
||||
<td>$T('show-dot-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%s_N</td>
|
||||
<td>$T('show-us-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('show-seasonNum'):</b></td>
|
||||
<td>%s</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%0s</td>
|
||||
<td>01</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('show-epNum'):</b></td>
|
||||
<td>%e</td>
|
||||
<td>5</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%0e</td>
|
||||
<td>05</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('ep-name'):</b></td>
|
||||
<td>%en</td>
|
||||
<td>$T('ep-sp-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%e.n</td>
|
||||
<td>$T('ep-dot-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%e_n</td>
|
||||
<td>$T('ep-us-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('fileExt'):</b></td>
|
||||
<td>%ext</td>
|
||||
<td>avi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgFilename'):</b></td>
|
||||
<td>%fn</td>
|
||||
<td>$T("sort-File")</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgDirname'):</b></td>
|
||||
<td>%dn</td>
|
||||
<td>$T("sort-Folder")</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('lowercase'):</b></td>
|
||||
<td>{$T('TEXT')}</td>
|
||||
<td>$T('text')</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<!-- /col1 -->
|
||||
</div>
|
||||
<!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('movieSort') <a href="$helpuri$help_uri#toc6" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="movie_cat" multiple="multiple" class="multiple_cats">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct in $movie_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
<!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<h5 class="darkred nomargin">$T('ft-download'): <span class="path">$complete_dir</span></h5>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="enable_movie_sorting">$T('opt-movieSort')</label>
|
||||
<input type="checkbox" name="enable_movie_sorting" id="enable_movie_sorting" value="1" <!--#if int($enable_movie_sorting)> 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="movie_extra_folder">$T('opt-movieExtra')</label>
|
||||
<input type="checkbox" name="movie_extra_folder" id="movie_extra_folder" value="1" <!--#if int($movie_extra_folder)> 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="moviefoldername">$T('sortString')</label>
|
||||
<input type="text" name="movie_sort_string" id="moviefoldername" value="$movie_sort_string" />
|
||||
<button class="btn btn-default clearBtn" type="button"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="movieextra">$T('multiPartLabel')</label>
|
||||
<input type="text" name="movie_sort_extra" id="movieextra" value="$movie_sort_extra" />
|
||||
<button class="btn btn-default clearBtn" type="button"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('presetSort')</label>
|
||||
<div class="presets float-left">
|
||||
<input type="button" onclick="movieSet('%title (%y)/%title (%y).%ext',' CD%1');movieExtraFolder(false)" value="$T('button-inFolders')" />
|
||||
<input type="button" onclick="movieSet('%title (%y).%ext',' CD%1');movieExtraFolder(true)" value="$T('button-noFolders')" />
|
||||
<input type="button" onclick="movieSet('%0decade/%title (%y).%ext',' CD%1');movieExtraFolder(true)" value="Decades 1" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="previewmovie" class="example">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="moviesamplename">Test Data</label>
|
||||
<input type="text" id="moviesamplename" name="moviesamplename" placeholder="$T('movie-sp-name') (2009)" />
|
||||
<button class="btn btn-default clearBtn" type="button"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sortResult')</label> <span class="desc path" id="previewmovie-result"> </span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sort-legenda')</label>
|
||||
<input type="button" value="$T('sort-legenda')" onclick="jQuery(this).hide(); jQuery('#Key2').show();" />
|
||||
<table id="Key2" class="Key">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="align-right">$T('sort-meaning')</th>
|
||||
<th>$T('sort-pattern')</th>
|
||||
<th>$T('sort-result')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('sort-title'):</b></td>
|
||||
<td>%title</td>
|
||||
<td>$T('movie-sp-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%.title</td>
|
||||
<td>$T('movie-dot-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%_title</td>
|
||||
<td>$T('movie-us-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('year'):</b></td>
|
||||
<td>%y</td>
|
||||
<td>2009</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('extension'):</b></td>
|
||||
<td>%ext</td>
|
||||
<td>avi</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('decade'):</b></td>
|
||||
<td>%decade</td>
|
||||
<td>00</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%0decade</td>
|
||||
<td>2000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgFilename'):</b></td>
|
||||
<td>%fn</td>
|
||||
<td>$T('sort-File')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgDirname'):</b></td>
|
||||
<td>%dn</td>
|
||||
<td>$T("sort-Folder")</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('lowercase'):</b></td>
|
||||
<td>{$T('TEXT')}</td>
|
||||
<td>$T('text')</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<th class="align-right"><b>$T('multiPartLabel')</b></th>
|
||||
<th>$T('sort-pattern')</th>
|
||||
<th>$T('sort-result')</th>
|
||||
</tr>
|
||||
</tbody>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('partNumber'):</b></td>
|
||||
<td>%1</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<!-- /col1 -->
|
||||
</div>
|
||||
<!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('dateSorting') <a href="$helpuri$help_uri#toc9" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
<p>
|
||||
<b>$T('affectedCat')</b><br/>
|
||||
<select name="date_cat" multiple="multiple" class="multiple_cats">
|
||||
<!--#for $ct in $cat_list#-->
|
||||
<option value="$ct" <!--#if $ct in $date_categories then 'selected="selected"' else ""#--> >$Tspec($ct)</option>
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
</div>
|
||||
<!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<h5 class="darkred nomargin">$T('ft-download'): <span class="path">$complete_dir</span></h5>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="enable_date_sorting">$T('opt-dateSort')</label>
|
||||
<input type="checkbox" name="enable_date_sorting" id="enable_date_sorting" value="1" <!--#if int($enable_date_sorting)> 0 then 'checked="checked"' else ""#--> />
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="datefoldername">$T('sortString')</label>
|
||||
<input type="text" name="date_sort_string" id="datefoldername" value="$date_sort_string" />
|
||||
<button class="btn btn-default clearBtn" type="button"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('presetSort')</label>
|
||||
<div class="presets float-left">
|
||||
<input type="button" onclick="dateSet('%t/%t - %y-%0m-%0d - %desc.%ext')" value="$T('button-ShowNameF')" />
|
||||
<input type="button" onclick="dateSet('%y-%0m/%t - %y-%0m-%0d - %desc.%ext')" value="$T('button-YMF')" />
|
||||
<input type="button" onclick="dateSet('%y-%0m-%0d/%t - %y-%0m-%0d - %desc.%ext')" value="$T('button-DailyF')" />
|
||||
</div>
|
||||
</div>
|
||||
<div id="previewdate" class="example">
|
||||
<div class="field-pair">
|
||||
<label class="config" for="datesamplename">Test Data</label>
|
||||
<input type="text" id="datesamplename" name="datesamplename" placeholder="$T('show-name') 2009-01-02" />
|
||||
<button class="btn btn-default clearBtn" type="button"><span class="glyphicon glyphicon-remove"></span> $T('button-clear')</button>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sortResult')</label> <span class="desc path" id="previewdate-result"> </span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config">$T('sort-legenda')</label>
|
||||
<input type="button" value="$T('sort-legenda')" onclick="jQuery(this).hide(); jQuery('#Key3').show();" />
|
||||
<table id="Key3" class="Key">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="align-right">$T('sort-meaning')</th>
|
||||
<th>$T('sort-pattern')</th>
|
||||
<th>$T('sort-result')</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('show-name'):</b></td>
|
||||
<td>%t</td>
|
||||
<td>$T('show-sp-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%.t</td>
|
||||
<td>$T('show-dot-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%_t</td>
|
||||
<td>$T('show-us-name')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('year'):</b></td>
|
||||
<td>%y</td>
|
||||
<td>2009</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('month'):</b></td>
|
||||
<td>%m</td>
|
||||
<td>1</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%0m</td>
|
||||
<td>01</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('day-of-month'):</b></td>
|
||||
<td>%d</td>
|
||||
<td>2</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%0d</td>
|
||||
<td>02</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('decade'):</b></td>
|
||||
<td>%decade</td>
|
||||
<td>00</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td> </td>
|
||||
<td>%0decade</td>
|
||||
<td>2000</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('orgFilename'):</b></td>
|
||||
<td>%fn</td>
|
||||
<td>$T('sort-File')</td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="align-right"><b>$T('lowercase'):</b></td>
|
||||
<td>{$T('TEXT')}</td>
|
||||
<td>$T('text')</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<!-- /col1 -->
|
||||
</div>
|
||||
<!-- /section -->
|
||||
</form>
|
||||
</div><!-- /colmask -->
|
||||
</div>
|
||||
<!-- /colmask -->
|
||||
|
||||
<script>
|
||||
<script type="text/javascript">
|
||||
// http://stackoverflow.com/questions/2219924/idiomatic-jquery-delayed-event-only-after-a-short-pause-in-typing-e-g-timew
|
||||
var typewatch = (function(){
|
||||
var timer = 0;
|
||||
@@ -518,22 +526,19 @@
|
||||
else
|
||||
\$('#previewdate').hide();
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
<script>
|
||||
\$(document).ready(function(){
|
||||
new_previewtv();
|
||||
new_previewmovie();
|
||||
new_previewdate();
|
||||
|
||||
\$('#tvfoldername, #tvsamplename').bind("keyup focus", new_previewtv);
|
||||
\$('#moviefoldername, #movieextra, #moviesamplename').bind("keyup focus", new_previewmovie);
|
||||
\$('#datefoldername, #datesamplename').bind("keyup focus", new_previewdate);
|
||||
\$('.clearBtn').click(function(){
|
||||
\$(this).prev().val('').focus();
|
||||
|
||||
\$(document).ready(function(){
|
||||
new_previewtv();
|
||||
new_previewmovie();
|
||||
new_previewdate();
|
||||
|
||||
\$('#tvfoldername, #tvsamplename').bind("keyup focus", new_previewtv);
|
||||
\$('#moviefoldername, #movieextra, #moviesamplename').bind("keyup focus", new_previewmovie);
|
||||
\$('#datefoldername, #datesamplename').bind("keyup focus", new_previewdate);
|
||||
\$('.clearBtn').click(function(){
|
||||
\$(this).prev().val('').focus();
|
||||
});
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
<!--#include $webdir + "/_inc_footer_uc.tmpl"#-->
|
||||
|
||||
@@ -1,60 +1,56 @@
|
||||
<!--#set global $pane="Special"#-->
|
||||
<!--#set global $help_uri="configure+special-0-8"#-->
|
||||
<!--#set global $help_uri="configure-special-1-0"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
<form action="saveSpecial" method="post" name="fullform" class="fullform">
|
||||
<input type="hidden" id="session" name="session" value="$session" />
|
||||
<div class="padTable">
|
||||
<h4 class="darkred nomargin">$T('explain-special')</h4>
|
||||
</div>
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('sptag-boolean')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<!--#set $odd = False#-->
|
||||
<!--#for $option in $switches#-->
|
||||
<!--#set $odd = not $odd#-->
|
||||
<div class="field-pair <!--#if $odd then "alt" else ""#-->">
|
||||
<label class="config wide" for="$option[0]">
|
||||
$option[0] ( <span class="path"><!--#if $option[2] then $T('on') else $T('off')#--></span> )
|
||||
<!--#if $option[1] != $option[2] then '<span class="glyphicon glyphicon-asterisk"></span>' else ''#-->
|
||||
</label>
|
||||
<input type="checkbox" name="$option[0]" id="$option[0]" value="1" <!--#if int($option[1]) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc"></span>
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default sabnzbd_restart"><span class="glyphicon glyphicon-refresh"></span> $T('button-restart') SABnzbd</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('sptag-entries')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<!--#set $odd = False#-->
|
||||
<!--#for $option in $entries#-->
|
||||
<!--#set $odd = not $odd#-->
|
||||
<div class="field-pair <!--#if $odd then "alt" else ""#-->">
|
||||
<label class="config narrow" for="$option[0]">$option[0] ( <span class="path">$option[2]</span> )</label>
|
||||
<input type="text" name="$option[0]" id="$option[0]" value="$option[1]" />
|
||||
<!--#if ($option[1] != $option[2]) and ($option[2] != "") then '<span class="glyphicon glyphicon-asterisk"></span>' else ''#-->
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default sabnzbd_restart"><span class="glyphicon glyphicon-refresh"></span> $T('button-restart') SABnzbd</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<form action="saveSpecial" method="post" autocomplete="off">
|
||||
<input type="hidden" id="session" name="session" value="$session" />
|
||||
<div class="padTable">
|
||||
<h4 class="darkred nomargin">$T('explain-special')</h4>
|
||||
</div>
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('sptag-boolean') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<!--#for $option in $switches#-->
|
||||
<div class="field-pair">
|
||||
<label class="config wide" for="$option[0]">
|
||||
$option[0] ( <span class="path"><!--#if $option[2] then $T('on') else $T('off')#--></span> )
|
||||
<!--#if $option[1] != $option[2] then '<span class="glyphicon glyphicon-asterisk"></span>' else ''#-->
|
||||
</label>
|
||||
<input type="checkbox" name="$option[0]" id="$option[0]" value="1" <!--#if int($option[1]) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc"></span>
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default sabnzbd_restart"><span class="glyphicon glyphicon-refresh"></span> $T('button-restart') SABnzbd</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('sptag-entries') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<!--#for $option in $entries#-->
|
||||
<div class="field-pair">
|
||||
<label class="config narrow" for="$option[0]">$option[0] ( <span class="path">$option[2]</span> )</label>
|
||||
<input type="text" name="$option[0]" id="$option[0]" value="$option[1]" />
|
||||
<!--#if ($option[1] != $option[2]) and ($option[2] != "") then '<span class="glyphicon glyphicon-asterisk"></span>' else ''#-->
|
||||
</div>
|
||||
<!--#end for#-->
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
<button class="btn btn-default sabnzbd_restart"><span class="glyphicon glyphicon-refresh"></span> $T('button-restart') SABnzbd</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
</form>
|
||||
</div><!-- /colmask -->
|
||||
|
||||
|
||||
@@ -1,499 +1,500 @@
|
||||
<!--#set global $pane="Switches"#-->
|
||||
<!--#set global $help_uri="configure-switches-0-8"#-->
|
||||
<!--#set global $help_uri="configure-switches-1-0"#-->
|
||||
<!--#include $webdir + "/_inc_header_uc.tmpl"#-->
|
||||
|
||||
<div class="colmask">
|
||||
<form action="saveSwitches" method="post" name="fullform" class="fullform">
|
||||
<input type="hidden" id="session" name="session" value="$session" />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-general')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="check_new_rel">$T('opt-check_new_rel')</label>
|
||||
<select name="check_new_rel" id="check_new_rel">
|
||||
<option value="0" <!--#if $check_new_rel == 0 then 'selected="selected"' else ""#--> >$T('off')</option>
|
||||
<option value="1" <!--#if $check_new_rel == 1 then 'selected="selected"' else ""#--> >$T('on')</option>
|
||||
<option value="2" <!--#if $check_new_rel == 2 then 'selected="selected"' else ""#--> >$T('also-test')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-check_new_rel')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="auto_browser">$T('opt-auto_browser')</label>
|
||||
<input type="checkbox" name="auto_browser" id="auto_browser" value="1" <!--#if int($auto_browser) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-auto_browser')</span>
|
||||
</div>
|
||||
<div class="field-pair alt <!--#if not $have_ampm then "disabled" else "" #-->">
|
||||
<label class="config" for="ampm">$T('opt-ampm')</label>
|
||||
<input type="checkbox" name="ampm" id="ampm" value="1" <!--#if int($ampm) > 0 then 'checked="checked"' else ""#--> <!--#if not $have_ampm then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-ampm')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-server')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="max_art_tries">$T('opt-max_art_tries')</label>
|
||||
<input type="number" name="max_art_tries" id="max_art_tries" value="$max_art_tries" min="2" max="2000" />
|
||||
<span class="desc">$T('explain-max_art_tries')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="max_art_opt">$T('opt-max_art_opt')</label>
|
||||
<input type="checkbox" name="max_art_opt" id="max_art_opt" value="1" <!--#if int($max_art_opt) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-max_art_opt')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="load_balancing">$T('opt-load_balancing')</label>
|
||||
<select name="load_balancing" id="load_balancing">
|
||||
<option value="0" <!--#if $load_balancing == 0 then 'selected="selected"' else ""#--> >$T('no-load-balancing')</option>
|
||||
<option value="1" <!--#if $load_balancing == 1 then 'selected="selected"' else ""#--> >$T('load-balancing')</option>
|
||||
<option value="2" <!--#if $load_balancing == 2 then 'selected="selected"' else ""#--> >$T('load-balancing-happy-eyeballs')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-load_balancing')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="auto_disconnect">$T('opt-auto_disconnect')</label>
|
||||
<input type="checkbox" name="auto_disconnect" id="auto_disconnect" value="1" <!--#if int($auto_disconnect) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-auto_disconnect')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-queue')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="fail_hopeless">$T('opt-fail_hopeless')</label>
|
||||
<input type="checkbox" name="fail_hopeless" id="fail_hopeless" value="1" <!--#if int($fail_hopeless) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-fail_hopeless')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="pre_check">$T('opt-pre_check')</label>
|
||||
<input type="checkbox" name="pre_check" id="pre_check" value="1" <!--#if int($pre_check) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-pre_check')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="no_dupes">$T('opt-no_dupes')</label>
|
||||
<select name="no_dupes" id="no_dupes">
|
||||
<option value="0" <!--#if int($no_dupes) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($no_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
|
||||
<option value="2" <!--#if int($no_dupes) == 2 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-no_dupes')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="no_series_dupes">$T('opt-no_series_dupes')</label>
|
||||
<select name="no_series_dupes" id="no_series_dupes">
|
||||
<option value="0" <!--#if int($no_series_dupes) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($no_series_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
|
||||
<option value="2" <!--#if int($no_series_dupes) == 2 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-no_series_dupes')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="pause_on_post_processing">$T('opt-pause_on_post_processing')</label>
|
||||
<input type="checkbox" name="pause_on_post_processing" id="pause_on_post_processing" value="1" <!--#if int($pause_on_post_processing) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-pause_on_post_processing')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pause_on_pwrar">$T('opt-pause_on_pwrar')</label>
|
||||
<select name="pause_on_pwrar" id="pause_on_pwrar">
|
||||
<option value="0" <!--#if int($pause_on_pwrar) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($pause_on_pwrar) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="2" <!--#if int($pause_on_pwrar) == 2 then 'selected="selected"' else ""#--> >$T('abort')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-pause_on_pwrar')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="action_on_unwanted_extensions">$T('opt-action_on_unwanted_extensions')</label>
|
||||
<select name="action_on_unwanted_extensions" id="action_on_unwanted_extensions">
|
||||
<option value="0" <!--#if int($action_on_unwanted_extensions) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($action_on_unwanted_extensions) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="2" <!--#if int($action_on_unwanted_extensions) == 2 then 'selected="selected"' else ""#--> >$T('abort')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-action_on_unwanted_extensions')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="unwanted_extensions">$T('opt-unwanted_extensions')</label>
|
||||
<input type="text" name="unwanted_extensions" id="unwanted_extensions" value="$unwanted_extensions"/>
|
||||
<span class="desc">$T('explain-unwanted_extensions')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="top_only">$T('opt-top_only')</label>
|
||||
<input type="checkbox" name="top_only" id="top_only" value="1" <!--#if int($top_only) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-top_only')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="auto_sort">$T('opt-auto_sort')</label>
|
||||
<input type="checkbox" name="auto_sort" id="auto_sort" value="1" <!--#if int($auto_sort) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-auto_sort')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="pre_script">$T('opt-pre_script')</label>
|
||||
<select name="pre_script" id="pre_script">
|
||||
<!--#for $sc in $script_list#-->
|
||||
<!--#if $sc.lower() == $pre_script.lower()#-->
|
||||
<option value="$sc" selected="selected">$Tspec($sc)</option>
|
||||
<!--#else#-->
|
||||
<option value="$sc">$Tspec($sc)</option>
|
||||
<!--#end if#-->
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<span class="desc">$T('explain-pre_script')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-pp')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="ignore_samples">$T('opt-ignore_samples')</label>
|
||||
<select name="ignore_samples" id="ignore_samples">
|
||||
<option value="0" <!--#if int($ignore_samples) == 0 then 'selected="selected"' else ""#--> >$T('igsam-off')</option>
|
||||
<option value="1" <!--#if int($ignore_samples) == 1 then 'selected="selected"' else ""#--> >$T('igsam-del')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-ignore_samples')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="quick_check">$T('opt-quick_check')</label>
|
||||
<input type="checkbox" name="quick_check" id="quick_check" value="1" <!--#if int($quick_check) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-quick_check')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="enable_all_par">$T('opt-enable_all_par')</label>
|
||||
<input type="checkbox" name="enable_all_par" id="enable_all_par" value="1" <!--#if int($enable_all_par) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_all_par')</span>
|
||||
</div>
|
||||
<div class="field-pair <!--#if not $have_unrar then "disabled" else "" #-->">
|
||||
<label class="config" for="enable_unrar">$T('opt-enable_unrar')</label>
|
||||
<input type="checkbox" name="enable_unrar" id="enable_unrar" value="1" <!--#if not $have_unrar then 'readonly="readonly" disabled="disabled"' else "" #--> <!--#if int($enable_unrar) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_unrar')</span>
|
||||
</div>
|
||||
<div class="field-pair alt <!--#if not $have_unzip then "disabled" else "" #-->">
|
||||
<label class="config" for="enable_unzip">$T('opt-enable_unzip')</label>
|
||||
<input type="checkbox" name="enable_unzip" id="enable_unzip" value="1" <!--#if not $have_unzip then 'readonly="readonly" disabled="disabled"' else "" #--> <!--#if int($enable_unzip) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_unzip')</span>
|
||||
</div>
|
||||
<div class="field-pair <!--#if not $have_7zip then "disabled" else "" #-->">
|
||||
<label class="config" for="enable_7zip">$T('opt-enable_7zip')</label>
|
||||
<input type="checkbox" name="enable_7zip" id="enable_7zip" value="1" <!--#if not $have_7zip then 'readonly="readonly" disabled="disabled"' else "" #--> <!--#if int($enable_7zip) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_7zip')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="enable_recursive">$T('opt-enable_recursive')</label>
|
||||
<input type="checkbox" name="enable_recursive" id="enable_recursive" value="1" <!--#if int($enable_recursive) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_recursive')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="flat_unpack">$T('opt-flat_unpack')</label>
|
||||
<input type="checkbox" name="flat_unpack" id="flat_unpack" value="1" <!--#if int($flat_unpack) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-flat_unpack')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="overwrite_files">$T('opt-overwrite_files')</label>
|
||||
<input type="checkbox" name="overwrite_files" id="overwrite_files" value="1" <!--#if int($overwrite_files) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-overwrite_files')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="enable_filejoin">$T('opt-enable_filejoin')</label>
|
||||
<input type="checkbox" name="enable_filejoin" id="enable_filejoin" value="1" <!--#if int($enable_filejoin) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_filejoin')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="enable_tsjoin">$T('opt-enable_tsjoin')</label>
|
||||
<input type="checkbox" name="enable_tsjoin" id="enable_tsjoin" value="1" <!--#if int($enable_tsjoin) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-ts_join')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="safe_postproc">$T('opt-safe_postproc')</label>
|
||||
<input type="checkbox" name="safe_postproc" id="safe_postproc" value="1" <!--#if int($safe_postproc) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-safe_postproc')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="sfv_check">$T('opt-sfv_check')</label>
|
||||
<input type="checkbox" name="sfv_check" id="sfv_check" value="1" <!--#if int($sfv_check) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-sfv_check')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="unpack_check">$T('opt-unpack_check')</label>
|
||||
<input type="checkbox" name="unpack_check" id="unpack_check" value="1" <!--#if int($unpack_check) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-unpack_check')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="script_can_fail">$T('opt-script_can_fail')</label>
|
||||
<input type="checkbox" name="script_can_fail" id="script_can_fail" value="1" <!--#if int($script_can_fail) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-script_can_fail')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="new_nzb_on_failure">$T('opt-new_nzb_on_failure')</label>
|
||||
<input type="checkbox" name="new_nzb_on_failure" id="new_nzb_on_failure" value="1" <!--#if int($new_nzb_on_failure) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-new_nzb_on_failure')</span>
|
||||
</div>
|
||||
<div class="field-pair alt <!--#if not $have_multicore then "disabled" else "" #-->">
|
||||
<label class="config" for="par2_multicore">$T('opt-par2_multicore')</label>
|
||||
<input type="checkbox" name="par2_multicore" id="par2_multicore" value="1" <!--#if int($par2_multicore) > 0 then 'checked="checked"' else ""#--> <!--#if not $have_multicore then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-par2_multicore')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="par_option">$T('opt-par_option')</label>
|
||||
<input type="text" name="par_option" id="par_option" value="$par_option" />
|
||||
<span class="desc">$T('explain-par_option')</span>
|
||||
</div>
|
||||
<div class="field-pair alt <!--#if not $have_nice then "disabled" else "" #-->">
|
||||
<label class="config" for="nice">$T('opt-nice')</label>
|
||||
<input type="text" name="nice" id="nice" value="$nice" <!--#if not $have_nice then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-nice')</span>
|
||||
</div>
|
||||
<div class="field-pair <!--#if not $have_ionice then "disabled" else "" #-->">
|
||||
<label class="config" for="ionice">$T('opt-ionice')</label>
|
||||
<input type="text" name="ionice" id="ionice" value="$ionice" <!--#if not $have_ionice then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-ionice')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="cleanup_list">$T('opt-cleanup_list')</label>
|
||||
<input type="text" name="cleanup_list" id="cleanup_list" value="$cleanup_list"/>
|
||||
<span class="desc">$T('explain-cleanup_list')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-naming')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="folder_rename">$T('opt-folder_rename')</label>
|
||||
<input type="checkbox" name="folder_rename" id="folder_rename" value="1" <!--#if int($folder_rename) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-folder_rename')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="replace_spaces">$T('opt-replace_spaces')</label>
|
||||
<input type="checkbox" name="replace_spaces" id="replace_spaces" value="1" <!--#if int($replace_spaces) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-replace_spaces')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="replace_dots">$T('opt-replace_dots')</label>
|
||||
<input type="checkbox" name="replace_dots" id="replace_dots" value="1" <!--#if int($replace_dots) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-replace_dots')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="replace_illegal">$T('opt-replace_illegal')</label>
|
||||
<input type="checkbox" name="replace_illegal" id="replace_illegal" value="1" <!--#if int($replace_illegal) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-replace_illegal')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="sanitize_safe">$T('opt-sanitize_safe')</label>
|
||||
<input type="checkbox" name="sanitize_safe" id="sanitize_safe" value="1" <!--#if int($sanitize_safe) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-sanitize_safe')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="enable_meta">$T('opt-enable_meta')</label>
|
||||
<input type="checkbox" name="enable_meta" id="enable_meta" value="1" <!--#if int($enable_meta) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_meta')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-quota')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="quota_size">$T('opt-quota_size')</label>
|
||||
<input type="text" name="quota_size" id="quota_size" value="$quota_size" class="smaller_input" />
|
||||
<span class="desc">$T('explain-quota_size')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="quota_period">$T('opt-quota_period')</label>
|
||||
<select name="quota_period" id="quota_period">
|
||||
<option value="d" <!--#if $quota_period == "d" then 'selected="selected"' else ""#--> >$T('day').capitalize()</option>
|
||||
<option value="w" <!--#if $quota_period == "w" then 'selected="selected"' else ""#--> >$T('week').capitalize()</option>
|
||||
<option value="m" <!--#if $quota_period == "m" then 'selected="selected"' else ""#--> >$T('month').capitalize()</option>
|
||||
<option value="x" <!--#if $quota_period == "x" then 'selected="selected"' else ""#--> >$T('manual').capitalize()</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-quota_period')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="quota_day">$T('opt-quota_day')</label>
|
||||
<input type="text" name="quota_day" id="quota_day" value="$quota_day" class="smaller_input" />
|
||||
<span class="desc">$T('explain-quota_day')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="quota_resume">$T('opt-quota_resume')</label>
|
||||
<input type="checkbox" name="quota_resume" id="quota_resume" value="1" <!--#if int($quota_resume) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-quota_resume')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-indexing')</h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="rating_enable">$T('opt-rating_enable')</label>
|
||||
<input type="checkbox" name="rating_enable" id="rating_enable" value="1" <!--#if int($rating_enable) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-rating_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="rating_api_key">$T('opt-rating_api_key')</label>
|
||||
<input type="text" name="rating_api_key" id="rating_api_key" value="$rating_api_key" />
|
||||
<span class="desc">$T('explain-rating_api_key')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="rating_feedback">$T('opt-rating_feedback')</label>
|
||||
<input type="checkbox" name="rating_feedback" id="rating_feedback" value="1" <!--#if int($rating_feedback) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-rating_feedback')</span>
|
||||
</div>
|
||||
<div class="field-pair alt">
|
||||
<label class="config" for="rating_filter_enable">$T('opt-rating_filter_enable')</label>
|
||||
<input type="checkbox" name="rating_filter_enable" id="rating_filter_enable" value="1" <!--#if int($rating_filter_enable) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-rating_filter_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair" id="rating_filter_abort">
|
||||
<label class="config">$T('opt-rating_filter_abort_if')</label>
|
||||
<div class="rating-filter">
|
||||
<p>
|
||||
<label for="rating_filter_abort_video">$T('opt-rating_filter_video')</label>
|
||||
<select name="rating_filter_abort_video" id="rating_filter_abort_video">
|
||||
<option value="0" <!--#if $rating_filter_abort_video == 0 then 'selected="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_abort_video == $val then 'selected="selected"' else ""#--> >$val $T('orLess')</option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_abort_audio">$T('opt-rating_filter_audio')</label>
|
||||
<select name="rating_filter_abort_audio" id="rating_filter_abort_audio">
|
||||
<option value="0" <!--#if $rating_filter_abort_audio == 0 then 'selected="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_abort_audio == $val then 'selected="selected"' else ""#--> >$val $T('orLess')</option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_encrypted" name="rating_filter_abort_encrypted" <!--#if int($rating_filter_abort_encrypted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_encrypted">$T('opt-rating_filter_passworded')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_encrypted_confirm" name="rating_filter_abort_encrypted_confirm" <!--#if int($rating_filter_abort_encrypted_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_encrypted_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_spam" name="rating_filter_abort_spam" <!--#if int($rating_filter_abort_spam) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_spam">$T('opt-rating_filter_spam')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_spam_confirm" name="rating_filter_abort_spam_confirm" <!--#if int($rating_filter_abort_spam_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_spam_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_downvoted" name="rating_filter_abort_downvoted" <!--#if int($rating_filter_abort_downvoted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_downvoted">$T('opt-rating_filter_downvoted')</label>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_abort_keywords">$T('opt-rating_filter_keywords')</label>
|
||||
<input type="text" name="rating_filter_abort_keywords" id="rating_filter_abort_keywords" value="$rating_filter_abort_keywords"/>
|
||||
<span class="desc">$T('explain-rating_filter_keywords')</span>
|
||||
</p>
|
||||
<form action="saveSwitches" method="post" name="fullform" class="fullform" autocomplete="off">
|
||||
<input type="hidden" id="session" name="session" value="$session" />
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-general') <a href="$helpuri$help_uri" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="auto_browser">$T('opt-auto_browser')</label>
|
||||
<input type="checkbox" name="auto_browser" id="auto_browser" value="1" <!--#if int($auto_browser) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-auto_browser')</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair alt" id="rating_filter_pause">
|
||||
<label class="config">$T('opt-rating_filter_pause_if')</label>
|
||||
<div class="rating-filter">
|
||||
<p>
|
||||
<label for="rating_filter_pause_video">$T('opt-rating_filter_video')</label>
|
||||
<select name="rating_filter_pause_video" id="rating_filter_pause_video">
|
||||
<option value="0" <!--#if $rating_filter_pause_video == 0 then 'selected="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_pause_video == $val then 'selected="selected"' else ""#--> >$val $T('orLess')</option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_pause_audio">$T('opt-rating_filter_audio')</label>
|
||||
<select name="rating_filter_pause_audio" id="rating_filter_pause_audio">
|
||||
<option value="0" <!--#if $rating_filter_pause_audio == 0 then 'selected="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_pause_audio == $val then 'selected="selected"' else ""#--> >$val $T('orLess') </option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_encrypted" name="rating_filter_pause_encrypted" <!--#if int($rating_filter_pause_encrypted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_encrypted">$T('opt-rating_filter_passworded')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_encrypted_confirm" name="rating_filter_pause_encrypted_confirm" <!--#if int($rating_filter_pause_encrypted_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_encrypted_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_spam" name="rating_filter_pause_spam" <!--#if int($rating_filter_pause_spam) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_spam">$T('opt-rating_filter_spam')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_spam_confirm" name="rating_filter_pause_spam_confirm" <!--#if int($rating_filter_pause_spam_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_spam_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_downvoted" name="rating_filter_pause_downvoted" <!--#if int($rating_filter_pause_downvoted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_downvoted">$T('opt-rating_filter_downvoted')</label>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_pause_keywords">$T('opt-rating_filter_keywords')</label>
|
||||
<input type="text" name="rating_filter_pause_keywords" id="rating_filter_pause_keywords" value="$rating_filter_pause_keywords"/>
|
||||
<span class="desc">$T('explain-rating_filter_keywords')</span>
|
||||
</p>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="check_new_rel">$T('opt-check_new_rel')</label>
|
||||
<select name="check_new_rel" id="check_new_rel">
|
||||
<option value="0" <!--#if $check_new_rel == 0 then 'selected="selected"' else ""#--> >$T('off')</option>
|
||||
<option value="1" <!--#if $check_new_rel == 1 then 'selected="selected"' else ""#--> >$T('on')</option>
|
||||
<option value="2" <!--#if $check_new_rel == 2 then 'selected="selected"' else ""#--> >$T('also-test')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-check_new_rel')</span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="field-pair <!--#if not $have_ampm then "disabled" else "" #-->">
|
||||
<label class="config" for="ampm">$T('opt-ampm')</label>
|
||||
<input type="checkbox" name="ampm" id="ampm" value="1" <!--#if int($ampm) > 0 then 'checked="checked"' else ""#--> <!--#if not $have_ampm then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-ampm')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-server') <a href="$helpuri$help_uri#toc1" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="max_art_tries">$T('opt-max_art_tries')</label>
|
||||
<input type="number" name="max_art_tries" id="max_art_tries" value="$max_art_tries" min="2" max="2000" />
|
||||
<span class="desc">$T('explain-max_art_tries')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="max_art_opt">$T('opt-max_art_opt')</label>
|
||||
<input type="checkbox" name="max_art_opt" id="max_art_opt" value="1" <!--#if int($max_art_opt) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-max_art_opt')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="load_balancing">$T('opt-load_balancing')</label>
|
||||
<select name="load_balancing" id="load_balancing">
|
||||
<option value="0" <!--#if $load_balancing == 0 then 'selected="selected"' else ""#--> >$T('no-load-balancing')</option>
|
||||
<option value="1" <!--#if $load_balancing == 1 then 'selected="selected"' else ""#--> >$T('load-balancing')</option>
|
||||
<option value="2" <!--#if $load_balancing == 2 then 'selected="selected"' else ""#--> >$T('load-balancing-happy-eyeballs')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-load_balancing')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="auto_disconnect">$T('opt-auto_disconnect')</label>
|
||||
<input type="checkbox" name="auto_disconnect" id="auto_disconnect" value="1" <!--#if int($auto_disconnect) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-auto_disconnect')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-queue') <a href="$helpuri$help_uri#toc2" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pre_script">$T('opt-pre_script')</label>
|
||||
<select name="pre_script" id="pre_script">
|
||||
<!--#for $sc in $script_list#-->
|
||||
<!--#if $sc.lower() == $pre_script.lower()#-->
|
||||
<option value="$sc" selected="selected">$Tspec($sc)</option>
|
||||
<!--#else#-->
|
||||
<option value="$sc">$Tspec($sc)</option>
|
||||
<!--#end if#-->
|
||||
<!--#end for#-->
|
||||
</select>
|
||||
<span class="desc">$T('explain-pre_script')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="top_only">$T('opt-top_only')</label>
|
||||
<input type="checkbox" name="top_only" id="top_only" value="1" <!--#if int($top_only) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-top_only')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pre_check">$T('opt-pre_check')</label>
|
||||
<input type="checkbox" name="pre_check" id="pre_check" value="1" <!--#if int($pre_check) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-pre_check')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="fail_hopeless">$T('opt-fail_hopeless')</label>
|
||||
<input type="checkbox" name="fail_hopeless" id="fail_hopeless" value="1" <!--#if int($fail_hopeless) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-fail_hopeless')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="no_dupes">$T('opt-no_dupes')</label>
|
||||
<select name="no_dupes" id="no_dupes">
|
||||
<option value="0" <!--#if int($no_dupes) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($no_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
|
||||
<option value="2" <!--#if int($no_dupes) == 2 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-no_dupes')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="no_series_dupes">$T('opt-no_series_dupes')</label>
|
||||
<select name="no_series_dupes" id="no_series_dupes">
|
||||
<option value="0" <!--#if int($no_series_dupes) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($no_series_dupes) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-ignore')</option>
|
||||
<option value="2" <!--#if int($no_series_dupes) == 2 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-no_series_dupes')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pause_on_pwrar">$T('opt-pause_on_pwrar')</label>
|
||||
<select name="pause_on_pwrar" id="pause_on_pwrar">
|
||||
<option value="0" <!--#if int($pause_on_pwrar) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($pause_on_pwrar) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="2" <!--#if int($pause_on_pwrar) == 2 then 'selected="selected"' else ""#--> >$T('abort')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-pause_on_pwrar')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="action_on_unwanted_extensions">$T('opt-action_on_unwanted_extensions')</label>
|
||||
<select name="action_on_unwanted_extensions" id="action_on_unwanted_extensions">
|
||||
<option value="0" <!--#if int($action_on_unwanted_extensions) == 0 then 'selected="selected"' else ""#--> >$T('nodupes-off')</option>
|
||||
<option value="1" <!--#if int($action_on_unwanted_extensions) == 1 then 'selected="selected"' else ""#--> >$T('nodupes-pause')</option>
|
||||
<option value="2" <!--#if int($action_on_unwanted_extensions) == 2 then 'selected="selected"' else ""#--> >$T('abort')</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-action_on_unwanted_extensions')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="unwanted_extensions">$T('opt-unwanted_extensions')</label>
|
||||
<input type="text" name="unwanted_extensions" id="unwanted_extensions" value="$unwanted_extensions"/>
|
||||
<span class="desc">$T('explain-unwanted_extensions')</span>
|
||||
</div>
|
||||
|
||||
<div class="field-pair">
|
||||
<label class="config" for="auto_sort">$T('opt-auto_sort')</label>
|
||||
<input type="checkbox" name="auto_sort" id="auto_sort" value="1" <!--#if int($auto_sort) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-auto_sort')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-pp') <a href="$helpuri$help_uri#toc3" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="pause_on_post_processing">$T('opt-pause_on_post_processing')</label>
|
||||
<input type="checkbox" name="pause_on_post_processing" id="pause_on_post_processing" value="1" <!--#if int($pause_on_post_processing) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-pause_on_post_processing')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="enable_all_par">$T('opt-enable_all_par')</label>
|
||||
<input type="checkbox" name="enable_all_par" id="enable_all_par" value="1" <!--#if int($enable_all_par) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_all_par')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="quick_check">$T('opt-quick_check')</label>
|
||||
<input type="checkbox" name="quick_check" id="quick_check" value="1" <!--#if int($quick_check) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-quick_check')</span>
|
||||
</div>
|
||||
<div class="field-pair <!--#if not $have_multicore then "disabled" else "" #-->">
|
||||
<label class="config" for="par2_multicore">$T('opt-par2_multicore')</label>
|
||||
<input type="checkbox" name="par2_multicore" id="par2_multicore" value="1" <!--#if int($par2_multicore) > 0 then 'checked="checked"' else ""#--> <!--#if not $have_multicore then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-par2_multicore')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="par_option">$T('opt-par_option')</label>
|
||||
<input type="text" name="par_option" id="par_option" value="$par_option" />
|
||||
<span class="desc">$T('explain-par_option')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="sfv_check">$T('opt-sfv_check')</label>
|
||||
<input type="checkbox" name="sfv_check" id="sfv_check" value="1" <!--#if int($sfv_check) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-sfv_check')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="safe_postproc">$T('opt-safe_postproc')</label>
|
||||
<input type="checkbox" name="safe_postproc" id="safe_postproc" value="1" <!--#if int($safe_postproc) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-safe_postproc')</span>
|
||||
</div>
|
||||
<div class="field-pair <!--#if not $have_unrar then "disabled" else "" #-->">
|
||||
<label class="config" for="enable_unrar">$T('opt-enable_unrar')</label>
|
||||
<input type="checkbox" name="enable_unrar" id="enable_unrar" value="1" <!--#if not $have_unrar then 'readonly="readonly" disabled="disabled"' else "" #--> <!--#if int($enable_unrar) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_unrar')</span>
|
||||
</div>
|
||||
<div class="field-pair <!--#if not $have_unzip then "disabled" else "" #-->">
|
||||
<label class="config" for="enable_unzip">$T('opt-enable_unzip')</label>
|
||||
<input type="checkbox" name="enable_unzip" id="enable_unzip" value="1" <!--#if not $have_unzip then 'readonly="readonly" disabled="disabled"' else "" #--> <!--#if int($enable_unzip) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_unzip')</span>
|
||||
</div>
|
||||
<div class="field-pair <!--#if not $have_7zip then "disabled" else "" #-->">
|
||||
<label class="config" for="enable_7zip">$T('opt-enable_7zip')</label>
|
||||
<input type="checkbox" name="enable_7zip" id="enable_7zip" value="1" <!--#if not $have_7zip then 'readonly="readonly" disabled="disabled"' else "" #--> <!--#if int($enable_7zip) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_7zip')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="enable_recursive">$T('opt-enable_recursive')</label>
|
||||
<input type="checkbox" name="enable_recursive" id="enable_recursive" value="1" <!--#if int($enable_recursive) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_recursive')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="flat_unpack">$T('opt-flat_unpack')</label>
|
||||
<input type="checkbox" name="flat_unpack" id="flat_unpack" value="1" <!--#if int($flat_unpack) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-flat_unpack')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="overwrite_files">$T('opt-overwrite_files')</label>
|
||||
<input type="checkbox" name="overwrite_files" id="overwrite_files" value="1" <!--#if int($overwrite_files) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-overwrite_files')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="enable_filejoin">$T('opt-enable_filejoin')</label>
|
||||
<input type="checkbox" name="enable_filejoin" id="enable_filejoin" value="1" <!--#if int($enable_filejoin) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_filejoin')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="enable_tsjoin">$T('opt-enable_tsjoin')</label>
|
||||
<input type="checkbox" name="enable_tsjoin" id="enable_tsjoin" value="1" <!--#if int($enable_tsjoin) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-ts_join')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="unpack_check">$T('opt-unpack_check')</label>
|
||||
<input type="checkbox" name="unpack_check" id="unpack_check" value="1" <!--#if int($unpack_check) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-unpack_check')</span>
|
||||
</div>
|
||||
|
||||
<div class="field-pair">
|
||||
<label class="config" for="script_can_fail">$T('opt-script_can_fail')</label>
|
||||
<input type="checkbox" name="script_can_fail" id="script_can_fail" value="1" <!--#if int($script_can_fail) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-script_can_fail')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="new_nzb_on_failure">$T('opt-new_nzb_on_failure')</label>
|
||||
<input type="checkbox" name="new_nzb_on_failure" id="new_nzb_on_failure" value="1" <!--#if int($new_nzb_on_failure) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-new_nzb_on_failure')</span>
|
||||
</div>
|
||||
<!--#if not $nt#-->
|
||||
<div class="field-pair <!--#if not $have_nice then "disabled" else "" #-->">
|
||||
<label class="config" for="nice">$T('opt-nice')</label>
|
||||
<input type="text" name="nice" id="nice" value="$nice" <!--#if not $have_nice then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-nice')</span>
|
||||
</div>
|
||||
<div class="field-pair <!--#if not $have_ionice then "disabled" else "" #-->">
|
||||
<label class="config" for="ionice">$T('opt-ionice')</label>
|
||||
<input type="text" name="ionice" id="ionice" value="$ionice" <!--#if not $have_ionice then 'readonly="readonly" disabled="disabled"' else "" #--> />
|
||||
<span class="desc">$T('explain-ionice')</span>
|
||||
</div>
|
||||
<!--#end if#-->
|
||||
<div class="field-pair">
|
||||
<label class="config" for="ignore_samples">$T('opt-ignore_samples')</label>
|
||||
<input type="checkbox" name="ignore_samples" id="ignore_samples" value="1" <!--#if int($ignore_samples) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-ignore_samples') $T('igsam-del').</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="cleanup_list">$T('opt-cleanup_list')</label>
|
||||
<input type="text" name="cleanup_list" id="cleanup_list" value="$cleanup_list"/>
|
||||
<span class="desc">$T('explain-cleanup_list')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-naming') <a href="$helpuri$help_uri#toc4" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="folder_rename">$T('opt-folder_rename')</label>
|
||||
<input type="checkbox" name="folder_rename" id="folder_rename" value="1" <!--#if int($folder_rename) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-folder_rename')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="replace_spaces">$T('opt-replace_spaces')</label>
|
||||
<input type="checkbox" name="replace_spaces" id="replace_spaces" value="1" <!--#if int($replace_spaces) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-replace_spaces')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="replace_dots">$T('opt-replace_dots')</label>
|
||||
<input type="checkbox" name="replace_dots" id="replace_dots" value="1" <!--#if int($replace_dots) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-replace_dots')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="replace_illegal">$T('opt-replace_illegal')</label>
|
||||
<input type="checkbox" name="replace_illegal" id="replace_illegal" value="1" <!--#if int($replace_illegal) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-replace_illegal')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="sanitize_safe">$T('opt-sanitize_safe')</label>
|
||||
<input type="checkbox" name="sanitize_safe" id="sanitize_safe" value="1" <!--#if int($sanitize_safe) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-sanitize_safe')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="enable_meta">$T('opt-enable_meta')</label>
|
||||
<input type="checkbox" name="enable_meta" id="enable_meta" value="1" <!--#if int($enable_meta) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-enable_meta')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-quota') <a href="$helpuri$help_uri#toc5" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="quota_size">$T('opt-quota_size')</label>
|
||||
<input type="text" name="quota_size" id="quota_size" value="$quota_size" class="smaller_input" />
|
||||
<span class="desc">$T('explain-quota_size')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="quota_period">$T('opt-quota_period')</label>
|
||||
<select name="quota_period" id="quota_period">
|
||||
<option value="d" <!--#if $quota_period == "d" then 'selected="selected"' else ""#--> >$T('day').capitalize()</option>
|
||||
<option value="w" <!--#if $quota_period == "w" then 'selected="selected"' else ""#--> >$T('week').capitalize()</option>
|
||||
<option value="m" <!--#if $quota_period == "m" then 'selected="selected"' else ""#--> >$T('month').capitalize()</option>
|
||||
<option value="x" <!--#if $quota_period == "x" then 'selected="selected"' else ""#--> >$T('manual').capitalize()</option>
|
||||
</select>
|
||||
<span class="desc">$T('explain-quota_period')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="quota_day">$T('opt-quota_day')</label>
|
||||
<input type="text" name="quota_day" id="quota_day" value="$quota_day" class="smaller_input" />
|
||||
<span class="desc">$T('explain-quota_day')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="quota_resume">$T('opt-quota_resume')</label>
|
||||
<input type="checkbox" name="quota_resume" id="quota_resume" value="1" <!--#if int($quota_resume) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-quota_resume')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
<div class="section">
|
||||
<div class="col2">
|
||||
<h3>$T('swtag-indexing') <a href="$helpuri$help_uri#toc6" target="_blank"><span class="glyphicon glyphicon-question-sign"></span></a></h3>
|
||||
</div><!-- /col2 -->
|
||||
<div class="col1">
|
||||
<fieldset>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="rating_enable">$T('opt-rating_enable')</label>
|
||||
<input type="checkbox" name="rating_enable" id="rating_enable" value="1" <!--#if int($rating_enable) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-rating_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="rating_api_key">$T('opt-rating_api_key')</label>
|
||||
<input type="text" name="rating_api_key" id="rating_api_key" value="$rating_api_key" />
|
||||
<span class="desc">$T('explain-rating_api_key')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="rating_feedback">$T('opt-rating_feedback')</label>
|
||||
<input type="checkbox" name="rating_feedback" id="rating_feedback" value="1" <!--#if int($rating_feedback) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-rating_feedback')</span>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<label class="config" for="rating_filter_enable">$T('opt-rating_filter_enable')</label>
|
||||
<input type="checkbox" name="rating_filter_enable" id="rating_filter_enable" value="1" <!--#if int($rating_filter_enable) > 0 then 'checked="checked"' else ""#--> />
|
||||
<span class="desc">$T('explain-rating_filter_enable')</span>
|
||||
</div>
|
||||
<div class="field-pair" id="rating_filter_abort">
|
||||
<label class="config">$T('opt-rating_filter_abort_if')</label>
|
||||
<div class="rating-filter">
|
||||
<p>
|
||||
<label for="rating_filter_abort_video">$T('opt-rating_filter_video')</label>
|
||||
<select name="rating_filter_abort_video" id="rating_filter_abort_video">
|
||||
<option value="0" <!--#if $rating_filter_abort_video == 0 then 'selected="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_abort_video == $val then 'selected="selected"' else ""#--> >$val $T('orLess')</option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_abort_audio">$T('opt-rating_filter_audio')</label>
|
||||
<select name="rating_filter_abort_audio" id="rating_filter_abort_audio">
|
||||
<option value="0" <!--#if $rating_filter_abort_audio == 0 then 'selected="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_abort_audio == $val then 'selected="selected"' else ""#--> >$val $T('orLess')</option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_encrypted" name="rating_filter_abort_encrypted" <!--#if int($rating_filter_abort_encrypted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_encrypted">$T('opt-rating_filter_passworded')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_encrypted_confirm" name="rating_filter_abort_encrypted_confirm" <!--#if int($rating_filter_abort_encrypted_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_encrypted_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_spam" name="rating_filter_abort_spam" <!--#if int($rating_filter_abort_spam) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_spam">$T('opt-rating_filter_spam')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_spam_confirm" name="rating_filter_abort_spam_confirm" <!--#if int($rating_filter_abort_spam_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_spam_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<input type="checkbox" value="1" id="rating_filter_abort_downvoted" name="rating_filter_abort_downvoted" <!--#if int($rating_filter_abort_downvoted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_abort_downvoted">$T('opt-rating_filter_downvoted')</label>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_abort_keywords">$T('opt-rating_filter_keywords')</label>
|
||||
<input type="text" name="rating_filter_abort_keywords" id="rating_filter_abort_keywords" value="$rating_filter_abort_keywords"/>
|
||||
<span class="desc">$T('explain-rating_filter_keywords')</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair" id="rating_filter_pause">
|
||||
<label class="config">$T('opt-rating_filter_pause_if')</label>
|
||||
<div class="rating-filter">
|
||||
<p>
|
||||
<label for="rating_filter_pause_video">$T('opt-rating_filter_video')</label>
|
||||
<select name="rating_filter_pause_video" id="rating_filter_pause_video">
|
||||
<option value="0" <!--#if $rating_filter_pause_video == 0 then 'selected="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_pause_video == $val then 'selected="selected"' else ""#--> >$val $T('orLess')</option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_pause_audio">$T('opt-rating_filter_audio')</label>
|
||||
<select name="rating_filter_pause_audio" id="rating_filter_pause_audio">
|
||||
<option value="0" <!--#if $rating_filter_pause_audio == 0 then 'selected="selected"' else ""#--> >$T('notUsed')</option>
|
||||
<!--#for $val in $range(1, 10)#--><option value="$val" <!--#if $rating_filter_pause_audio == $val then 'selected="selected"' else ""#--> >$val $T('orLess') </option><!--#end for#-->
|
||||
</select>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_encrypted" name="rating_filter_pause_encrypted" <!--#if int($rating_filter_pause_encrypted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_encrypted">$T('opt-rating_filter_passworded')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_encrypted_confirm" name="rating_filter_pause_encrypted_confirm" <!--#if int($rating_filter_pause_encrypted_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_encrypted_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_spam" name="rating_filter_pause_spam" <!--#if int($rating_filter_pause_spam) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_spam">$T('opt-rating_filter_spam')</label>
|
||||
</span>
|
||||
<span>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_spam_confirm" name="rating_filter_pause_spam_confirm" <!--#if int($rating_filter_pause_spam_confirm) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_spam_confirm">$T('opt-rating_filter_confirmed')</label>
|
||||
</span>
|
||||
</p>
|
||||
<p>
|
||||
<input type="checkbox" value="1" id="rating_filter_pause_downvoted" name="rating_filter_pause_downvoted" <!--#if int($rating_filter_pause_downvoted) > 0 then 'checked="checked"' else ""#--> />
|
||||
<label for="rating_filter_pause_downvoted">$T('opt-rating_filter_downvoted')</label>
|
||||
</p>
|
||||
<p>
|
||||
<label for="rating_filter_pause_keywords">$T('opt-rating_filter_keywords')</label>
|
||||
<input type="text" name="rating_filter_pause_keywords" id="rating_filter_pause_keywords" value="$rating_filter_pause_keywords"/>
|
||||
<span class="desc">$T('explain-rating_filter_keywords')</span>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
<div class="field-pair">
|
||||
<button class="btn btn-default saveButton"><span class="glyphicon glyphicon-ok"></span> $T('button-saveChanges')</button>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div><!-- /col1 -->
|
||||
</div><!-- /section -->
|
||||
</form>
|
||||
</div><!-- /colmask -->
|
||||
|
||||
<script>
|
||||
<script type="text/javascript">
|
||||
\$(document).ready(function() {
|
||||
if (!\$('#rating_filter_enable').is(":checked")) {
|
||||
\$("#rating_filter_abort").hide();
|
||||
|
||||
@@ -1,2 +1,3 @@
|
||||
/* This file was intentionally left blank and is only needed for 'skin' detection routine */
|
||||
/* https://github.com/thezoggy/sabnzbd-uni_Config */
|
||||
/* https://github.com/thezoggy/sabnzbd-uni_Config */
|
||||
/* Updated Nov 2015 by Safihre for 0.8.x */
|
||||
|
Before Width: | Height: | Size: 180 B |
|
Before Width: | Height: | Size: 180 B |
|
Before Width: | Height: | Size: 178 B |
|
Before Width: | Height: | Size: 120 B |
|
Before Width: | Height: | Size: 119 B |
|
Before Width: | Height: | Size: 141 B |
|
Before Width: | Height: | Size: 96 B |
|
Before Width: | Height: | Size: 128 B |
|
Before Width: | Height: | Size: 137 B |
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 5.2 KiB |
|
Before Width: | Height: | Size: 4.3 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
|
After Width: | Height: | Size: 9.1 KiB |
|
Before Width: | Height: | Size: 2.4 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 14 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.6 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
After Width: | Height: | Size: 6.1 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 85 B |
|
Before Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 871 B |
|
Before Width: | Height: | Size: 872 B |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 52 B |
|
Before Width: | Height: | Size: 828 B |
@@ -1,4 +0,0 @@
|
||||
/**
|
||||
* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||
*/
|
||||
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);
|
||||
@@ -1,5 +0,0 @@
|
||||
/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
|
||||
* Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
|
||||
* */
|
||||
|
||||
!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmValue=t,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);
|
||||
@@ -11,8 +11,6 @@ Knockout slider
|
||||
Knockout Persist
|
||||
DateJS
|
||||
MomentJS
|
||||
Respond.js
|
||||
HTML5 Shiv 3.7.2
|
||||
|
||||
|
||||
--------------------------------------------------------------------------------------------
|
||||
|
||||
212
interfaces/Glitter/templates/include_history.tmpl
Normal file
@@ -0,0 +1,212 @@
|
||||
<div class="history" data-bind="visible: hasHistory()" style="display: none;">
|
||||
<h2>$T('menu-history')</h2>
|
||||
<table class="table table-hover history-table paginated">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 25px;"></th>
|
||||
<th></th>
|
||||
<th class="status-header"></th>
|
||||
<th style="width: 130px;"></th>
|
||||
<th style="width: 60px;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-bind="foreach: history.historyItems">
|
||||
<tr class="history-item" data-bind="css: {'history-failed-download':failed()}">
|
||||
<td>
|
||||
<div data-bind="visible: processingWaiting()">
|
||||
<span class="glyphicon glyphicon-time"></span>
|
||||
</div>
|
||||
<div data-bind="visible: processingDownload()">
|
||||
<div class="processing-download">
|
||||
<div class="loader-bar-one"></div>
|
||||
<div class="loader-bar-two"></div>
|
||||
<div class="loader-bar-three"></div>
|
||||
<div class="loader-bar-four"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div data-bind="visible: (!failed() && !processingDownload() && !processingWaiting())">
|
||||
<span class="glyphicon glyphicon-ok"></span>
|
||||
</div>
|
||||
<div data-bind="visible: failed() && canRetry()">
|
||||
<a class="retry-button" href="#" data-bind="click: retry">
|
||||
<span class="glyphicon glyphicon-exclamation-sign"></span>
|
||||
</a>
|
||||
</div>
|
||||
<div data-bind="visible: failed() && !canRetry()">
|
||||
<span class="retry-button-inactive">
|
||||
<span class="glyphicon glyphicon-exclamation-sign"></span>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
<td class="name" data-bind="css: { 'name-has-ratings' : historyStatus.has_rating }">
|
||||
<div class="row-wrap-text">
|
||||
<a class="retry-buttontext" href="#" data-bind="visible: (failed() && canRetry()), click: retry">$T('button-retry')</a>
|
||||
<span data-bind="text: historyStatus.name, attr: { 'title': historyStatus.name() }"></span>
|
||||
</div>
|
||||
|
||||
<!-- ko if: historyStatus.has_rating -->
|
||||
<div class="dropdown history-ratings">
|
||||
<a href="#" class="name-ratings hover-button" data-toggle="dropdown" onclick="keepOpen(this)">
|
||||
<span class="glyphicon glyphicon-facetime-video"></span> <span data-bind="text: historyStatus.rating_avg_video"></span>
|
||||
<span class="glyphicon glyphicon-volume-up"></span> <span data-bind="text: historyStatus.rating_avg_audio"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu history-ratings-menu">
|
||||
<li>
|
||||
<form class="history-ratings-basic">
|
||||
<label>
|
||||
<input type="radio" value="up" data-bind="attr: { 'name': 'ratings-status-'+nzo_id, 'checked': historyStatus.rating_user_vote() == 1 }, event: { change: setUserVote }" />
|
||||
<span class="glyphicon glyphicon-thumbs-up"></span>
|
||||
<span data-bind="text: historyStatus.rating_avg_vote_up"></span>
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" value="down" data-bind="attr: { 'name': 'ratings-status-'+nzo_id, 'checked': historyStatus.rating_user_vote() == 2 }, event: { change: setUserVote }" />
|
||||
<span class="glyphicon glyphicon-thumbs-down"></span>
|
||||
<span data-bind="text: historyStatus.rating_avg_vote_down"></span>
|
||||
</label>
|
||||
<label>
|
||||
<span class="glyphicon glyphicon-facetime-video"></span>
|
||||
<select name="ratings-video" data-bind="value: historyStatus.rating_user_video, event: { change: setUserRating }, disable: historyStatus.rating_user_video">
|
||||
<option value=""> </option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
<option value="6">6</option>
|
||||
<option value="7">7</option>
|
||||
<option value="8">8</option>
|
||||
<option value="9">9</option>
|
||||
<option value="10">10</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>
|
||||
<span class="glyphicon glyphicon-volume-up"></span>
|
||||
<select name="ratings-audio" data-bind="value: historyStatus.rating_user_audio, event: { change: setUserRating }, disable: historyStatus.rating_user_audio">
|
||||
<option value=""> </option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
<option value="6">6</option>
|
||||
<option value="7">7</option>
|
||||
<option value="8">8</option>
|
||||
<option value="9">9</option>
|
||||
<option value="10">10</option>
|
||||
</select>
|
||||
</label>
|
||||
<!-- ko if: historyStatus.url_info -->
|
||||
<a href="#" target="_blank" data-bind="attr: { 'href':historyStatus.url_info }" title="$T('Glitter-openInfoURL')"><span class="glyphicon glyphicon-globe"></span></a>
|
||||
<!-- /ko -->
|
||||
</form>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<form class="history-ratings-report" data-bind="submit: setUserReport">
|
||||
<strong>$T('report')</strong>
|
||||
<br />
|
||||
<label>
|
||||
<input type="radio" name="rating_flag" value="spam" /> $T('spam')
|
||||
</label>
|
||||
<br />
|
||||
<label>
|
||||
<input type="radio" name="rating_flag" value="encrypted" /> $T('encrypted')
|
||||
</label>
|
||||
<br />
|
||||
<label>
|
||||
<input type="radio" name="rating_flag" value="expired" /> $T('expired')
|
||||
<select name="ratings-report-expired-server" class="ratings-report-hidden form-control" data-bind="options: \$parent.servers, optionsText: 'host', optionsValue: 'host', optionsCaption: '$T('nzo-all')'"></select>
|
||||
</label>
|
||||
<br />
|
||||
<label>
|
||||
<input type="radio" name="rating_flag" value="other" /> $T('otherProblem')
|
||||
<input type="text" class="form-control ratings-report-hidden" name="ratings-report-other" />
|
||||
</label>
|
||||
<br />
|
||||
<label>
|
||||
<input type="radio" name="rating_flag" value="comment" /> $T('comment')
|
||||
<input type="text" class="form-control ratings-report-hidden" name="ratings-report-comment" />
|
||||
</label>
|
||||
<br />
|
||||
<button type="submit" class="btn btn-default"><span class="glyphicon glyphicon-ok"></span> $T('send')</button>
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</td>
|
||||
<td class="status row-wrap-text" data-bind="text: statusText()" onclick="showDetails(this)"></td>
|
||||
<td class="history-completedon row-wrap-text" data-bind="text: completedOn(), attr: { 'data-timestamp': completed }" onclick="showDetails(this)"></td>
|
||||
<td class="delete">
|
||||
<div class="dropdown">
|
||||
<a href="#" data-toggle="dropdown" data-bind="click: updateAllHistoryInfo">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<!-- ko if: hasDropdown() -->
|
||||
<div class="dropdown-menu">
|
||||
<div class="history-status-table">
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('name')</div>
|
||||
<div class="col-sm-10" data-bind="text: historyStatus.name"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('post-Completed')</div>
|
||||
<div class="col-sm-10" data-bind="text: completedOn, attr: { 'data-timestamp': completed }"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('status')</div>
|
||||
<div class="col-sm-10" data-bind="text: glitterTranslate.status[historyStatus.status()] ? glitterTranslate.status[historyStatus.status()] : statusText()"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('size')</div>
|
||||
<div class="col-sm-10" data-bind="text: historyStatus.size"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('category')</div>
|
||||
<div class="col-sm-10" data-bind="text: historyStatus.category() == '*' ? glitterTranslate.defaultText : historyStatus.category"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('msg-path')</div>
|
||||
<div class="col-sm-10" data-bind="text: historyStatus.storage() == '' ? historyStatus.path : historyStatus.storage"></div>
|
||||
</div>
|
||||
<!-- ko foreach: { data: historyStatus.stage_log, afterRender: addHistoryStatusStuff } -->
|
||||
<div class="row">
|
||||
<div class="col-sm-2" data-bind="text: glitterTranslate.status[name()]"></div>
|
||||
<div class="col-sm-10 history-status-modallink" data-bind="longText: actions"></div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<a href="#" class="hover-button" data-bind="click: deleteSlot, css: { disabled : processingDownload() || processingWaiting() }"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="input-group search-box">
|
||||
<input type="text" class="form-control" placeholder="$T('Glitter-search')" required data-bind="textInput: history.searchTerm, event: { keydown: history.clearSearchTerm }" />
|
||||
<a data-bind="event: { mousedown: history.clearSearchTerm }">
|
||||
<span class="glyphicon" data-bind="css: { 'glyphicon-search' : !history.searchTerm(), 'glyphicon-remove' : history.searchTerm() }"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="pagination" data-bind="foreach: history.pagination.allpages(), visible: history.pagination.hasPagination" style="display: none;">
|
||||
<li data-bind="css: { active: isCurrent, disabled: isDots }, click: onclick">
|
||||
<span data-bind="text: page"></span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="multioperations-selector" id="history-options">
|
||||
<a href="#" class="hover-button" title="$T('showAllHis') / $T('showFailedHis')" data-tooltip="true" data-placement="left" data-bind="click: history.toggleShowFailed, css: { 'history-options-show-failed': history.showFailed }"><span class="glyphicon glyphicon-exclamation-sign"></span></a>
|
||||
<a href="#modal-purge-history" class="hover-button" title="$T('purgeHist')" data-toggle="modal" data-tooltip="true" data-placement="left"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
</div>
|
||||
|
||||
<div class="info-container history-info">
|
||||
<span class="glyphicon glyphicon-save"></span>
|
||||
<span data-bind="text: history.downloadedToday"></span>B $T('Glitter-today')
|
||||
<span data-bind="text: history.downloadedMonth"></span>B $T('Glitter-thisMonth')
|
||||
<span data-bind="text: history.downloadedTotal"></span>B $T('Glitter-total')
|
||||
</div>
|
||||
</div>
|
||||
126
interfaces/Glitter/templates/include_menu.tmpl
Normal file
@@ -0,0 +1,126 @@
|
||||
<nav class="navbar navbar-inverse main-navbar">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a href="./">
|
||||
<img src="./static/images/logo.png" width="120" height="45" alt="" id="navbar-logo-big" />
|
||||
<img src="./static/images/logo-small.png" width="45" height="45" alt="" id="navbar-logo-small" />
|
||||
</a>
|
||||
|
||||
<div class="btn-group">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default navbar-btn" data-bind="click: pauseToggle, attr: { 'title': downloadsPaused() ? '$T('link-resume')' : '$T('link-pause')' }">
|
||||
<span class="glyphicon" data-bind="css: { 'glyphicon-play' : downloadsPaused(), 'glyphicon-pause' : !downloadsPaused() }"></span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-default navbar-btn dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#" data-time="5" data-bind="click: pauseTime">$T('Glitter-pause5m')</a></li>
|
||||
<li><a href="#" data-time="15" data-bind="click: pauseTime">$T('Glitter-pause15m')</a></li>
|
||||
<li><a href="#" data-time="30" data-bind="click: pauseTime">$T('Glitter-pause30m')</a></li>
|
||||
<li><a href="#" data-time="60" data-bind="click: pauseTime">$T('Glitter-pause1h')</a></li>
|
||||
<li><a href="#" data-time="180" data-bind="click: pauseTime">$T('Glitter-pause3h')</a></li>
|
||||
<li><a href="#" data-time="360" data-bind="click: pauseTime">$T('Glitter-pause6h')</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="#" data-bind="click: openCustomPauseTime">$T('Glitter-custom')</a></li>
|
||||
</ul>
|
||||
<span class="btn btn-default navbar-btn navbar-timeleft" data-bind="text: timeLeft" data-toggle="dropdown">0:00</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="collapse navbar-collapse <!--#if $have_rss_defined#-->navbar-have-rss<!--#end if#-->" id="navbar-collapse">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li class="sparkline-container"><span class="sparkline"></span></li>
|
||||
<li class="speedlimit-dropdown dropdown">
|
||||
<div class="btn-group">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default navbar-btn navbar-speed" data-toggle="dropdown">
|
||||
<span data-bind="text: speedText">0 KB/s</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-default navbar-btn dropdown-toggle" data-toggle="dropdown" onclick="keepOpen(this)">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<a href="#" class="max-speed-input-clear hover-button" data-bind="click: clearSpeedLimit, visible:(speedLimit() != 100)" style="display: none;">
|
||||
<span class="glyphicon glyphicon-link"></span>
|
||||
</a>
|
||||
<div class="dropdown-menu max-speed-input">
|
||||
<div data-bind="visible: !bandwithLimit()">
|
||||
<a href="./config/general/#bandwidth_max">
|
||||
<span class="glyphicon glyphicon-cog"></span> $T('Glitter-setMaxLinespeed')
|
||||
</a>
|
||||
</div>
|
||||
<div data-bind="visible: bandwithLimit()">
|
||||
<div class="max-speed-slider" data-bind="slider: speedLimit, sliderOptions: { min: 1, max: 100, range: 'min', step: 1 }"></div>
|
||||
<span data-bind="text: speedLimitText"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li data-tooltip="true" data-placement="bottom" title="$T('Glitter-addNZB')">
|
||||
<a href="#modal-add-nzb" data-toggle="modal"><span class="glyphicon glyphicon-plus-sign"></span></a>
|
||||
</li>
|
||||
<li data-tooltip="true" data-placement="bottom" title="$T('Glitter-statusInterfaceOptions')" data-bind="click: loadStatusInfo">
|
||||
<a href="#modal-options" data-toggle="modal"><span class="glyphicon glyphicon-wrench"></span></a>
|
||||
</li>
|
||||
<!--#if $have_rss_defined#-->
|
||||
<li data-tooltip="true" data-placement="bottom" title="$T('cmenu-rss')">
|
||||
<a href="./config/rss/">
|
||||
<svg class="rss-icon-svg" viewBox="0 0 8 8">
|
||||
<rect class="rss-button" width="8" height="8" />
|
||||
<circle class="rss-symbol" cx="2" cy="6" r="1" />
|
||||
<path class="rss-symbol" d="m 1,4 a 3,3 0 0 1 3,3 h 1 a 4,4 0 0 0 -4,-4 z" />
|
||||
<path class="rss-symbol" d="m 1,2 a 5,5 0 0 1 5,5 h 1 a 6,6 0 0 0 -6,-6 z" />
|
||||
</svg>
|
||||
</a>
|
||||
</li>
|
||||
<!--#end if#-->
|
||||
<li data-tooltip="true" data-placement="bottom" title="SABnzbd $T('menu-config')">
|
||||
<a href="./config/"><span class="glyphicon glyphicon-cog"></span></a>
|
||||
</li>
|
||||
<li class="dropdown main-menu-link" data-bind="css: { 'active-on-queue-finish-menu': onQueueFinish()}">
|
||||
<a href="#" data-toggle="dropdown" onclick="keepOpen(this)">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu menu-options">
|
||||
<li><a href="#modal-help" data-toggle="modal"><span class="glyphicon glyphicon-question-sign"></span> $T('menu-help')</a></li>
|
||||
<!--#if $have_quota or $have_rss_defined or $have_watched_dir or $pp_pause_event#--><li class="divider"></li><!--#end if#-->
|
||||
<!--#if $have_quota#--><li><a href="#" data-bind="click: doQueueAction" data-mode="reset_quota">$T('link-resetQuota')</a></li><!--#end if#-->
|
||||
<!--#if $have_rss_defined#--><li><a href="#" data-bind="click: doQueueAction" data-mode="rss_now">$T('button-rssNow')</a></li><!--#end if#-->
|
||||
<!--#if $have_watched_dir#--><li><a href="#" data-bind="click: doQueueAction" data-mode="watched_now">$T('sch-scan_folder')</a></li><!--#end if#-->
|
||||
<!--#if $pp_pause_event#--><li><a href="#" data-bind="click: doQueueAction" data-mode="resume_pp">$T('sch-resume_post')</a></li><!--#end if#-->
|
||||
<li class="divider"></li>
|
||||
<li><a href="./shutdown/?session=$session" data-bind="click: shutdownSAB">$T('shutdownSab')</a></li>
|
||||
<li><a href="#" data-bind="click: restartSAB">$T('Glitter-restartSab')</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown-header"><span class="glyphicon glyphicon-off"></span> $T('Glitter-onFinish'):</li>
|
||||
<li>
|
||||
<select data-bind="value: onQueueFinish" class="form-control">
|
||||
<option value=""></option>
|
||||
<optgroup label="$T('eoq-actions')">
|
||||
<option value="shutdown_program">$T('shutdownSab')</option>
|
||||
<!--#if $power_options#-->
|
||||
<option value="shutdown_pc">$T('shutdownPc')</option>
|
||||
<option value="standby_pc">$T('standbyPc')</option>
|
||||
<option value="hibernate_pc">$T('hibernatePc')</option>
|
||||
<!--#end if#-->
|
||||
</optgroup>
|
||||
<optgroup label="$T('eoq-scripts')">
|
||||
<!-- ko foreach: queue.scriptsList -->
|
||||
<option data-bind="text: \$data, attr: { value: 'script_'+\$data } " ></option>
|
||||
<!-- /ko -->
|
||||
</optgroup>
|
||||
</select>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
40
interfaces/Glitter/templates/include_messages.tmpl
Normal file
@@ -0,0 +1,40 @@
|
||||
<div id="queue-messages" class="queue-messages" data-bind="visible: hasMessages()" style="display: none;">
|
||||
<table class="table table-hover table-messages">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="table-messages-header-label"></th>
|
||||
<th style="width: 30px;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- ko if: hasWarnings() -->
|
||||
<tr>
|
||||
<td class="table-messages-hide"></td>
|
||||
<td data-bind="attr: { 'rowspan': parseInt(nrWarnings())+1 }, click: clearWarnings" class="table-messages-remove">
|
||||
<a href="#" class="hover-button"><span class="glyphicon glyphicon-remove"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- ko foreach: allWarnings -->
|
||||
<tr>
|
||||
<td class="table-messages-label">
|
||||
<span class="label" data-bind="css: 'label-' + css, text: type"></span>
|
||||
<strong data-bind="text: date, attr: { 'data-timestamp': timestamp }"></strong>
|
||||
<span class="queue-message-text" data-bind="html: text"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- /ko -->
|
||||
<!-- /ko -->
|
||||
<!-- ko foreach: allMessages -->
|
||||
<tr>
|
||||
<td class="table-messages-label">
|
||||
<span class="label" data-bind="css: 'label-' + css, text: type"></span>
|
||||
<span class="queue-message-text" data-bind="html: text"></span>
|
||||
</td>
|
||||
<td class="table-messages-remove">
|
||||
<!-- ko if: \$data.hasOwnProperty("clear") --><a href="#" data-bind="click: clear" class="hover-button"><span class="glyphicon glyphicon-remove"></span></a><!-- /ko -->
|
||||
</td>
|
||||
</tr>
|
||||
<!-- /ko -->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
@@ -1,81 +1,135 @@
|
||||
<div id="modal_options" class="modal fade" tabindex="-1">
|
||||
<!-- Filedrop and Restarting overlay -->
|
||||
<div class="main-filedrop modal-backdrop fade in">
|
||||
<span class="glyphicon glyphicon-plus-sign"></span>
|
||||
</div>
|
||||
<div class="main-restarting modal-backdrop fade in" data-bind="visible: isRestarting" style="display: none;">
|
||||
<div>
|
||||
<strong><span class="glyphicon glyphicon-retweet"></span> $T('Glitter-lostConnection')</strong><br />
|
||||
<small>$T('Glitter-afterRestart')</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Feedback -->
|
||||
<div id="feedback-slider" data-bind="visible: glitterIsBeta && !localStorageGetItem('showFeedback')" style="display: none;">
|
||||
<h4>Feedback <a href="#" onclick="localStorageSetItem('showFeedback', 'No'); \$(this).parent().parent().hide()">×</a></h4>
|
||||
<div id="feedback-slider-inner">
|
||||
<p><strong>If anything is not working as expected, or could be improved, let us know!</strong></p>
|
||||
<p><strong>If you encounter an error, please include the log file (click on <span class="glyphicon glyphicon-wrench"></span> ) when contacting us.</strong></p>
|
||||
<h4>General</h4>
|
||||
<span class="glyphicon glyphicon-home"></span> <a href="http://forums.sabnzbd.org/" target="_blank">SABnzbd Forum</a><br />
|
||||
<span class="glyphicon glyphicon-plane"></span> <a href="https://github.com/sabnzbd/sabnzbd/" target="_blank">SABnzbd on Github</a><br />
|
||||
<span class="glyphicon glyphicon-globe"></span> <a href="https://translations.launchpad.net/sabnzbd" target="_blank">Translations of SABnzbd</a><br />
|
||||
<span class="glyphicon glyphicon-envelope"></span> <a href="mailto:bugs@sabnzbd.org?body=Version:%20$version%20Skin:%20Glitter">Email bugs@sabnzbd.org</a>
|
||||
|
||||
<h4>Interface (Glitter)</h4>
|
||||
<span class="glyphicon glyphicon-home"></span> <a href="http://forums.sabnzbd.org/viewtopic.php?f=5&t=18880" target="_blank">Glitter at SABnzbd Forum</a><br />
|
||||
<span class="glyphicon glyphicon-envelope"></span> <a href="mailto:safihre@sabnzbd.org?body=Version:%20$version">Email safihre@sabnzbd.org</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Modals -->
|
||||
<div id="modal-options" class="modal fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<a href="#" data-bind="click: loadStatusInfo, css: { 'rotate-refresh': !hasStatusInfo() }" title="$T('Glitter-interfaceRefresh')"><span class="glyphicon glyphicon-refresh"></span></a>
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<a href="#" data-bind="click: loadStatusInfo, css: { 'rotate-refresh': !hasStatusInfo() }" title="$T('Glitter-interfaceRefresh')"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<h4 class="modal-title">$T('Glitter-statusInterfaceOptions')</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<ul class="nav nav-tabs" role="tablist">
|
||||
<li class="active"><a href="#options_status" role="tab" data-toggle="tab">$T('menu-cons')</a></li>
|
||||
<li><a href="#options_connections" role="tab" data-toggle="tab">$T('connections')</a></li>
|
||||
<li><a href="#options_orphans" role="tab" data-toggle="tab">$T('Glitter-orphanedJobs') <!-- ko if: hasStatusInfo() && statusInfo.status.folders().length > 0 --><span class="label label-warning" data-bind="text: statusInfo.status.folders().length"></span><!-- /ko --></a></li>
|
||||
<li><a href="#options_interface" role="tab" data-toggle="tab">$T('Glitter-interfaceOptions')</a></li>
|
||||
<ul class="nav nav-tabs">
|
||||
<li class="active"><a href="#options-status" data-toggle="tab">$T('menu-cons')</a></li>
|
||||
<li><a href="#options_connections" data-toggle="tab">$T('connections')</a></li>
|
||||
<li><a href="#options-orphans" data-toggle="tab">$T('Glitter-orphanedJobs') <!-- ko if: hasStatusInfo() && statusInfo.status.folders().length > 0 --><span class="label label-warning" data-bind="text: statusInfo.status.folders().length"></span><!-- /ko --></a></li>
|
||||
<li><a href="#options-interface" data-toggle="tab">$T('Glitter-interfaceOptions')</a></li>
|
||||
</ul>
|
||||
<div class="tab-content">
|
||||
<div class="tab-pane fade in active" id="options_status">
|
||||
<!-- ko if: !hasStatusInfo() -->
|
||||
<h4>$T('Glitter-loading')<span class="dotOne">.</span><span class="dotTwo">.</span><span class="dotThree">.</span></h4>
|
||||
<div class="tab-pane fade in active" id="options-status">
|
||||
<!-- ko if: !hasStatusInfo() || !statusInfo.hasOwnProperty('dashboard') -->
|
||||
<h4>$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></h4>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: hasStatusInfo() && statusInfo.hasOwnProperty('dashboard') -->
|
||||
<div class="row">
|
||||
<div class="col-sm-5">$T('dashboard-localIP4')</div>
|
||||
<div class="col-sm-7" data-bind="text: !statusInfo.dashboard.localipv4() ? '$T('dashboard-connectionError')' : statusInfo.dashboard.localipv4(), css: { 'options-bad-status' : !statusInfo.dashboard.localipv4() }"></div>
|
||||
<div class="col-sm-6">$T('dashboard-localIP4')</div>
|
||||
<div class="col-sm-6" data-bind="text: !statusInfo.dashboard.localipv4() ? '$T('dashboard-connectionError')' : statusInfo.dashboard.localipv4(), css: { 'options-bad-status' : !statusInfo.dashboard.localipv4() }"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-5">$T('dashboard-publicIP4')</div>
|
||||
<div class="col-sm-7" data-bind="text: !statusInfo.dashboard.publicipv4() ? '$T('dashboard-connectionError')' : statusInfo.dashboard.publicipv4(), css: { 'options-bad-status ' : !statusInfo.dashboard.publicipv4() }"></div>
|
||||
<div class="col-sm-6">$T('dashboard-publicIP4')</div>
|
||||
<div class="col-sm-6" data-bind="text: !statusInfo.dashboard.publicipv4() ? '$T('dashboard-connectionError')' : statusInfo.dashboard.publicipv4(), css: { 'options-bad-status ' : !statusInfo.dashboard.publicipv4() }"></div>
|
||||
</div>
|
||||
<div class="row" data-bind="visible: (statusInfo.dashboard.ipv6()!=='')">
|
||||
<div class="col-sm-5">$T('dashboard-IP6')</div>
|
||||
<div class="col-sm-7" data-bind="text: statusInfo.dashboard.ipv6"></div>
|
||||
<div class="col-sm-6">$T('dashboard-IP6')</div>
|
||||
<div class="col-sm-6" data-bind="text: statusInfo.dashboard.ipv6"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-5">$T('dashboard-NameserverDNS')</div>
|
||||
<div class="col-sm-7" data-bind="text: statusInfo.dashboard.dnslookup, css: { 'options-bad-status' : (statusInfo.dashboard.dnslookup() != 'OK') }"></div>
|
||||
<div class="col-sm-6">$T('dashboard-NameserverDNS')</div>
|
||||
<div class="col-sm-6" data-bind="text: !statusInfo.dashboard.dnslookup() ? '$T('dashboard-connectionError')' : statusInfo.dashboard.dnslookup(), css: { 'options-bad-status' : (statusInfo.dashboard.dnslookup() != 'OK') }"></div>
|
||||
</div>
|
||||
<hr/>
|
||||
<div class="row">
|
||||
<div class="col-sm-6">$T('dashboard-systemPerformance')</div>
|
||||
<div class="col-sm-6">
|
||||
<span data-bind="text: statusInfo.dashboard.pystone"></span>
|
||||
<a href="#" data-bind="click: loadStatusInfo" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<small data-bind="truncatedText: statusInfo.dashboard.cpumodel, length: 25"></small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-5">$T('dashboard-downloadDirSpeed')</div>
|
||||
<div class="col-sm-7">
|
||||
<div class="col-sm-6">$T('dashboard-downloadDirSpeed')</div>
|
||||
<div class="col-sm-6">
|
||||
<span data-bind="text: (statusInfo.dashboard.downloaddirspeed() > 0 ? statusInfo.dashboard.downloaddirspeed() : '0'), css: { 'options-bad-status' : statusInfo.dashboard.downloaddirspeedbad() }"></span> MB/s
|
||||
<a href="#" data-bind="click: testDiskSpeed" data-toggle="tooltip" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-refresh"></span></a>
|
||||
<small>(<span data-bind="truncatedText: statusInfo.dashboard.downloaddir, length: 25"></span>)</small>
|
||||
<a href="#" data-bind="click: testDiskSpeed" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<small>(<span data-bind="truncatedText: statusInfo.dashboard.downloaddir, length: 24"></span>)</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-5">$T('dashboard-completeDirSpeed')</div>
|
||||
<div class="col-sm-7">
|
||||
<div class="col-sm-6">$T('dashboard-completeDirSpeed')</div>
|
||||
<div class="col-sm-6">
|
||||
<span data-bind="text: (statusInfo.dashboard.completedirspeed() > 0 ? statusInfo.dashboard.completedirspeed() : '0'), css: { 'options-bad-status' : statusInfo.dashboard.completedirspeedbad() }"></span> MB/s
|
||||
<a href="#" data-bind="click: testDiskSpeed" data-toggle="tooltip" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-refresh"></span></a>
|
||||
<small>(<span data-bind="truncatedText: statusInfo.dashboard.completedir, length: 25"></span>)</small>
|
||||
<a href="#" data-bind="click: testDiskSpeed" data-tooltip="true" data-placement="right" title="$T('dashboard-repeatTest')"><span class="glyphicon glyphicon-repeat"></span></a>
|
||||
<small>(<span data-bind="truncatedText: statusInfo.dashboard.completedir, length: 24"></span>)</small>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-5">$T('cache')</div>
|
||||
<div class="col-sm-7">
|
||||
<div class="col-sm-6">$T('cache')</div>
|
||||
<div class="col-sm-6">
|
||||
<span data-bind="text: statusInfo.status.cache.cache_size"></span> (<span data-bind="text: statusInfo.status.cache.cache_current"></span> $T('Glitter-articles'))
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<div class="options-function-box">
|
||||
<a href="#" data-bind="click: forceDisconnect" class="btn btn-default ">$T('link-forceDisc')</a>
|
||||
<a href="#" data-bind="click: repairQueue" data-toggle="tooltip" data-placement="top" title="$T('explain-Repair').replace('<br>',' ').replace('<br />',' ')" class="btn btn-default">$T('Glitter-repairQueue')</a>
|
||||
<a href="status/showlog?session=$session" target="_blank" class="btn btn-default">$T('link-showLog')</a>
|
||||
<select class="form-control" data-bind="value: statusInfo.status.loglevel">
|
||||
<option value="0">$T('log-errWarn')</option>
|
||||
<option value="1">$T('log-info')</option>
|
||||
<option value="2">$T('log-debug')</option>
|
||||
</select>
|
||||
<hr />
|
||||
<div class="row options-function-box">
|
||||
<div class="col-sm-6">
|
||||
<a href="#" data-bind="click: forceDisconnect" class="btn btn-default "><span class="glyphicon glyphicon-minus-sign"></span> $T('link-forceDisc')</a>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<a href="#" data-bind="click: repairQueue" data-tooltip="true" data-placement="top" title="$T('explain-Repair').replace('<br>',' ').replace('<br />',' ')" class="btn btn-default">
|
||||
<span class="glyphicon glyphicon-wrench"></span> $T('Glitter-repairQueue')
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row options-function-box">
|
||||
<div class="col-sm-6">
|
||||
<a href="./status/showlog?session=$session" target="_blank" class="btn btn-default"><span class="glyphicon glyphicon-file"></span> $T('link-showLog')</a>
|
||||
</div>
|
||||
<div class="col-sm-6">
|
||||
<div class="input-group" data-tooltip="true" data-placement="top" title="$T('logging')">
|
||||
<span class="input-group-addon"><span class="glyphicon glyphicon-comment"></span></span>
|
||||
<select class="form-control" data-bind="value: statusInfo.status.loglevel">
|
||||
<option value="0">$T('log-errWarn')</option>
|
||||
<option value="1">$T('log-info')</option>
|
||||
<option value="2">$T('log-debug')</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<div class="tab-pane fade" id="options_connections">
|
||||
<!-- ko if: !hasStatusInfo() -->
|
||||
<h4>$T('Glitter-loading')<span class="dotOne">.</span><span class="dotTwo">.</span><span class="dotThree">.</span></h4>
|
||||
<h4>$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></h4>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: hasStatusInfo() -->
|
||||
<div class="options_switch">
|
||||
<div class="options-switch">
|
||||
<label>
|
||||
<input type="checkbox" value="1" name="showConnections" data-bind="checked: showActiveConnections" />
|
||||
<span>$T('Glitter-showActiveConnections')</span>
|
||||
@@ -83,25 +137,33 @@
|
||||
</div>
|
||||
<div data-bind="foreach: statusInfo.status.servers">
|
||||
<div class="options-server-box">
|
||||
<a href="#" data-bind="visible: serverblocked(), click: function() { \$parent.unblockServer(servername()) }" class="btn btn-default">$T('Glitter-unblockServer')</a>
|
||||
|
||||
<div class="row">
|
||||
<div class="col-sm-5">$T('swtag-server')</div>
|
||||
<div class="col-sm-7">
|
||||
<span data-bind="text: servername"></span><br />
|
||||
<span data-bind="visible: serverblocked(), text: serverblocked" class="label label-danger"></span>
|
||||
<div class="col-sm-6">$T('swtag-server')</div>
|
||||
<div class="col-sm-6">
|
||||
<span data-bind="text: servername"></span>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row" data-bind="visible: serverblocked()">
|
||||
<div class="col-sm-12">
|
||||
|
||||
<div class="alert alert-danger">
|
||||
<a href="#" data-bind="visible: serverblocked(), click: function() { \$parent.unblockServer(servername()) }" class="btn btn-default"><span class="glyphicon glyphicon-share-alt"></span> $T('Glitter-unblockServer')</a>
|
||||
<span data-bind="text: serverblocked()"></span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-5">$T('status')</div>
|
||||
<div class="col-sm-7" data-bind="text: serverstatus"></div>
|
||||
<div class="col-sm-6">$T('status')</div>
|
||||
<div class="col-sm-6" data-bind="text: serverstatus"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-5">$T('priority')</div>
|
||||
<div class="col-sm-7" data-bind="text: serverpriority"></div>
|
||||
<div class="col-sm-6">$T('priority')</div>
|
||||
<div class="col-sm-6" data-bind="text: serverpriority"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-5"># $T('connections')</div>
|
||||
<div class="col-sm-7" data-bind="text: serveractiveconn"></div>
|
||||
<div class="col-sm-6"># $T('connections')</div>
|
||||
<div class="col-sm-6" data-bind="text: serveractiveconn"></div>
|
||||
</div>
|
||||
|
||||
<!-- ko if: serverconnections().length > 0 -->
|
||||
@@ -128,16 +190,16 @@
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<div class="tab-pane fade" id="options_orphans">
|
||||
<div class="tab-pane fade" id="options-orphans">
|
||||
<!-- ko if: !hasStatusInfo() -->
|
||||
<h4>$T('Glitter-loading')<span class="dotOne">.</span><span class="dotTwo">.</span><span class="dotThree">.</span></h4>
|
||||
<h4>$T('Glitter-loading')<span class="loader-dot-one">.</span><span class="loader-dot-two">.</span><span class="loader-dot-three">.</span></h4>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: hasStatusInfo() -->
|
||||
<!-- ko if: statusInfo.status.folders().length == 0 -->
|
||||
<h4>$T('none')</h4>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: statusInfo.status.folders().length > 0 -->
|
||||
<a href="#" class="hoverbutton remove_all_orphaned" data-bind="click: removeAllOrphaned">$T('Glitter-purgeOrphaned') <span class="glyphicon glyphicon-trash"></span></a>
|
||||
<a href="#" class="hover-button remove-all-orphaned" data-bind="click: removeAllOrphaned">$T('Glitter-purgeOrphaned') <span class="glyphicon glyphicon-trash"></span></a>
|
||||
<div class="clearfix"></div>
|
||||
<table class="table table-hover table-striped">
|
||||
<thead>
|
||||
@@ -152,24 +214,24 @@
|
||||
<tr>
|
||||
<td><span class="glyphicon glyphicon-folder-open"></span></td>
|
||||
<td class="row-wrap-text"><strong data-bind="html: folder"></strong></td>
|
||||
<td><a href="#" data-bind="click: \$root.folderProcess" data-action="add" class="hoverbutton" data-toggle="tooltip" data-placement="left" title="$T('Glitter-backToQueue')"><span class="glyphicon glyphicon-plus-sign"></span></a></td>
|
||||
<td><a href="#" data-bind="click: \$root.folderProcess" data-action="delete" class="hoverbutton" data-toggle="tooltip" data-placement="left" title="$T('Glitter-deleteJobAndFolders')"><span class="glyphicon glyphicon-trash"></span></a></td>
|
||||
<td><a href="#" data-bind="click: \$root.folderProcess" data-action="add" class="hover-button" data-tooltip="true" data-placement="left" title="$T('Glitter-backToQueue')"><span class="glyphicon glyphicon-plus-sign"></span></a></td>
|
||||
<td><a href="#" data-bind="click: \$root.folderProcess" data-action="delete" class="hover-button" data-tooltip="true" data-placement="left" title="$T('Glitter-deleteJobAndFolders')"><span class="glyphicon glyphicon-trash"></span></a></td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
<!-- /ko -->
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<div class="tab-pane fade" id="options_interface">
|
||||
<div class="tab-pane fade" id="options-interface">
|
||||
<form class="form-horizontal" onsubmit="return false;">
|
||||
<div class="options_switch">
|
||||
<div class="options-switch">
|
||||
<label>
|
||||
<input type="checkbox" name="useGlobalOptions" value="true" data-bind="checked: useGlobalOptions" />
|
||||
<span>$T('Glitter-useGlobalOptions')</span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">$T('Glitter-interfaceRefresh')</label>
|
||||
<label class="col-sm-6 control-label">$T('Glitter-interfaceRefresh')</label>
|
||||
<div class="col-sm-4">
|
||||
<select id="refreshRate-option" class="form-control" data-bind="value: refreshRate">
|
||||
<option value="1">1 $T('second')</option>
|
||||
@@ -187,7 +249,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">$T('Glitter-queueItemLimit')</label>
|
||||
<label class="col-sm-6 control-label">$T('Glitter-queueItemLimit')</label>
|
||||
<div class="col-sm-4">
|
||||
<select name="queue-pagination-limit" class="form-control" data-bind="value: queue.paginationLimit">
|
||||
<option value="5">5 / $T('Glitter-page')</option>
|
||||
@@ -196,12 +258,13 @@
|
||||
<option value="30">30 / $T('Glitter-page')</option>
|
||||
<option value="40">40 / $T('Glitter-page')</option>
|
||||
<option value="50">50 / $T('Glitter-page')</option>
|
||||
<option value="9999999">$T('Glitter-everything')</option>
|
||||
<option value="100">100 / $T('Glitter-page')</option>
|
||||
<option value="250">250 / $T('Glitter-page')</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">$T('Glitter-historyItemLimit')</label>
|
||||
<label class="col-sm-6 control-label">$T('Glitter-historyItemLimit')</label>
|
||||
<div class="col-sm-4">
|
||||
<select name="history-pagination-limit" class="form-control" data-bind="value: history.paginationLimit">
|
||||
<option value="5">5 / $T('Glitter-page')</option>
|
||||
@@ -210,13 +273,14 @@
|
||||
<option value="30">30 / $T('Glitter-page')</option>
|
||||
<option value="40">40 / $T('Glitter-page')</option>
|
||||
<option value="50">50 / $T('Glitter-page')</option>
|
||||
<option value="9999999">$T('Glitter-everything')</option>
|
||||
<option value="100">100 / $T('Glitter-page')</option>
|
||||
<option value="250">250 / $T('Glitter-page')</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
<div class="options_switch"></div>
|
||||
<div class="options-switch"></div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">$T('Glitter-dateFormat')</label>
|
||||
<label class="col-sm-6 control-label">$T('Glitter-dateFormat')</label>
|
||||
<div class="col-sm-4">
|
||||
<select name="general-date-format" class="form-control" data-bind="value: dateFormat">
|
||||
<option value="DD/MM/YYYY HH:mm"></option>
|
||||
@@ -234,7 +298,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label class="col-sm-5 control-label">
|
||||
<label class="col-sm-6 control-label">
|
||||
$T('Glitter-showExtraColumn')<br />
|
||||
<span class="label label-warning">> 1200 pixels</span>
|
||||
</label>
|
||||
@@ -250,7 +314,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group form-checkbox">
|
||||
<label class="col-sm-5 control-label">
|
||||
<label class="col-sm-6 control-label">
|
||||
$T("Glitter-confirmDeleteQueue")
|
||||
</label>
|
||||
<div class="col-sm-4">
|
||||
@@ -258,7 +322,7 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group form-checkbox">
|
||||
<label class="col-sm-5 control-label">
|
||||
<label class="col-sm-6 control-label">
|
||||
$T("Glitter-confirmDeleteHistory")
|
||||
</label>
|
||||
<div class="col-sm-4">
|
||||
@@ -274,19 +338,19 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal_add_nzb" class="modal fade" tabindex="-1">
|
||||
<div id="modal-add-nzb" class="modal fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('Glitter-addNZB')</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div class="row">
|
||||
<form data-bind="submit: addNZBFromURL" class="col-sm-6">
|
||||
<fieldset>
|
||||
<legend>$T('Glitter-addFromURL')</legend>
|
||||
<div class="input-group" data-toggle="tooltip" data-placement="bottom" title="$T('Glitter-nzbFormats')">
|
||||
<legend class="row-wrap-text">$T('Glitter-addFromURL')</legend>
|
||||
<div class="input-group" data-tooltip="true" data-placement="bottom" title="$T('Glitter-nzbFormats')">
|
||||
<input type="text" name="nzbURL" class="form-control" placeholder="$T('enterURL')" />
|
||||
<span class="input-group-btn">
|
||||
<input type="submit" name="Add" value="$T('add')" class="btn btn-default" />
|
||||
@@ -296,8 +360,8 @@
|
||||
</form>
|
||||
<form data-bind="submit: addNZBFromFileForm" class="col-sm-6">
|
||||
<fieldset>
|
||||
<legend>$T('Glitter-addFromFile')</legend>
|
||||
<div class="input-group" data-toggle="tooltip" data-placement="bottom" title="$T('Glitter-nzbFormats')">
|
||||
<legend class="row-wrap-text">$T('Glitter-addFromFile')</legend>
|
||||
<div class="input-group" data-tooltip="true" data-placement="bottom" title="$T('Glitter-nzbFormats')">
|
||||
<label class="btn btn-default btn-file">
|
||||
<span class="glyphicon glyphicon-file"></span> <em>$T('Glitter-chooseFile')…</em>
|
||||
<input type="file" name="nzbFile" class="form-control" accept=".nzb,.rar,.zip,.gz,.bz2" data-bind="event : { change: updateBrowseLabel }" />
|
||||
@@ -315,24 +379,24 @@
|
||||
<div class="row form-horizontal">
|
||||
<label class="col-sm-6 control-label">$T('Glitter-addnzbFilename')</label>
|
||||
<div class="col-sm-6">
|
||||
<input type="text" name="nzbname" id="nzbname" placeholder="$T('nzo-filename')" class="form-control" />
|
||||
<input type="text" name="nzbname" id="nzbname" placeholder="$T('name')" class="form-control" />
|
||||
</div>
|
||||
</div>
|
||||
<hr />
|
||||
<div class="clearfix"></div>
|
||||
<div class="add-nzb-inputbox" title="$T('category')" data-toggle="tooltip" data-placement="left">
|
||||
<div class="add-nzb-inputbox" title="$T('category')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-tag"></span>
|
||||
<select name="Category" class="form-control" data-bind="options: queue.categoriesList, optionsValue: 'catValue', optionsText: 'catText',"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" title="$T('priority')" data-toggle="tooltip" data-placement="left">
|
||||
<div class="add-nzb-inputbox" title="$T('priority')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-sort-by-attributes-alt"></span>
|
||||
<select name="Priority" class="form-control" data-bind="options: queue.priorityOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: '$T('default')'"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" title="$T('swtag-pp')" data-toggle="tooltip" data-placement="left">
|
||||
<div class="add-nzb-inputbox" title="$T('swtag-pp')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
<select name="Processing" class="form-control" data-bind="options: queue.processingOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: '$T('default')'"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" title="$T('eoq-scripts')" data-toggle="tooltip" data-placement="left">
|
||||
<div class="add-nzb-inputbox" title="$T('eoq-scripts')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-flash"></span>
|
||||
<select name="Post-processing" class="form-control" data-bind="options: queue.scriptsList, optionsCaption: '$T('default')'"></select>
|
||||
</div>
|
||||
@@ -342,17 +406,16 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal_item_files" class="modal fade" tabindex="-1">
|
||||
<div id="modal-item-files" class="modal fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title row-wrap-text" data-bind="text: filelist.modalTitle">$T('Glitter-loading')</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<div id="modal_item_filelist">
|
||||
|
||||
<form data-bind="submit: filelist.setNzbPassword" class="form-inline" role="form">
|
||||
<div id="modal-item-filelist">
|
||||
<form data-bind="submit: filelist.setNzbPassword" class="form-inline">
|
||||
<div class="form-group">
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon">
|
||||
@@ -364,22 +427,22 @@
|
||||
</div>
|
||||
</div>
|
||||
<div class="multioperations-selector">
|
||||
<input type="checkbox" title="$T('Glitter-checkAll')" name="checkAll" onclick="checkAllFiles(this)" data-toggle="tooltip" data-trigger="hover" data-placement="bottom" />
|
||||
<a href="#" class="hoverbutton" data-bind="click: filelist.removeSelectedFiles" data-toggle="tooltip" data-placement="bottom" title="$T('Glitter-removeSelected')">
|
||||
<input type="checkbox" title="$T('Glitter-checkAll')" data-tooltip="true" data-placement="bottom" data-bind="click: filelist.checkAllFiles" />
|
||||
<a href="#" class="hover-button" data-bind="click: filelist.removeSelectedFiles" data-tooltip="true" data-placement="bottom" title="$T('Glitter-removeSelected')">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
<a href="#" onclick="hideCompletedFiles()" id="filelist-showcompleted" class="hoverbutton" data-toggle="tooltip" data-placement="bottom" title="$T('Glitter-toggleCompletedFiles')">
|
||||
<a href="#" onclick="hideCompletedFiles()" id="filelist-showcompleted" class="hover-button" data-tooltip="true" data-placement="bottom" title="$T('Glitter-toggleCompletedFiles')">
|
||||
<span class="glyphicon glyphicon-eye-close"></span> 100%
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<table class="table item-files-table">
|
||||
<tbody data-bind="sortable: { data: filelist.fileItems, afterMove: filelist.move, options: { start: filelist.removeUpdate, stop: filelist.triggerUpdate, containment: '#modal_item_filelist', items: '.files-sortable' } }">
|
||||
<tr data-bind="css: { 'files-sortable' : canChange() }">
|
||||
<tbody data-bind="sortable: { data: filelist.fileItems, afterMove: filelist.move, options: { start: filelist.removeUpdate, stop: filelist.triggerUpdate, containment: '#modal-item-filelist', items: '.files-sortable', distance: 10 } }">
|
||||
<tr data-bind="css: { 'files-sortable' : canselect(), 'files-done' : isdone() }">
|
||||
<td class="row-wrap-text">
|
||||
<div class="progress">
|
||||
<div class="progress-bar progress-bar-info" role="progressbar" data-bind="attr: { 'style': 'width: '+percentage() }">
|
||||
<input type="checkbox" data-bind="attr : { 'name' : nzf_id, disabled: !canChange() }, click : checkSelectRange" title="$T('Glitter-multiSelect')" />
|
||||
<div class="progress-bar progress-bar-info" data-bind="attr: { 'style': 'width: '+percentage()+'; background-color: ' + \$parent.filelist.currentItem.progressColor() + ';' }">
|
||||
<input type="checkbox" data-bind="attr: { 'name' : nzf_id }, disable: !canselect(), click : \$parent.filelist.checkSelectRange" title="$T('Glitter-multiSelect')" />
|
||||
<strong data-bind="text: percentage"></strong>
|
||||
<span>
|
||||
<span data-bind="truncatedTextCenter: filename"></span>
|
||||
@@ -393,8 +456,8 @@
|
||||
</table>
|
||||
|
||||
<div class="multioperations-selector">
|
||||
<input type="checkbox" title="Check all" name="checkAll" onclick="checkAllFiles(this)" data-toggle="tooltip" data-placement="top" />
|
||||
<a href="#" class="hoverbutton" data-bind="click: filelist.removeSelectedFiles" data-toggle="tooltip" data-placement="top" title="$T('Glitter-removeSelected')">
|
||||
<input type="checkbox" title="$T('Glitter-checkAll')" data-tooltip="true" data-placement="top" data-bind="click: filelist.checkAllFiles" />
|
||||
<a href="#" class="hover-button" data-bind="click: filelist.removeSelectedFiles" data-tooltip="true" data-placement="top" title="$T('Glitter-removeSelected')">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
</div>
|
||||
@@ -407,19 +470,19 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal_retry_job" class="modal modal-small fade" tabindex="-1">
|
||||
<div id="modal-retry-job" class="modal modal-small fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('Glitter-retryJob')</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form id="retry-job-form" data-bind="submit: history.retryJob">
|
||||
<form id="retry-job-form" data-bind="submit: history.retryJob">
|
||||
<div class="modal-body">
|
||||
<input type="hidden" name="retry_job_id" />
|
||||
<fieldset>
|
||||
<legend>$T('opt-extra-NZB')</legend>
|
||||
<div class="input-group input-group-addfile" data-toggle="tooltip" data-placement="bottom" title="$T('Glitter-nzbFormats')">
|
||||
<div class="input-group input-group-addfile" data-tooltip="true" data-placement="bottom" title="$T('Glitter-nzbFormats')">
|
||||
<label class="btn btn-default btn-file">
|
||||
<span class="glyphicon glyphicon-file"></span> <em>$T('Glitter-chooseFile')…</em>
|
||||
<input type="file" name="nzbFile" class="form-control" accept=".nzb,.rar,.zip,.gz,.bz2" data-bind="event : { change: updateBrowseLabel }" />
|
||||
@@ -433,22 +496,24 @@
|
||||
<span class="input-group-addon">
|
||||
<span class="glyphicon glyphicon-lock"></span>
|
||||
</span>
|
||||
<input type="text" class="form-control" id="retry_job_password" placeholder="$T('srv-password')" />
|
||||
<input type="text" class="form-control" id="retry_job_password" placeholder="$T('srv-password') ($T('srv-optional'))" />
|
||||
</div>
|
||||
</div>
|
||||
</fieldset>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button class="btn btn-default"><span class="glyphicon glyphicon-repeat"></span> $T('button-retry')</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="history_script_log" class="modal fade" tabindex="-1">
|
||||
<div id="history-script-log" class="modal fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('Glitter-scriptLog')</h4>
|
||||
</div>
|
||||
<div class="modal-body"></div>
|
||||
@@ -456,11 +521,11 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal_help" class="modal fade">
|
||||
<div id="modal-help" class="modal fade">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<img src="./static/images/logo.png" width="120" height="45" alt="" />
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
@@ -482,25 +547,51 @@
|
||||
</table>
|
||||
|
||||
<p><strong>SABnzbd $('version'):</strong> $version</p>
|
||||
<p><small>Copyright (C) 2008-2015, The SABnzbd Team <team@sabnzbd.org></small></p>
|
||||
<p><small>Copyright (C) 2008-2016, The SABnzbd Team <team@sabnzbd.org></small></p>
|
||||
<p><small>$T('yourRights') </small></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal_purge_history" class="modal modal-small fade" tabindex="-1">
|
||||
<div id="modal-purge-history" class="modal modal-small fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('Glitter-clearHistory')</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<button type="button" class="btn btn-danger" id="history_purge_failed"><span class="glyphicon glyphicon-floppy-remove"></span> $T('purgeFailed')</button>
|
||||
<button type="button" class="btn btn-danger" id="history_purgeremove_failed"><span class="glyphicon glyphicon-floppy-remove"></span> $T('purgeFailed-Files')</button>
|
||||
<button type="button" class="btn btn-danger" id="history_purge_completed"><span class="glyphicon glyphicon-floppy-saved"></span> $T('purgeCompl')</button>
|
||||
<button type="button" class="btn btn-danger" data-bind="click: history.emptyHistory" data-action="history-purge-failed"><span class="glyphicon glyphicon-floppy-remove"></span> $T('purgeFailed')</button>
|
||||
<button type="button" class="btn btn-danger" data-bind="click: history.emptyHistory" data-action="history-purgeremove-failed"><span class="glyphicon glyphicon-floppy-remove"></span> $T('purgeFailed-Files')</button><hr />
|
||||
<button type="button" class="btn btn-danger" data-bind="click: history.emptyHistory" data-action="history-purge-completed"><span class="glyphicon glyphicon-floppy-saved"></span> $T('purgeCompl')</button><hr />
|
||||
<button type="button" class="btn btn-danger" data-bind="click: history.emptyHistory" data-action="history-purge-page"><span class="glyphicon glyphicon-check"></span> $T('purgeHist') ($T('Glitter-page')) <span class="label label-default" data-bind="text: history.historyItems().length"></span></button>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="modal_custom_pause" class="modal modal-small fade" tabindex="-1">
|
||||
<div class="modal-dialog">
|
||||
<div class="modal-content">
|
||||
<div class="modal-header">
|
||||
<button type="button" class="close" data-dismiss="modal">×</button>
|
||||
<h4 class="modal-title">$T('Glitter-pauseFor')</h4>
|
||||
</div>
|
||||
<div class="modal-body">
|
||||
<form data-bind="submit: saveCustomPause">
|
||||
<div class="form-group">
|
||||
<label for="customPauseInput">$T('Glitter-pausePrompt')</label>
|
||||
<input type="text" id="customPauseInput" class="form-control" data-bind="textInput: pauseCustom" placeholder="'50min', '3 hours', '20:00' $T('or') 'tomorrow 7pm'" />
|
||||
</div>
|
||||
<div id="customPauseOutput" class="text-muted"></div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="modal-footer">
|
||||
<button type="button" class="btn btn-danger" data-dismiss="modal"><span class="glyphicon glyphicon-remove"></span> $T('cancel')</button>
|
||||
<button type="button" class="btn btn-default disabled" data-bind="click: saveCustomPause"><span class="glyphicon glyphicon-ok"></span> $T('rss-accept')</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
207
interfaces/Glitter/templates/include_queue.tmpl
Normal file
@@ -0,0 +1,207 @@
|
||||
<div class="queue">
|
||||
<h2>$T('menu-queue')</h2>
|
||||
|
||||
<div class="info-container" data-bind="visible: diskSpaceLeft1()" style="display: none;">
|
||||
<!-- ko if: hasWarnings() -->
|
||||
<div class="info-container-box">
|
||||
<a href="#queue-messages" class="queue-error-info">
|
||||
<span class="glyphicon glyphicon-exclamation-sign"></span> <strong data-bind="text: allWarnings().length"></strong>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: (queueDataLeft() != '') -->
|
||||
<div class="info-container-box">
|
||||
<span class="glyphicon glyphicon-save"></span>
|
||||
<span data-bind="text: queueDataLeft"></span> $T('Glitter-left')
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: (quotaLimit() != 0) -->
|
||||
<div class="info-container-box">
|
||||
<span data-bind="css: { 'queue-error-info' : (parseInt(quotaLimitLeft())<=0) }">
|
||||
<span class="glyphicon glyphicon-log-in"></span> <span data-bind="text: quotaLimitLeft"></span>B / <span data-bind="text: quotaLimit"></span>B $T('quota-left')
|
||||
</span>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<div class="info-container-box" data-bind="css: { 'queue-error-info' : diskSpaceExceeded1 }">
|
||||
<span class="glyphicon glyphicon-hdd"></span> <span data-bind="text: diskSpaceLeft1"></span>B $T('Glitter-free')
|
||||
<!-- ko if: diskSpaceLeft2() -->
|
||||
<em>($T('Glitter-freeTemp'))</em>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<!-- ko if: diskSpaceLeft2() -->
|
||||
<div class="info-container-box" data-bind="css: { 'queue-error-info' : diskSpaceExceeded2 }">
|
||||
<span class="glyphicon glyphicon-hdd"></span> <span data-bind="text: diskSpaceLeft2"></span>B $T('Glitter-free')
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<div class="info-container-box-sorting dropdown" data-bind="visible: hasQueue()">
|
||||
<a href="#" data-toggle="dropdown">
|
||||
<span class="glyphicon glyphicon-sort-by-alphabet" data-tooltip="true" data-placement="left" title="$T('cmenu-sorting')"></span>
|
||||
</a>
|
||||
<a href="#" data-bind="click: queue.showMultiEdit">
|
||||
<span class="glyphicon glyphicon-tasks" data-tooltip="true" data-placement="left" title="$T('Glitter-multiOperations')"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#" data-action="sortAgeAsc" data-bind="click: queue.queueSorting">$T('Glitter-sortAgeAsc')</a></li>
|
||||
<li><a href="#" data-action="sortAgeDesc" data-bind="click: queue.queueSorting">$T('Glitter-sortAgeDesc')</a></li>
|
||||
<li><a href="#" data-action="sortNameAsc" data-bind="click: queue.queueSorting">$T('Glitter-sortNameAsc')</a></li>
|
||||
<li><a href="#" data-action="sortNameDesc" data-bind="click: queue.queueSorting">$T('Glitter-sortNameDesc')</a></li>
|
||||
<li><a href="#" data-action="sortSizeAsc" data-bind="click: queue.queueSorting">$T('Glitter-sortSizeAsc')</a></li>
|
||||
<li><a href="#" data-action="sortSizeDesc" data-bind="click: queue.queueSorting">$T('Glitter-sortSizeDesc')</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<table class="table table-striped table-hover queue-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 33px;"></th>
|
||||
<th></th>
|
||||
<th class="table-header-extra" data-bind="css: { 'table-extra-header-visible' : extraColumn }"></th>
|
||||
<th class="table-header-progress" data-bind="css: { 'table-header-progress-smaller' : extraColumn }"></th>
|
||||
<th style="width: 85px;"></th>
|
||||
<th style="width: 60px;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<!-- ko if: !hasQueue() -->
|
||||
<tbody class="no-downloads">
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<a href="#modal-add-nzb" class="hover-button" data-toggle="modal">
|
||||
<span title="$T('Glitter-dragAndDrop')" data-tooltip="true"><span class="glyphicon glyphicon-plus-sign"></span> $T('Glitter-addNZB')</span>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<!-- /ko -->
|
||||
<tbody data-bind="visible: hasQueue(), sortable: { data: queue.queueItems, afterMove: queue.move, options: { start: queue.dragStart, stop: queue.dragStop, axis: 'y', containment: '.queue', distance: 10 } }" style="display: none;">
|
||||
<tr class="queue-item">
|
||||
<td>
|
||||
<a href="#" data-bind="click: pauseToggle, attr: { 'title': pausedStatus() ? '$T('link-resume')' : '$T('link-pause')' }">
|
||||
<span class="hover-button glyphicon" data-bind="css: { 'glyphicon-play': pausedStatus(), 'glyphicon-pause': !pausedStatus() }"></span>
|
||||
</a>
|
||||
</td>
|
||||
<td class="name">
|
||||
<div class="row-wrap-text" data-bind="visible: !editingName()">
|
||||
<span data-bind="html: displayName, attr: { 'title': name() }"></span>
|
||||
<!-- ko if: (rating_avg_video() !== false) -->
|
||||
<div class="name-ratings hover-button">
|
||||
<span class="glyphicon glyphicon-facetime-video"></span> <span data-bind="text: rating_avg_video"></span>
|
||||
<span class="glyphicon glyphicon-volume-up"></span> <span data-bind="text: rating_avg_audio"></span>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<form data-bind="submit: editingNameSubmit">
|
||||
<input type="text" data-bind="value: nameForEdit, visible: editingName(), hasfocus: editingName" />
|
||||
</form>
|
||||
<div class="name-options" data-bind="visible: !editingName()">
|
||||
<a href="#" data-bind="click: editName, css: { disabled: isGrabbing() }" class="hover-button"><span class="glyphicon glyphicon-pencil"></span></a>
|
||||
<a href="#" data-bind="click: showFiles, css: { disabled: isGrabbing() }" class="hover-button" title="$T('nzoDetails') - $T('srv-password')"><span class="glyphicon glyphicon-folder-open"></span></a>
|
||||
<small data-bind="text: avg_age"></small>
|
||||
</div>
|
||||
</td>
|
||||
<td class="queue-extra-text">
|
||||
<div class="row-wrap-text" data-bind="text: extraText">
|
||||
</div>
|
||||
</td>
|
||||
<td class="progress-indicator">
|
||||
<div class="progress">
|
||||
<div class="progress-bar progress-bar-info" data-bind="attr: { 'style': 'width: ' + percentageRounded() + '; background-color: ' + progressColor() + ';' }">
|
||||
<strong data-bind="text: percentageRounded"></strong>
|
||||
<i data-bind="text: missingText"></i>
|
||||
</div>
|
||||
<span data-bind="text: progressText"></span>
|
||||
</div>
|
||||
</td>
|
||||
<td class="timeleft row-wrap-text" data-bind="text: statusText"></td>
|
||||
<td class="delete">
|
||||
<label data-bind="visible: parent.isMultiEditing()">
|
||||
<input type="checkbox" name="multiedit" title="$T('Glitter-multiSelect')" data-bind="click: parent.addMultiEdit, attr: { 'id': 'multiedit_' + id } " />
|
||||
</label>
|
||||
<!-- ko if: !isGrabbing() -->
|
||||
<div class="dropdown" data-bind="visible: !isGrabbing() && !parent.isMultiEditing()">
|
||||
<a href="#" data-toggle="dropdown" data-bind="click: toggleDropdown">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<!-- ko if: hasDropdown() -->
|
||||
<ul class="dropdown-menu queue-item-settings">
|
||||
<li title="$T('category')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-tag"></span>
|
||||
<select name="Category" class="form-control" data-bind="options: parent.categoriesList, optionsValue: 'catValue', optionsText: 'catText', value: category, event: { change: changeCat }"></select>
|
||||
</li>
|
||||
<!-- ko if: (status() != 'Fetching') -->
|
||||
<li title="$T('priority')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-sort-by-attributes-alt"></span>
|
||||
<select name="Priority" class="form-control" data-bind="options: parent.priorityOptions, optionsValue: 'value', optionsText: 'name', value: priority, event: { change: changePriority }"></select>
|
||||
</li>
|
||||
<!-- /ko -->
|
||||
<li title="$T('swtag-pp')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
<select name="Processing" class="form-control" data-bind="options: parent.processingOptions, optionsValue: 'value', optionsText: 'name', value: unpackopts, event: { change: changeProcessing }"></select>
|
||||
</li>
|
||||
<li title="$T('eoq-scripts')" data-tooltip="true" data-placement="left">
|
||||
<span class="glyphicon glyphicon-flash"></span>
|
||||
<select name="Post-processing" class="form-control" data-bind="options: parent.scriptsList, value: script, event: { change: changeScript }, enable: (parent.scriptsList().length > 0)"></select>
|
||||
</li>
|
||||
</ul>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<a href="#" class="hover-button" title="$T('removeNZB-Files')" data-bind="click: removeDownload"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<form class="multioperations-selector" data-bind="visible: (hasQueue() && queue.isMultiEditing())" style="display: none;">
|
||||
<div class="add-nzb-inputbox add-nzb-inputbox-small add-nzb-inputbox-options">
|
||||
<label for="multiedit-checkall">
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall" title="$T('Glitter-checkAll')" data-bind="click: queue.checkAllJobs" data-tooltip="true" data-placement="top" />
|
||||
</label>
|
||||
<a href="#" class="hover-button" data-bind="click: queue.doMultiDelete">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox add-nzb-inputbox-small">
|
||||
<label for="multiedit-play">
|
||||
<input type="radio" name="multiedit-status" value="resume" id="multiedit-play" data-bind="event: { change: queue.doMultiEditUpdate }" />
|
||||
<span class="glyphicon glyphicon-play" title="$T('link-resume')" data-tooltip="true" data-placement="top"></span>
|
||||
</label>
|
||||
<label for="multiedit-pause">
|
||||
<input type="radio" name="multiedit-status" value="pause" id="multiedit-pause" data-bind="event: { change: queue.doMultiEditUpdate }" />
|
||||
<span class="glyphicon glyphicon-pause" title="$T('link-pause')" data-tooltip="true" data-placement="top"></span>
|
||||
</label>
|
||||
<span class="label label-default" data-bind="text: queue.multiEditItems().length">0</span>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox-clear"></div>
|
||||
<div class="add-nzb-inputbox" data-tooltip="true" data-placement="top" title="$T('category')">
|
||||
<span class="glyphicon glyphicon-tag"></span>
|
||||
<select name="Category" class="form-control" data-bind="options: queue.categoriesList, optionsValue: 'catValue', optionsText: 'catText', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" data-tooltip="true" data-placement="top" title="$T('priority')">
|
||||
<span class="glyphicon glyphicon-sort-by-attributes-alt"></span>
|
||||
<select name="Priority" class="form-control" data-bind="options: queue.priorityOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" data-tooltip="true" data-placement="top" title="$T('swtag-pp')">
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
<select name="Processing" class="form-control" data-bind="options: queue.processingOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" data-tooltip="true" data-placement="top" title="$T('eoq-scripts')">
|
||||
<span class="glyphicon glyphicon-flash"></span>
|
||||
<select name="Post-processing" class="form-control" data-bind="options: queue.scriptsList, optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</form>
|
||||
|
||||
<div class="input-group search-box" data-bind="visible: queue.hasQueueSearch" style="display: none;">
|
||||
<input type="text" class="form-control" placeholder="$T('Glitter-search')" required data-bind="textInput: queue.searchTerm, event: { keydown: queue.clearSearchTerm }" />
|
||||
<a data-bind="event: { mousedown: queue.clearSearchTerm }">
|
||||
<span class="glyphicon" data-bind="css: { 'glyphicon-search' : !queue.searchTerm(), 'glyphicon-remove' : queue.searchTerm() }"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="pagination" data-bind="foreach: queue.pagination.allpages, visible: queue.pagination.hasPagination" style="display: none;">
|
||||
<li data-bind="css: { active: isCurrent, disabled: isDots }, click: onclick">
|
||||
<span data-bind="text: page"></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
@@ -1,30 +1,34 @@
|
||||
<!DOCTYPE html>
|
||||
<!--#set $active_lang=$active_lang.replace('_', '-').lower()#-->
|
||||
<html lang="$active_lang" id="sabnzbd" data-bind="filedrop: { overlaySelector: '.main-filedrop', onFileDrop: addNZBFromFile }">
|
||||
<head>
|
||||
<!--
|
||||
Glitter V1
|
||||
By Safihre (2015) - safihre@sabnzbd.org
|
||||
Glitter V2
|
||||
By Safihre (2016) - safihre@sabnzbd.org
|
||||
|
||||
Code extended from Shiny-template
|
||||
Code examples used from Knockstrap-template
|
||||
|
||||
Many things are inserted on-load, making the
|
||||
output hard to read. If you want to know what's
|
||||
going on, read the main.tmpl file!
|
||||
-->
|
||||
<title data-bind="text: title">SABnzbd</title>
|
||||
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<meta name="mobile-web-app-capable" content="yes" />
|
||||
<meta name="application-name" content="SABnzbd">
|
||||
<meta name="apple-mobile-web-app-capable" content="yes" />
|
||||
<meta name="apple-mobile-web-app-title" content="SABnzbd" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="black" />
|
||||
|
||||
<link rel="apple-touch-icon" sizes="57x57" href="./staticcfg/ico/apple-touch-icon-57x57.png" />
|
||||
<link rel="apple-touch-icon" sizes="60x60" href="./staticcfg/ico/apple-touch-icon-60x60.png" />
|
||||
<link rel="apple-touch-icon" sizes="72x72" href="./staticcfg/ico/apple-touch-icon-72x72.png" />
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="./staticcfg/ico/apple-touch-icon-76x76.png" />
|
||||
<link rel="apple-touch-icon" sizes="114x114" href="./staticcfg/ico/apple-touch-icon-114x114.png" />
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="./staticcfg/ico/apple-touch-icon-120x120.png" />
|
||||
<link rel="apple-touch-icon" sizes="144x144" href="./staticcfg/ico/apple-touch-icon-144x144.png" />
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="./staticcfg/ico/apple-touch-icon-152x152.png" />
|
||||
<meta name="apple-mobile-web-app-status-bar-style" content="#000000" />
|
||||
<meta name="msapplication-navbutton-color" content="#000000" />
|
||||
<meta name="theme-color" content="#000000" />
|
||||
|
||||
<link rel="apple-touch-icon" sizes="76x76" href="./staticcfg/ico/apple-touch-icon-76x76-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="120x120" href="./staticcfg/ico/apple-touch-icon-120x120-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="152x152" href="./staticcfg/ico/apple-touch-icon-152x152-precomposed.png" />
|
||||
<link rel="apple-touch-icon" sizes="180x180" href="./staticcfg/ico/apple-touch-icon-180x180-precomposed.png" />
|
||||
<link rel="shortcut icon" type="image/ico" href="./staticcfg/ico/favicon.ico" data-bind="attr: { 'href': SABIcon }" />
|
||||
|
||||
<link rel="stylesheet" type="text/css" href="./static/bootstrap/css/bootstrap.min.css?p=$pid" />
|
||||
@@ -34,605 +38,6 @@
|
||||
<link rel="stylesheet" type="text/css" href="./static/stylesheets/colorschemes/${color_scheme}.css?p=$pid"/>
|
||||
<!--#end if#-->
|
||||
|
||||
<!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries -->
|
||||
<!-- WARNING: Respond.js doesn't work if you view the page via file:// -->
|
||||
<!--[if lt IE 9]>
|
||||
<script src="./static/javascripts/html5shiv.min.js"></script>
|
||||
<script src="./static/javascripts/respond.min.js"></script>
|
||||
<link href="./static/stylesheets/glitter.ie8.css" rel="stylesheet">
|
||||
<![endif]-->
|
||||
</head>
|
||||
<body>
|
||||
<div class="container main-navbar">
|
||||
<nav class="navbar navbar-inverse main-navbar">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse">
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a href="./">
|
||||
<img src="./static/images/logo.png" width="120" height="45" alt="" id="navbar-logo-big" />
|
||||
<img src="./static/images/logo-small.png" width="45" height="45" alt="" id="navbar-logo-small" />
|
||||
</a>
|
||||
|
||||
<div class="btn-group">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default navbar-btn" data-bind="click: pauseToggle, attr: { 'title': downloadsPaused() ? '$T('link-resume')' : '$T('link-pause')' }">
|
||||
<span class="glyphicon" data-bind="css: { 'glyphicon-play' : downloadsPaused(), 'glyphicon-pause' : !downloadsPaused() }"></span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-default navbar-btn dropdown-toggle" data-toggle="dropdown">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#" data-time="5" data-bind="click: pauseTime">$T('Glitter-pause5m')</a></li>
|
||||
<li><a href="#" data-time="15" data-bind="click: pauseTime">$T('Glitter-pause15m')</a></li>
|
||||
<li><a href="#" data-time="30" data-bind="click: pauseTime">$T('Glitter-pause30m')</a></li>
|
||||
<li><a href="#" data-time="60" data-bind="click: pauseTime">$T('Glitter-pause1h')</a></li>
|
||||
<li><a href="#" data-time="180" data-bind="click: pauseTime">$T('Glitter-pause3h')</a></li>
|
||||
<li><a href="#" data-time="360" data-bind="click: pauseTime">$T('Glitter-pause6h')</a></li>
|
||||
<li class="divider"></li>
|
||||
<li><a href="#" data-bind="click: customPauseTime">$T('Glitter-custom')</a></li>
|
||||
</ul>
|
||||
<span class="btn btn-default navbar-btn navbar-timeleft" data-bind="text: timeLeft" data-toggle="dropdown">0:00</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="collapse navbar-collapse" id="navbar-collapse">
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li class="sparkline-container"><span class="sparkline"></span></li>
|
||||
<li class="speedlimit-dropdown dropdown">
|
||||
<div class="btn-group">
|
||||
<div class="btn-group">
|
||||
<button type="button" class="btn btn-default navbar-btn navbar-speed" data-toggle="dropdown">
|
||||
<span data-bind="text: speedText">0 KB/s</span>
|
||||
</button>
|
||||
<button type="button" class="btn btn-default navbar-btn dropdown-toggle" data-toggle="dropdown" onclick="keepOpen(this)">
|
||||
<span class="caret"></span>
|
||||
</button>
|
||||
<a href="#" class="max-speed-input-clear hoverbutton" data-bind="click: clearSpeedLimit, visible:(speedLimit() != 100)" style="display: none;">
|
||||
<span class="glyphicon glyphicon-link"></span>
|
||||
</a>
|
||||
<div class="dropdown-menu max-speed-input">
|
||||
<div data-bind="visible: !bandwithLimit()">
|
||||
<a href="config/general/#bandwidth_max">
|
||||
<span class="glyphicon glyphicon-cog"></span> $T('Glitter-setMaxLinespeed')
|
||||
</a>
|
||||
</div>
|
||||
<div data-bind="visible: bandwithLimit()">
|
||||
<div class="max-speed-slider" data-bind="slider: speedLimit, sliderOptions: {min: 1, max: 100, range: 'min', step: 1}"></div>
|
||||
<span data-bind="text: speedLimit() + '%'"></span> (<span data-bind="text: speedLimitText"></span>)
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<li data-toggle="tooltip" data-placement="bottom" title="$T('Glitter-addNZB')">
|
||||
<a href="#modal_add_nzb" data-toggle="modal"><span class="glyphicon glyphicon-plus-sign"></span></a>
|
||||
</li>
|
||||
<li data-toggle="tooltip" data-placement="bottom" title="$T('Glitter-statusInterfaceOptions')" data-bind="click: loadStatusInfo">
|
||||
<a href="#modal_options" data-toggle="modal"><span class="glyphicon glyphicon-wrench"></span></a>
|
||||
</li>
|
||||
<li data-toggle="tooltip" data-placement="bottom" title="SABnzbd $T('menu-config')">
|
||||
<a href="config"><span class="glyphicon glyphicon-cog"></span></a>
|
||||
</li>
|
||||
<li class="dropdown">
|
||||
<a href="#" data-toggle="dropdown" data-bind="css: { 'active-on-queue-finish-menu': onQueueFinish()}" onclick="keepOpen(this)"><span class="glyphicon glyphicon-off"></span></a>
|
||||
<ul class="dropdown-menu menu-options">
|
||||
<li><a href="#modal_help" data-toggle="modal"><span class="glyphicon glyphicon-question-sign"></span> $T('menu-help')</a></li>
|
||||
<!--#if $have_quota or $have_rss_defined or $have_watched_dir or $pp_pause_event#--><li class="divider"></li><!--#end if#-->
|
||||
<!--#if $have_quota#--><li><a href="#" data-bind="click: doQueueAction" data-mode="reset_quota">$T('link-resetQuota')</a></li><!--#end if#-->
|
||||
<!--#if $have_rss_defined#--><li><a href="#" data-bind="click: doQueueAction" data-mode="rss_now">$T('button-rssNow')</a></li><!--#end if#-->
|
||||
<!--#if $have_watched_dir#--><li><a href="#" data-bind="click: doQueueAction" data-mode="watched_now">$T('sch-scan_folder')</a></li><!--#end if#-->
|
||||
<!--#if $pp_pause_event#--><li><a href="#" data-bind="click: doQueueAction" data-mode="resume_pp">$T('sch-resume_post')</a></li><!--#end if#-->
|
||||
<li class="divider"></li>
|
||||
<li><a href="shutdown?session=$session" data-bind="click: shutdownSAB">$T('shutdownSab')</a></li>
|
||||
<li><a href="#" data-bind="click: restartSAB">$T('Glitter-restartSab')</a></li>
|
||||
<li class="divider"></li>
|
||||
<li class="dropdown-header"><span class="glyphicon glyphicon-off"></span> $T('Glitter-onFinish'):</li>
|
||||
<li>
|
||||
<select data-bind="value: onQueueFinish" class="form-control">
|
||||
<option value=""></option>
|
||||
<optgroup label="$T('eoq-actions')">
|
||||
<option value="shutdown_program">$T('shutdownSab')</option>
|
||||
<!--#if $power_options#-->
|
||||
<option value="shutdown_pc">$T('shutdownPc')</option>
|
||||
<option value="standby_pc">$T('standbyPc')</option>
|
||||
<option value="hibernate_pc">$T('hibernatePc')</option>
|
||||
<!--#end if#-->
|
||||
</optgroup>
|
||||
<optgroup label="$T('eoq-scripts')">
|
||||
<!-- ko foreach: queue.scriptsList -->
|
||||
<option data-bind="text: \$data, attr: { value: 'script_'+\$data } " ></option>
|
||||
<!-- /ko -->
|
||||
</optgroup>
|
||||
</select>
|
||||
</li>
|
||||
</ul>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div class="container main-content">
|
||||
<div class="queue">
|
||||
<h2>$T('menu-queue')</h2>
|
||||
|
||||
<div class="info-container" data-bind="visible: diskSpaceLeft1()" style="display: none;">
|
||||
<div class="info-container-box" id="localstorage-error">
|
||||
<span class="queue-error-info"></span>
|
||||
</div>
|
||||
<!-- ko if: hasWarnings() -->
|
||||
<div class="info-container-box">
|
||||
<a href="#queue-messages" class="queue-error-info">
|
||||
<span class="glyphicon glyphicon-exclamation-sign"></span> <strong data-bind="text: allWarnings().length"></strong>
|
||||
</a>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: (queueDataLeft() != '') -->
|
||||
<div class="info-container-box">
|
||||
<span class="glyphicon glyphicon-save"></span>
|
||||
<span data-bind="text: queueDataLeft"></span> $T('Glitter-left')
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<!-- ko if: (quotaLimit() != 0) -->
|
||||
<div class="info-container-box">
|
||||
<span data-bind="css: { 'queue-error-info' : (parseInt(quotaLimitLeft())<=0) }">
|
||||
<span class="glyphicon glyphicon-log-in"></span> <span data-bind="text: quotaLimitLeft"></span>B / <span data-bind="text: quotaLimit"></span>B $T('quota-left')
|
||||
</span>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<div class="info-container-box" data-bind="css: { 'queue-error-info' : ((queueDataLeftMB()/1024) > diskSpaceLeft1()) }">
|
||||
<span class="glyphicon glyphicon-hdd"></span> <span data-bind="text: diskSpaceLeft1"></span> GB $T('Glitter-free')
|
||||
<!-- ko if: (diskSpaceLeft2() > 0) -->
|
||||
<em>($T('Glitter-freeTemp'))</em>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<!-- ko if: (diskSpaceLeft2() > 0) -->
|
||||
<div class="info-container-box" data-bind="css: { 'queue-error-info' : ((queueDataLeftMB()/1024) > diskSpaceLeft2()) }">
|
||||
<span class="glyphicon glyphicon-hdd"></span> <span data-bind="text: diskSpaceLeft2"></span> GB $T('Glitter-free')
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
<div class="info-container-box-sorting dropdown" data-bind="visible: hasQueue()">
|
||||
<a href="#" data-toggle="dropdown">
|
||||
<span class="glyphicon glyphicon-sort-by-alphabet" data-toggle="tooltip" data-placement="left" title="$T('cmenu-sorting')"></span>
|
||||
</a>
|
||||
<a href="#" data-bind="click: queue.showMultiEdit">
|
||||
<span class="glyphicon glyphicon-tasks" data-toggle="tooltip" data-placement="left" title="$T('Glitter-multiOperations')"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu">
|
||||
<li><a href="#" data-action="sortAgeAsc" data-bind="click: queue.queueSorting">$T('Glitter-sortAgeAsc')</a></li>
|
||||
<li><a href="#" data-action="sortAgeDesc" data-bind="click: queue.queueSorting">$T('Glitter-sortAgeDesc')</a></li>
|
||||
<li><a href="#" data-action="sortNameAsc" data-bind="click: queue.queueSorting">$T('Glitter-sortNameAsc')</a></li>
|
||||
<li><a href="#" data-action="sortNameDesc" data-bind="click: queue.queueSorting">$T('Glitter-sortNameDesc')</a></li>
|
||||
<li><a href="#" data-action="sortSizeAsc" data-bind="click: queue.queueSorting">$T('Glitter-sortSizeAsc')</a></li>
|
||||
<li><a href="#" data-action="sortSizeDesc" data-bind="click: queue.queueSorting">$T('Glitter-sortSizeDesc')</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
<table class="table table-striped table-hover queue-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 33px;"></th>
|
||||
<th></th>
|
||||
<th class="table-header-extra" data-bind="css: { 'table-extra-header-visible' : extraColumn }"></th>
|
||||
<th class="table-header-progress" data-bind="css: { 'table-header-progress-smaller' : extraColumn }"></th>
|
||||
<th style="width: 85px;"></th>
|
||||
<th style="width: 60px;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
|
||||
<!-- ko if: !hasQueue() -->
|
||||
<tbody class="nodownloads">
|
||||
<tr>
|
||||
<td colspan="6">
|
||||
<a href="#modal_add_nzb" class="hoverbutton" data-toggle="modal">
|
||||
<span title="$T('Glitter-dragAndDrop')" data-toggle="tooltip"><span class="glyphicon glyphicon-plus-sign"></span> $T('Glitter-addNZB')</span>
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
<!-- /ko -->
|
||||
<tbody data-bind="visible: hasQueue(), sortable: { data: queue.queueItems, afterMove: queue.move, options: { start: queue.dragStart, stop: queue.dragStop, containment: '.queue' } }" style="display: none;">
|
||||
<tr class="queueitem">
|
||||
<td>
|
||||
<a href="#" data-bind="click: pauseToggle, attr: { 'title': pausedStatus() ? '$T('link-resume')' : '$T('link-pause')' }">
|
||||
<span class="hoverbutton glyphicon" data-bind="css: { 'glyphicon-play': pausedStatus(), 'glyphicon-pause': !pausedStatus() }"></span>
|
||||
</a>
|
||||
</td>
|
||||
<td class="name">
|
||||
<div class="row-wrap-text" data-bind="visible: !editingName()">
|
||||
<span data-bind="text: name, attr: { 'title': name() }"></span>
|
||||
<!-- ko if: (rating_avg_video() !== false) -->
|
||||
<div class="name-ratings hoverbutton">
|
||||
<span class="glyphicon glyphicon-facetime-video"></span> <span data-bind="text: rating_avg_video"></span>
|
||||
<span class="glyphicon glyphicon-volume-up"></span> <span data-bind="text: rating_avg_audio"></span>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
<form data-bind="submit: editingNameSubmit">
|
||||
<input type="text" data-bind="value: nameForEdit, visible: editingName(), hasfocus: editingName" />
|
||||
</form>
|
||||
<div class="name-options" data-bind="visible: !editingName()">
|
||||
<a href="#" data-bind="click: editName" class="hoverbutton"><span class="glyphicon glyphicon-pencil"></span></a>
|
||||
<a href="#" data-bind="click: showFiles" class="hoverbutton"><span class="glyphicon glyphicon-folder-open"></span></a>
|
||||
<small data-bind="text: avg_age"></small>
|
||||
</div>
|
||||
</td>
|
||||
<td class="queue-extra-text">
|
||||
<div class="row-wrap-text" data-bind="text: extraText">
|
||||
</div>
|
||||
</td>
|
||||
<td class="progress-indicator">
|
||||
<div class="progress">
|
||||
<div class="progress-bar progress-bar-info" data-bind="attr: { 'style': 'width: ' + percentageRounded() + '; background-color: ' + progressColor() + ';' }, c">
|
||||
<strong data-bind="text: percentageRounded"></strong>
|
||||
<i data-bind="text: missingText"></i>
|
||||
</div>
|
||||
<span data-bind="text: progressText"></span>
|
||||
</div>
|
||||
</td>
|
||||
<td class="timeleft row-wrap-text" data-bind="text: timeLeft"></td>
|
||||
<td class="delete">
|
||||
<label data-bind="visible: !isGrabbing() && parent.isMultiEditing()">
|
||||
<input type="checkbox" name="multiedit" title="$T('Glitter-multiSelect')" data-bind="click: parent.addMultiEdit, attr: { 'id': 'multiedit_' + id } " />
|
||||
</label>
|
||||
<div class="dropdown" data-bind="visible: !isGrabbing() && !parent.isMultiEditing()">
|
||||
<a href="#" data-toggle="dropdown" onclick="keepOpen(this)">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu queueitem-settings">
|
||||
<li title="$T('category')" data-toggle="tooltip" data-placement="left">
|
||||
<span class="glyphicon glyphicon-tag"></span>
|
||||
<select name="Category" class="form-control" data-bind="options: parent.categoriesList, optionsValue: 'catValue', optionsText: 'catText', value: category, event: { change: changeCat }"></select>
|
||||
</li>
|
||||
<!-- ko if: (status() != 'Fetching') -->
|
||||
<li title="$T('priority')" data-bind="visible: (status() != 'Fetching')" data-toggle="tooltip" data-placement="left">
|
||||
<span class="glyphicon glyphicon-sort-by-attributes-alt"></span>
|
||||
<select name="Priority" class="form-control" data-bind="options: parent.priorityOptions, optionsValue: 'value', optionsText: 'name', value: priority, event: { change: changePriority }"></select>
|
||||
</li>
|
||||
<!-- /ko -->
|
||||
<li title="$T('swtag-pp')" data-toggle="tooltip" data-placement="left">
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
<select name="Processing" class="form-control" data-bind="options: parent.processingOptions, optionsValue: 'value', optionsText: 'name', value: unpackopts, event: { change: changeProcessing }"></select>
|
||||
</li>
|
||||
|
||||
<li title="$T('eoq-scripts')" data-toggle="tooltip" data-placement="left">
|
||||
<span class="glyphicon glyphicon-flash"></span>
|
||||
<select name="Post-processing" class="form-control" data-bind="options: parent.scriptsList, value: script, event: { change: changeScript }, enable: (parent.scriptsList().length > 0)"></select>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<a href="#" class="hoverbutton" title="$T('removeNZB-Files')" data-bind="click: removeDownload"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<form class="multioperations-selector" data-bind="visible: (hasQueue() && queue.isMultiEditing())" style="display: none;">
|
||||
<div class="add-nzb-inputbox add-nzb-inputbox-small add-nzb-inputbox-options">
|
||||
<label for="multiedit-checkall">
|
||||
<input type="checkbox" name="multieditCheckAll" id="multiedit-checkall" onclick="checkAllFiles(this)" title="$T('Glitter-checkAll')" data-toggle="tooltip" data-placement="top" />
|
||||
</label>
|
||||
<a href="#" class="hoverbutton" data-bind="click: queue.doMultiDelete">
|
||||
<span class="glyphicon glyphicon-trash"></span>
|
||||
</a>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox add-nzb-inputbox-small">
|
||||
<label for="multiedit-play">
|
||||
<input type="radio" name="multiedit-status" value="resume" id="multiedit-play" data-bind="event: { change: queue.doMultiEditUpdate }" />
|
||||
<span class="glyphicon glyphicon-play" title="$T('link-resume')" data-toggle="tooltip" data-placement="top"></span>
|
||||
</label>
|
||||
<label for="multiedit-pause">
|
||||
<input type="radio" name="multiedit-status" value="pause" id="multiedit-pause" data-bind="event: { change: queue.doMultiEditUpdate }" />
|
||||
<span class="glyphicon glyphicon-pause" title="$T('link-pause')" data-toggle="tooltip" data-placement="top"></span>
|
||||
</label>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox-clear"></div>
|
||||
<div class="add-nzb-inputbox" data-toggle="tooltip" data-placement="top" title="$T('category')">
|
||||
<span class="glyphicon glyphicon-tag"></span>
|
||||
<select name="Category" class="form-control" data-bind="options: queue.categoriesList, optionsValue: 'catValue', optionsText: 'catText', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" data-toggle="tooltip" data-placement="top" title="$T('priority')">
|
||||
<span class="glyphicon glyphicon-sort-by-attributes-alt"></span>
|
||||
<select name="Priority" class="form-control" data-bind="options: queue.priorityOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" data-toggle="tooltip" data-placement="top" title="$T('swtag-pp')">
|
||||
<span class="glyphicon glyphicon-check"></span>
|
||||
<select name="Processing" class="form-control" data-bind="options: queue.processingOptions, optionsValue: 'value', optionsText: 'name', optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="add-nzb-inputbox" data-toggle="tooltip" data-placement="top" title="$T('eoq-scripts')">
|
||||
<span class="glyphicon glyphicon-flash"></span>
|
||||
<select name="Post-processing" class="form-control" data-bind="options: queue.scriptsList, optionsCaption: '', event: { change: queue.doMultiEditUpdate }"></select>
|
||||
</div>
|
||||
<div class="clearfix"></div>
|
||||
</form>
|
||||
|
||||
<div class="input-group search-box" data-bind="visible: queue.hasQueueSearch" style="display: none;">
|
||||
<input type="text" class="form-control" placeholder="$T('Glitter-search')" required data-bind="textInput: queue.searchTerm, event: { keydown: queue.clearSearchTerm }" />
|
||||
<a data-bind="event: { mousedown: queue.clearSearchTerm }">
|
||||
<span class="glyphicon" data-bind="css: { 'glyphicon-search' : !queue.searchTerm(), 'glyphicon-remove' : queue.searchTerm() }"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="pagination" data-bind="foreach: queue.pagination.allpages, visible: queue.pagination.hasPagination" style="display: none;">
|
||||
<li data-bind="css: { active: isCurrent, disabled: isDots }, click: onclick">
|
||||
<span data-bind="text: page"></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<div id="queue-messages" class="queue-messages" data-bind="visible: hasMessages()" style="display: none;">
|
||||
<table class="table table-hover table-messages">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="table-messages-header-label"></th>
|
||||
<th style="width: 30px;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<!-- ko if: hasWarnings()-->
|
||||
<tr>
|
||||
<td class="table-messages-hide"></td>
|
||||
<td data-bind="attr: { 'rowspan': parseInt(nrWarnings())+1 }, click: clearWarnings" class="table-messages-remove">
|
||||
<a href="#" class="hoverbutton"><span class="glyphicon glyphicon-remove"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- ko foreach: allWarnings -->
|
||||
<tr>
|
||||
<td class="table-messages-label">
|
||||
<span class="label" data-bind="css: 'label-' + css, text: type"></span>
|
||||
<strong data-bind="text: date, attr: { 'data-timestamp': timestamp }"></strong>
|
||||
<span class="queue-message-text" data-bind="html: text"></span>
|
||||
</td>
|
||||
</tr>
|
||||
<!-- /ko -->
|
||||
<!-- /ko -->
|
||||
<!-- ko foreach: allMessages -->
|
||||
<tr>
|
||||
<td class="table-messages-label">
|
||||
<span class="label" data-bind="css: 'label-' + css, text: type"></span>
|
||||
<span class="queue-message-text" data-bind="html: text"></span>
|
||||
</td>
|
||||
<td class="table-messages-remove">
|
||||
<!-- ko if: \$data.hasOwnProperty("clear") --><a href="#" data-bind="click: clear" class="hoverbutton"><span class="glyphicon glyphicon-remove"></span></a><!-- /ko -->
|
||||
</td>
|
||||
</tr>
|
||||
<!-- /ko -->
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
|
||||
<div class="history" data-bind="visible: hasHistory()" style="display: none;">
|
||||
<h2>$T('menu-history')</h2>
|
||||
<table class="table table-hover history-table paginated">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 25px;"></th>
|
||||
<th></th>
|
||||
<th class="status-header"></th>
|
||||
<th style="width: 130px;"></th>
|
||||
<th style="width: 60px;"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody data-bind="foreach: history.historyItems">
|
||||
<tr class="historyitem" data-bind="css: {'history-failed-download':failed()}">
|
||||
<td>
|
||||
<div data-bind="visible: processingWaiting()">
|
||||
<span class="glyphicon glyphicon-time"></span>
|
||||
</div>
|
||||
<div data-bind="visible: processingDownload()">
|
||||
<div class="processing-download">
|
||||
<div class="rect1"></div>
|
||||
<div class="rect2"></div>
|
||||
<div class="rect3"></div>
|
||||
<div class="rect4"></div>
|
||||
</div>
|
||||
</div>
|
||||
<div data-bind="visible: (!failed() && !processingDownload() && !processingWaiting())">
|
||||
<span class="glyphicon glyphicon-ok"></span>
|
||||
</div>
|
||||
<div data-bind="visible: failed() && canRetry()">
|
||||
<a class="retrybutton" href="#" data-bind="click: retry">
|
||||
<span class="glyphicon glyphicon-exclamation-sign"></span>
|
||||
</a>
|
||||
</div>
|
||||
<div data-bind="visible: failed() && !canRetry()">
|
||||
<span class="retrybutton-inactive">
|
||||
<span class="glyphicon glyphicon-exclamation-sign"></span>
|
||||
</span>
|
||||
</div>
|
||||
</td>
|
||||
<td class="name" data-bind="css: { 'name-has-ratings' : historyStatus.has_rating }">
|
||||
<div class="row-wrap-text">
|
||||
<a class="retrybuttontext" href="#" data-bind="visible: (failed() && canRetry()), click: retry">$T('button-retry')</a>
|
||||
<span data-bind="text: historyStatus.name, attr: { 'title': historyStatus.name() }"></span>
|
||||
</div>
|
||||
|
||||
<!-- ko if: historyStatus.has_rating -->
|
||||
<div class="dropdown history-ratings">
|
||||
<a href="#" class="name-ratings hoverbutton" data-toggle="dropdown" onclick="keepOpen(this)">
|
||||
<span class="glyphicon glyphicon-facetime-video"></span> <span data-bind="text: historyStatus.rating_avg_video"></span>
|
||||
<span class="glyphicon glyphicon-volume-up"></span> <span data-bind="text: historyStatus.rating_avg_audio"></span>
|
||||
</a>
|
||||
<ul class="dropdown-menu history-ratings-menu">
|
||||
<li>
|
||||
<form class="history-ratings-basic">
|
||||
<label>
|
||||
<input type="radio" value="up" data-bind="attr: { 'name': 'ratings-status-'+nzo_id, 'checked': historyStatus.rating_user_vote() == 1 }, event: { change: setUserVote }" />
|
||||
<span class="glyphicon glyphicon-thumbs-up"></span>
|
||||
<span data-bind="text: historyStatus.rating_avg_vote_up"></span>
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" value="down" data-bind="attr: { 'name': 'ratings-status-'+nzo_id, 'checked': historyStatus.rating_user_vote() == 2 }, event: { change: setUserVote }" />
|
||||
<span class="glyphicon glyphicon-thumbs-down"></span>
|
||||
<span data-bind="text: historyStatus.rating_avg_vote_down"></span>
|
||||
</label>
|
||||
<label>
|
||||
<span class="glyphicon glyphicon-facetime-video"></span>
|
||||
<select name="ratings-video" data-bind="value: historyStatus.rating_user_video, event: { change: setUserRating }, disable: historyStatus.rating_user_video">
|
||||
<option value=""> </option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
<option value="6">6</option>
|
||||
<option value="7">7</option>
|
||||
<option value="8">8</option>
|
||||
<option value="9">9</option>
|
||||
<option value="10">10</option>
|
||||
</select>
|
||||
</label>
|
||||
<label>
|
||||
<span class="glyphicon glyphicon-volume-up"></span>
|
||||
<select name="ratings-audio" data-bind="value: historyStatus.rating_user_audio, event: { change: setUserRating }, disable: historyStatus.rating_user_audio">
|
||||
<option value=""> </option>
|
||||
<option value="1">1</option>
|
||||
<option value="2">2</option>
|
||||
<option value="3">3</option>
|
||||
<option value="4">4</option>
|
||||
<option value="5">5</option>
|
||||
<option value="6">6</option>
|
||||
<option value="7">7</option>
|
||||
<option value="8">8</option>
|
||||
<option value="9">9</option>
|
||||
<option value="10">10</option>
|
||||
</select>
|
||||
</label>
|
||||
<!-- ko if: historyStatus.url_info -->
|
||||
<a href="#" target="_blank" data-bind="attr: { 'href':historyStatus.url_info }" title="$T('Glitter-openInfoURL')"><span class="glyphicon glyphicon-globe"></span></a>
|
||||
<!-- /ko -->
|
||||
</form>
|
||||
</li>
|
||||
<li class="divider"></li>
|
||||
<li>
|
||||
<form class="history-ratings-report" data-bind="submit: setUserReport">
|
||||
<strong>$T('report')</strong>
|
||||
<br />
|
||||
<label>
|
||||
<input type="radio" name="rating_flag" value="spam" /> $T('spam')
|
||||
</label>
|
||||
<br />
|
||||
<label>
|
||||
<input type="radio" name="rating_flag" value="encrypted" /> $T('encrypted')
|
||||
</label>
|
||||
<br />
|
||||
<label>
|
||||
<input type="radio" name="rating_flag" value="expired" /> $T('expired')
|
||||
<select name="ratings-report-expired-server" class="ratings-report-hidden form-control" data-bind="options: \$parent.servers, optionsText: 'host', optionsValue: 'host', optionsCaption: '$T('nzo-all')'"></select>
|
||||
</label>
|
||||
<br />
|
||||
<label>
|
||||
<input type="radio" name="rating_flag" value="other" /> $T('otherProblem')
|
||||
<input type="text" class="form-control ratings-report-hidden" name="ratings-report-other" />
|
||||
</label>
|
||||
<br />
|
||||
<label>
|
||||
<input type="radio" name="rating_flag" value="comment" /> $T('comment')
|
||||
<input type="text" class="form-control ratings-report-hidden" name="ratings-report-comment" />
|
||||
</label>
|
||||
<br />
|
||||
<button type="button" class="btn btn-default">$T('send') <span class="glyphicon glyphicon-ok"></span></button>
|
||||
</form>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</td>
|
||||
<td class="status row-wrap-text" data-bind="text: statusText()"></td>
|
||||
<td class="history-completedon row-wrap-text" data-bind="text: completedOn(), attr: { 'data-timestamp': completed }"></td>
|
||||
<td class="delete">
|
||||
<div class="dropdown">
|
||||
<a href="#" data-toggle="dropdown" data-bind="click: updateAllHistoryInfo">
|
||||
<span class="caret"></span>
|
||||
</a>
|
||||
<div class="dropdown-menu">
|
||||
<div class="history-status-table">
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('name')</div>
|
||||
<div class="col-sm-10" data-bind="text: historyStatus.name"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('post-Completed')</div>
|
||||
<div class="col-sm-10" data-bind="text: completedOn, attr: { 'data-timestamp': completed }"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('status')</div>
|
||||
<div class="col-sm-10" data-bind="text: glitterTranslate.status[historyStatus.status()] ? glitterTranslate.status[historyStatus.status()] : statusText()"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('size')</div>
|
||||
<div class="col-sm-10" data-bind="text: historyStatus.size"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('category')</div>
|
||||
<div class="col-sm-10" data-bind="text: historyStatus.category() == '*' ? glitterTranslate.defaultText : historyStatus.category"></div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-sm-2">$T('msg-path')</div>
|
||||
<div class="col-sm-10" data-bind="text: historyStatus.storage"></div>
|
||||
</div>
|
||||
<!-- ko foreach: historyStatus.stage_log -->
|
||||
<div class="row">
|
||||
<div class="col-sm-2" data-bind="text: glitterTranslate.status[name()]"></div>
|
||||
<div class="col-sm-10 history-status-modallink" data-bind="html: actions"></div>
|
||||
</div>
|
||||
<!-- /ko -->
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<a href="#" class="hoverbutton" data-bind="click: deleteSlot"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
<div class="input-group search-box">
|
||||
<input type="text" class="form-control" placeholder="$T('Glitter-search')" required data-bind="textInput: history.searchTerm, event: { keydown: history.clearSearchTerm }" />
|
||||
<a data-bind="event: { mousedown: history.clearSearchTerm }">
|
||||
<span class="glyphicon" data-bind="css: { 'glyphicon-search' : !history.searchTerm(), 'glyphicon-remove' : history.searchTerm() }"></span>
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<ul class="pagination" data-bind="foreach: history.pagination.allpages(), visible: history.pagination.hasPagination" style="display: none;">
|
||||
<li data-bind="css: { active: isCurrent, disabled: isDots }, click: onclick">
|
||||
<span data-bind="text: page"></span>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<div class="multioperations-selector" id="history-options">
|
||||
<a href="#" class="hoverbutton" title="$T('showAllHis') / $T('showFailedHis')" data-toggle="tooltip" data-placement="left" data-bind="click: history.toggleShowFailed, css: { 'history-options-show-failed': history.showFailed }"><span class="glyphicon glyphicon-exclamation-sign"></span></a>
|
||||
<a href="#" class="hoverbutton" title="$T('purgeHist')" data-toggle="tooltip" data-placement="left" data-bind="click: history.emptyHistory"><span class="glyphicon glyphicon-trash"></span></a>
|
||||
</div>
|
||||
|
||||
<div class="info-container history-info">
|
||||
<span class="glyphicon glyphicon-save"></span>
|
||||
<span data-bind="text: history.downloadedToday"></span>B $T('Glitter-today')
|
||||
|
||||
<!-- <span data-bind="text: history.downloadedWeek"></span>B this week -->
|
||||
<span data-bind="text: history.downloadedMonth"></span>B $T('Glitter-thisMonth')
|
||||
<span data-bind="text: history.downloadedTotal"></span>B $T('Glitter-total')
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Filedrop and Restarting overlay -->
|
||||
<div class="main-filedrop modal-backdrop fade in">
|
||||
<span class="glyphicon glyphicon-plus-sign"></span>
|
||||
</div>
|
||||
<div class="main-restarting modal-backdrop fade in" data-bind="visible: isRestarting" style="display: none;">
|
||||
<div>
|
||||
<strong><span class="glyphicon glyphicon-retweet"></span> $T('Glitter-lostConnection')</strong><br />
|
||||
<small>$T('Glitter-afterRestart')</small>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!--#include $webdir + "/include_modals.tmpl"#-->
|
||||
|
||||
<!-- Make translations available in scripts -->
|
||||
<script type="text/javascript">
|
||||
var apiKey = "$session";
|
||||
@@ -640,27 +45,41 @@
|
||||
var sabSpeedHistory = [$bytespersec_list];
|
||||
var newRelease = "$new_release";
|
||||
var newReleaseUrl = "$new_rel_url";
|
||||
var glitterIsBeta = ("$version".search(/Alpa|Beta|x/)) > 0;
|
||||
var glitterPreLoadQueue = $preload_queue;
|
||||
var glitterPreLoadHistory = $preload_history;
|
||||
|
||||
var glitterTranslate = new Object();
|
||||
glitterTranslate.paused = "$T('post-Paused')";
|
||||
glitterTranslate.left = "$T('Glitter-left')";
|
||||
glitterTranslate.clearWarn = "$T('Glitter-confirmClearWarnings')";
|
||||
glitterTranslate.pausePrompt = '$T('Glitter-pausePrompt')'.replace(/<br \/>/g, "\n").replace(/"/g, "'");
|
||||
glitterTranslate.pausePromptFail = "$T('Glitter-pausePromptFail')".replace(/<br \/>/g, "\n");
|
||||
glitterTranslate.pausePromptFail = "$T('Glitter-pausePromptFail')"
|
||||
glitterTranslate.pauseFor = "$T('pauseFor')"
|
||||
glitterTranslate.minutes = "$T('mins')"
|
||||
glitterTranslate.shutdown = "$T('shutdownOK?')";
|
||||
glitterTranslate.restart = "$T('explain-Restart')".replace(/<br \/>/g, "\n");
|
||||
glitterTranslate.repair = "$T('explain-Repair')".replace(/<br \/>/g, "\n");
|
||||
glitterTranslate.removeDown = "$T('Glitter-confirmClearDownloads')";
|
||||
glitterTranslate.removeDow1 = "$T('Glitter-confirmClear1Download')";
|
||||
glitterTranslate.grabbing = "$T('Glitter-grabbing')";
|
||||
glitterTranslate.encrypted = "$T('Glitter-encrypted')";
|
||||
glitterTranslate.duplicate = "$T('Glitter-duplicate')";
|
||||
glitterTranslate.tooLarge = "$T('Glitter-tooLarge')";
|
||||
glitterTranslate.unwanted = "$T('Glitter-unwanted')";
|
||||
glitterTranslate.incomplete = "$T('Glitter-incomplete')";
|
||||
glitterTranslate.filtered = "$T('Glitter-filtered')";
|
||||
glitterTranslate.waitSec = "$T('Glitter-waitSec')";
|
||||
glitterTranslate.checking = "$T('post-Checking')";
|
||||
glitterTranslate.misingArt = "$T('missingArt')";
|
||||
glitterTranslate.noSelect = "$T('Glitter-noSelect')";
|
||||
glitterTranslate.sendThanks = "$T('Glitter-sendThanks')";
|
||||
glitterTranslate.chooseFile = "$T('Glitter-chooseFile')";
|
||||
glitterTranslate.orphanedJobsMsg = "$T('explain-orphans')";
|
||||
glitterTranslate.useCache = "$T('explain-cache_limitstr')";
|
||||
glitterTranslate.noLocalStorage = "$T('Glitter-noLocalStorage')";
|
||||
glitterTranslate.updateAvailable = "$T('Glitter-updateAvailable')";
|
||||
glitterTranslate.defaultText = "$T('default')";
|
||||
glitterTranslate.noneText = "$T('None')";
|
||||
glitterTranslate.moreText = "$T('Glitter-more')";
|
||||
|
||||
glitterTranslate.status = [];
|
||||
glitterTranslate.status['Completed'] = "$T('post-Completed')";
|
||||
@@ -676,11 +95,12 @@
|
||||
glitterTranslate.status['Checking'] = "$T('post-Checking')";
|
||||
glitterTranslate.status['Download'] = "$T('stage-download')";
|
||||
glitterTranslate.status['Repair'] = "$T('stage-repair')";
|
||||
glitterTranslate.status['Join files'] = "$T('stage-filejoin')";
|
||||
glitterTranslate.status['Filejoin'] = "$T('stage-filejoin')";
|
||||
glitterTranslate.status['Unpack'] = "$T('stage-unpack')";
|
||||
glitterTranslate.status['Script'] = "$T('stage-script')";
|
||||
glitterTranslate.status['Source'] = "$T('stage-source')";
|
||||
glitterTranslate.status['Servers'] = "$T('stage-servers')";
|
||||
glitterTranslate.status['INFO'] = "$T('log-info')".replace('+ ', '').toUpperCase();
|
||||
glitterTranslate.status['WARNING'] = "$T('Glitter-warning')";
|
||||
glitterTranslate.status['ERROR'] = "$T('Glitter-error')";
|
||||
|
||||
@@ -696,33 +116,9 @@
|
||||
glitterTranslate.priority['Normal'] = "$T('pr-normal')";
|
||||
glitterTranslate.priority['Low'] = "$T('pr-low')";
|
||||
glitterTranslate.priority['Stop'] = "$T('pr-stop')";
|
||||
|
||||
glitterIsBeta = ("$version".search(/Alpa|Beta|x/)) > 0;
|
||||
|
||||
// To avoid problems when localStorage is disabled
|
||||
function localStorageSetItem(varToSet, valueToSet) { try { return localStorage.setItem(varToSet, valueToSet); } catch(e) { \$('#localstorage-error span').text('Cannot store settings locally'); return false; } }
|
||||
function localStorageGetItem(varToGet) { try { return localStorage.getItem(varToGet); } catch(e) { \$('#localstorage-error span').text('Cannot store settings locally'); return false; } }
|
||||
</script>
|
||||
|
||||
<!-- Feedback -->
|
||||
<div id="feedback-slider" data-bind="visible: glitterIsBeta && !localStorageGetItem('showFeedback')" style="display: none;">
|
||||
<h4>Feedback <a href="#" onclick="localStorageSetItem('showFeedback', 'No'); \$(this).parent().parent().hide()">×</a></h4>
|
||||
<div id="feedback-slider-inner">
|
||||
<p><strong>If anything is not working as expected, or could be improved, let us know!</strong></p>
|
||||
<p><strong>If you encounter an error, please include the log file (click on <span class="glyphicon glyphicon-wrench"></span> ) when contacting us.</strong></p>
|
||||
<h4>General</h4>
|
||||
<span class="glyphicon glyphicon-home"></span> <a href="http://forums.sabnzbd.org/" target="_blank">SABnzbd Forum</a><br />
|
||||
<span class="glyphicon glyphicon-plane"></span> <a href="https://github.com/sabnzbd/sabnzbd/" target="_blank">SABnzbd on Github</a><br />
|
||||
<span class="glyphicon glyphicon-globe"></span> <a href="https://translations.launchpad.net/sabnzbd" target="_blank">Translations of SABnzbd</a><br />
|
||||
<span class="glyphicon glyphicon-envelope"></span> <a href="mailto:bugs@sabnzbd.org?body=Version:%20$version%20Skin:%20Glitter">Email bugs@sabnzbd.org</a>
|
||||
|
||||
<h4>Interface (Glitter)</h4>
|
||||
<span class="glyphicon glyphicon-home"></span> <a href="http://forums.sabnzbd.org/viewtopic.php?f=5&t=18880" target="_blank">Glitter at SABnzbd Forum</a><br />
|
||||
<span class="glyphicon glyphicon-envelope"></span> <a href="mailto:safihre@sabnzbd.org?body=Version:%20$version">Email safihre@sabnzbd.org</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Inclusion is faster than external scripts, SABNZB doesn't do caching! -->
|
||||
<!-- Inclusion is faster than external scripts. We load momentJS locale seperatly so failure won't break anything -->
|
||||
<script type="text/javascript">
|
||||
<!--#include raw $webdir + "/static/javascripts/jquery-1.11.2.min.js"#-->
|
||||
<!--#include raw $webdir + "/static/javascripts/jquery-ui.min.js"#-->
|
||||
@@ -733,5 +129,21 @@
|
||||
<!--#include raw $webdir + "/static/bootstrap/js/bootstrap.min.js"#-->
|
||||
<!--#include raw $webdir + "/static/javascripts/glitter.js"#-->
|
||||
</script>
|
||||
<!--#if active_lang != 'en'#-->
|
||||
<script type="text/javascript" src="./static/javascripts/momentjs_locale/${active_lang}.js"></script>
|
||||
<!--#end if#-->
|
||||
</head>
|
||||
<body>
|
||||
<div class="container main-navbar">
|
||||
<!--#include $webdir + "/include_menu.tmpl"#-->
|
||||
</div>
|
||||
|
||||
<div class="container main-content">
|
||||
<!--#include $webdir + "/include_queue.tmpl"#-->
|
||||
<!--#include $webdir + "/include_messages.tmpl"#-->
|
||||
<!--#include $webdir + "/include_history.tmpl"#-->
|
||||
</div>
|
||||
|
||||
<!--#include $webdir + "/include_modals.tmpl"#-->
|
||||
</body>
|
||||
</html>
|
||||
</html>
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
/**
|
||||
* @preserve HTML5 Shiv 3.7.2 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||
*/
|
||||
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.2",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b)}(this,document);
|
||||
@@ -26,6 +26,28 @@ ko.bindingHandlers.truncatedTextCenter = {
|
||||
});
|
||||
}
|
||||
};
|
||||
ko.bindingHandlers.longText = {
|
||||
update: function(element, valueAccessor, allBindingsAccessor) {
|
||||
// Input is an array
|
||||
var value = ko.utils.unwrapObservable(valueAccessor())
|
||||
var outputText = '';
|
||||
// Any <br>'s?
|
||||
if(value.length > 4) {
|
||||
// Inital 3, then the button, then the closing
|
||||
outputText += value.pop() + '<br />' + value.pop() + '<br />' + value.pop() + ' ';
|
||||
outputText += '<a href="#" class="history-status-more">(' + glitterTranslate.moreText + ')</a><br />';
|
||||
outputText += '<span class="history-status-hidden">';
|
||||
outputText += value.join('<br />');
|
||||
outputText += '</span>';
|
||||
} else {
|
||||
// Nothing special
|
||||
outputText += value.join('<br />');
|
||||
}
|
||||
ko.bindingHandlers.html.update(element, function() {
|
||||
return outputText;
|
||||
});
|
||||
}
|
||||
};
|
||||
ko.bindingHandlers.filedrop = {
|
||||
init: function(element, valueAccessor) {
|
||||
var options = $.extend({}, {
|
||||
@@ -37,9 +59,20 @@ ko.bindingHandlers.filedrop = {
|
||||
console.log("File drop disabled because this browser is too old");
|
||||
return;
|
||||
}
|
||||
// EDITED to prevent drag-and-drop from inside own screen
|
||||
$(element).bind("dragstart", function(e) {
|
||||
$(element).data('internal-drag', true)
|
||||
// Remove after timeout
|
||||
setTimeout(function() {
|
||||
$(element).data('internal-drag', false)
|
||||
}, 2000)
|
||||
});
|
||||
$(element).bind("dragenter", function(e) {
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
// Was it external or internal?
|
||||
if($(element).data('internal-drag'))
|
||||
return;
|
||||
if(options.overlaySelector)
|
||||
$(options.overlaySelector).show();
|
||||
});
|
||||
@@ -67,10 +100,36 @@ $(document).bind('dragover', function(e) {
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
/*! Knockout Persist - v0.1.0 - 2013-06-05
|
||||
/*! Knockout Persist - v0.1.0 - 2015-12-28
|
||||
* https://github.com/spoike/knockout.persist
|
||||
* Copyright (c) 2013 Mikael Brassman; Licensed MIT */
|
||||
(function(e){"undefined"!=typeof localStorage&&(e.extenders.persist=function(t,o){var r=t();if(o&&null!==localStorageGetItem(o))try{r=JSON.parse(localStorageGetItem(o))}catch(a){}return t(r),t.subscribe(function(t){localStorageSetItem(o,e.toJSON(t))}),t})})(ko);
|
||||
* Copyright (c) 2013 Mikael Brassman; Licensed MIT
|
||||
* Safihre edited to better detect if localStorage is possible */
|
||||
(function(ko) {
|
||||
// Don't crash on browsers that are missing localStorage
|
||||
try {
|
||||
localStorage.setItem('test', 'test');
|
||||
localStorage.removeItem('test');
|
||||
} catch(e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
ko.extenders.persist = function(target, key) {
|
||||
var initialValue = target();
|
||||
// Load existing value from localStorage if set
|
||||
if (key && localStorage.getItem(key) !== null) {
|
||||
try {
|
||||
initialValue = JSON.parse(localStorage.getItem(key));
|
||||
} catch (e) {
|
||||
}
|
||||
}
|
||||
target(initialValue);
|
||||
// Subscribe to new values and add them to localStorage
|
||||
target.subscribe(function (newValue) {
|
||||
localStorage.setItem(key, ko.toJSON(newValue));
|
||||
});
|
||||
return target;
|
||||
};
|
||||
})(ko);
|
||||
|
||||
// knockout-sortable 0.11.0 | (c) 2015 Ryan Niemeyer | http://www.opensource.org/licenses/mit-license
|
||||
;(function(factory) {
|
||||
@@ -227,7 +286,6 @@ $(document).bind('dragover', function(e) {
|
||||
|
||||
//keep a reference to start/update functions that might have been passed in
|
||||
startActual = sortable.options.start;
|
||||
stopActual = sortable.options.stop;
|
||||
updateActual = sortable.options.update;
|
||||
|
||||
//initialize sortable binding after template binding has rendered in update function
|
||||
@@ -390,7 +448,6 @@ $(document).bind('dragover', function(e) {
|
||||
allowDrop: true,
|
||||
afterMove: null,
|
||||
beforeMove: null,
|
||||
delay: 700,
|
||||
options: {
|
||||
helper: function(e, tr) {
|
||||
var $originals = tr.children();
|
||||
@@ -463,10 +520,11 @@ ko.bindingHandlers.slider = {
|
||||
init: function(element, valueAccessor, allBindingsAccessor) {
|
||||
var options = allBindingsAccessor().sliderOptions || {};
|
||||
$(element).slider(options);
|
||||
/* This created many update signallings when nothing changed
|
||||
ko.utils.registerEventHandler(element, "slidechange", function(event, ui) {
|
||||
var observable = valueAccessor();
|
||||
observable(ui.value);
|
||||
});
|
||||
});*/
|
||||
ko.utils.domNodeDisposal.addDisposeCallback(element, function() {
|
||||
$(element).slider("destroy");
|
||||
});
|
||||
|
||||
@@ -1,124 +1,123 @@
|
||||
/*!
|
||||
* Knockout JavaScript library v3.4.0rc
|
||||
* Knockout JavaScript library v3.4.0
|
||||
* (c) Steven Sanderson - http://knockoutjs.com/
|
||||
* License: MIT (http://www.opensource.org/licenses/mit-license.php)
|
||||
*/
|
||||
|
||||
(function() {(function(n){var y=this||(0,eval)("this"),t=y.document,M=y.navigator,v=y.jQuery,G=y.JSON;(function(n){"function"===typeof define&&define.amd?define(["exports","require"],n):"object"===typeof exports&&"object"===typeof module?n(module.exports||exports):n(y.ko={})})(function(N,O){function J(a,c){return null===a||typeof a in T?a===c:!1}function U(b,c){var d;return function(){d||(d=a.a.setTimeout(function(){d=n;b()},c))}}function V(b,c){var d;return function(){clearTimeout(d);d=a.a.setTimeout(b,c)}}function W(a,
|
||||
c){c&&"change"!==c?"beforeChange"===c?this.Rb(a):this.Ra(a,c):this.Sb(a)}function X(a,c){null!==c&&c.o&&c.o()}function Y(a,c){var d=this.Oc,e=d[w];e.aa||(this.vb&&this.Wa[c]?(d.Wb(c,a,this.Wa[c]),this.Wa[c]=null,--this.vb):e.D[c]||d.Wb(c,a,e.F?{ra:a}:d.Bc(a)))}function K(b,c,d,e){a.f[b]={init:function(b,h,g,m,l){var k,r;a.u(function(){var q=a.a.c(h()),p=!d!==!q,A=!r;if(A||c||p!==k)A&&a.Ea.Ja()&&(r=a.a.Da(a.h.childNodes(b),!0)),p?(A||a.h.ma(b,a.a.Da(r)),a.ob(e?e(l,q):l,b)):a.h.Ga(b),k=p},null,{l:b});
|
||||
return{controlsDescendantBindings:!0}}};a.j.Ca[b]=!1;a.h.ga[b]=!0}var a="undefined"!==typeof N?N:{};a.b=function(b,c){for(var d=b.split("."),e=a,f=0;f<d.length-1;f++)e=e[d[f]];e[d[d.length-1]]=c};a.O=function(a,c,d){a[c]=d};a.version="3.4.0rc";a.b("version",a.version);a.options={deferUpdates:!1,useOnlyNativeEvents:!1};a.a=function(){function b(a,b){for(var c in a)a.hasOwnProperty(c)&&b(c,a[c])}function c(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function d(a,b){a.__proto__=
|
||||
b;return a}function e(b,c,d,e){var k=b[c].match(r)||[];a.a.C(d.match(r),function(b){a.a.za(k,b,e)});b[c]=k.join(" ")}var f={__proto__:[]}instanceof Array,h="function"===typeof Symbol,g={},m={};g[M&&/Firefox\/2/i.test(M.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"];g.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");b(g,function(a,b){if(b.length)for(var c=0,d=b.length;c<d;c++)m[b[c]]=a});var l={propertychange:!0},k=
|
||||
t&&function(){for(var a=3,b=t.createElement("div"),c=b.getElementsByTagName("i");b.innerHTML="\x3c!--[if gt IE "+ ++a+"]><i></i><![endif]--\x3e",c[0];);return 4<a?a:n}(),r=/\S+/g;return{jc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],C:function(a,b){for(var c=0,d=a.length;c<d;c++)b(a[c],c)},A:function(a,b){if("function"==typeof Array.prototype.indexOf)return Array.prototype.indexOf.call(a,b);for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},Zb:function(a,b,c){for(var d=
|
||||
0,e=a.length;d<e;d++)if(b.call(c,a[d],d))return a[d];return null},Va:function(b,c){var d=a.a.A(b,c);0<d?b.splice(d,1):0===d&&b.shift()},$b:function(b){b=b||[];for(var c=[],d=0,e=b.length;d<e;d++)0>a.a.A(c,b[d])&&c.push(b[d]);return c},pb:function(a,b){a=a||[];for(var c=[],d=0,e=a.length;d<e;d++)c.push(b(a[d],d));return c},Ua:function(a,b){a=a||[];for(var c=[],d=0,e=a.length;d<e;d++)b(a[d],d)&&c.push(a[d]);return c},Aa:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,d=b.length;c<
|
||||
d;c++)a.push(b[c]);return a},za:function(b,c,d){var e=a.a.A(a.a.Hb(b),c);0>e?d&&b.push(c):d||b.splice(e,1)},ta:f,extend:c,hb:d,ib:f?d:c,M:b,Ma:function(a,b){if(!a)return a;var c={},d;for(d in a)a.hasOwnProperty(d)&&(c[d]=b(a[d],d,a));return c},yb:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},qc:function(b){b=a.a.ea(b);for(var c=(b[0]&&b[0].ownerDocument||t).createElement("div"),d=0,e=b.length;d<e;d++)c.appendChild(a.ia(b[d]));return c},Da:function(b,c){for(var d=0,e=b.length,k=[];d<e;d++){var l=
|
||||
b[d].cloneNode(!0);k.push(c?a.ia(l):l)}return k},ma:function(b,c){a.a.yb(b);if(c)for(var d=0,e=c.length;d<e;d++)b.appendChild(c[d])},xc:function(b,c){var d=b.nodeType?[b]:b;if(0<d.length){for(var e=d[0],k=e.parentNode,l=0,f=c.length;l<f;l++)k.insertBefore(c[l],e);l=0;for(f=d.length;l<f;l++)a.removeNode(d[l])}},Ia:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&a[a.length-1].parentNode!==b;)a.length--;if(1<a.length){var c=
|
||||
a[0],d=a[a.length-1];for(a.length=0;c!==d;)a.push(c),c=c.nextSibling;a.push(d)}}return a},zc:function(a,b){7>k?a.setAttribute("selected",b):a.selected=b},kb:function(a){return null===a||a===n?"":a.trim?a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},ud:function(a,b){a=a||"";return b.length>a.length?!1:a.substring(0,b.length)===b},Tc:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(3===a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==
|
||||
(b.compareDocumentPosition(a)&16);for(;a&&a!=b;)a=a.parentNode;return!!a},xb:function(b){return a.a.Tc(b,b.ownerDocument.documentElement)},Xb:function(b){return!!a.a.Zb(b,a.a.xb)},J:function(a){return a&&a.tagName&&a.tagName.toLowerCase()},cc:function(b){return a.onError?function(){try{return b.apply(this,arguments)}catch(c){throw a.onError&&a.onError(c),c;}}:b},setTimeout:function(b,c){return setTimeout(a.a.cc(b),c)},gc:function(b){setTimeout(function(){a.onError&&a.onError(b);throw b;},0)},B:function(b,
|
||||
c,d){var e=a.a.cc(d);d=k&&l[c];if(a.options.useOnlyNativeEvents||d||!v)if(d||"function"!=typeof b.addEventListener)if("undefined"!=typeof b.attachEvent){var f=function(a){e.call(b,a)},m="on"+c;b.attachEvent(m,f);a.a.N.ya(b,function(){b.detachEvent(m,f)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else b.addEventListener(c,e,!1);else v(b).bind(c,e)},Na:function(b,c){if(!b||!b.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var d;"input"===
|
||||
a.a.J(b)&&b.type&&"click"==c.toLowerCase()?(d=b.type,d="checkbox"==d||"radio"==d):d=!1;if(a.options.useOnlyNativeEvents||!v||d)if("function"==typeof t.createEvent)if("function"==typeof b.dispatchEvent)d=t.createEvent(m[c]||"HTMLEvents"),d.initEvent(c,!0,!0,y,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error("The supplied element doesn't support dispatchEvent");else if(d&&b.click)b.click();else if("undefined"!=typeof b.fireEvent)b.fireEvent("on"+c);else throw Error("Browser doesn't support triggering events");
|
||||
else v(b).trigger(c)},c:function(b){return a.P(b)?b():b},Hb:function(b){return a.P(b)?b.G():b},mb:function(b,c,d){var k;c&&("object"===typeof b.classList?(k=b.classList[d?"add":"remove"],a.a.C(c.match(r),function(a){k.call(b.classList,a)})):"string"===typeof b.className.baseVal?e(b.className,"baseVal",c,d):e(b,"className",c,d))},jb:function(b,c){var d=a.a.c(c);if(null===d||d===n)d="";var e=a.h.firstChild(b);!e||3!=e.nodeType||a.h.nextSibling(e)?a.h.ma(b,[b.ownerDocument.createTextNode(d)]):e.data=
|
||||
d;a.a.Yc(b)},yc:function(a,b){a.name=b;if(7>=k)try{a.mergeAttributes(t.createElement("<input name='"+a.name+"'/>"),!1)}catch(c){}},Yc:function(a){9<=k&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},Uc:function(a){if(k){var b=a.style.width;a.style.width=0;a.style.width=b}},od:function(b,c){b=a.a.c(b);c=a.a.c(c);for(var d=[],e=b;e<=c;e++)d.push(e);return d},ea:function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b},ec:function(a){return h?Symbol(a):a},xd:6===
|
||||
k,yd:7===k,L:k,lc:function(b,c){for(var d=a.a.ea(b.getElementsByTagName("input")).concat(a.a.ea(b.getElementsByTagName("textarea"))),e="string"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},k=[],l=d.length-1;0<=l;l--)e(d[l])&&k.push(d[l]);return k},md:function(b){return"string"==typeof b&&(b=a.a.kb(b))?G&&G.parse?G.parse(b):(new Function("return "+b))():null},Mb:function(b,c,d){if(!G||!G.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");
|
||||
return G.stringify(a.a.c(b),c,d)},nd:function(c,d,e){e=e||{};var k=e.params||{},l=e.includeFields||this.jc,f=c;if("object"==typeof c&&"form"===a.a.J(c))for(var f=c.action,m=l.length-1;0<=m;m--)for(var h=a.a.lc(c,l[m]),g=h.length-1;0<=g;g--)k[h[g].name]=h[g].value;d=a.a.c(d);var r=t.createElement("form");r.style.display="none";r.action=f;r.method="post";for(var n in d)c=t.createElement("input"),c.type="hidden",c.name=n,c.value=a.a.Mb(a.a.c(d[n])),r.appendChild(c);b(k,function(a,b){var c=t.createElement("input");
|
||||
c.type="hidden";c.name=a;c.value=b;r.appendChild(c)});t.body.appendChild(r);e.submitter?e.submitter(r):r.submit();setTimeout(function(){r.parentNode.removeChild(r)},0)}}}();a.b("utils",a.a);a.b("utils.arrayForEach",a.a.C);a.b("utils.arrayFirst",a.a.Zb);a.b("utils.arrayFilter",a.a.Ua);a.b("utils.arrayGetDistinctValues",a.a.$b);a.b("utils.arrayIndexOf",a.a.A);a.b("utils.arrayMap",a.a.pb);a.b("utils.arrayPushAll",a.a.Aa);a.b("utils.arrayRemoveItem",a.a.Va);a.b("utils.extend",a.a.extend);a.b("utils.fieldsIncludedWithJsonPost",
|
||||
a.a.jc);a.b("utils.getFormFields",a.a.lc);a.b("utils.peekObservable",a.a.Hb);a.b("utils.postJson",a.a.nd);a.b("utils.parseJson",a.a.md);a.b("utils.registerEventHandler",a.a.B);a.b("utils.stringifyJson",a.a.Mb);a.b("utils.range",a.a.od);a.b("utils.toggleDomNodeCssClass",a.a.mb);a.b("utils.triggerEvent",a.a.Na);a.b("utils.unwrapObservable",a.a.c);a.b("utils.objectForEach",a.a.M);a.b("utils.addOrRemoveItem",a.a.za);a.b("utils.setTextContent",a.a.jb);a.b("unwrap",a.a.c);Function.prototype.bind||(Function.prototype.bind=
|
||||
function(a){var c=this;if(1===arguments.length)return function(){return c.apply(a,arguments)};var d=Array.prototype.slice.call(arguments,1);return function(){var e=d.slice(0);e.push.apply(e,arguments);return c.apply(a,e)}});a.a.g=new function(){function a(b,h){var g=b[d];if(!g||"null"===g||!e[g]){if(!h)return n;g=b[d]="ko"+c++;e[g]={}}return e[g]}var c=0,d="__ko__"+(new Date).getTime(),e={};return{get:function(c,d){var e=a(c,!1);return e===n?n:e[d]},set:function(c,d,e){if(e!==n||a(c,!1)!==n)a(c,!0)[d]=
|
||||
e},clear:function(a){var b=a[d];return b?(delete e[b],a[d]=null,!0):!1},R:function(){return c++ +d}}};a.b("utils.domData",a.a.g);a.b("utils.domData.clear",a.a.g.clear);a.a.N=new function(){function b(b,c){var e=a.a.g.get(b,d);e===n&&c&&(e=[],a.a.g.set(b,d,e));return e}function c(d){var e=b(d,!1);if(e)for(var e=e.slice(0),m=0;m<e.length;m++)e[m](d);a.a.g.clear(d);a.a.N.cleanExternalData(d);if(f[d.nodeType])for(e=d.firstChild;d=e;)e=d.nextSibling,8===d.nodeType&&c(d)}var d=a.a.g.R(),e={1:!0,8:!0,9:!0},
|
||||
f={1:!0,9:!0};return{ya:function(a,c){if("function"!=typeof c)throw Error("Callback must be a function");b(a,!0).push(c)},wc:function(c,e){var m=b(c,!1);m&&(a.a.Va(m,e),0==m.length&&a.a.g.set(c,d,n))},ia:function(b){if(e[b.nodeType]&&(c(b),f[b.nodeType])){var d=[];a.a.Aa(d,b.getElementsByTagName("*"));for(var m=0,l=d.length;m<l;m++)c(d[m])}return b},removeNode:function(b){a.ia(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){v&&"function"==typeof v.cleanData&&v.cleanData([a])}}};
|
||||
a.ia=a.a.N.ia;a.removeNode=a.a.N.removeNode;a.b("cleanNode",a.ia);a.b("removeNode",a.removeNode);a.b("utils.domNodeDisposal",a.a.N);a.b("utils.domNodeDisposal.addDisposeCallback",a.a.N.ya);a.b("utils.domNodeDisposal.removeDisposeCallback",a.a.N.wc);(function(){var b=[0,"",""],c=[1,"<table>","</table>"],d=[3,"<table><tbody><tr>","</tr></tbody></table>"],e=[1,"<select multiple='multiple'>","</select>"],f={thead:c,tbody:c,tfoot:c,tr:[2,"<table><tbody>","</tbody></table>"],td:d,th:d,option:e,optgroup:e},
|
||||
h=8>=a.a.L;a.a.va=function(c,d){var e;if(v)if(v.parseHTML)e=v.parseHTML(c,d)||[];else{if((e=v.clean([c],d))&&e[0]){for(var k=e[0];k.parentNode&&11!==k.parentNode.nodeType;)k=k.parentNode;k.parentNode&&k.parentNode.removeChild(k)}}else{(e=d)||(e=t);var k=e.parentWindow||e.defaultView||y,r=a.a.kb(c).toLowerCase(),q=e.createElement("div"),p;p=(r=r.match(/^<([a-z]+)[ >]/))&&f[r[1]]||b;r=p[0];p="ignored<div>"+p[1]+c+p[2]+"</div>";"function"==typeof k.innerShiv?q.appendChild(k.innerShiv(p)):(h&&e.appendChild(q),
|
||||
q.innerHTML=p,h&&q.parentNode.removeChild(q));for(;r--;)q=q.lastChild;e=a.a.ea(q.lastChild.childNodes)}return e};a.a.Kb=function(b,c){a.a.yb(b);c=a.a.c(c);if(null!==c&&c!==n)if("string"!=typeof c&&(c=c.toString()),v)v(b).html(c);else for(var d=a.a.va(c,b.ownerDocument),e=0;e<d.length;e++)b.appendChild(d[e])}})();a.b("utils.parseHtmlFragment",a.a.va);a.b("utils.setHtml",a.a.Kb);a.V=function(){function b(c,e){if(c)if(8==c.nodeType){var f=a.V.sc(c.nodeValue);null!=f&&e.push({Sc:c,kd:f})}else if(1==c.nodeType)for(var f=
|
||||
0,h=c.childNodes,g=h.length;f<g;f++)b(h[f],e)}var c={};return{Eb:function(a){if("function"!=typeof a)throw Error("You can only pass a function to ko.memoization.memoize()");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);c[b]=a;return"\x3c!--[ko_memo:"+b+"]--\x3e"},Ec:function(a,b){var f=c[a];if(f===n)throw Error("Couldn't find any memo with ID "+a+". Perhaps it's already been unmemoized.");try{return f.apply(null,b||[]),
|
||||
!0}finally{delete c[a]}},Fc:function(c,e){var f=[];b(c,f);for(var h=0,g=f.length;h<g;h++){var m=f[h].Sc,l=[m];e&&a.a.Aa(l,e);a.V.Ec(f[h].kd,l);m.nodeValue="";m.parentNode&&m.parentNode.removeChild(m)}},sc:function(a){return(a=a.match(/^\[ko_memo\:(.*?)\]$/))?a[1]:null}}}();a.b("memoization",a.V);a.b("memoization.memoize",a.V.Eb);a.b("memoization.unmemoize",a.V.Ec);a.b("memoization.parseMemoText",a.V.sc);a.b("memoization.unmemoizeDomNodeAndDescendants",a.V.Fc);a.fa=function(){function b(){if(f)for(var b=
|
||||
f,c=0,d;g<f;)if(d=e[g++]){if(g>b){if(5E3<=++c){g=f;a.a.gc(Error("'Too much recursion' after processing "+c+" task groups."));break}b=f}try{d()}catch(r){a.a.gc(r)}}}function c(){b();g=f=e.length=0}var d,e=[],f=0,h=1,g=0;y.MutationObserver?d=function(a){var b=t.createElement("div");(new MutationObserver(a)).observe(b,{attributes:!0});return function(){b.classList.toggle("foo")}}(c):d=t&&"onreadystatechange"in t.createElement("script")?function(a){var b=t.createElement("script");b.onreadystatechange=
|
||||
function(){b.onreadystatechange=null;t.documentElement.removeChild(b);b=null;a()};t.documentElement.appendChild(b)}:function(a){setTimeout(a,0)};return{scheduler:d,gb:function(b){f||a.fa.scheduler(c);e[f++]=b;return h++},cancel:function(a){a=a-(h-f);a>=g&&a<f&&(e[a]=null)},resetForTesting:function(){var a=f-g;g=f=e.length=0;return a},sd:b}}();a.b("tasks",a.fa);a.b("tasks.schedule",a.fa.gb);a.b("tasks.runEarly",a.fa.sd);a.Ha={throttle:function(b,c){b.throttleEvaluation=c;var d=null;return a.K({read:b,
|
||||
write:function(e){clearTimeout(d);d=a.a.setTimeout(function(){b(e)},c)}})},rateLimit:function(a,c){var d,e,f;"number"==typeof c?d=c:(d=c.timeout,e=c.method);a.nb=!1;f="notifyWhenChangesStop"==e?V:U;a.cb(function(a){return f(a,d)})},deferred:function(b,c){if(!0!==c)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");b.nb||(b.nb=!0,b.cb(function(c){var e;return function(){a.fa.cancel(e);e=a.fa.gb(c);b.notifySubscribers(n,
|
||||
"dirty")}}))},notify:function(a,c){a.equalityComparer="always"==c?null:J}};var T={undefined:1,"boolean":1,number:1,string:1};a.b("extenders",a.Ha);a.Cc=function(b,c,d){this.ra=b;this.qb=c;this.Rc=d;this.aa=!1;a.O(this,"dispose",this.o)};a.Cc.prototype.o=function(){this.aa=!0;this.Rc()};a.S=function(){a.a.ib(this,E);E.Bb(this)};var E={Bb:function(a){a.T={};a.Ub=1},subscribe:function(b,c,d){var e=this;d=d||"change";var f=new a.Cc(e,c?b.bind(c):b,function(){a.a.Va(e.T[d],f);e.Sa&&e.Sa(d)});e.Ba&&e.Ba(d);
|
||||
e.T[d]||(e.T[d]=[]);e.T[d].push(f);return f},notifySubscribers:function(b,c){c=c||"change";"change"===c&&this.Gc();if(this.Za(c))try{a.s.ac();for(var d=this.T[c].slice(0),e=0,f;f=d[e];++e)f.aa||f.qb(b)}finally{a.s.end()}},Xa:function(){return this.Ub},ad:function(a){return this.Xa()!==a},Gc:function(){++this.Ub},cb:function(b){var c=this,d=a.P(c),e,f,h;c.Ra||(c.Ra=c.notifySubscribers,c.notifySubscribers=W);var g=b(function(){c.Tb=!1;d&&h===c&&(h=c());e=!1;c.Cb(f,h)&&c.Ra(f=h)});c.Sb=function(a){c.Tb=
|
||||
e=!0;h=a;g()};c.Rb=function(a){e||(f=a,c.Ra(a,"beforeChange"))}},Za:function(a){return this.T[a]&&this.T[a].length},Zc:function(b){if(b)return this.T[b]&&this.T[b].length||0;var c=0;a.a.M(this.T,function(a,b){"dirty"!==a&&(c+=b.length)});return c},Cb:function(a,c){return!this.equalityComparer||!this.equalityComparer(a,c)},extend:function(b){var c=this;b&&a.a.M(b,function(b,e){var f=a.Ha[b];"function"==typeof f&&(c=f(c,e)||c)});return c}};a.O(E,"subscribe",E.subscribe);a.O(E,"extend",E.extend);a.O(E,
|
||||
"getSubscriptionsCount",E.Zc);a.a.ta&&a.a.hb(E,Function.prototype);a.S.fn=E;a.oc=function(a){return null!=a&&"function"==typeof a.subscribe&&"function"==typeof a.notifySubscribers};a.b("subscribable",a.S);a.b("isSubscribable",a.oc);a.Ea=a.s=function(){function b(a){d.push(e);e=a}function c(){e=d.pop()}var d=[],e,f=0;return{ac:b,end:c,vc:function(b){if(e){if(!a.oc(b))throw Error("Only subscribable things can act as dependencies");e.qb.call(e.Nc,b,b.Jc||(b.Jc=++f))}},I:function(a,d,e){try{return b(),
|
||||
a.apply(d,e||[])}finally{c()}},Ja:function(){if(e)return e.u.Ja()},bb:function(){if(e)return e.bb}}}();a.b("computedContext",a.Ea);a.b("computedContext.getDependenciesCount",a.Ea.Ja);a.b("computedContext.isInitial",a.Ea.bb);a.b("ignoreDependencies",a.wd=a.s.I);var F=a.a.ec("_latestValue");a.X=function(b){function c(){if(0<arguments.length)return c.Cb(c[F],arguments[0])&&(c.pa(),c[F]=arguments[0],c.oa()),this;a.s.vc(c);return c[F]}c[F]=b;a.a.ta||a.a.extend(c,a.S.fn);a.S.fn.Bb(c);a.a.ib(c,C);a.options.deferUpdates&&
|
||||
a.Ha.deferred(c,!0);return c};var C={equalityComparer:J,G:function(){return this[F]},oa:function(){this.notifySubscribers(this[F])},pa:function(){this.notifySubscribers(this[F],"beforeChange")}};a.a.ta&&a.a.hb(C,a.S.fn);var I=a.X.xa="__ko_proto__";C[I]=a.X;a.Ya=function(b,c){return null===b||b===n||b[I]===n?!1:b[I]===c?!0:a.Ya(b[I],c)};a.P=function(b){return a.Ya(b,a.X)};a.Ka=function(b){return"function"==typeof b&&b[I]===a.X||"function"==typeof b&&b[I]===a.K&&b.bd?!0:!1};a.b("observable",a.X);a.b("isObservable",
|
||||
a.P);a.b("isWriteableObservable",a.Ka);a.b("isWritableObservable",a.Ka);a.b("observable.fn",C);a.O(C,"peek",C.G);a.O(C,"valueHasMutated",C.oa);a.O(C,"valueWillMutate",C.pa);a.ua=function(b){b=b||[];if("object"!=typeof b||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");b=a.X(b);a.a.ib(b,a.ua.fn);return b.extend({trackArrayChanges:!0})};a.ua.fn={remove:function(b){for(var c=this.G(),d=[],e="function"!=typeof b||a.P(b)?
|
||||
function(a){return a===b}:b,f=0;f<c.length;f++){var h=c[f];e(h)&&(0===d.length&&this.pa(),d.push(h),c.splice(f,1),f--)}d.length&&this.oa();return d},removeAll:function(b){if(b===n){var c=this.G(),d=c.slice(0);this.pa();c.splice(0,c.length);this.oa();return d}return b?this.remove(function(c){return 0<=a.a.A(b,c)}):[]},destroy:function(b){var c=this.G(),d="function"!=typeof b||a.P(b)?function(a){return a===b}:b;this.pa();for(var e=c.length-1;0<=e;e--)d(c[e])&&(c[e]._destroy=!0);this.oa()},destroyAll:function(b){return b===
|
||||
n?this.destroy(function(){return!0}):b?this.destroy(function(c){return 0<=a.a.A(b,c)}):[]},indexOf:function(b){var c=this();return a.a.A(c,b)},replace:function(a,c){var d=this.indexOf(a);0<=d&&(this.pa(),this.G()[d]=c,this.oa())}};a.a.ta&&a.a.hb(a.ua.fn,a.X.fn);a.a.C("pop push reverse shift sort splice unshift".split(" "),function(b){a.ua.fn[b]=function(){var a=this.G();this.pa();this.bc(a,b,arguments);var d=a[b].apply(a,arguments);this.oa();return d===a?this:d}});a.a.C(["slice"],function(b){a.ua.fn[b]=
|
||||
function(){var a=this();return a[b].apply(a,arguments)}});a.b("observableArray",a.ua);a.Ha.trackArrayChanges=function(b,c){function d(){if(!e){e=!0;var c=b.notifySubscribers;b.notifySubscribers=function(a,b){b&&"change"!==b||++g;return c.apply(this,arguments)};var d=[].concat(b.G()||[]);f=null;h=b.subscribe(function(c){c=[].concat(c||[]);if(b.Za("arrayChange")){var e;if(!f||1<g)f=a.a.sb(d,c,b.rb);e=f}d=c;f=null;g=0;e&&e.length&&b.notifySubscribers(e,"arrayChange")})}}b.rb={};c&&"object"==typeof c&&
|
||||
a.a.extend(b.rb,c);b.rb.sparse=!0;if(!b.bc){var e=!1,f=null,h,g=0,m=b.Ba,l=b.Sa;b.Ba=function(a){m&&m.call(b,a);"arrayChange"===a&&d()};b.Sa=function(a){l&&l.call(b,a);"arrayChange"!==a||b.Za("arrayChange")||(h.o(),e=!1)};b.bc=function(b,c,d){function l(a,b,c){return m[m.length]={status:a,value:b,index:c}}if(e&&!g){var m=[],h=b.length,u=d.length,H=0;switch(c){case "push":H=h;case "unshift":for(c=0;c<u;c++)l("added",d[c],H+c);break;case "pop":H=h-1;case "shift":h&&l("deleted",b[H],H);break;case "splice":c=
|
||||
Math.min(Math.max(0,0>d[0]?h+d[0]:d[0]),h);for(var h=1===u?h:Math.min(c+(d[1]||0),h),u=c+u-2,H=Math.max(h,u),P=[],n=[],Q=2;c<H;++c,++Q)c<h&&n.push(l("deleted",b[c],c)),c<u&&P.push(l("added",d[Q],c));a.a.kc(n,P);break;default:return}f=m}}}};var w=a.a.ec("_state");a.u=a.K=function(b,c,d){function e(){if(0<arguments.length){if("function"===typeof f)f.apply(h.zb,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");
|
||||
return this}a.s.vc(e);(h.ba||h.F&&e.$a())&&e.ja();return h.ca}"object"===typeof b?d=b:(d=d||{},b&&(d.read=b));if("function"!=typeof d.read)throw Error("Pass a function that returns the value of the ko.computed");var f=d.write,h={ca:n,ba:!0,ab:!1,Nb:!1,aa:!1,fb:!1,F:!1,pd:d.read,zb:c||d.owner,l:d.disposeWhenNodeIsRemoved||d.l||null,Fa:d.disposeWhen||d.Fa,wb:null,D:{},U:0,ic:null};e[w]=h;e.bd="function"===typeof f;a.a.ta||a.a.extend(e,a.S.fn);a.S.fn.Bb(e);a.a.ib(e,B);d.pure?(h.fb=!0,h.F=!0,a.a.extend(e,
|
||||
aa)):d.deferEvaluation&&a.a.extend(e,ba);a.options.deferUpdates&&a.Ha.deferred(e,!0);h.l&&(h.Nb=!0,h.l.nodeType||(h.l=null));h.F||d.deferEvaluation||e.ja();h.l&&e.ka()&&a.a.N.ya(h.l,h.wb=function(){e.o()});return e};var B={equalityComparer:J,Ja:function(){return this[w].U},Wb:function(a,c,d){if(this[w].fb&&c===this)throw Error("A 'pure' computed must not be called recursively");this[w].D[a]=d;d.Qa=this[w].U++;d.wa=c.Xa()},$a:function(){var a,c,d=this[w].D;for(a in d)if(d.hasOwnProperty(a)&&(c=d[a],
|
||||
c.ra.ad(c.wa)))return!0},jd:function(){this.Pa&&!this[w].ab&&this.Pa()},ka:function(){return this[w].ba||0<this[w].U},rd:function(){this.Tb||this.hc()},Bc:function(a){if(a.nb&&!this[w].l){var c=a.subscribe(this.jd,this,"dirty"),d=a.subscribe(this.rd,this);return{ra:a,o:function(){c.o();d.o()}}}return a.subscribe(this.hc,this)},hc:function(){var b=this,c=b.throttleEvaluation;c&&0<=c?(clearTimeout(this[w].ic),this[w].ic=a.a.setTimeout(function(){b.ja(!0)},c)):b.Pa?b.Pa():b.ja(!0)},ja:function(b){var c=
|
||||
this[w],d=c.Fa;if(!c.ab&&!c.aa){if(c.l&&!a.a.xb(c.l)||d&&d()){if(!c.Nb){this.o();return}}else c.Nb=!1;c.ab=!0;try{this.Xc(b)}finally{c.ab=!1}c.U||this.o()}},Xc:function(b){var c=this[w],d=c.fb?n:!c.U,e={Oc:this,Wa:c.D,vb:c.U};a.s.ac({Nc:e,qb:Y,u:this,bb:d});c.D={};c.U=0;e=this.Wc(c,e);this.Cb(c.ca,e)&&(c.F||this.notifySubscribers(c.ca,"beforeChange"),c.ca=e,c.F?this.Gc():b&&this.notifySubscribers(c.ca));d&&this.notifySubscribers(c.ca,"awake")},Wc:function(b,c){try{var d=b.pd;return b.zb?d.call(b.zb):
|
||||
d()}finally{a.s.end(),c.vb&&!b.F&&a.a.M(c.Wa,X),b.ba=!1}},G:function(){var a=this[w];(a.ba&&!a.U||a.F&&this.$a())&&this.ja();return a.ca},cb:function(b){a.S.fn.cb.call(this,b);this.Pa=function(){this.Rb(this[w].ca);this[w].ba=!0;this.Sb(this)}},o:function(){var b=this[w];!b.F&&b.D&&a.a.M(b.D,function(a,b){b.o&&b.o()});b.l&&b.wb&&a.a.N.wc(b.l,b.wb);b.D=null;b.U=0;b.aa=!0;b.ba=!1;b.F=!1;b.l=null}},aa={Ba:function(b){var c=this,d=c[w];if(!d.aa&&d.F&&"change"==b){d.F=!1;if(d.ba||c.$a())d.D=null,d.U=0,
|
||||
d.ba=!0,c.ja();else{var e=[];a.a.M(d.D,function(a,b){e[b.Qa]=a});a.a.C(e,function(a,b){var e=d.D[a],m=c.Bc(e.ra);m.Qa=b;m.wa=e.wa;d.D[a]=m})}d.aa||c.notifySubscribers(d.ca,"awake")}},Sa:function(b){var c=this[w];c.aa||"change"!=b||this.Za("change")||(a.a.M(c.D,function(a,b){b.o&&(c.D[a]={ra:b.ra,Qa:b.Qa,wa:b.wa},b.o())}),c.F=!0,this.notifySubscribers(n,"asleep"))},Xa:function(){var b=this[w];b.F&&(b.ba||this.$a())&&this.ja();return a.S.fn.Xa.call(this)}},ba={Ba:function(a){"change"!=a&&"beforeChange"!=
|
||||
a||this.G()}};a.a.ta&&a.a.hb(B,a.S.fn);var R=a.X.xa;a.u[R]=a.X;B[R]=a.u;a.dd=function(b){return a.Ya(b,a.u)};a.ed=function(b){return a.Ya(b,a.u)&&b[w]&&b[w].fb};a.b("computed",a.u);a.b("dependentObservable",a.u);a.b("isComputed",a.dd);a.b("isPureComputed",a.ed);a.b("computed.fn",B);a.O(B,"peek",B.G);a.O(B,"dispose",B.o);a.O(B,"isActive",B.ka);a.O(B,"getDependenciesCount",B.Ja);a.uc=function(b,c){if("function"===typeof b)return a.u(b,c,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.u(b,c)};a.b("pureComputed",
|
||||
a.uc);(function(){function b(a,f,h){h=h||new d;a=f(a);if("object"!=typeof a||null===a||a===n||a instanceof RegExp||a instanceof Date||a instanceof String||a instanceof Number||a instanceof Boolean)return a;var g=a instanceof Array?[]:{};h.save(a,g);c(a,function(c){var d=f(a[c]);switch(typeof d){case "boolean":case "number":case "string":case "function":g[c]=d;break;case "object":case "undefined":var k=h.get(d);g[c]=k!==n?k:b(d,f,h)}});return g}function c(a,b){if(a instanceof Array){for(var c=0;c<
|
||||
a.length;c++)b(c);"function"==typeof a.toJSON&&b("toJSON")}else for(c in a)b(c)}function d(){this.keys=[];this.values=[]}a.Dc=function(c){if(0==arguments.length)throw Error("When calling ko.toJS, pass the object you want to convert.");return b(c,function(b){for(var c=0;a.P(b)&&10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.Dc(b);return a.a.Mb(b,c,d)};d.prototype={constructor:d,save:function(b,c){var d=a.a.A(this.keys,b);0<=d?this.values[d]=c:(this.keys.push(b),this.values.push(c))},get:function(b){b=
|
||||
a.a.A(this.keys,b);return 0<=b?this.values[b]:n}}})();a.b("toJS",a.Dc);a.b("toJSON",a.toJSON);(function(){a.m={H:function(b){switch(a.a.J(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__?a.a.g.get(b,a.f.options.Fb):7>=a.a.L?b.getAttributeNode("value")&&b.getAttributeNode("value").specified?b.value:b.text:b.value;case "select":return 0<=b.selectedIndex?a.m.H(b.options[b.selectedIndex]):n;default:return b.value}},qa:function(b,c,d){switch(a.a.J(b)){case "option":switch(typeof c){case "string":a.a.g.set(b,
|
||||
a.f.options.Fb,n);"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__;b.value=c;break;default:a.a.g.set(b,a.f.options.Fb,c),b.__ko__hasDomDataOptionValue__=!0,b.value="number"===typeof c?c:""}break;case "select":if(""===c||null===c)c=n;for(var e=-1,f=0,h=b.options.length,g;f<h;++f)if(g=a.m.H(b.options[f]),g==c||""==g&&c===n){e=f;break}if(d||0<=e||c===n&&1<b.size)b.selectedIndex=e;break;default:if(null===c||c===n)c="";b.value=c}}}})();a.b("selectExtensions",a.m);a.b("selectExtensions.readValue",
|
||||
a.m.H);a.b("selectExtensions.writeValue",a.m.qa);a.j=function(){function b(b){b=a.a.kb(b);123===b.charCodeAt(0)&&(b=b.slice(1,-1));var c=[],d=b.match(e),r,g=[],p=0;if(d){d.push(",");for(var A=0,z;z=d[A];++A){var u=z.charCodeAt(0);if(44===u){if(0>=p){c.push(r&&g.length?{key:r,value:g.join("")}:{unknown:r||g.join("")});r=p=0;g=[];continue}}else if(58===u){if(!p&&!r&&1===g.length){r=g.pop();continue}}else 47===u&&A&&1<z.length?(u=d[A-1].match(f))&&!h[u[0]]&&(b=b.substr(b.indexOf(z)+1),d=b.match(e),d.push(","),
|
||||
A=-1,z="/"):40===u||123===u||91===u?++p:41===u||125===u||93===u?--p:r||g.length||34!==u&&39!==u||(z=z.slice(1,-1));g.push(z)}}return c}var c=["true","false","null","undefined"],d=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,e=RegExp("\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|/(?:[^/\\\\]|\\\\.)*/w*|[^\\s:,/][^,\"'{}()/:[\\]]*[^\\s,\"'{}()/:[\\]]|[^\\s]","g"),f=/[\])"'A-Za-z0-9_$]+$/,h={"in":1,"return":1,"typeof":1},g={};return{Ca:[],na:g,Gb:b,eb:function(e,l){function k(b,e){var l;
|
||||
if(!A){var m=a.getBindingHandler(b);if(m&&m.preprocess&&!(e=m.preprocess(e,b,k)))return;if(m=g[b])l=e,0<=a.a.A(c,l)?l=!1:(m=l.match(d),l=null===m?!1:m[1]?"Object("+m[1]+")"+m[2]:l),m=l;m&&h.push("'"+b+"':function(_z){"+l+"=_z}")}p&&(e="function(){return "+e+" }");f.push("'"+b+"':"+e)}l=l||{};var f=[],h=[],p=l.valueAccessors,A=l.bindingParams,z="string"===typeof e?b(e):e;a.a.C(z,function(a){k(a.key||a.unknown,a.value)});h.length&&k("_ko_property_writers","{"+h.join(",")+" }");return f.join(",")},hd:function(a,
|
||||
b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},Oa:function(b,c,d,e,f){if(b&&a.P(b))!a.Ka(b)||f&&b.G()===e||b(e);else if((b=c.get("_ko_property_writers"))&&b[d])b[d](e)}}}();a.b("expressionRewriting",a.j);a.b("expressionRewriting.bindingRewriteValidators",a.j.Ca);a.b("expressionRewriting.parseObjectLiteral",a.j.Gb);a.b("expressionRewriting.preProcessBindings",a.j.eb);a.b("expressionRewriting._twoWayBindings",a.j.na);a.b("jsonExpressionRewriting",a.j);a.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",
|
||||
a.j.eb);(function(){function b(a){return 8==a.nodeType&&h.test(f?a.text:a.nodeValue)}function c(a){return 8==a.nodeType&&g.test(f?a.text:a.nodeValue)}function d(a,d){for(var e=a,f=1,m=[];e=e.nextSibling;){if(c(e)&&(f--,0===f))return m;m.push(e);b(e)&&f++}if(!d)throw Error("Cannot find closing comment tag to match: "+a.nodeValue);return null}function e(a,b){var c=d(a,b);return c?0<c.length?c[c.length-1].nextSibling:a.nextSibling:null}var f=t&&"\x3c!--test--\x3e"===t.createComment("test").text,h=f?
|
||||
/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,g=f?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,m={ul:!0,ol:!0};a.h={ga:{},childNodes:function(a){return b(a)?d(a):a.childNodes},Ga:function(c){if(b(c)){c=a.h.childNodes(c);for(var d=0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.yb(c)},ma:function(c,d){if(b(c)){a.h.Ga(c);for(var e=c.nextSibling,f=0,m=d.length;f<m;f++)e.parentNode.insertBefore(d[f],e)}else a.a.ma(c,d)},tc:function(a,c){b(a)?a.parentNode.insertBefore(c,a.nextSibling):
|
||||
a.firstChild?a.insertBefore(c,a.firstChild):a.appendChild(c)},nc:function(c,d,e){e?b(c)?c.parentNode.insertBefore(d,e.nextSibling):e.nextSibling?c.insertBefore(d,e.nextSibling):c.appendChild(d):a.h.tc(c,d)},firstChild:function(a){return b(a)?!a.nextSibling||c(a.nextSibling)?null:a.nextSibling:a.firstChild},nextSibling:function(a){b(a)&&(a=e(a));return a.nextSibling&&c(a.nextSibling)?null:a.nextSibling},$c:b,vd:function(a){return(a=(f?a.text:a.nodeValue).match(h))?a[1]:null},rc:function(d){if(m[a.a.J(d)]){var k=
|
||||
d.firstChild;if(k){do if(1===k.nodeType){var f;f=k.firstChild;var g=null;if(f){do if(g)g.push(f);else if(b(f)){var h=e(f,!0);h?f=h:g=[f]}else c(f)&&(g=[f]);while(f=f.nextSibling)}if(f=g)for(g=k.nextSibling,h=0;h<f.length;h++)g?d.insertBefore(f[h],g):d.appendChild(f[h])}while(k=k.nextSibling)}}}}})();a.b("virtualElements",a.h);a.b("virtualElements.allowedBindings",a.h.ga);a.b("virtualElements.emptyNode",a.h.Ga);a.b("virtualElements.insertAfter",a.h.nc);a.b("virtualElements.prepend",a.h.tc);a.b("virtualElements.setDomNodeChildren",
|
||||
a.h.ma);(function(){a.$=function(){this.Mc={}};a.a.extend(a.$.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=b.getAttribute("data-bind")||a.i.getComponentNameForNode(b);case 8:return a.h.$c(b);default:return!1}},getBindings:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b):null;return a.i.Vb(d,b,c,!1)},getBindingAccessors:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b,{valueAccessors:!0}):null;return a.i.Vb(d,
|
||||
b,c,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");case 8:return a.h.vd(b);default:return null}},parseBindingsString:function(b,c,d,e){try{var f=this.Mc,h=b+(e&&e.valueAccessors||""),g;if(!(g=f[h])){var m,l="with($context){with($data||{}){return{"+a.j.eb(b,e)+"}}}";m=new Function("$context","$element",l);g=f[h]=m}return g(c,d)}catch(k){throw k.message="Unable to parse bindings.\nBindings value: "+b+"\nMessage: "+k.message,k;}}});a.$.instance=new a.$})();
|
||||
a.b("bindingProvider",a.$);(function(){function b(a){return function(){return a}}function c(a){return a()}function d(b){return a.a.Ma(a.s.I(b),function(a,c){return function(){return b()[c]}})}function e(c,e,k){return"function"===typeof c?d(c.bind(null,e,k)):a.a.Ma(c,b)}function f(a,b){return d(this.getBindings.bind(this,a,b))}function h(b,c,d){var e,k=a.h.firstChild(c),f=a.$.instance,l=f.preprocessNode;if(l){for(;e=k;)k=a.h.nextSibling(e),l.call(f,e);k=a.h.firstChild(c)}for(;e=k;)k=a.h.nextSibling(e),
|
||||
g(b,e,d)}function g(b,c,d){var e=!0,k=1===c.nodeType;k&&a.h.rc(c);if(k&&d||a.$.instance.nodeHasBindings(c))e=l(c,null,b,d).shouldBindDescendants;e&&!r[a.a.J(c)]&&h(b,c,!k)}function m(b){var c=[],d={},e=[];a.a.M(b,function Z(k){if(!d[k]){var f=a.getBindingHandler(k);f&&(f.after&&(e.push(k),a.a.C(f.after,function(c){if(b[c]){if(-1!==a.a.A(e,c))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+e.join(", "));Z(c)}}),e.length--),c.push({key:k,mc:f}));d[k]=!0}});
|
||||
return c}function l(b,d,e,k){var l=a.a.g.get(b,q);if(!d){if(l)throw Error("You cannot apply bindings multiple times to the same element.");a.a.g.set(b,q,!0)}!l&&k&&a.Ac(b,e);var g;if(d&&"function"!==typeof d)g=d;else{var h=a.$.instance,r=h.getBindingAccessors||f,p=a.K(function(){(g=d?d(e,b):r.call(h,b,e))&&e.Z&&e.Z();return g},null,{l:b});g&&p.ka()||(p=null)}var t;if(g){var v=function(){return a.a.Ma(p?p():g,c)},w=p?function(a){return function(){return c(p()[a])}}:function(a){return g[a]};v.get=function(a){return g[a]&&
|
||||
c(w(a))};v.has=function(a){return a in g};k=m(g);a.a.C(k,function(c){var d=c.mc.init,k=c.mc.update,f=c.key;if(8===b.nodeType&&!a.h.ga[f])throw Error("The binding '"+f+"' cannot be used with virtual elements");try{"function"==typeof d&&a.s.I(function(){var a=d(b,w(f),v,e.$data,e);if(a&&a.controlsDescendantBindings){if(t!==n)throw Error("Multiple bindings ("+t+" and "+f+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");t=
|
||||
f}}),"function"==typeof k&&a.K(function(){k(b,w(f),v,e.$data,e)},null,{l:b})}catch(l){throw l.message='Unable to process binding "'+f+": "+g[f]+'"\nMessage: '+l.message,l;}})}return{shouldBindDescendants:t===n}}function k(b){return b&&b instanceof a.da?b:new a.da(b)}a.f={};var r={script:!0,textarea:!0,template:!0};a.getBindingHandler=function(b){return a.f[b]};a.da=function(b,c,d,e){var k=this,f="function"==typeof b&&!a.P(b),l,g=a.K(function(){var l=f?b():b,m=a.a.c(l);c?(c.Z&&c.Z(),a.a.extend(k,c),
|
||||
g&&(k.Z=g)):(k.$parents=[],k.$root=m,k.ko=a);k.$rawData=l;k.$data=m;d&&(k[d]=m);e&&e(k,c,m);return k.$data},null,{Fa:function(){return l&&!a.a.Xb(l)},l:!0});g.ka()&&(k.Z=g,g.equalityComparer=null,l=[],g.Hc=function(b){l.push(b);a.a.N.ya(b,function(b){a.a.Va(l,b);l.length||(g.o(),k.Z=g=n)})})};a.da.prototype.createChildContext=function(b,c,d){return new a.da(b,this,c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)})};a.da.prototype.extend=
|
||||
function(b){return new a.da(this.Z||this.$data,this,null,function(c,d){c.$rawData=d.$rawData;a.a.extend(c,"function"==typeof b?b():b)})};var q=a.a.g.R(),p=a.a.g.R();a.Ac=function(b,c){if(2==arguments.length)a.a.g.set(b,p,c),c.Z&&c.Z.Hc(b);else return a.a.g.get(b,p)};a.Ta=function(b,c,d){1===b.nodeType&&a.h.rc(b);return l(b,c,k(d),!0)};a.Kc=function(b,c,d){d=k(d);return a.Ta(b,e(c,d,b),d)};a.ob=function(a,b){1!==b.nodeType&&8!==b.nodeType||h(k(a),b,!0)};a.Yb=function(a,b){!v&&y.jQuery&&(v=y.jQuery);
|
||||
if(b&&1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");b=b||y.document.body;g(k(a),b,!0)};a.ub=function(b){switch(b.nodeType){case 1:case 8:var c=a.Ac(b);if(c)return c;if(b.parentNode)return a.ub(b.parentNode)}return n};a.Qc=function(b){return(b=a.ub(b))?b.$data:n};a.b("bindingHandlers",a.f);a.b("applyBindings",a.Yb);a.b("applyBindingsToDescendants",a.ob);a.b("applyBindingAccessorsToNode",a.Ta);a.b("applyBindingsToNode",
|
||||
a.Kc);a.b("contextFor",a.ub);a.b("dataFor",a.Qc)})();(function(b){function c(c,e){var l=f.hasOwnProperty(c)?f[c]:b,k;l?l.subscribe(e):(l=f[c]=new a.S,l.subscribe(e),d(c,function(b,d){var e=!(!d||!d.synchronous);h[c]={definition:b,fd:e};delete f[c];k||e?l.notifySubscribers(b):a.fa.gb(function(){l.notifySubscribers(b)})}),k=!0)}function d(a,b){e("getConfig",[a],function(c){c?e("loadComponent",[a,c],function(a){b(a,c)}):b(null,null)})}function e(c,d,f,k){k||(k=a.i.loaders.slice(0));var h=k.shift();if(h){var q=
|
||||
h[c];if(q){var p=!1;if(q.apply(h,d.concat(function(a){p?f(null):null!==a?f(a):e(c,d,f,k)}))!==b&&(p=!0,!h.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");}else e(c,d,f,k)}else f(null)}var f={},h={};a.i={get:function(d,e){var f=h.hasOwnProperty(d)?h[d]:b;f?f.fd?a.s.I(function(){e(f.definition)}):a.fa.gb(function(){e(f.definition)}):c(d,e)},dc:function(a){delete h[a]},Qb:e};a.i.loaders=[];a.b("components",
|
||||
a.i);a.b("components.get",a.i.get);a.b("components.clearCachedDefinition",a.i.dc)})();(function(){function b(b,c,d,e){function h(){0===--z&&e(g)}var g={},z=2,u=d.template;d=d.viewModel;u?f(c,u,function(c){a.i.Qb("loadTemplate",[b,c],function(a){g.template=a;h()})}):h();d?f(c,d,function(c){a.i.Qb("loadViewModel",[b,c],function(a){g[m]=a;h()})}):h()}function c(a,b,d){if("function"===typeof b)d(function(a){return new b(a)});else if("function"===typeof b[m])d(b[m]);else if("instance"in b){var e=b.instance;
|
||||
d(function(){return e})}else"viewModel"in b?c(a,b.viewModel,d):a("Unknown viewModel value: "+b)}function d(b){switch(a.a.J(b)){case "script":return a.a.va(b.text);case "textarea":return a.a.va(b.value);case "template":if(e(b.content))return a.a.Da(b.content.childNodes)}return a.a.Da(b.childNodes)}function e(a){return y.DocumentFragment?a instanceof DocumentFragment:a&&11===a.nodeType}function f(a,b,c){"string"===typeof b.require?O||y.require?(O||y.require)([b.require],c):a("Uses require, but no AMD loader is present"):
|
||||
c(b)}function h(a){return function(b){throw Error("Component '"+a+"': "+b);}}var g={};a.i.register=function(b,c){if(!c)throw Error("Invalid configuration for "+b);if(a.i.Db(b))throw Error("Component "+b+" is already registered");g[b]=c};a.i.Db=function(a){return g.hasOwnProperty(a)};a.i.unregister=function(b){delete g[b];a.i.dc(b)};a.i.fc={getConfig:function(a,b){b(g.hasOwnProperty(a)?g[a]:null)},loadComponent:function(a,c,d){var e=h(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,c,f){b=
|
||||
h(b);if("string"===typeof c)f(a.a.va(c));else if(c instanceof Array)f(c);else if(e(c))f(a.a.ea(c.childNodes));else if(c.element)if(c=c.element,y.HTMLElement?c instanceof HTMLElement:c&&c.tagName&&1===c.nodeType)f(d(c));else if("string"===typeof c){var g=t.getElementById(c);g?f(d(g)):b("Cannot find element with ID "+c)}else b("Unknown element type: "+c);else b("Unknown template value: "+c)},loadViewModel:function(a,b,d){c(h(a),b,d)}};var m="createViewModel";a.b("components.register",a.i.register);
|
||||
a.b("components.isRegistered",a.i.Db);a.b("components.unregister",a.i.unregister);a.b("components.defaultLoader",a.i.fc);a.i.loaders.push(a.i.fc);a.i.Ic=g})();(function(){function b(b,e){var f=b.getAttribute("params");if(f){var f=c.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.Ma(f,function(c){return a.u(c,null,{l:b})}),h=a.a.Ma(f,function(c){var e=c.G();return c.ka()?a.u({read:function(){return a.a.c(c())},write:a.Ka(e)&&function(a){c()(a)},l:b}):e});h.hasOwnProperty("$raw")||
|
||||
(h.$raw=f);return h}return{$raw:{}}}a.i.getComponentNameForNode=function(b){var c=a.a.J(b);if(a.i.Db(c)&&(-1!=c.indexOf("-")||"[object HTMLUnknownElement]"==""+b||8>=a.a.L&&b.tagName===c))return c};a.i.Vb=function(c,e,f,h){if(1===e.nodeType){var g=a.i.getComponentNameForNode(e);if(g){c=c||{};if(c.component)throw Error('Cannot use the "component" binding on a custom element matching a component');var m={name:g,params:b(e,f)};c.component=h?function(){return m}:m}}return c};var c=new a.$;9>a.a.L&&(a.i.register=
|
||||
function(a){return function(b){return a.apply(this,arguments)}}(a.i.register),t.createDocumentFragment=function(b){return function(){var c=b(),f=a.i.Ic,h;for(h in f);return c}}(t.createDocumentFragment))})();(function(b){function c(b,c,d){c=c.template;if(!c)throw Error("Component '"+b+"' has no template");b=a.a.Da(c);a.h.ma(d,b)}function d(a,b,c,d){var e=a.createViewModel;return e?e.call(a,d,{element:b,templateNodes:c}):d}var e=0;a.f.component={init:function(f,h,g,m,l){function k(){var a=r&&r.dispose;
|
||||
"function"===typeof a&&a.call(r);q=r=null}var r,q,p=a.a.ea(a.h.childNodes(f));a.a.N.ya(f,k);a.u(function(){var g=a.a.c(h()),m,u;"string"===typeof g?m=g:(m=a.a.c(g.name),u=a.a.c(g.params));if(!m)throw Error("No component name specified");var n=q=++e;a.i.get(m,function(e){if(q===n){k();if(!e)throw Error("Unknown component '"+m+"'");c(m,e,f);var g=d(e,f,p,u);e=l.createChildContext(g,b,function(a){a.$component=g;a.$componentTemplateNodes=p});r=g;a.ob(e,f)}})},null,{l:f});return{controlsDescendantBindings:!0}}};
|
||||
a.h.ga.component=!0})();var S={"class":"className","for":"htmlFor"};a.f.attr={update:function(b,c){var d=a.a.c(c())||{};a.a.M(d,function(c,d){d=a.a.c(d);var h=!1===d||null===d||d===n;h&&b.removeAttribute(c);8>=a.a.L&&c in S?(c=S[c],h?b.removeAttribute(c):b[c]=d):h||b.setAttribute(c,d.toString());"name"===c&&a.a.yc(b,h?"":d.toString())})}};(function(){a.f.checked={after:["value","attr"],init:function(b,c,d){function e(){var e=b.checked,f=p?h():e;if(!a.Ea.bb()&&(!m||e)){var g=a.s.I(c);if(k){var l=r?
|
||||
g.G():g;q!==f?(e&&(a.a.za(l,f,!0),a.a.za(l,q,!1)),q=f):a.a.za(l,f,e);r&&a.Ka(g)&&g(l)}else a.j.Oa(g,d,"checked",f,!0)}}function f(){var d=a.a.c(c());k?b.checked=0<=a.a.A(d,h()):g?b.checked=d:b.checked=h()===d}var h=a.uc(function(){return d.has("checkedValue")?a.a.c(d.get("checkedValue")):d.has("value")?a.a.c(d.get("value")):b.value}),g="checkbox"==b.type,m="radio"==b.type;if(g||m){var l=c(),k=g&&a.a.c(l)instanceof Array,r=!(k&&l.push&&l.splice),q=k?h():n,p=m||k;m&&!b.name&&a.f.uniqueName.init(b,function(){return!0});
|
||||
a.u(e,null,{l:b});a.a.B(b,"click",e);a.u(f,null,{l:b});l=n}}};a.j.na.checked=!0;a.f.checkedValue={update:function(b,c){b.value=a.a.c(c())}}})();a.f.css={update:function(b,c){var d=a.a.c(c());null!==d&&"object"==typeof d?a.a.M(d,function(c,d){d=a.a.c(d);a.a.mb(b,c,d)}):(d=a.a.kb(String(d||"")),a.a.mb(b,b.__ko__cssValue,!1),b.__ko__cssValue=d,a.a.mb(b,d,!0))}};a.f.enable={update:function(b,c){var d=a.a.c(c());d&&b.disabled?b.removeAttribute("disabled"):d||b.disabled||(b.disabled=!0)}};a.f.disable={update:function(b,
|
||||
c){a.f.enable.update(b,function(){return!a.a.c(c())})}};a.f.event={init:function(b,c,d,e,f){var h=c()||{};a.a.M(h,function(g){"string"==typeof g&&a.a.B(b,g,function(b){var h,k=c()[g];if(k){try{var r=a.a.ea(arguments);e=f.$data;r.unshift(e);h=k.apply(e,r)}finally{!0!==h&&(b.preventDefault?b.preventDefault():b.returnValue=!1)}!1===d.get(g+"Bubble")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.f.foreach={pc:function(b){return function(){var c=b(),d=a.a.Hb(c);if(!d||"number"==
|
||||
typeof d.length)return{foreach:c,templateEngine:a.W.xa};a.a.c(c);return{foreach:d.data,as:d.as,includeDestroyed:d.includeDestroyed,afterAdd:d.afterAdd,beforeRemove:d.beforeRemove,afterRender:d.afterRender,beforeMove:d.beforeMove,afterMove:d.afterMove,templateEngine:a.W.xa}}},init:function(b,c){return a.f.template.init(b,a.f.foreach.pc(c))},update:function(b,c,d,e,f){return a.f.template.update(b,a.f.foreach.pc(c),d,e,f)}};a.j.Ca.foreach=!1;a.h.ga.foreach=!0;a.f.hasfocus={init:function(b,c,d){function e(e){b.__ko_hasfocusUpdating=
|
||||
!0;var f=b.ownerDocument;if("activeElement"in f){var h;try{h=f.activeElement}catch(k){h=f.body}e=h===b}f=c();a.j.Oa(f,d,"hasfocus",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),h=e.bind(null,!1);a.a.B(b,"focus",f);a.a.B(b,"focusin",f);a.a.B(b,"blur",h);a.a.B(b,"focusout",h)},update:function(b,c){var d=!!a.a.c(c());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===d||(d?b.focus():b.blur(),!d&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),a.s.I(a.a.Na,
|
||||
null,[b,d?"focusin":"focusout"]))}};a.j.na.hasfocus=!0;a.f.hasFocus=a.f.hasfocus;a.j.na.hasFocus=!0;a.f.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Kb(b,c())}};K("if");K("ifnot",!1,!0);K("with",!0,!1,function(a,c){return a.createChildContext(c)});var L={};a.f.options={init:function(b){if("select"!==a.a.J(b))throw Error("options binding applies only to SELECT elements");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,c,
|
||||
d){function e(){return a.a.Ua(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return"function"==d?b(a):"string"==d?a[b]:c}function h(c,e){if(A&&k)a.m.qa(b,a.a.c(d.get("value")),!0);else if(p.length){var f=0<=a.a.A(p,a.m.H(e[0]));a.a.zc(e[0],f);A&&!f&&a.s.I(a.a.Na,null,[b,"change"])}}var g=b.multiple,m=0!=b.length&&g?b.scrollTop:null,l=a.a.c(c()),k=d.get("valueAllowUnset")&&d.has("value"),r=d.get("optionsIncludeDestroyed");c={};var q,p=[];k||(g?p=a.a.pb(e(),a.m.H):0<=b.selectedIndex&&
|
||||
p.push(a.m.H(b.options[b.selectedIndex])));l&&("undefined"==typeof l.length&&(l=[l]),q=a.a.Ua(l,function(b){return r||b===n||null===b||!a.a.c(b._destroy)}),d.has("optionsCaption")&&(l=a.a.c(d.get("optionsCaption")),null!==l&&l!==n&&q.unshift(L)));var A=!1;c.beforeRemove=function(a){b.removeChild(a)};l=h;d.has("optionsAfterRender")&&"function"==typeof d.get("optionsAfterRender")&&(l=function(b,c){h(0,c);a.s.I(d.get("optionsAfterRender"),null,[c[0],b!==L?b:n])});a.a.Jb(b,q,function(c,e,h){h.length&&
|
||||
(p=!k&&h[0].selected?[a.m.H(h[0])]:[],A=!0);e=b.ownerDocument.createElement("option");c===L?(a.a.jb(e,d.get("optionsCaption")),a.m.qa(e,n)):(h=f(c,d.get("optionsValue"),c),a.m.qa(e,a.a.c(h)),c=f(c,d.get("optionsText"),h),a.a.jb(e,c));return[e]},c,l);a.s.I(function(){if(k)a.m.qa(b,a.a.c(d.get("value")),!0);else{var c;g?c=p.length&&e().length<p.length:c=p.length&&0<=b.selectedIndex?a.m.H(b.options[b.selectedIndex])!==p[0]:p.length||0<=b.selectedIndex;c&&a.a.Na(b,"change")}});a.a.Uc(b);m&&20<Math.abs(m-
|
||||
b.scrollTop)&&(b.scrollTop=m)}};a.f.options.Fb=a.a.g.R();a.f.selectedOptions={after:["options","foreach"],init:function(b,c,d){a.a.B(b,"change",function(){var e=c(),f=[];a.a.C(b.getElementsByTagName("option"),function(b){b.selected&&f.push(a.m.H(b))});a.j.Oa(e,d,"selectedOptions",f)})},update:function(b,c){if("select"!=a.a.J(b))throw Error("values binding applies only to SELECT elements");var d=a.a.c(c()),e=b.scrollTop;d&&"number"==typeof d.length&&a.a.C(b.getElementsByTagName("option"),function(b){var c=
|
||||
0<=a.a.A(d,a.m.H(b));b.selected!=c&&a.a.zc(b,c)});b.scrollTop=e}};a.j.na.selectedOptions=!0;a.f.style={update:function(b,c){var d=a.a.c(c()||{});a.a.M(d,function(c,d){d=a.a.c(d);if(null===d||d===n||!1===d)d="";b.style[c]=d})}};a.f.submit={init:function(b,c,d,e,f){if("function"!=typeof c())throw Error("The value for a submit binding must be a function");a.a.B(b,"submit",function(a){var d,e=c();try{d=e.call(f.$data,b)}finally{!0!==d&&(a.preventDefault?a.preventDefault():a.returnValue=!1)}})}};a.f.text=
|
||||
{init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.jb(b,c())}};a.h.ga.text=!0;(function(){if(y&&y.navigator)var b=function(a){if(a)return parseFloat(a[1])},c=y.opera&&y.opera.version&&parseInt(y.opera.version()),d=y.navigator.userAgent,e=b(d.match(/^(?:(?!chrome).)*version\/([^ ]*) safari/i)),f=b(d.match(/Firefox\/([^ ]*)/));if(10>a.a.L)var h=a.a.g.R(),g=a.a.g.R(),m=function(b){var c=this.activeElement;(c=c&&a.a.g.get(c,g))&&c(b)},l=function(b,c){var d=b.ownerDocument;
|
||||
a.a.g.get(d,h)||(a.a.g.set(d,h,!0),a.a.B(d,"selectionchange",m));a.a.g.set(b,g,c)};a.f.textInput={init:function(b,d,h){function g(c,d){a.a.B(b,c,d)}function m(){var c=a.a.c(d());if(null===c||c===n)c="";w!==n&&c===w?a.a.setTimeout(m,4):b.value!==c&&(t=c,b.value=c)}function z(){v||(w=b.value,v=a.a.setTimeout(u,4))}function u(){clearTimeout(v);w=v=n;var c=b.value;t!==c&&(t=c,a.j.Oa(d(),h,"textInput",c))}var t=b.value,v,w,y=9==a.a.L?z:u;10>a.a.L?(g("propertychange",function(a){"value"===a.propertyName&&
|
||||
y(a)}),8==a.a.L&&(g("keyup",u),g("keydown",u)),8<=a.a.L&&(l(b,y),g("dragend",z))):(g("input",u),5>e&&"textarea"===a.a.J(b)?(g("keydown",z),g("paste",z),g("cut",z)):11>c?g("keydown",z):4>f&&(g("DOMAutoComplete",u),g("dragdrop",u),g("drop",u)));g("change",u);a.u(m,null,{l:b})}};a.j.na.textInput=!0;a.f.textinput={preprocess:function(a,b,c){c("textInput",a)}}})();a.f.uniqueName={init:function(b,c){if(c()){var d="ko_unique_"+ ++a.f.uniqueName.Pc;a.a.yc(b,d)}}};a.f.uniqueName.Pc=0;a.f.value={after:["options",
|
||||
"foreach"],init:function(b,c,d){if("input"!=b.tagName.toLowerCase()||"checkbox"!=b.type&&"radio"!=b.type){var e=["change"],f=d.get("valueUpdate"),h=!1,g=null;f&&("string"==typeof f&&(f=[f]),a.a.Aa(e,f),e=a.a.$b(e));var m=function(){g=null;h=!1;var e=c(),f=a.m.H(b);a.j.Oa(e,d,"value",f)};!a.a.L||"input"!=b.tagName.toLowerCase()||"text"!=b.type||"off"==b.autocomplete||b.form&&"off"==b.form.autocomplete||-1!=a.a.A(e,"propertychange")||(a.a.B(b,"propertychange",function(){h=!0}),a.a.B(b,"focus",function(){h=
|
||||
!1}),a.a.B(b,"blur",function(){h&&m()}));a.a.C(e,function(c){var d=m;a.a.ud(c,"after")&&(d=function(){g=a.m.H(b);a.a.setTimeout(m,0)},c=c.substring(5));a.a.B(b,c,d)});var l=function(){var e=a.a.c(c()),f=a.m.H(b);if(null!==g&&e===g)a.a.setTimeout(l,0);else if(e!==f)if("select"===a.a.J(b)){var h=d.get("valueAllowUnset"),f=function(){a.m.qa(b,e,h)};f();h||e===a.m.H(b)?a.a.setTimeout(f,0):a.s.I(a.a.Na,null,[b,"change"])}else a.m.qa(b,e)};a.u(l,null,{l:b})}else a.Ta(b,{checkedValue:c})},update:function(){}};
|
||||
a.j.na.value=!0;a.f.visible={update:function(b,c){var d=a.a.c(c()),e="none"!=b.style.display;d&&!e?b.style.display="":!d&&e&&(b.style.display="none")}};(function(b){a.f[b]={init:function(c,d,e,f,h){return a.f.event.init.call(this,c,function(){var a={};a[b]=d();return a},e,f,h)}}})("click");a.Y=function(){};a.Y.prototype.renderTemplateSource=function(){throw Error("Override renderTemplateSource");};a.Y.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock");
|
||||
};a.Y.prototype.makeTemplateSource=function(b,c){if("string"==typeof b){c=c||t;var d=c.getElementById(b);if(!d)throw Error("Cannot find template with ID "+b);return new a.w.v(d)}if(1==b.nodeType||8==b.nodeType)return new a.w.ha(b);throw Error("Unknown template type: "+b);};a.Y.prototype.renderTemplate=function(a,c,d,e){a=this.makeTemplateSource(a,e);return this.renderTemplateSource(a,c,d,e)};a.Y.prototype.isTemplateRewritten=function(a,c){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,
|
||||
c).data("isRewritten")};a.Y.prototype.rewriteTemplate=function(a,c,d){a=this.makeTemplateSource(a,d);c=c(a.text());a.text(c);a.data("isRewritten",!0)};a.b("templateEngine",a.Y);a.Ob=function(){function b(b,c,d,g){b=a.j.Gb(b);for(var m=a.j.Ca,l=0;l<b.length;l++){var k=b[l].key;if(m.hasOwnProperty(k)){var r=m[k];if("function"===typeof r){if(k=r(b[l].value))throw Error(k);}else if(!r)throw Error("This template engine does not support the '"+k+"' binding within its templates");}}d="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+
|
||||
a.j.eb(b,{valueAccessors:!0})+" } })()},'"+d.toLowerCase()+"')";return g.createJavaScriptEvaluatorBlock(d)+c}var c=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,d=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{Vc:function(b,c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.Ob.ld(b,c)},d)},ld:function(a,f){return a.replace(c,function(a,c,d,e,k){return b(k,c,d,f)}).replace(d,function(a,c){return b(c,
|
||||
"\x3c!-- ko --\x3e","#comment",f)})},Lc:function(b,c){return a.V.Eb(function(d,g){var m=d.nextSibling;m&&m.nodeName.toLowerCase()===c&&a.Ta(m,b,g)})}}}();a.b("__tr_ambtns",a.Ob.Lc);(function(){a.w={};a.w.v=function(b){if(this.v=b){var c=a.a.J(b);this.lb="script"===c?1:"textarea"===c?2:"template"==c&&b.content&&11===b.content.nodeType?3:4}};a.w.v.prototype.text=function(){var b=1===this.lb?"text":2===this.lb?"value":"innerHTML";if(0==arguments.length)return this.v[b];var c=arguments[0];"innerHTML"===
|
||||
b?a.a.Kb(this.v,c):this.v[b]=c};var b=a.a.g.R()+"_";a.w.v.prototype.data=function(c){if(1===arguments.length)return a.a.g.get(this.v,b+c);a.a.g.set(this.v,b+c,arguments[1])};var c=a.a.g.R();a.w.v.prototype.nodes=function(){var b=this.v;if(0==arguments.length)return(a.a.g.get(b,c)||{}).tb||(3===this.lb?b.content:4===this.lb?b:n);a.a.g.set(b,c,{tb:arguments[0]})};a.w.ha=function(a){this.v=a};a.w.ha.prototype=new a.w.v;a.w.ha.prototype.constructor=a.w.ha;a.w.ha.prototype.text=function(){if(0==arguments.length){var b=
|
||||
a.a.g.get(this.v,c)||{};b.Pb===n&&b.tb&&(b.Pb=b.tb.innerHTML);return b.Pb}a.a.g.set(this.v,c,{Pb:arguments[0]})};a.b("templateSources",a.w);a.b("templateSources.domElement",a.w.v);a.b("templateSources.anonymousTemplate",a.w.ha)})();(function(){function b(b,c,d){var e;for(c=a.h.nextSibling(c);b&&(e=b)!==c;)b=a.h.nextSibling(e),d(e,b)}function c(c,d){if(c.length){var e=c[0],f=c[c.length-1],g=e.parentNode,h=a.$.instance,n=h.preprocessNode;if(n){b(e,f,function(a,b){var c=a.previousSibling,d=n.call(h,
|
||||
a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):(c.push(e,f),a.a.Ia(c,g))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.Yb(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.V.Fc(b,[d])});a.a.Ia(c,g)}}function d(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,e,f,g,q){q=q||{};var p=(b&&d(b)||f||{}).ownerDocument,n=q.templateEngine||h;a.Ob.Vc(f,n,p);f=n.renderTemplate(f,g,q,p);if("number"!=typeof f.length||0<f.length&&"number"!=
|
||||
typeof f[0].nodeType)throw Error("Template engine must return an array of DOM nodes");p=!1;switch(e){case "replaceChildren":a.h.ma(b,f);p=!0;break;case "replaceNode":a.a.xc(b,f);p=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+e);}p&&(c(f,g),q.afterRender&&a.s.I(q.afterRender,null,[f,g.$data]));return f}function f(b,c,d){return a.P(b)?b():"function"===typeof b?b(c,d):b}var h;a.Lb=function(b){if(b!=n&&!(b instanceof a.Y))throw Error("templateEngine must inherit from ko.templateEngine");
|
||||
h=b};a.Ib=function(b,c,g,r,q){g=g||{};if((g.templateEngine||h)==n)throw Error("Set a template engine before calling renderTemplate");q=q||"replaceChildren";if(r){var p=d(r);return a.K(function(){var h=c&&c instanceof a.da?c:new a.da(a.a.c(c)),n=f(b,h.$data,h),h=e(r,q,n,h,g);"replaceNode"==q&&(r=h,p=d(r))},null,{Fa:function(){return!p||!a.a.xb(p)},l:p&&"replaceNode"==q?p.parentNode:p})}return a.V.Eb(function(d){a.Ib(b,c,g,d,"replaceNode")})};a.qd=function(b,d,g,h,q){function p(a,b){c(b,t);g.afterRender&&
|
||||
g.afterRender(b,a);t=null}function A(a,c){t=q.createChildContext(a,g.as,function(a){a.$index=c});var d=f(b,a,t);return e(null,"ignoreTargetNode",d,t,g)}var t;return a.K(function(){var b=a.a.c(d)||[];"undefined"==typeof b.length&&(b=[b]);b=a.a.Ua(b,function(b){return g.includeDestroyed||b===n||null===b||!a.a.c(b._destroy)});a.s.I(a.a.Jb,null,[h,b,A,g,p])},null,{l:h})};var g=a.a.g.R();a.f.template={init:function(b,c){var d=a.a.c(c());if("string"==typeof d||d.name)a.h.Ga(b);else{if("nodes"in d){d=d.nodes||
|
||||
[];if(a.P(d))throw Error('The "nodes" option must be a plain, non-observable array.');d=a.a.qc(d)}else d=a.h.childNodes(b),d=a.a.qc(d);(new a.w.ha(b)).nodes(d)}return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var h=c(),t;c=a.a.c(h);d=!0;e=null;"string"==typeof c?c={}:(h=c.name,"if"in c&&(d=a.a.c(c["if"])),d&&"ifnot"in c&&(d=!a.a.c(c.ifnot)),t=a.a.c(c.data));"foreach"in c?e=a.qd(h||b,d&&c.foreach||[],c,b,f):d?(f="data"in c?f.createChildContext(t,c.as):f,e=a.Ib(h||b,f,c,b)):a.h.Ga(b);
|
||||
f=e;(t=a.a.g.get(b,g))&&"function"==typeof t.o&&t.o();a.a.g.set(b,g,f&&f.ka()?f:n)}};a.j.Ca.template=function(b){b=a.j.Gb(b);return 1==b.length&&b[0].unknown||a.j.hd(b,"name")?null:"This template engine does not support anonymous templates nested within its templates"};a.h.ga.template=!0})();a.b("setTemplateEngine",a.Lb);a.b("renderTemplate",a.Ib);a.a.kc=function(a,c,d){if(a.length&&c.length){var e,f,h,g,m;for(e=f=0;(!d||e<d)&&(g=a[f]);++f){for(h=0;m=c[h];++h)if(g.value===m.value){g.moved=m.index;
|
||||
m.moved=g.index;c.splice(h,1);e=h=0;break}e+=h}}};a.a.sb=function(){function b(b,d,e,f,h){var g=Math.min,m=Math.max,l=[],k,n=b.length,q,p=d.length,t=p-n||1,v=n+p+1,u,w,y;for(k=0;k<=n;k++)for(w=u,l.push(u=[]),y=g(p,k+t),q=m(0,k-1);q<=y;q++)u[q]=q?k?b[k-1]===d[q-1]?w[q-1]:g(w[q]||v,u[q-1]||v)+1:q+1:k+1;g=[];m=[];t=[];k=n;for(q=p;k||q;)p=l[k][q]-1,q&&p===l[k][q-1]?m.push(g[g.length]={status:e,value:d[--q],index:q}):k&&p===l[k-1][q]?t.push(g[g.length]={status:f,value:b[--k],index:k}):(--q,--k,h.sparse||
|
||||
g.push({status:"retained",value:d[q]}));a.a.kc(t,m,!h.dontLimitMoves&&10*n);return g.reverse()}return function(a,d,e){e="boolean"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];d=d||[];return a.length<d.length?b(a,d,"added","deleted",e):b(d,a,"deleted","added",e)}}();a.b("utils.compareArrays",a.a.sb);(function(){function b(b,c,d,g,m){var l=[],k=a.K(function(){var k=c(d,m,a.a.Ia(l,b))||[];0<l.length&&(a.a.xc(l,k),g&&a.s.I(g,null,[d,k,m]));l.length=0;a.a.Aa(l,k)},null,{l:b,Fa:function(){return!a.a.Xb(l)}});
|
||||
return{la:l,K:k.ka()?k:n}}var c=a.a.g.R(),d=a.a.g.R();a.a.Jb=function(e,f,h,g,m){function l(b,c){x=q[c];w!==c&&(E[b]=x);x.Ab(w++);a.a.Ia(x.la,e);v.push(x);B.push(x)}function k(b,c){if(b)for(var d=0,e=c.length;d<e;d++)c[d]&&a.a.C(c[d].la,function(a){b(a,d,c[d].sa)})}f=f||[];g=g||{};var r=a.a.g.get(e,c)===n,q=a.a.g.get(e,c)||[],p=a.a.pb(q,function(a){return a.sa}),t=a.a.sb(p,f,g.dontLimitMoves),v=[],u=0,w=0,y=[],B=[];f=[];for(var E=[],p=[],x,D=0,C,F;C=t[D];D++)switch(F=C.moved,C.status){case "deleted":F===
|
||||
n&&(x=q[u],x.K&&(x.K.o(),x.K=n),a.a.Ia(x.la,e).length&&(g.beforeRemove&&(v.push(x),B.push(x),x.sa===d?x=null:f[D]=x),x&&y.push.apply(y,x.la)));u++;break;case "retained":l(D,u++);break;case "added":F!==n?l(D,F):(x={sa:C.value,Ab:a.X(w++)},v.push(x),B.push(x),r||(p[D]=x))}a.a.g.set(e,c,v);k(g.beforeMove,E);a.a.C(y,g.beforeRemove?a.ia:a.removeNode);for(var D=0,r=a.h.firstChild(e),G;x=B[D];D++){x.la||a.a.extend(x,b(e,h,x.sa,m,x.Ab));for(u=0;t=x.la[u];r=t.nextSibling,G=t,u++)t!==r&&a.h.nc(e,t,G);!x.cd&&
|
||||
m&&(m(x.sa,x.la,x.Ab),x.cd=!0)}k(g.beforeRemove,f);for(D=0;D<f.length;++D)f[D]&&(f[D].sa=d);k(g.afterMove,E);k(g.afterAdd,p)}})();a.b("utils.setDomNodeChildrenFromArrayMapping",a.a.Jb);a.W=function(){this.allowTemplateRewriting=!1};a.W.prototype=new a.Y;a.W.prototype.constructor=a.W;a.W.prototype.renderTemplateSource=function(b,c,d,e){if(c=(9>a.a.L?0:b.nodes)?b.nodes():null)return a.a.ea(c.cloneNode(!0).childNodes);b=b.text();return a.a.va(b,e)};a.W.xa=new a.W;a.Lb(a.W.xa);a.b("nativeTemplateEngine",
|
||||
a.W);(function(){a.La=function(){var a=this.gd=function(){if(!v||!v.tmpl)return 0;try{if(0<=v.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}();this.renderTemplateSource=function(b,e,f,h){h=h||t;f=f||{};if(2>a)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var g=b.data("precompiled");g||(g=b.text()||"",g=v.template(null,"{{ko_with $item.koBindingContext}}"+g+"{{/ko_with}}"),b.data("precompiled",g));b=[e.$data];e=v.extend({koBindingContext:e},
|
||||
f.templateOptions);e=v.tmpl(g,b,e);e.appendTo(h.createElement("div"));v.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+a+" })()) }}"};this.addTemplate=function(a,b){t.write("<script type='text/html' id='"+a+"'>"+b+"\x3c/script>")};0<a&&(v.tmpl.tag.ko_code={open:"__.push($1 || '');"},v.tmpl.tag.ko_with={open:"with($1) {",close:"} "})};a.La.prototype=new a.Y;a.La.prototype.constructor=a.La;var b=new a.La;0<b.gd&&a.Lb(b);a.b("jqueryTmplTemplateEngine",
|
||||
a.La)})()})})();})();
|
||||
(function() {(function(n){var x=this||(0,eval)("this"),u=x.document,M=x.navigator,v=x.jQuery,F=x.JSON;(function(n){"function"===typeof define&&define.amd?define(["exports","require"],n):"object"===typeof exports&&"object"===typeof module?n(module.exports||exports):n(x.ko={})})(function(N,O){function J(a,c){return null===a||typeof a in T?a===c:!1}function U(b,c){var d;return function(){d||(d=a.a.setTimeout(function(){d=n;b()},c))}}function V(b,c){var d;return function(){clearTimeout(d);d=a.a.setTimeout(b,c)}}function W(a,
|
||||
c){c&&c!==I?"beforeChange"===c?this.Kb(a):this.Ha(a,c):this.Lb(a)}function X(a,c){null!==c&&c.k&&c.k()}function Y(a,c){var d=this.Hc,e=d[s];e.R||(this.lb&&this.Ma[c]?(d.Pb(c,a,this.Ma[c]),this.Ma[c]=null,--this.lb):e.r[c]||d.Pb(c,a,e.s?{ia:a}:d.uc(a)))}function K(b,c,d,e){a.d[b]={init:function(b,g,k,l,m){var h,r;a.m(function(){var q=a.a.c(g()),p=!d!==!q,A=!r;if(A||c||p!==h)A&&a.va.Aa()&&(r=a.a.ua(a.f.childNodes(b),!0)),p?(A||a.f.da(b,a.a.ua(r)),a.eb(e?e(m,q):m,b)):a.f.xa(b),h=p},null,{i:b});return{controlsDescendantBindings:!0}}};
|
||||
a.h.ta[b]=!1;a.f.Z[b]=!0}var a="undefined"!==typeof N?N:{};a.b=function(b,c){for(var d=b.split("."),e=a,f=0;f<d.length-1;f++)e=e[d[f]];e[d[d.length-1]]=c};a.G=function(a,c,d){a[c]=d};a.version="3.4.0";a.b("version",a.version);a.options={deferUpdates:!1,useOnlyNativeEvents:!1};a.a=function(){function b(a,b){for(var c in a)a.hasOwnProperty(c)&&b(c,a[c])}function c(a,b){if(b)for(var c in b)b.hasOwnProperty(c)&&(a[c]=b[c]);return a}function d(a,b){a.__proto__=b;return a}function e(b,c,d,e){var h=b[c].match(r)||
|
||||
[];a.a.q(d.match(r),function(b){a.a.pa(h,b,e)});b[c]=h.join(" ")}var f={__proto__:[]}instanceof Array,g="function"===typeof Symbol,k={},l={};k[M&&/Firefox\/2/i.test(M.userAgent)?"KeyboardEvent":"UIEvents"]=["keyup","keydown","keypress"];k.MouseEvents="click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave".split(" ");b(k,function(a,b){if(b.length)for(var c=0,d=b.length;c<d;c++)l[b[c]]=a});var m={propertychange:!0},h=u&&function(){for(var a=3,b=u.createElement("div"),c=
|
||||
b.getElementsByTagName("i");b.innerHTML="\x3c!--[if gt IE "+ ++a+"]><i></i><![endif]--\x3e",c[0];);return 4<a?a:n}(),r=/\S+/g;return{cc:["authenticity_token",/^__RequestVerificationToken(_.*)?$/],q:function(a,b){for(var c=0,d=a.length;c<d;c++)b(a[c],c)},o:function(a,b){if("function"==typeof Array.prototype.indexOf)return Array.prototype.indexOf.call(a,b);for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},Sb:function(a,b,c){for(var d=0,e=a.length;d<e;d++)if(b.call(c,a[d],d))return a[d];
|
||||
return null},La:function(b,c){var d=a.a.o(b,c);0<d?b.splice(d,1):0===d&&b.shift()},Tb:function(b){b=b||[];for(var c=[],d=0,e=b.length;d<e;d++)0>a.a.o(c,b[d])&&c.push(b[d]);return c},fb:function(a,b){a=a||[];for(var c=[],d=0,e=a.length;d<e;d++)c.push(b(a[d],d));return c},Ka:function(a,b){a=a||[];for(var c=[],d=0,e=a.length;d<e;d++)b(a[d],d)&&c.push(a[d]);return c},ra:function(a,b){if(b instanceof Array)a.push.apply(a,b);else for(var c=0,d=b.length;c<d;c++)a.push(b[c]);return a},pa:function(b,c,d){var e=
|
||||
a.a.o(a.a.zb(b),c);0>e?d&&b.push(c):d||b.splice(e,1)},ka:f,extend:c,Xa:d,Ya:f?d:c,D:b,Ca:function(a,b){if(!a)return a;var c={},d;for(d in a)a.hasOwnProperty(d)&&(c[d]=b(a[d],d,a));return c},ob:function(b){for(;b.firstChild;)a.removeNode(b.firstChild)},jc:function(b){b=a.a.V(b);for(var c=(b[0]&&b[0].ownerDocument||u).createElement("div"),d=0,e=b.length;d<e;d++)c.appendChild(a.$(b[d]));return c},ua:function(b,c){for(var d=0,e=b.length,h=[];d<e;d++){var m=b[d].cloneNode(!0);h.push(c?a.$(m):m)}return h},
|
||||
da:function(b,c){a.a.ob(b);if(c)for(var d=0,e=c.length;d<e;d++)b.appendChild(c[d])},qc:function(b,c){var d=b.nodeType?[b]:b;if(0<d.length){for(var e=d[0],h=e.parentNode,m=0,l=c.length;m<l;m++)h.insertBefore(c[m],e);m=0;for(l=d.length;m<l;m++)a.removeNode(d[m])}},za:function(a,b){if(a.length){for(b=8===b.nodeType&&b.parentNode||b;a.length&&a[0].parentNode!==b;)a.splice(0,1);for(;1<a.length&&a[a.length-1].parentNode!==b;)a.length--;if(1<a.length){var c=a[0],d=a[a.length-1];for(a.length=0;c!==d;)a.push(c),
|
||||
c=c.nextSibling;a.push(d)}}return a},sc:function(a,b){7>h?a.setAttribute("selected",b):a.selected=b},$a:function(a){return null===a||a===n?"":a.trim?a.trim():a.toString().replace(/^[\s\xa0]+|[\s\xa0]+$/g,"")},nd:function(a,b){a=a||"";return b.length>a.length?!1:a.substring(0,b.length)===b},Mc:function(a,b){if(a===b)return!0;if(11===a.nodeType)return!1;if(b.contains)return b.contains(3===a.nodeType?a.parentNode:a);if(b.compareDocumentPosition)return 16==(b.compareDocumentPosition(a)&16);for(;a&&a!=
|
||||
b;)a=a.parentNode;return!!a},nb:function(b){return a.a.Mc(b,b.ownerDocument.documentElement)},Qb:function(b){return!!a.a.Sb(b,a.a.nb)},A:function(a){return a&&a.tagName&&a.tagName.toLowerCase()},Wb:function(b){return a.onError?function(){try{return b.apply(this,arguments)}catch(c){throw a.onError&&a.onError(c),c;}}:b},setTimeout:function(b,c){return setTimeout(a.a.Wb(b),c)},$b:function(b){setTimeout(function(){a.onError&&a.onError(b);throw b;},0)},p:function(b,c,d){var e=a.a.Wb(d);d=h&&m[c];if(a.options.useOnlyNativeEvents||
|
||||
d||!v)if(d||"function"!=typeof b.addEventListener)if("undefined"!=typeof b.attachEvent){var l=function(a){e.call(b,a)},f="on"+c;b.attachEvent(f,l);a.a.F.oa(b,function(){b.detachEvent(f,l)})}else throw Error("Browser doesn't support addEventListener or attachEvent");else b.addEventListener(c,e,!1);else v(b).bind(c,e)},Da:function(b,c){if(!b||!b.nodeType)throw Error("element must be a DOM node when calling triggerEvent");var d;"input"===a.a.A(b)&&b.type&&"click"==c.toLowerCase()?(d=b.type,d="checkbox"==
|
||||
d||"radio"==d):d=!1;if(a.options.useOnlyNativeEvents||!v||d)if("function"==typeof u.createEvent)if("function"==typeof b.dispatchEvent)d=u.createEvent(l[c]||"HTMLEvents"),d.initEvent(c,!0,!0,x,0,0,0,0,0,!1,!1,!1,!1,0,b),b.dispatchEvent(d);else throw Error("The supplied element doesn't support dispatchEvent");else if(d&&b.click)b.click();else if("undefined"!=typeof b.fireEvent)b.fireEvent("on"+c);else throw Error("Browser doesn't support triggering events");else v(b).trigger(c)},c:function(b){return a.H(b)?
|
||||
b():b},zb:function(b){return a.H(b)?b.t():b},bb:function(b,c,d){var h;c&&("object"===typeof b.classList?(h=b.classList[d?"add":"remove"],a.a.q(c.match(r),function(a){h.call(b.classList,a)})):"string"===typeof b.className.baseVal?e(b.className,"baseVal",c,d):e(b,"className",c,d))},Za:function(b,c){var d=a.a.c(c);if(null===d||d===n)d="";var e=a.f.firstChild(b);!e||3!=e.nodeType||a.f.nextSibling(e)?a.f.da(b,[b.ownerDocument.createTextNode(d)]):e.data=d;a.a.Rc(b)},rc:function(a,b){a.name=b;if(7>=h)try{a.mergeAttributes(u.createElement("<input name='"+
|
||||
a.name+"'/>"),!1)}catch(c){}},Rc:function(a){9<=h&&(a=1==a.nodeType?a:a.parentNode,a.style&&(a.style.zoom=a.style.zoom))},Nc:function(a){if(h){var b=a.style.width;a.style.width=0;a.style.width=b}},hd:function(b,c){b=a.a.c(b);c=a.a.c(c);for(var d=[],e=b;e<=c;e++)d.push(e);return d},V:function(a){for(var b=[],c=0,d=a.length;c<d;c++)b.push(a[c]);return b},Yb:function(a){return g?Symbol(a):a},rd:6===h,sd:7===h,C:h,ec:function(b,c){for(var d=a.a.V(b.getElementsByTagName("input")).concat(a.a.V(b.getElementsByTagName("textarea"))),
|
||||
e="string"==typeof c?function(a){return a.name===c}:function(a){return c.test(a.name)},h=[],m=d.length-1;0<=m;m--)e(d[m])&&h.push(d[m]);return h},ed:function(b){return"string"==typeof b&&(b=a.a.$a(b))?F&&F.parse?F.parse(b):(new Function("return "+b))():null},Eb:function(b,c,d){if(!F||!F.stringify)throw Error("Cannot find JSON.stringify(). Some browsers (e.g., IE < 8) don't support it natively, but you can overcome this by adding a script reference to json2.js, downloadable from http://www.json.org/json2.js");
|
||||
return F.stringify(a.a.c(b),c,d)},fd:function(c,d,e){e=e||{};var h=e.params||{},m=e.includeFields||this.cc,l=c;if("object"==typeof c&&"form"===a.a.A(c))for(var l=c.action,f=m.length-1;0<=f;f--)for(var g=a.a.ec(c,m[f]),k=g.length-1;0<=k;k--)h[g[k].name]=g[k].value;d=a.a.c(d);var r=u.createElement("form");r.style.display="none";r.action=l;r.method="post";for(var n in d)c=u.createElement("input"),c.type="hidden",c.name=n,c.value=a.a.Eb(a.a.c(d[n])),r.appendChild(c);b(h,function(a,b){var c=u.createElement("input");
|
||||
c.type="hidden";c.name=a;c.value=b;r.appendChild(c)});u.body.appendChild(r);e.submitter?e.submitter(r):r.submit();setTimeout(function(){r.parentNode.removeChild(r)},0)}}}();a.b("utils",a.a);a.b("utils.arrayForEach",a.a.q);a.b("utils.arrayFirst",a.a.Sb);a.b("utils.arrayFilter",a.a.Ka);a.b("utils.arrayGetDistinctValues",a.a.Tb);a.b("utils.arrayIndexOf",a.a.o);a.b("utils.arrayMap",a.a.fb);a.b("utils.arrayPushAll",a.a.ra);a.b("utils.arrayRemoveItem",a.a.La);a.b("utils.extend",a.a.extend);a.b("utils.fieldsIncludedWithJsonPost",
|
||||
a.a.cc);a.b("utils.getFormFields",a.a.ec);a.b("utils.peekObservable",a.a.zb);a.b("utils.postJson",a.a.fd);a.b("utils.parseJson",a.a.ed);a.b("utils.registerEventHandler",a.a.p);a.b("utils.stringifyJson",a.a.Eb);a.b("utils.range",a.a.hd);a.b("utils.toggleDomNodeCssClass",a.a.bb);a.b("utils.triggerEvent",a.a.Da);a.b("utils.unwrapObservable",a.a.c);a.b("utils.objectForEach",a.a.D);a.b("utils.addOrRemoveItem",a.a.pa);a.b("utils.setTextContent",a.a.Za);a.b("unwrap",a.a.c);Function.prototype.bind||(Function.prototype.bind=
|
||||
function(a){var c=this;if(1===arguments.length)return function(){return c.apply(a,arguments)};var d=Array.prototype.slice.call(arguments,1);return function(){var e=d.slice(0);e.push.apply(e,arguments);return c.apply(a,e)}});a.a.e=new function(){function a(b,g){var k=b[d];if(!k||"null"===k||!e[k]){if(!g)return n;k=b[d]="ko"+c++;e[k]={}}return e[k]}var c=0,d="__ko__"+(new Date).getTime(),e={};return{get:function(c,d){var e=a(c,!1);return e===n?n:e[d]},set:function(c,d,e){if(e!==n||a(c,!1)!==n)a(c,!0)[d]=
|
||||
e},clear:function(a){var b=a[d];return b?(delete e[b],a[d]=null,!0):!1},I:function(){return c++ +d}}};a.b("utils.domData",a.a.e);a.b("utils.domData.clear",a.a.e.clear);a.a.F=new function(){function b(b,c){var e=a.a.e.get(b,d);e===n&&c&&(e=[],a.a.e.set(b,d,e));return e}function c(d){var e=b(d,!1);if(e)for(var e=e.slice(0),l=0;l<e.length;l++)e[l](d);a.a.e.clear(d);a.a.F.cleanExternalData(d);if(f[d.nodeType])for(e=d.firstChild;d=e;)e=d.nextSibling,8===d.nodeType&&c(d)}var d=a.a.e.I(),e={1:!0,8:!0,9:!0},
|
||||
f={1:!0,9:!0};return{oa:function(a,c){if("function"!=typeof c)throw Error("Callback must be a function");b(a,!0).push(c)},pc:function(c,e){var l=b(c,!1);l&&(a.a.La(l,e),0==l.length&&a.a.e.set(c,d,n))},$:function(b){if(e[b.nodeType]&&(c(b),f[b.nodeType])){var d=[];a.a.ra(d,b.getElementsByTagName("*"));for(var l=0,m=d.length;l<m;l++)c(d[l])}return b},removeNode:function(b){a.$(b);b.parentNode&&b.parentNode.removeChild(b)},cleanExternalData:function(a){v&&"function"==typeof v.cleanData&&v.cleanData([a])}}};
|
||||
a.$=a.a.F.$;a.removeNode=a.a.F.removeNode;a.b("cleanNode",a.$);a.b("removeNode",a.removeNode);a.b("utils.domNodeDisposal",a.a.F);a.b("utils.domNodeDisposal.addDisposeCallback",a.a.F.oa);a.b("utils.domNodeDisposal.removeDisposeCallback",a.a.F.pc);(function(){var b=[0,"",""],c=[1,"<table>","</table>"],d=[3,"<table><tbody><tr>","</tr></tbody></table>"],e=[1,"<select multiple='multiple'>","</select>"],f={thead:c,tbody:c,tfoot:c,tr:[2,"<table><tbody>","</tbody></table>"],td:d,th:d,option:e,optgroup:e},
|
||||
g=8>=a.a.C;a.a.ma=function(c,d){var e;if(v)if(v.parseHTML)e=v.parseHTML(c,d)||[];else{if((e=v.clean([c],d))&&e[0]){for(var h=e[0];h.parentNode&&11!==h.parentNode.nodeType;)h=h.parentNode;h.parentNode&&h.parentNode.removeChild(h)}}else{(e=d)||(e=u);var h=e.parentWindow||e.defaultView||x,r=a.a.$a(c).toLowerCase(),q=e.createElement("div"),p;p=(r=r.match(/^<([a-z]+)[ >]/))&&f[r[1]]||b;r=p[0];p="ignored<div>"+p[1]+c+p[2]+"</div>";"function"==typeof h.innerShiv?q.appendChild(h.innerShiv(p)):(g&&e.appendChild(q),
|
||||
q.innerHTML=p,g&&q.parentNode.removeChild(q));for(;r--;)q=q.lastChild;e=a.a.V(q.lastChild.childNodes)}return e};a.a.Cb=function(b,c){a.a.ob(b);c=a.a.c(c);if(null!==c&&c!==n)if("string"!=typeof c&&(c=c.toString()),v)v(b).html(c);else for(var d=a.a.ma(c,b.ownerDocument),e=0;e<d.length;e++)b.appendChild(d[e])}})();a.b("utils.parseHtmlFragment",a.a.ma);a.b("utils.setHtml",a.a.Cb);a.M=function(){function b(c,e){if(c)if(8==c.nodeType){var f=a.M.lc(c.nodeValue);null!=f&&e.push({Lc:c,cd:f})}else if(1==c.nodeType)for(var f=
|
||||
0,g=c.childNodes,k=g.length;f<k;f++)b(g[f],e)}var c={};return{wb:function(a){if("function"!=typeof a)throw Error("You can only pass a function to ko.memoization.memoize()");var b=(4294967296*(1+Math.random())|0).toString(16).substring(1)+(4294967296*(1+Math.random())|0).toString(16).substring(1);c[b]=a;return"\x3c!--[ko_memo:"+b+"]--\x3e"},xc:function(a,b){var f=c[a];if(f===n)throw Error("Couldn't find any memo with ID "+a+". Perhaps it's already been unmemoized.");try{return f.apply(null,b||[]),
|
||||
!0}finally{delete c[a]}},yc:function(c,e){var f=[];b(c,f);for(var g=0,k=f.length;g<k;g++){var l=f[g].Lc,m=[l];e&&a.a.ra(m,e);a.M.xc(f[g].cd,m);l.nodeValue="";l.parentNode&&l.parentNode.removeChild(l)}},lc:function(a){return(a=a.match(/^\[ko_memo\:(.*?)\]$/))?a[1]:null}}}();a.b("memoization",a.M);a.b("memoization.memoize",a.M.wb);a.b("memoization.unmemoize",a.M.xc);a.b("memoization.parseMemoText",a.M.lc);a.b("memoization.unmemoizeDomNodeAndDescendants",a.M.yc);a.Y=function(){function b(){if(e)for(var b=
|
||||
e,c=0,m;g<e;)if(m=d[g++]){if(g>b){if(5E3<=++c){g=e;a.a.$b(Error("'Too much recursion' after processing "+c+" task groups."));break}b=e}try{m()}catch(h){a.a.$b(h)}}}function c(){b();g=e=d.length=0}var d=[],e=0,f=1,g=0;return{scheduler:x.MutationObserver?function(a){var b=u.createElement("div");(new MutationObserver(a)).observe(b,{attributes:!0});return function(){b.classList.toggle("foo")}}(c):u&&"onreadystatechange"in u.createElement("script")?function(a){var b=u.createElement("script");b.onreadystatechange=
|
||||
function(){b.onreadystatechange=null;u.documentElement.removeChild(b);b=null;a()};u.documentElement.appendChild(b)}:function(a){setTimeout(a,0)},Wa:function(b){e||a.Y.scheduler(c);d[e++]=b;return f++},cancel:function(a){a-=f-e;a>=g&&a<e&&(d[a]=null)},resetForTesting:function(){var a=e-g;g=e=d.length=0;return a},md:b}}();a.b("tasks",a.Y);a.b("tasks.schedule",a.Y.Wa);a.b("tasks.runEarly",a.Y.md);a.ya={throttle:function(b,c){b.throttleEvaluation=c;var d=null;return a.B({read:b,write:function(e){clearTimeout(d);
|
||||
d=a.a.setTimeout(function(){b(e)},c)}})},rateLimit:function(a,c){var d,e,f;"number"==typeof c?d=c:(d=c.timeout,e=c.method);a.cb=!1;f="notifyWhenChangesStop"==e?V:U;a.Ta(function(a){return f(a,d)})},deferred:function(b,c){if(!0!==c)throw Error("The 'deferred' extender only accepts the value 'true', because it is not supported to turn deferral off once enabled.");b.cb||(b.cb=!0,b.Ta(function(c){var e;return function(){a.Y.cancel(e);e=a.Y.Wa(c);b.notifySubscribers(n,"dirty")}}))},notify:function(a,c){a.equalityComparer=
|
||||
"always"==c?null:J}};var T={undefined:1,"boolean":1,number:1,string:1};a.b("extenders",a.ya);a.vc=function(b,c,d){this.ia=b;this.gb=c;this.Kc=d;this.R=!1;a.G(this,"dispose",this.k)};a.vc.prototype.k=function(){this.R=!0;this.Kc()};a.J=function(){a.a.Ya(this,D);D.rb(this)};var I="change",D={rb:function(a){a.K={};a.Nb=1},X:function(b,c,d){var e=this;d=d||I;var f=new a.vc(e,c?b.bind(c):b,function(){a.a.La(e.K[d],f);e.Ia&&e.Ia(d)});e.sa&&e.sa(d);e.K[d]||(e.K[d]=[]);e.K[d].push(f);return f},notifySubscribers:function(b,
|
||||
c){c=c||I;c===I&&this.zc();if(this.Pa(c))try{a.l.Ub();for(var d=this.K[c].slice(0),e=0,f;f=d[e];++e)f.R||f.gb(b)}finally{a.l.end()}},Na:function(){return this.Nb},Uc:function(a){return this.Na()!==a},zc:function(){++this.Nb},Ta:function(b){var c=this,d=a.H(c),e,f,g;c.Ha||(c.Ha=c.notifySubscribers,c.notifySubscribers=W);var k=b(function(){c.Mb=!1;d&&g===c&&(g=c());e=!1;c.tb(f,g)&&c.Ha(f=g)});c.Lb=function(a){c.Mb=e=!0;g=a;k()};c.Kb=function(a){e||(f=a,c.Ha(a,"beforeChange"))}},Pa:function(a){return this.K[a]&&
|
||||
this.K[a].length},Sc:function(b){if(b)return this.K[b]&&this.K[b].length||0;var c=0;a.a.D(this.K,function(a,b){"dirty"!==a&&(c+=b.length)});return c},tb:function(a,c){return!this.equalityComparer||!this.equalityComparer(a,c)},extend:function(b){var c=this;b&&a.a.D(b,function(b,e){var f=a.ya[b];"function"==typeof f&&(c=f(c,e)||c)});return c}};a.G(D,"subscribe",D.X);a.G(D,"extend",D.extend);a.G(D,"getSubscriptionsCount",D.Sc);a.a.ka&&a.a.Xa(D,Function.prototype);a.J.fn=D;a.hc=function(a){return null!=
|
||||
a&&"function"==typeof a.X&&"function"==typeof a.notifySubscribers};a.b("subscribable",a.J);a.b("isSubscribable",a.hc);a.va=a.l=function(){function b(a){d.push(e);e=a}function c(){e=d.pop()}var d=[],e,f=0;return{Ub:b,end:c,oc:function(b){if(e){if(!a.hc(b))throw Error("Only subscribable things can act as dependencies");e.gb.call(e.Gc,b,b.Cc||(b.Cc=++f))}},w:function(a,d,e){try{return b(),a.apply(d,e||[])}finally{c()}},Aa:function(){if(e)return e.m.Aa()},Sa:function(){if(e)return e.Sa}}}();a.b("computedContext",
|
||||
a.va);a.b("computedContext.getDependenciesCount",a.va.Aa);a.b("computedContext.isInitial",a.va.Sa);a.b("ignoreDependencies",a.qd=a.l.w);var E=a.a.Yb("_latestValue");a.N=function(b){function c(){if(0<arguments.length)return c.tb(c[E],arguments[0])&&(c.ga(),c[E]=arguments[0],c.fa()),this;a.l.oc(c);return c[E]}c[E]=b;a.a.ka||a.a.extend(c,a.J.fn);a.J.fn.rb(c);a.a.Ya(c,B);a.options.deferUpdates&&a.ya.deferred(c,!0);return c};var B={equalityComparer:J,t:function(){return this[E]},fa:function(){this.notifySubscribers(this[E])},
|
||||
ga:function(){this.notifySubscribers(this[E],"beforeChange")}};a.a.ka&&a.a.Xa(B,a.J.fn);var H=a.N.gd="__ko_proto__";B[H]=a.N;a.Oa=function(b,c){return null===b||b===n||b[H]===n?!1:b[H]===c?!0:a.Oa(b[H],c)};a.H=function(b){return a.Oa(b,a.N)};a.Ba=function(b){return"function"==typeof b&&b[H]===a.N||"function"==typeof b&&b[H]===a.B&&b.Vc?!0:!1};a.b("observable",a.N);a.b("isObservable",a.H);a.b("isWriteableObservable",a.Ba);a.b("isWritableObservable",a.Ba);a.b("observable.fn",B);a.G(B,"peek",B.t);a.G(B,
|
||||
"valueHasMutated",B.fa);a.G(B,"valueWillMutate",B.ga);a.la=function(b){b=b||[];if("object"!=typeof b||!("length"in b))throw Error("The argument passed when initializing an observable array must be an array, or null, or undefined.");b=a.N(b);a.a.Ya(b,a.la.fn);return b.extend({trackArrayChanges:!0})};a.la.fn={remove:function(b){for(var c=this.t(),d=[],e="function"!=typeof b||a.H(b)?function(a){return a===b}:b,f=0;f<c.length;f++){var g=c[f];e(g)&&(0===d.length&&this.ga(),d.push(g),c.splice(f,1),f--)}d.length&&
|
||||
this.fa();return d},removeAll:function(b){if(b===n){var c=this.t(),d=c.slice(0);this.ga();c.splice(0,c.length);this.fa();return d}return b?this.remove(function(c){return 0<=a.a.o(b,c)}):[]},destroy:function(b){var c=this.t(),d="function"!=typeof b||a.H(b)?function(a){return a===b}:b;this.ga();for(var e=c.length-1;0<=e;e--)d(c[e])&&(c[e]._destroy=!0);this.fa()},destroyAll:function(b){return b===n?this.destroy(function(){return!0}):b?this.destroy(function(c){return 0<=a.a.o(b,c)}):[]},indexOf:function(b){var c=
|
||||
this();return a.a.o(c,b)},replace:function(a,c){var d=this.indexOf(a);0<=d&&(this.ga(),this.t()[d]=c,this.fa())}};a.a.ka&&a.a.Xa(a.la.fn,a.N.fn);a.a.q("pop push reverse shift sort splice unshift".split(" "),function(b){a.la.fn[b]=function(){var a=this.t();this.ga();this.Vb(a,b,arguments);var d=a[b].apply(a,arguments);this.fa();return d===a?this:d}});a.a.q(["slice"],function(b){a.la.fn[b]=function(){var a=this();return a[b].apply(a,arguments)}});a.b("observableArray",a.la);a.ya.trackArrayChanges=function(b,
|
||||
c){function d(){if(!e){e=!0;var c=b.notifySubscribers;b.notifySubscribers=function(a,b){b&&b!==I||++k;return c.apply(this,arguments)};var d=[].concat(b.t()||[]);f=null;g=b.X(function(c){c=[].concat(c||[]);if(b.Pa("arrayChange")){var e;if(!f||1<k)f=a.a.ib(d,c,b.hb);e=f}d=c;f=null;k=0;e&&e.length&&b.notifySubscribers(e,"arrayChange")})}}b.hb={};c&&"object"==typeof c&&a.a.extend(b.hb,c);b.hb.sparse=!0;if(!b.Vb){var e=!1,f=null,g,k=0,l=b.sa,m=b.Ia;b.sa=function(a){l&&l.call(b,a);"arrayChange"===a&&d()};
|
||||
b.Ia=function(a){m&&m.call(b,a);"arrayChange"!==a||b.Pa("arrayChange")||(g.k(),e=!1)};b.Vb=function(b,c,d){function m(a,b,c){return l[l.length]={status:a,value:b,index:c}}if(e&&!k){var l=[],g=b.length,t=d.length,G=0;switch(c){case "push":G=g;case "unshift":for(c=0;c<t;c++)m("added",d[c],G+c);break;case "pop":G=g-1;case "shift":g&&m("deleted",b[G],G);break;case "splice":c=Math.min(Math.max(0,0>d[0]?g+d[0]:d[0]),g);for(var g=1===t?g:Math.min(c+(d[1]||0),g),t=c+t-2,G=Math.max(g,t),P=[],n=[],Q=2;c<G;++c,
|
||||
++Q)c<g&&n.push(m("deleted",b[c],c)),c<t&&P.push(m("added",d[Q],c));a.a.dc(n,P);break;default:return}f=l}}}};var s=a.a.Yb("_state");a.m=a.B=function(b,c,d){function e(){if(0<arguments.length){if("function"===typeof f)f.apply(g.pb,arguments);else throw Error("Cannot write a value to a ko.computed unless you specify a 'write' option. If you wish to read the current value, don't pass any parameters.");return this}a.l.oc(e);(g.S||g.s&&e.Qa())&&e.aa();return g.T}"object"===typeof b?d=b:(d=d||{},b&&(d.read=
|
||||
b));if("function"!=typeof d.read)throw Error("Pass a function that returns the value of the ko.computed");var f=d.write,g={T:n,S:!0,Ra:!1,Fb:!1,R:!1,Va:!1,s:!1,jd:d.read,pb:c||d.owner,i:d.disposeWhenNodeIsRemoved||d.i||null,wa:d.disposeWhen||d.wa,mb:null,r:{},L:0,bc:null};e[s]=g;e.Vc="function"===typeof f;a.a.ka||a.a.extend(e,a.J.fn);a.J.fn.rb(e);a.a.Ya(e,z);d.pure?(g.Va=!0,g.s=!0,a.a.extend(e,$)):d.deferEvaluation&&a.a.extend(e,aa);a.options.deferUpdates&&a.ya.deferred(e,!0);g.i&&(g.Fb=!0,g.i.nodeType||
|
||||
(g.i=null));g.s||d.deferEvaluation||e.aa();g.i&&e.ba()&&a.a.F.oa(g.i,g.mb=function(){e.k()});return e};var z={equalityComparer:J,Aa:function(){return this[s].L},Pb:function(a,c,d){if(this[s].Va&&c===this)throw Error("A 'pure' computed must not be called recursively");this[s].r[a]=d;d.Ga=this[s].L++;d.na=c.Na()},Qa:function(){var a,c,d=this[s].r;for(a in d)if(d.hasOwnProperty(a)&&(c=d[a],c.ia.Uc(c.na)))return!0},bd:function(){this.Fa&&!this[s].Ra&&this.Fa()},ba:function(){return this[s].S||0<this[s].L},
|
||||
ld:function(){this.Mb||this.ac()},uc:function(a){if(a.cb&&!this[s].i){var c=a.X(this.bd,this,"dirty"),d=a.X(this.ld,this);return{ia:a,k:function(){c.k();d.k()}}}return a.X(this.ac,this)},ac:function(){var b=this,c=b.throttleEvaluation;c&&0<=c?(clearTimeout(this[s].bc),this[s].bc=a.a.setTimeout(function(){b.aa(!0)},c)):b.Fa?b.Fa():b.aa(!0)},aa:function(b){var c=this[s],d=c.wa;if(!c.Ra&&!c.R){if(c.i&&!a.a.nb(c.i)||d&&d()){if(!c.Fb){this.k();return}}else c.Fb=!1;c.Ra=!0;try{this.Qc(b)}finally{c.Ra=!1}c.L||
|
||||
this.k()}},Qc:function(b){var c=this[s],d=c.Va?n:!c.L,e={Hc:this,Ma:c.r,lb:c.L};a.l.Ub({Gc:e,gb:Y,m:this,Sa:d});c.r={};c.L=0;e=this.Pc(c,e);this.tb(c.T,e)&&(c.s||this.notifySubscribers(c.T,"beforeChange"),c.T=e,c.s?this.zc():b&&this.notifySubscribers(c.T));d&&this.notifySubscribers(c.T,"awake")},Pc:function(b,c){try{var d=b.jd;return b.pb?d.call(b.pb):d()}finally{a.l.end(),c.lb&&!b.s&&a.a.D(c.Ma,X),b.S=!1}},t:function(){var a=this[s];(a.S&&!a.L||a.s&&this.Qa())&&this.aa();return a.T},Ta:function(b){a.J.fn.Ta.call(this,
|
||||
b);this.Fa=function(){this.Kb(this[s].T);this[s].S=!0;this.Lb(this)}},k:function(){var b=this[s];!b.s&&b.r&&a.a.D(b.r,function(a,b){b.k&&b.k()});b.i&&b.mb&&a.a.F.pc(b.i,b.mb);b.r=null;b.L=0;b.R=!0;b.S=!1;b.s=!1;b.i=null}},$={sa:function(b){var c=this,d=c[s];if(!d.R&&d.s&&"change"==b){d.s=!1;if(d.S||c.Qa())d.r=null,d.L=0,d.S=!0,c.aa();else{var e=[];a.a.D(d.r,function(a,b){e[b.Ga]=a});a.a.q(e,function(a,b){var e=d.r[a],l=c.uc(e.ia);l.Ga=b;l.na=e.na;d.r[a]=l})}d.R||c.notifySubscribers(d.T,"awake")}},
|
||||
Ia:function(b){var c=this[s];c.R||"change"!=b||this.Pa("change")||(a.a.D(c.r,function(a,b){b.k&&(c.r[a]={ia:b.ia,Ga:b.Ga,na:b.na},b.k())}),c.s=!0,this.notifySubscribers(n,"asleep"))},Na:function(){var b=this[s];b.s&&(b.S||this.Qa())&&this.aa();return a.J.fn.Na.call(this)}},aa={sa:function(a){"change"!=a&&"beforeChange"!=a||this.t()}};a.a.ka&&a.a.Xa(z,a.J.fn);var R=a.N.gd;a.m[R]=a.N;z[R]=a.m;a.Xc=function(b){return a.Oa(b,a.m)};a.Yc=function(b){return a.Oa(b,a.m)&&b[s]&&b[s].Va};a.b("computed",a.m);
|
||||
a.b("dependentObservable",a.m);a.b("isComputed",a.Xc);a.b("isPureComputed",a.Yc);a.b("computed.fn",z);a.G(z,"peek",z.t);a.G(z,"dispose",z.k);a.G(z,"isActive",z.ba);a.G(z,"getDependenciesCount",z.Aa);a.nc=function(b,c){if("function"===typeof b)return a.m(b,c,{pure:!0});b=a.a.extend({},b);b.pure=!0;return a.m(b,c)};a.b("pureComputed",a.nc);(function(){function b(a,f,g){g=g||new d;a=f(a);if("object"!=typeof a||null===a||a===n||a instanceof RegExp||a instanceof Date||a instanceof String||a instanceof
|
||||
Number||a instanceof Boolean)return a;var k=a instanceof Array?[]:{};g.save(a,k);c(a,function(c){var d=f(a[c]);switch(typeof d){case "boolean":case "number":case "string":case "function":k[c]=d;break;case "object":case "undefined":var h=g.get(d);k[c]=h!==n?h:b(d,f,g)}});return k}function c(a,b){if(a instanceof Array){for(var c=0;c<a.length;c++)b(c);"function"==typeof a.toJSON&&b("toJSON")}else for(c in a)b(c)}function d(){this.keys=[];this.Ib=[]}a.wc=function(c){if(0==arguments.length)throw Error("When calling ko.toJS, pass the object you want to convert.");
|
||||
return b(c,function(b){for(var c=0;a.H(b)&&10>c;c++)b=b();return b})};a.toJSON=function(b,c,d){b=a.wc(b);return a.a.Eb(b,c,d)};d.prototype={save:function(b,c){var d=a.a.o(this.keys,b);0<=d?this.Ib[d]=c:(this.keys.push(b),this.Ib.push(c))},get:function(b){b=a.a.o(this.keys,b);return 0<=b?this.Ib[b]:n}}})();a.b("toJS",a.wc);a.b("toJSON",a.toJSON);(function(){a.j={u:function(b){switch(a.a.A(b)){case "option":return!0===b.__ko__hasDomDataOptionValue__?a.a.e.get(b,a.d.options.xb):7>=a.a.C?b.getAttributeNode("value")&&
|
||||
b.getAttributeNode("value").specified?b.value:b.text:b.value;case "select":return 0<=b.selectedIndex?a.j.u(b.options[b.selectedIndex]):n;default:return b.value}},ha:function(b,c,d){switch(a.a.A(b)){case "option":switch(typeof c){case "string":a.a.e.set(b,a.d.options.xb,n);"__ko__hasDomDataOptionValue__"in b&&delete b.__ko__hasDomDataOptionValue__;b.value=c;break;default:a.a.e.set(b,a.d.options.xb,c),b.__ko__hasDomDataOptionValue__=!0,b.value="number"===typeof c?c:""}break;case "select":if(""===c||
|
||||
null===c)c=n;for(var e=-1,f=0,g=b.options.length,k;f<g;++f)if(k=a.j.u(b.options[f]),k==c||""==k&&c===n){e=f;break}if(d||0<=e||c===n&&1<b.size)b.selectedIndex=e;break;default:if(null===c||c===n)c="";b.value=c}}}})();a.b("selectExtensions",a.j);a.b("selectExtensions.readValue",a.j.u);a.b("selectExtensions.writeValue",a.j.ha);a.h=function(){function b(b){b=a.a.$a(b);123===b.charCodeAt(0)&&(b=b.slice(1,-1));var c=[],d=b.match(e),r,k=[],p=0;if(d){d.push(",");for(var A=0,y;y=d[A];++A){var t=y.charCodeAt(0);
|
||||
if(44===t){if(0>=p){c.push(r&&k.length?{key:r,value:k.join("")}:{unknown:r||k.join("")});r=p=0;k=[];continue}}else if(58===t){if(!p&&!r&&1===k.length){r=k.pop();continue}}else 47===t&&A&&1<y.length?(t=d[A-1].match(f))&&!g[t[0]]&&(b=b.substr(b.indexOf(y)+1),d=b.match(e),d.push(","),A=-1,y="/"):40===t||123===t||91===t?++p:41===t||125===t||93===t?--p:r||k.length||34!==t&&39!==t||(y=y.slice(1,-1));k.push(y)}}return c}var c=["true","false","null","undefined"],d=/^(?:[$_a-z][$\w]*|(.+)(\.\s*[$_a-z][$\w]*|\[.+\]))$/i,
|
||||
e=RegExp("\"(?:[^\"\\\\]|\\\\.)*\"|'(?:[^'\\\\]|\\\\.)*'|/(?:[^/\\\\]|\\\\.)*/w*|[^\\s:,/][^,\"'{}()/:[\\]]*[^\\s,\"'{}()/:[\\]]|[^\\s]","g"),f=/[\])"'A-Za-z0-9_$]+$/,g={"in":1,"return":1,"typeof":1},k={};return{ta:[],ea:k,yb:b,Ua:function(e,m){function h(b,e){var m;if(!A){var l=a.getBindingHandler(b);if(l&&l.preprocess&&!(e=l.preprocess(e,b,h)))return;if(l=k[b])m=e,0<=a.a.o(c,m)?m=!1:(l=m.match(d),m=null===l?!1:l[1]?"Object("+l[1]+")"+l[2]:m),l=m;l&&g.push("'"+b+"':function(_z){"+m+"=_z}")}p&&(e=
|
||||
"function(){return "+e+" }");f.push("'"+b+"':"+e)}m=m||{};var f=[],g=[],p=m.valueAccessors,A=m.bindingParams,y="string"===typeof e?b(e):e;a.a.q(y,function(a){h(a.key||a.unknown,a.value)});g.length&&h("_ko_property_writers","{"+g.join(",")+" }");return f.join(",")},ad:function(a,b){for(var c=0;c<a.length;c++)if(a[c].key==b)return!0;return!1},Ea:function(b,c,d,e,f){if(b&&a.H(b))!a.Ba(b)||f&&b.t()===e||b(e);else if((b=c.get("_ko_property_writers"))&&b[d])b[d](e)}}}();a.b("expressionRewriting",a.h);a.b("expressionRewriting.bindingRewriteValidators",
|
||||
a.h.ta);a.b("expressionRewriting.parseObjectLiteral",a.h.yb);a.b("expressionRewriting.preProcessBindings",a.h.Ua);a.b("expressionRewriting._twoWayBindings",a.h.ea);a.b("jsonExpressionRewriting",a.h);a.b("jsonExpressionRewriting.insertPropertyAccessorsIntoJson",a.h.Ua);(function(){function b(a){return 8==a.nodeType&&g.test(f?a.text:a.nodeValue)}function c(a){return 8==a.nodeType&&k.test(f?a.text:a.nodeValue)}function d(a,d){for(var e=a,f=1,l=[];e=e.nextSibling;){if(c(e)&&(f--,0===f))return l;l.push(e);
|
||||
b(e)&&f++}if(!d)throw Error("Cannot find closing comment tag to match: "+a.nodeValue);return null}function e(a,b){var c=d(a,b);return c?0<c.length?c[c.length-1].nextSibling:a.nextSibling:null}var f=u&&"\x3c!--test--\x3e"===u.createComment("test").text,g=f?/^\x3c!--\s*ko(?:\s+([\s\S]+))?\s*--\x3e$/:/^\s*ko(?:\s+([\s\S]+))?\s*$/,k=f?/^\x3c!--\s*\/ko\s*--\x3e$/:/^\s*\/ko\s*$/,l={ul:!0,ol:!0};a.f={Z:{},childNodes:function(a){return b(a)?d(a):a.childNodes},xa:function(c){if(b(c)){c=a.f.childNodes(c);for(var d=
|
||||
0,e=c.length;d<e;d++)a.removeNode(c[d])}else a.a.ob(c)},da:function(c,d){if(b(c)){a.f.xa(c);for(var e=c.nextSibling,f=0,l=d.length;f<l;f++)e.parentNode.insertBefore(d[f],e)}else a.a.da(c,d)},mc:function(a,c){b(a)?a.parentNode.insertBefore(c,a.nextSibling):a.firstChild?a.insertBefore(c,a.firstChild):a.appendChild(c)},gc:function(c,d,e){e?b(c)?c.parentNode.insertBefore(d,e.nextSibling):e.nextSibling?c.insertBefore(d,e.nextSibling):c.appendChild(d):a.f.mc(c,d)},firstChild:function(a){return b(a)?!a.nextSibling||
|
||||
c(a.nextSibling)?null:a.nextSibling:a.firstChild},nextSibling:function(a){b(a)&&(a=e(a));return a.nextSibling&&c(a.nextSibling)?null:a.nextSibling},Tc:b,pd:function(a){return(a=(f?a.text:a.nodeValue).match(g))?a[1]:null},kc:function(d){if(l[a.a.A(d)]){var h=d.firstChild;if(h){do if(1===h.nodeType){var f;f=h.firstChild;var g=null;if(f){do if(g)g.push(f);else if(b(f)){var k=e(f,!0);k?f=k:g=[f]}else c(f)&&(g=[f]);while(f=f.nextSibling)}if(f=g)for(g=h.nextSibling,k=0;k<f.length;k++)g?d.insertBefore(f[k],
|
||||
g):d.appendChild(f[k])}while(h=h.nextSibling)}}}}})();a.b("virtualElements",a.f);a.b("virtualElements.allowedBindings",a.f.Z);a.b("virtualElements.emptyNode",a.f.xa);a.b("virtualElements.insertAfter",a.f.gc);a.b("virtualElements.prepend",a.f.mc);a.b("virtualElements.setDomNodeChildren",a.f.da);(function(){a.Q=function(){this.Fc={}};a.a.extend(a.Q.prototype,{nodeHasBindings:function(b){switch(b.nodeType){case 1:return null!=b.getAttribute("data-bind")||a.g.getComponentNameForNode(b);case 8:return a.f.Tc(b);
|
||||
default:return!1}},getBindings:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b):null;return a.g.Ob(d,b,c,!1)},getBindingAccessors:function(b,c){var d=this.getBindingsString(b,c),d=d?this.parseBindingsString(d,c,b,{valueAccessors:!0}):null;return a.g.Ob(d,b,c,!0)},getBindingsString:function(b){switch(b.nodeType){case 1:return b.getAttribute("data-bind");case 8:return a.f.pd(b);default:return null}},parseBindingsString:function(b,c,d,e){try{var f=this.Fc,g=b+(e&&e.valueAccessors||
|
||||
""),k;if(!(k=f[g])){var l,m="with($context){with($data||{}){return{"+a.h.Ua(b,e)+"}}}";l=new Function("$context","$element",m);k=f[g]=l}return k(c,d)}catch(h){throw h.message="Unable to parse bindings.\nBindings value: "+b+"\nMessage: "+h.message,h;}}});a.Q.instance=new a.Q})();a.b("bindingProvider",a.Q);(function(){function b(a){return function(){return a}}function c(a){return a()}function d(b){return a.a.Ca(a.l.w(b),function(a,c){return function(){return b()[c]}})}function e(c,e,h){return"function"===
|
||||
typeof c?d(c.bind(null,e,h)):a.a.Ca(c,b)}function f(a,b){return d(this.getBindings.bind(this,a,b))}function g(b,c,d){var e,h=a.f.firstChild(c),f=a.Q.instance,m=f.preprocessNode;if(m){for(;e=h;)h=a.f.nextSibling(e),m.call(f,e);h=a.f.firstChild(c)}for(;e=h;)h=a.f.nextSibling(e),k(b,e,d)}function k(b,c,d){var e=!0,h=1===c.nodeType;h&&a.f.kc(c);if(h&&d||a.Q.instance.nodeHasBindings(c))e=m(c,null,b,d).shouldBindDescendants;e&&!r[a.a.A(c)]&&g(b,c,!h)}function l(b){var c=[],d={},e=[];a.a.D(b,function Z(h){if(!d[h]){var f=
|
||||
a.getBindingHandler(h);f&&(f.after&&(e.push(h),a.a.q(f.after,function(c){if(b[c]){if(-1!==a.a.o(e,c))throw Error("Cannot combine the following bindings, because they have a cyclic dependency: "+e.join(", "));Z(c)}}),e.length--),c.push({key:h,fc:f}));d[h]=!0}});return c}function m(b,d,e,h){var m=a.a.e.get(b,q);if(!d){if(m)throw Error("You cannot apply bindings multiple times to the same element.");a.a.e.set(b,q,!0)}!m&&h&&a.tc(b,e);var g;if(d&&"function"!==typeof d)g=d;else{var k=a.Q.instance,r=k.getBindingAccessors||
|
||||
f,p=a.B(function(){(g=d?d(e,b):r.call(k,b,e))&&e.P&&e.P();return g},null,{i:b});g&&p.ba()||(p=null)}var u;if(g){var v=p?function(a){return function(){return c(p()[a])}}:function(a){return g[a]},s=function(){return a.a.Ca(p?p():g,c)};s.get=function(a){return g[a]&&c(v(a))};s.has=function(a){return a in g};h=l(g);a.a.q(h,function(c){var d=c.fc.init,h=c.fc.update,f=c.key;if(8===b.nodeType&&!a.f.Z[f])throw Error("The binding '"+f+"' cannot be used with virtual elements");try{"function"==typeof d&&a.l.w(function(){var a=
|
||||
d(b,v(f),s,e.$data,e);if(a&&a.controlsDescendantBindings){if(u!==n)throw Error("Multiple bindings ("+u+" and "+f+") are trying to control descendant bindings of the same element. You cannot use these bindings together on the same element.");u=f}}),"function"==typeof h&&a.B(function(){h(b,v(f),s,e.$data,e)},null,{i:b})}catch(m){throw m.message='Unable to process binding "'+f+": "+g[f]+'"\nMessage: '+m.message,m;}})}return{shouldBindDescendants:u===n}}function h(b){return b&&b instanceof a.U?b:new a.U(b)}
|
||||
a.d={};var r={script:!0,textarea:!0,template:!0};a.getBindingHandler=function(b){return a.d[b]};a.U=function(b,c,d,e){var h=this,f="function"==typeof b&&!a.H(b),m,g=a.B(function(){var m=f?b():b,l=a.a.c(m);c?(c.P&&c.P(),a.a.extend(h,c),g&&(h.P=g)):(h.$parents=[],h.$root=l,h.ko=a);h.$rawData=m;h.$data=l;d&&(h[d]=l);e&&e(h,c,l);return h.$data},null,{wa:function(){return m&&!a.a.Qb(m)},i:!0});g.ba()&&(h.P=g,g.equalityComparer=null,m=[],g.Ac=function(b){m.push(b);a.a.F.oa(b,function(b){a.a.La(m,b);m.length||
|
||||
(g.k(),h.P=g=n)})})};a.U.prototype.createChildContext=function(b,c,d){return new a.U(b,this,c,function(a,b){a.$parentContext=b;a.$parent=b.$data;a.$parents=(b.$parents||[]).slice(0);a.$parents.unshift(a.$parent);d&&d(a)})};a.U.prototype.extend=function(b){return new a.U(this.P||this.$data,this,null,function(c,d){c.$rawData=d.$rawData;a.a.extend(c,"function"==typeof b?b():b)})};var q=a.a.e.I(),p=a.a.e.I();a.tc=function(b,c){if(2==arguments.length)a.a.e.set(b,p,c),c.P&&c.P.Ac(b);else return a.a.e.get(b,
|
||||
p)};a.Ja=function(b,c,d){1===b.nodeType&&a.f.kc(b);return m(b,c,h(d),!0)};a.Dc=function(b,c,d){d=h(d);return a.Ja(b,e(c,d,b),d)};a.eb=function(a,b){1!==b.nodeType&&8!==b.nodeType||g(h(a),b,!0)};a.Rb=function(a,b){!v&&x.jQuery&&(v=x.jQuery);if(b&&1!==b.nodeType&&8!==b.nodeType)throw Error("ko.applyBindings: first parameter should be your view model; second parameter should be a DOM node");b=b||x.document.body;k(h(a),b,!0)};a.kb=function(b){switch(b.nodeType){case 1:case 8:var c=a.tc(b);if(c)return c;
|
||||
if(b.parentNode)return a.kb(b.parentNode)}return n};a.Jc=function(b){return(b=a.kb(b))?b.$data:n};a.b("bindingHandlers",a.d);a.b("applyBindings",a.Rb);a.b("applyBindingsToDescendants",a.eb);a.b("applyBindingAccessorsToNode",a.Ja);a.b("applyBindingsToNode",a.Dc);a.b("contextFor",a.kb);a.b("dataFor",a.Jc)})();(function(b){function c(c,e){var m=f.hasOwnProperty(c)?f[c]:b,h;m?m.X(e):(m=f[c]=new a.J,m.X(e),d(c,function(b,d){var e=!(!d||!d.synchronous);g[c]={definition:b,Zc:e};delete f[c];h||e?m.notifySubscribers(b):
|
||||
a.Y.Wa(function(){m.notifySubscribers(b)})}),h=!0)}function d(a,b){e("getConfig",[a],function(c){c?e("loadComponent",[a,c],function(a){b(a,c)}):b(null,null)})}function e(c,d,f,h){h||(h=a.g.loaders.slice(0));var g=h.shift();if(g){var q=g[c];if(q){var p=!1;if(q.apply(g,d.concat(function(a){p?f(null):null!==a?f(a):e(c,d,f,h)}))!==b&&(p=!0,!g.suppressLoaderExceptions))throw Error("Component loaders must supply values by invoking the callback, not by returning values synchronously.");}else e(c,d,f,h)}else f(null)}
|
||||
var f={},g={};a.g={get:function(d,e){var f=g.hasOwnProperty(d)?g[d]:b;f?f.Zc?a.l.w(function(){e(f.definition)}):a.Y.Wa(function(){e(f.definition)}):c(d,e)},Xb:function(a){delete g[a]},Jb:e};a.g.loaders=[];a.b("components",a.g);a.b("components.get",a.g.get);a.b("components.clearCachedDefinition",a.g.Xb)})();(function(){function b(b,c,d,e){function g(){0===--y&&e(k)}var k={},y=2,t=d.template;d=d.viewModel;t?f(c,t,function(c){a.g.Jb("loadTemplate",[b,c],function(a){k.template=a;g()})}):g();d?f(c,d,function(c){a.g.Jb("loadViewModel",
|
||||
[b,c],function(a){k[l]=a;g()})}):g()}function c(a,b,d){if("function"===typeof b)d(function(a){return new b(a)});else if("function"===typeof b[l])d(b[l]);else if("instance"in b){var e=b.instance;d(function(){return e})}else"viewModel"in b?c(a,b.viewModel,d):a("Unknown viewModel value: "+b)}function d(b){switch(a.a.A(b)){case "script":return a.a.ma(b.text);case "textarea":return a.a.ma(b.value);case "template":if(e(b.content))return a.a.ua(b.content.childNodes)}return a.a.ua(b.childNodes)}function e(a){return x.DocumentFragment?
|
||||
a instanceof DocumentFragment:a&&11===a.nodeType}function f(a,b,c){"string"===typeof b.require?O||x.require?(O||x.require)([b.require],c):a("Uses require, but no AMD loader is present"):c(b)}function g(a){return function(b){throw Error("Component '"+a+"': "+b);}}var k={};a.g.register=function(b,c){if(!c)throw Error("Invalid configuration for "+b);if(a.g.ub(b))throw Error("Component "+b+" is already registered");k[b]=c};a.g.ub=function(a){return k.hasOwnProperty(a)};a.g.od=function(b){delete k[b];
|
||||
a.g.Xb(b)};a.g.Zb={getConfig:function(a,b){b(k.hasOwnProperty(a)?k[a]:null)},loadComponent:function(a,c,d){var e=g(a);f(e,c,function(c){b(a,e,c,d)})},loadTemplate:function(b,c,f){b=g(b);if("string"===typeof c)f(a.a.ma(c));else if(c instanceof Array)f(c);else if(e(c))f(a.a.V(c.childNodes));else if(c.element)if(c=c.element,x.HTMLElement?c instanceof HTMLElement:c&&c.tagName&&1===c.nodeType)f(d(c));else if("string"===typeof c){var l=u.getElementById(c);l?f(d(l)):b("Cannot find element with ID "+c)}else b("Unknown element type: "+
|
||||
c);else b("Unknown template value: "+c)},loadViewModel:function(a,b,d){c(g(a),b,d)}};var l="createViewModel";a.b("components.register",a.g.register);a.b("components.isRegistered",a.g.ub);a.b("components.unregister",a.g.od);a.b("components.defaultLoader",a.g.Zb);a.g.loaders.push(a.g.Zb);a.g.Bc=k})();(function(){function b(b,e){var f=b.getAttribute("params");if(f){var f=c.parseBindingsString(f,e,b,{valueAccessors:!0,bindingParams:!0}),f=a.a.Ca(f,function(c){return a.m(c,null,{i:b})}),g=a.a.Ca(f,function(c){var e=
|
||||
c.t();return c.ba()?a.m({read:function(){return a.a.c(c())},write:a.Ba(e)&&function(a){c()(a)},i:b}):e});g.hasOwnProperty("$raw")||(g.$raw=f);return g}return{$raw:{}}}a.g.getComponentNameForNode=function(b){var c=a.a.A(b);if(a.g.ub(c)&&(-1!=c.indexOf("-")||"[object HTMLUnknownElement]"==""+b||8>=a.a.C&&b.tagName===c))return c};a.g.Ob=function(c,e,f,g){if(1===e.nodeType){var k=a.g.getComponentNameForNode(e);if(k){c=c||{};if(c.component)throw Error('Cannot use the "component" binding on a custom element matching a component');
|
||||
var l={name:k,params:b(e,f)};c.component=g?function(){return l}:l}}return c};var c=new a.Q;9>a.a.C&&(a.g.register=function(a){return function(b){u.createElement(b);return a.apply(this,arguments)}}(a.g.register),u.createDocumentFragment=function(b){return function(){var c=b(),f=a.g.Bc,g;for(g in f)f.hasOwnProperty(g)&&c.createElement(g);return c}}(u.createDocumentFragment))})();(function(b){function c(b,c,d){c=c.template;if(!c)throw Error("Component '"+b+"' has no template");b=a.a.ua(c);a.f.da(d,b)}
|
||||
function d(a,b,c,d){var e=a.createViewModel;return e?e.call(a,d,{element:b,templateNodes:c}):d}var e=0;a.d.component={init:function(f,g,k,l,m){function h(){var a=r&&r.dispose;"function"===typeof a&&a.call(r);q=r=null}var r,q,p=a.a.V(a.f.childNodes(f));a.a.F.oa(f,h);a.m(function(){var l=a.a.c(g()),k,t;"string"===typeof l?k=l:(k=a.a.c(l.name),t=a.a.c(l.params));if(!k)throw Error("No component name specified");var n=q=++e;a.g.get(k,function(e){if(q===n){h();if(!e)throw Error("Unknown component '"+k+
|
||||
"'");c(k,e,f);var g=d(e,f,p,t);e=m.createChildContext(g,b,function(a){a.$component=g;a.$componentTemplateNodes=p});r=g;a.eb(e,f)}})},null,{i:f});return{controlsDescendantBindings:!0}}};a.f.Z.component=!0})();var S={"class":"className","for":"htmlFor"};a.d.attr={update:function(b,c){var d=a.a.c(c())||{};a.a.D(d,function(c,d){d=a.a.c(d);var g=!1===d||null===d||d===n;g&&b.removeAttribute(c);8>=a.a.C&&c in S?(c=S[c],g?b.removeAttribute(c):b[c]=d):g||b.setAttribute(c,d.toString());"name"===c&&a.a.rc(b,
|
||||
g?"":d.toString())})}};(function(){a.d.checked={after:["value","attr"],init:function(b,c,d){function e(){var e=b.checked,f=p?g():e;if(!a.va.Sa()&&(!l||e)){var m=a.l.w(c);if(h){var k=r?m.t():m;q!==f?(e&&(a.a.pa(k,f,!0),a.a.pa(k,q,!1)),q=f):a.a.pa(k,f,e);r&&a.Ba(m)&&m(k)}else a.h.Ea(m,d,"checked",f,!0)}}function f(){var d=a.a.c(c());b.checked=h?0<=a.a.o(d,g()):k?d:g()===d}var g=a.nc(function(){return d.has("checkedValue")?a.a.c(d.get("checkedValue")):d.has("value")?a.a.c(d.get("value")):b.value}),k=
|
||||
"checkbox"==b.type,l="radio"==b.type;if(k||l){var m=c(),h=k&&a.a.c(m)instanceof Array,r=!(h&&m.push&&m.splice),q=h?g():n,p=l||h;l&&!b.name&&a.d.uniqueName.init(b,function(){return!0});a.m(e,null,{i:b});a.a.p(b,"click",e);a.m(f,null,{i:b});m=n}}};a.h.ea.checked=!0;a.d.checkedValue={update:function(b,c){b.value=a.a.c(c())}}})();a.d.css={update:function(b,c){var d=a.a.c(c());null!==d&&"object"==typeof d?a.a.D(d,function(c,d){d=a.a.c(d);a.a.bb(b,c,d)}):(d=a.a.$a(String(d||"")),a.a.bb(b,b.__ko__cssValue,
|
||||
!1),b.__ko__cssValue=d,a.a.bb(b,d,!0))}};a.d.enable={update:function(b,c){var d=a.a.c(c());d&&b.disabled?b.removeAttribute("disabled"):d||b.disabled||(b.disabled=!0)}};a.d.disable={update:function(b,c){a.d.enable.update(b,function(){return!a.a.c(c())})}};a.d.event={init:function(b,c,d,e,f){var g=c()||{};a.a.D(g,function(g){"string"==typeof g&&a.a.p(b,g,function(b){var m,h=c()[g];if(h){try{var r=a.a.V(arguments);e=f.$data;r.unshift(e);m=h.apply(e,r)}finally{!0!==m&&(b.preventDefault?b.preventDefault():
|
||||
b.returnValue=!1)}!1===d.get(g+"Bubble")&&(b.cancelBubble=!0,b.stopPropagation&&b.stopPropagation())}})})}};a.d.foreach={ic:function(b){return function(){var c=b(),d=a.a.zb(c);if(!d||"number"==typeof d.length)return{foreach:c,templateEngine:a.W.sb};a.a.c(c);return{foreach:d.data,as:d.as,includeDestroyed:d.includeDestroyed,afterAdd:d.afterAdd,beforeRemove:d.beforeRemove,afterRender:d.afterRender,beforeMove:d.beforeMove,afterMove:d.afterMove,templateEngine:a.W.sb}}},init:function(b,c){return a.d.template.init(b,
|
||||
a.d.foreach.ic(c))},update:function(b,c,d,e,f){return a.d.template.update(b,a.d.foreach.ic(c),d,e,f)}};a.h.ta.foreach=!1;a.f.Z.foreach=!0;a.d.hasfocus={init:function(b,c,d){function e(e){b.__ko_hasfocusUpdating=!0;var f=b.ownerDocument;if("activeElement"in f){var g;try{g=f.activeElement}catch(h){g=f.body}e=g===b}f=c();a.h.Ea(f,d,"hasfocus",e,!0);b.__ko_hasfocusLastValue=e;b.__ko_hasfocusUpdating=!1}var f=e.bind(null,!0),g=e.bind(null,!1);a.a.p(b,"focus",f);a.a.p(b,"focusin",f);a.a.p(b,"blur",g);a.a.p(b,
|
||||
"focusout",g)},update:function(b,c){var d=!!a.a.c(c());b.__ko_hasfocusUpdating||b.__ko_hasfocusLastValue===d||(d?b.focus():b.blur(),!d&&b.__ko_hasfocusLastValue&&b.ownerDocument.body.focus(),a.l.w(a.a.Da,null,[b,d?"focusin":"focusout"]))}};a.h.ea.hasfocus=!0;a.d.hasFocus=a.d.hasfocus;a.h.ea.hasFocus=!0;a.d.html={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Cb(b,c())}};K("if");K("ifnot",!1,!0);K("with",!0,!1,function(a,c){return a.createChildContext(c)});var L={};
|
||||
a.d.options={init:function(b){if("select"!==a.a.A(b))throw Error("options binding applies only to SELECT elements");for(;0<b.length;)b.remove(0);return{controlsDescendantBindings:!0}},update:function(b,c,d){function e(){return a.a.Ka(b.options,function(a){return a.selected})}function f(a,b,c){var d=typeof b;return"function"==d?b(a):"string"==d?a[b]:c}function g(c,e){if(A&&h)a.j.ha(b,a.a.c(d.get("value")),!0);else if(p.length){var f=0<=a.a.o(p,a.j.u(e[0]));a.a.sc(e[0],f);A&&!f&&a.l.w(a.a.Da,null,[b,
|
||||
"change"])}}var k=b.multiple,l=0!=b.length&&k?b.scrollTop:null,m=a.a.c(c()),h=d.get("valueAllowUnset")&&d.has("value"),r=d.get("optionsIncludeDestroyed");c={};var q,p=[];h||(k?p=a.a.fb(e(),a.j.u):0<=b.selectedIndex&&p.push(a.j.u(b.options[b.selectedIndex])));m&&("undefined"==typeof m.length&&(m=[m]),q=a.a.Ka(m,function(b){return r||b===n||null===b||!a.a.c(b._destroy)}),d.has("optionsCaption")&&(m=a.a.c(d.get("optionsCaption")),null!==m&&m!==n&&q.unshift(L)));var A=!1;c.beforeRemove=function(a){b.removeChild(a)};
|
||||
m=g;d.has("optionsAfterRender")&&"function"==typeof d.get("optionsAfterRender")&&(m=function(b,c){g(0,c);a.l.w(d.get("optionsAfterRender"),null,[c[0],b!==L?b:n])});a.a.Bb(b,q,function(c,e,g){g.length&&(p=!h&&g[0].selected?[a.j.u(g[0])]:[],A=!0);e=b.ownerDocument.createElement("option");c===L?(a.a.Za(e,d.get("optionsCaption")),a.j.ha(e,n)):(g=f(c,d.get("optionsValue"),c),a.j.ha(e,a.a.c(g)),c=f(c,d.get("optionsText"),g),a.a.Za(e,c));return[e]},c,m);a.l.w(function(){h?a.j.ha(b,a.a.c(d.get("value")),
|
||||
!0):(k?p.length&&e().length<p.length:p.length&&0<=b.selectedIndex?a.j.u(b.options[b.selectedIndex])!==p[0]:p.length||0<=b.selectedIndex)&&a.a.Da(b,"change")});a.a.Nc(b);l&&20<Math.abs(l-b.scrollTop)&&(b.scrollTop=l)}};a.d.options.xb=a.a.e.I();a.d.selectedOptions={after:["options","foreach"],init:function(b,c,d){a.a.p(b,"change",function(){var e=c(),f=[];a.a.q(b.getElementsByTagName("option"),function(b){b.selected&&f.push(a.j.u(b))});a.h.Ea(e,d,"selectedOptions",f)})},update:function(b,c){if("select"!=
|
||||
a.a.A(b))throw Error("values binding applies only to SELECT elements");var d=a.a.c(c()),e=b.scrollTop;d&&"number"==typeof d.length&&a.a.q(b.getElementsByTagName("option"),function(b){var c=0<=a.a.o(d,a.j.u(b));b.selected!=c&&a.a.sc(b,c)});b.scrollTop=e}};a.h.ea.selectedOptions=!0;a.d.style={update:function(b,c){var d=a.a.c(c()||{});a.a.D(d,function(c,d){d=a.a.c(d);if(null===d||d===n||!1===d)d="";b.style[c]=d})}};a.d.submit={init:function(b,c,d,e,f){if("function"!=typeof c())throw Error("The value for a submit binding must be a function");
|
||||
a.a.p(b,"submit",function(a){var d,e=c();try{d=e.call(f.$data,b)}finally{!0!==d&&(a.preventDefault?a.preventDefault():a.returnValue=!1)}})}};a.d.text={init:function(){return{controlsDescendantBindings:!0}},update:function(b,c){a.a.Za(b,c())}};a.f.Z.text=!0;(function(){if(x&&x.navigator)var b=function(a){if(a)return parseFloat(a[1])},c=x.opera&&x.opera.version&&parseInt(x.opera.version()),d=x.navigator.userAgent,e=b(d.match(/^(?:(?!chrome).)*version\/([^ ]*) safari/i)),f=b(d.match(/Firefox\/([^ ]*)/));
|
||||
if(10>a.a.C)var g=a.a.e.I(),k=a.a.e.I(),l=function(b){var c=this.activeElement;(c=c&&a.a.e.get(c,k))&&c(b)},m=function(b,c){var d=b.ownerDocument;a.a.e.get(d,g)||(a.a.e.set(d,g,!0),a.a.p(d,"selectionchange",l));a.a.e.set(b,k,c)};a.d.textInput={init:function(b,d,g){function l(c,d){a.a.p(b,c,d)}function k(){var c=a.a.c(d());if(null===c||c===n)c="";v!==n&&c===v?a.a.setTimeout(k,4):b.value!==c&&(u=c,b.value=c)}function y(){s||(v=b.value,s=a.a.setTimeout(t,4))}function t(){clearTimeout(s);v=s=n;var c=
|
||||
b.value;u!==c&&(u=c,a.h.Ea(d(),g,"textInput",c))}var u=b.value,s,v,x=9==a.a.C?y:t;10>a.a.C?(l("propertychange",function(a){"value"===a.propertyName&&x(a)}),8==a.a.C&&(l("keyup",t),l("keydown",t)),8<=a.a.C&&(m(b,x),l("dragend",y))):(l("input",t),5>e&&"textarea"===a.a.A(b)?(l("keydown",y),l("paste",y),l("cut",y)):11>c?l("keydown",y):4>f&&(l("DOMAutoComplete",t),l("dragdrop",t),l("drop",t)));l("change",t);a.m(k,null,{i:b})}};a.h.ea.textInput=!0;a.d.textinput={preprocess:function(a,b,c){c("textInput",
|
||||
a)}}})();a.d.uniqueName={init:function(b,c){if(c()){var d="ko_unique_"+ ++a.d.uniqueName.Ic;a.a.rc(b,d)}}};a.d.uniqueName.Ic=0;a.d.value={after:["options","foreach"],init:function(b,c,d){if("input"!=b.tagName.toLowerCase()||"checkbox"!=b.type&&"radio"!=b.type){var e=["change"],f=d.get("valueUpdate"),g=!1,k=null;f&&("string"==typeof f&&(f=[f]),a.a.ra(e,f),e=a.a.Tb(e));var l=function(){k=null;g=!1;var e=c(),f=a.j.u(b);a.h.Ea(e,d,"value",f)};!a.a.C||"input"!=b.tagName.toLowerCase()||"text"!=b.type||
|
||||
"off"==b.autocomplete||b.form&&"off"==b.form.autocomplete||-1!=a.a.o(e,"propertychange")||(a.a.p(b,"propertychange",function(){g=!0}),a.a.p(b,"focus",function(){g=!1}),a.a.p(b,"blur",function(){g&&l()}));a.a.q(e,function(c){var d=l;a.a.nd(c,"after")&&(d=function(){k=a.j.u(b);a.a.setTimeout(l,0)},c=c.substring(5));a.a.p(b,c,d)});var m=function(){var e=a.a.c(c()),f=a.j.u(b);if(null!==k&&e===k)a.a.setTimeout(m,0);else if(e!==f)if("select"===a.a.A(b)){var g=d.get("valueAllowUnset"),f=function(){a.j.ha(b,
|
||||
e,g)};f();g||e===a.j.u(b)?a.a.setTimeout(f,0):a.l.w(a.a.Da,null,[b,"change"])}else a.j.ha(b,e)};a.m(m,null,{i:b})}else a.Ja(b,{checkedValue:c})},update:function(){}};a.h.ea.value=!0;a.d.visible={update:function(b,c){var d=a.a.c(c()),e="none"!=b.style.display;d&&!e?b.style.display="":!d&&e&&(b.style.display="none")}};(function(b){a.d[b]={init:function(c,d,e,f,g){return a.d.event.init.call(this,c,function(){var a={};a[b]=d();return a},e,f,g)}}})("click");a.O=function(){};a.O.prototype.renderTemplateSource=
|
||||
function(){throw Error("Override renderTemplateSource");};a.O.prototype.createJavaScriptEvaluatorBlock=function(){throw Error("Override createJavaScriptEvaluatorBlock");};a.O.prototype.makeTemplateSource=function(b,c){if("string"==typeof b){c=c||u;var d=c.getElementById(b);if(!d)throw Error("Cannot find template with ID "+b);return new a.v.n(d)}if(1==b.nodeType||8==b.nodeType)return new a.v.qa(b);throw Error("Unknown template type: "+b);};a.O.prototype.renderTemplate=function(a,c,d,e){a=this.makeTemplateSource(a,
|
||||
e);return this.renderTemplateSource(a,c,d,e)};a.O.prototype.isTemplateRewritten=function(a,c){return!1===this.allowTemplateRewriting?!0:this.makeTemplateSource(a,c).data("isRewritten")};a.O.prototype.rewriteTemplate=function(a,c,d){a=this.makeTemplateSource(a,d);c=c(a.text());a.text(c);a.data("isRewritten",!0)};a.b("templateEngine",a.O);a.Gb=function(){function b(b,c,d,k){b=a.h.yb(b);for(var l=a.h.ta,m=0;m<b.length;m++){var h=b[m].key;if(l.hasOwnProperty(h)){var r=l[h];if("function"===typeof r){if(h=
|
||||
r(b[m].value))throw Error(h);}else if(!r)throw Error("This template engine does not support the '"+h+"' binding within its templates");}}d="ko.__tr_ambtns(function($context,$element){return(function(){return{ "+a.h.Ua(b,{valueAccessors:!0})+" } })()},'"+d.toLowerCase()+"')";return k.createJavaScriptEvaluatorBlock(d)+c}var c=/(<([a-z]+\d*)(?:\s+(?!data-bind\s*=\s*)[a-z0-9\-]+(?:=(?:\"[^\"]*\"|\'[^\']*\'|[^>]*))?)*\s+)data-bind\s*=\s*(["'])([\s\S]*?)\3/gi,d=/\x3c!--\s*ko\b\s*([\s\S]*?)\s*--\x3e/g;return{Oc:function(b,
|
||||
c,d){c.isTemplateRewritten(b,d)||c.rewriteTemplate(b,function(b){return a.Gb.dd(b,c)},d)},dd:function(a,f){return a.replace(c,function(a,c,d,e,h){return b(h,c,d,f)}).replace(d,function(a,c){return b(c,"\x3c!-- ko --\x3e","#comment",f)})},Ec:function(b,c){return a.M.wb(function(d,k){var l=d.nextSibling;l&&l.nodeName.toLowerCase()===c&&a.Ja(l,b,k)})}}}();a.b("__tr_ambtns",a.Gb.Ec);(function(){a.v={};a.v.n=function(b){if(this.n=b){var c=a.a.A(b);this.ab="script"===c?1:"textarea"===c?2:"template"==c&&
|
||||
b.content&&11===b.content.nodeType?3:4}};a.v.n.prototype.text=function(){var b=1===this.ab?"text":2===this.ab?"value":"innerHTML";if(0==arguments.length)return this.n[b];var c=arguments[0];"innerHTML"===b?a.a.Cb(this.n,c):this.n[b]=c};var b=a.a.e.I()+"_";a.v.n.prototype.data=function(c){if(1===arguments.length)return a.a.e.get(this.n,b+c);a.a.e.set(this.n,b+c,arguments[1])};var c=a.a.e.I();a.v.n.prototype.nodes=function(){var b=this.n;if(0==arguments.length)return(a.a.e.get(b,c)||{}).jb||(3===this.ab?
|
||||
b.content:4===this.ab?b:n);a.a.e.set(b,c,{jb:arguments[0]})};a.v.qa=function(a){this.n=a};a.v.qa.prototype=new a.v.n;a.v.qa.prototype.text=function(){if(0==arguments.length){var b=a.a.e.get(this.n,c)||{};b.Hb===n&&b.jb&&(b.Hb=b.jb.innerHTML);return b.Hb}a.a.e.set(this.n,c,{Hb:arguments[0]})};a.b("templateSources",a.v);a.b("templateSources.domElement",a.v.n);a.b("templateSources.anonymousTemplate",a.v.qa)})();(function(){function b(b,c,d){var e;for(c=a.f.nextSibling(c);b&&(e=b)!==c;)b=a.f.nextSibling(e),
|
||||
d(e,b)}function c(c,d){if(c.length){var e=c[0],f=c[c.length-1],g=e.parentNode,k=a.Q.instance,n=k.preprocessNode;if(n){b(e,f,function(a,b){var c=a.previousSibling,d=n.call(k,a);d&&(a===e&&(e=d[0]||b),a===f&&(f=d[d.length-1]||c))});c.length=0;if(!e)return;e===f?c.push(e):(c.push(e,f),a.a.za(c,g))}b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.Rb(d,b)});b(e,f,function(b){1!==b.nodeType&&8!==b.nodeType||a.M.yc(b,[d])});a.a.za(c,g)}}function d(a){return a.nodeType?a:0<a.length?a[0]:null}function e(b,
|
||||
e,f,k,q){q=q||{};var p=(b&&d(b)||f||{}).ownerDocument,n=q.templateEngine||g;a.Gb.Oc(f,n,p);f=n.renderTemplate(f,k,q,p);if("number"!=typeof f.length||0<f.length&&"number"!=typeof f[0].nodeType)throw Error("Template engine must return an array of DOM nodes");p=!1;switch(e){case "replaceChildren":a.f.da(b,f);p=!0;break;case "replaceNode":a.a.qc(b,f);p=!0;break;case "ignoreTargetNode":break;default:throw Error("Unknown renderMode: "+e);}p&&(c(f,k),q.afterRender&&a.l.w(q.afterRender,null,[f,k.$data]));
|
||||
return f}function f(b,c,d){return a.H(b)?b():"function"===typeof b?b(c,d):b}var g;a.Db=function(b){if(b!=n&&!(b instanceof a.O))throw Error("templateEngine must inherit from ko.templateEngine");g=b};a.Ab=function(b,c,h,k,q){h=h||{};if((h.templateEngine||g)==n)throw Error("Set a template engine before calling renderTemplate");q=q||"replaceChildren";if(k){var p=d(k);return a.B(function(){var g=c&&c instanceof a.U?c:new a.U(a.a.c(c)),n=f(b,g.$data,g),g=e(k,q,n,g,h);"replaceNode"==q&&(k=g,p=d(k))},null,
|
||||
{wa:function(){return!p||!a.a.nb(p)},i:p&&"replaceNode"==q?p.parentNode:p})}return a.M.wb(function(d){a.Ab(b,c,h,d,"replaceNode")})};a.kd=function(b,d,g,k,q){function p(a,b){c(b,s);g.afterRender&&g.afterRender(b,a);s=null}function u(a,c){s=q.createChildContext(a,g.as,function(a){a.$index=c});var d=f(b,a,s);return e(null,"ignoreTargetNode",d,s,g)}var s;return a.B(function(){var b=a.a.c(d)||[];"undefined"==typeof b.length&&(b=[b]);b=a.a.Ka(b,function(b){return g.includeDestroyed||b===n||null===b||!a.a.c(b._destroy)});
|
||||
a.l.w(a.a.Bb,null,[k,b,u,g,p])},null,{i:k})};var k=a.a.e.I();a.d.template={init:function(b,c){var d=a.a.c(c());if("string"==typeof d||d.name)a.f.xa(b);else{if("nodes"in d){if(d=d.nodes||[],a.H(d))throw Error('The "nodes" option must be a plain, non-observable array.');}else d=a.f.childNodes(b);d=a.a.jc(d);(new a.v.qa(b)).nodes(d)}return{controlsDescendantBindings:!0}},update:function(b,c,d,e,f){var g=c(),s;c=a.a.c(g);d=!0;e=null;"string"==typeof c?c={}:(g=c.name,"if"in c&&(d=a.a.c(c["if"])),d&&"ifnot"in
|
||||
c&&(d=!a.a.c(c.ifnot)),s=a.a.c(c.data));"foreach"in c?e=a.kd(g||b,d&&c.foreach||[],c,b,f):d?(f="data"in c?f.createChildContext(s,c.as):f,e=a.Ab(g||b,f,c,b)):a.f.xa(b);f=e;(s=a.a.e.get(b,k))&&"function"==typeof s.k&&s.k();a.a.e.set(b,k,f&&f.ba()?f:n)}};a.h.ta.template=function(b){b=a.h.yb(b);return 1==b.length&&b[0].unknown||a.h.ad(b,"name")?null:"This template engine does not support anonymous templates nested within its templates"};a.f.Z.template=!0})();a.b("setTemplateEngine",a.Db);a.b("renderTemplate",
|
||||
a.Ab);a.a.dc=function(a,c,d){if(a.length&&c.length){var e,f,g,k,l;for(e=f=0;(!d||e<d)&&(k=a[f]);++f){for(g=0;l=c[g];++g)if(k.value===l.value){k.moved=l.index;l.moved=k.index;c.splice(g,1);e=g=0;break}e+=g}}};a.a.ib=function(){function b(b,d,e,f,g){var k=Math.min,l=Math.max,m=[],h,n=b.length,q,p=d.length,s=p-n||1,u=n+p+1,t,v,x;for(h=0;h<=n;h++)for(v=t,m.push(t=[]),x=k(p,h+s),q=l(0,h-1);q<=x;q++)t[q]=q?h?b[h-1]===d[q-1]?v[q-1]:k(v[q]||u,t[q-1]||u)+1:q+1:h+1;k=[];l=[];s=[];h=n;for(q=p;h||q;)p=m[h][q]-
|
||||
1,q&&p===m[h][q-1]?l.push(k[k.length]={status:e,value:d[--q],index:q}):h&&p===m[h-1][q]?s.push(k[k.length]={status:f,value:b[--h],index:h}):(--q,--h,g.sparse||k.push({status:"retained",value:d[q]}));a.a.dc(s,l,!g.dontLimitMoves&&10*n);return k.reverse()}return function(a,d,e){e="boolean"===typeof e?{dontLimitMoves:e}:e||{};a=a||[];d=d||[];return a.length<d.length?b(a,d,"added","deleted",e):b(d,a,"deleted","added",e)}}();a.b("utils.compareArrays",a.a.ib);(function(){function b(b,c,d,k,l){var m=[],
|
||||
h=a.B(function(){var h=c(d,l,a.a.za(m,b))||[];0<m.length&&(a.a.qc(m,h),k&&a.l.w(k,null,[d,h,l]));m.length=0;a.a.ra(m,h)},null,{i:b,wa:function(){return!a.a.Qb(m)}});return{ca:m,B:h.ba()?h:n}}var c=a.a.e.I(),d=a.a.e.I();a.a.Bb=function(e,f,g,k,l){function m(b,c){w=q[c];v!==c&&(D[b]=w);w.qb(v++);a.a.za(w.ca,e);u.push(w);z.push(w)}function h(b,c){if(b)for(var d=0,e=c.length;d<e;d++)c[d]&&a.a.q(c[d].ca,function(a){b(a,d,c[d].ja)})}f=f||[];k=k||{};var r=a.a.e.get(e,c)===n,q=a.a.e.get(e,c)||[],p=a.a.fb(q,
|
||||
function(a){return a.ja}),s=a.a.ib(p,f,k.dontLimitMoves),u=[],t=0,v=0,x=[],z=[];f=[];for(var D=[],p=[],w,C=0,B,E;B=s[C];C++)switch(E=B.moved,B.status){case "deleted":E===n&&(w=q[t],w.B&&(w.B.k(),w.B=n),a.a.za(w.ca,e).length&&(k.beforeRemove&&(u.push(w),z.push(w),w.ja===d?w=null:f[C]=w),w&&x.push.apply(x,w.ca)));t++;break;case "retained":m(C,t++);break;case "added":E!==n?m(C,E):(w={ja:B.value,qb:a.N(v++)},u.push(w),z.push(w),r||(p[C]=w))}a.a.e.set(e,c,u);h(k.beforeMove,D);a.a.q(x,k.beforeRemove?a.$:
|
||||
a.removeNode);for(var C=0,r=a.f.firstChild(e),F;w=z[C];C++){w.ca||a.a.extend(w,b(e,g,w.ja,l,w.qb));for(t=0;s=w.ca[t];r=s.nextSibling,F=s,t++)s!==r&&a.f.gc(e,s,F);!w.Wc&&l&&(l(w.ja,w.ca,w.qb),w.Wc=!0)}h(k.beforeRemove,f);for(C=0;C<f.length;++C)f[C]&&(f[C].ja=d);h(k.afterMove,D);h(k.afterAdd,p)}})();a.b("utils.setDomNodeChildrenFromArrayMapping",a.a.Bb);a.W=function(){this.allowTemplateRewriting=!1};a.W.prototype=new a.O;a.W.prototype.renderTemplateSource=function(b,c,d,e){if(c=(9>a.a.C?0:b.nodes)?
|
||||
b.nodes():null)return a.a.V(c.cloneNode(!0).childNodes);b=b.text();return a.a.ma(b,e)};a.W.sb=new a.W;a.Db(a.W.sb);a.b("nativeTemplateEngine",a.W);(function(){a.vb=function(){var a=this.$c=function(){if(!v||!v.tmpl)return 0;try{if(0<=v.tmpl.tag.tmpl.open.toString().indexOf("__"))return 2}catch(a){}return 1}();this.renderTemplateSource=function(b,e,f,g){g=g||u;f=f||{};if(2>a)throw Error("Your version of jQuery.tmpl is too old. Please upgrade to jQuery.tmpl 1.0.0pre or later.");var k=b.data("precompiled");
|
||||
k||(k=b.text()||"",k=v.template(null,"{{ko_with $item.koBindingContext}}"+k+"{{/ko_with}}"),b.data("precompiled",k));b=[e.$data];e=v.extend({koBindingContext:e},f.templateOptions);e=v.tmpl(k,b,e);e.appendTo(g.createElement("div"));v.fragments={};return e};this.createJavaScriptEvaluatorBlock=function(a){return"{{ko_code ((function() { return "+a+" })()) }}"};this.addTemplate=function(a,b){u.write("<script type='text/html' id='"+a+"'>"+b+"\x3c/script>")};0<a&&(v.tmpl.tag.ko_code={open:"__.push($1 || '');"},
|
||||
v.tmpl.tag.ko_with={open:"with($1) {",close:"} "})};a.vb.prototype=new a.O;var b=new a.vb;0<b.$c&&a.Db(b);a.b("jqueryTmplTemplateEngine",a.vb)})()})})();})();
|
||||
@@ -0,0 +1,59 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : danish (da)
|
||||
//! author : Ulrik Nielsen : https://github.com/mrbase
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
var da = moment.defineLocale('da', {
|
||||
months : 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),
|
||||
monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
|
||||
weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
|
||||
weekdaysShort : 'søn_man_tir_ons_tor_fre_lør'.split('_'),
|
||||
weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'HH:mm',
|
||||
LTS : 'HH:mm:ss',
|
||||
L : 'DD/MM/YYYY',
|
||||
LL : 'D. MMMM YYYY',
|
||||
LLL : 'D. MMMM YYYY HH:mm',
|
||||
LLLL : 'dddd [d.] D. MMMM YYYY HH:mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay : '[I dag kl.] LT',
|
||||
nextDay : '[I morgen kl.] LT',
|
||||
nextWeek : 'dddd [kl.] LT',
|
||||
lastDay : '[I går kl.] LT',
|
||||
lastWeek : '[sidste] dddd [kl] LT',
|
||||
sameElse : 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'om %s',
|
||||
past : '%s siden',
|
||||
s : 'få sekunder',
|
||||
m : 'et minut',
|
||||
mm : '%d minutter',
|
||||
h : 'en time',
|
||||
hh : '%d timer',
|
||||
d : 'en dag',
|
||||
dd : '%d dage',
|
||||
M : 'en måned',
|
||||
MM : '%d måneder',
|
||||
y : 'et år',
|
||||
yy : '%d år'
|
||||
},
|
||||
ordinalParse: /\d{1,2}\./,
|
||||
ordinal : '%d.',
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return da;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,74 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : german (de)
|
||||
//! author : lluchs : https://github.com/lluchs
|
||||
//! author: Menelion Elensúle: https://github.com/Oire
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
function processRelativeTime(number, withoutSuffix, key, isFuture) {
|
||||
var format = {
|
||||
'm': ['eine Minute', 'einer Minute'],
|
||||
'h': ['eine Stunde', 'einer Stunde'],
|
||||
'd': ['ein Tag', 'einem Tag'],
|
||||
'dd': [number + ' Tage', number + ' Tagen'],
|
||||
'M': ['ein Monat', 'einem Monat'],
|
||||
'MM': [number + ' Monate', number + ' Monaten'],
|
||||
'y': ['ein Jahr', 'einem Jahr'],
|
||||
'yy': [number + ' Jahre', number + ' Jahren']
|
||||
};
|
||||
return withoutSuffix ? format[key][0] : format[key][1];
|
||||
}
|
||||
|
||||
var de = moment.defineLocale('de', {
|
||||
months : 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),
|
||||
monthsShort : 'Jan._Febr._Mrz._Apr._Mai_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),
|
||||
weekdays : 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),
|
||||
weekdaysShort : 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),
|
||||
weekdaysMin : 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),
|
||||
longDateFormat : {
|
||||
LT: 'HH:mm',
|
||||
LTS: 'HH:mm:ss',
|
||||
L : 'DD.MM.YYYY',
|
||||
LL : 'D. MMMM YYYY',
|
||||
LLL : 'D. MMMM YYYY HH:mm',
|
||||
LLLL : 'dddd, D. MMMM YYYY HH:mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay: '[Heute um] LT [Uhr]',
|
||||
sameElse: 'L',
|
||||
nextDay: '[Morgen um] LT [Uhr]',
|
||||
nextWeek: 'dddd [um] LT [Uhr]',
|
||||
lastDay: '[Gestern um] LT [Uhr]',
|
||||
lastWeek: '[letzten] dddd [um] LT [Uhr]'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'in %s',
|
||||
past : 'vor %s',
|
||||
s : 'ein paar Sekunden',
|
||||
m : processRelativeTime,
|
||||
mm : '%d Minuten',
|
||||
h : processRelativeTime,
|
||||
hh : '%d Stunden',
|
||||
d : processRelativeTime,
|
||||
dd : processRelativeTime,
|
||||
M : processRelativeTime,
|
||||
MM : processRelativeTime,
|
||||
y : processRelativeTime,
|
||||
yy : processRelativeTime
|
||||
},
|
||||
ordinalParse: /\d{1,2}\./,
|
||||
ordinal : '%d.',
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return de;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,78 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : spanish (es)
|
||||
//! author : Julio Napurí : https://github.com/julionc
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
var monthsShortDot = 'Ene._Feb._Mar._Abr._May._Jun._Jul._Ago._Sep._Oct._Nov._Dic.'.split('_'),
|
||||
monthsShort = 'Ene_Feb_Mar_Abr_May_Jun_Jul_Ago_Sep_Oct_Nov_Dic'.split('_');
|
||||
|
||||
var es = moment.defineLocale('es', {
|
||||
months : 'Enero_Febrero_Marzo_Abril_Mayo_Junio_Julio_Agosto_Septiembre_Octubre_Noviembre_Diciembre'.split('_'),
|
||||
monthsShort : function (m, format) {
|
||||
if (/-MMM-/.test(format)) {
|
||||
return monthsShort[m.month()];
|
||||
} else {
|
||||
return monthsShortDot[m.month()];
|
||||
}
|
||||
},
|
||||
weekdays : 'Domingo_Lunes_Martes_Miércoles_Jueves_Viernes_Sábado'.split('_'),
|
||||
weekdaysShort : 'Dom._Lun._Mar._Mié._Jue._Vie._Sáb.'.split('_'),
|
||||
weekdaysMin : 'Do_Lu_Ma_Mi_Ju_Vi_Sá'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'H:mm',
|
||||
LTS : 'H:mm:ss',
|
||||
L : 'DD/MM/YYYY',
|
||||
LL : 'D [de] MMMM [de] YYYY',
|
||||
LLL : 'D [de] MMMM [de] YYYY H:mm',
|
||||
LLLL : 'dddd, D [de] MMMM [de] YYYY H:mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay : function () {
|
||||
return '[hoy a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||||
},
|
||||
nextDay : function () {
|
||||
return '[mañana a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||||
},
|
||||
nextWeek : function () {
|
||||
return 'dddd [a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||||
},
|
||||
lastDay : function () {
|
||||
return '[ayer a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||||
},
|
||||
lastWeek : function () {
|
||||
return '[el] dddd [pasado a la' + ((this.hours() !== 1) ? 's' : '') + '] LT';
|
||||
},
|
||||
sameElse : 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'en %s',
|
||||
past : 'hace %s',
|
||||
s : 'unos segundos',
|
||||
m : 'un minuto',
|
||||
mm : '%d minutos',
|
||||
h : 'una hora',
|
||||
hh : '%d horas',
|
||||
d : 'un día',
|
||||
dd : '%d días',
|
||||
M : 'un mes',
|
||||
MM : '%d meses',
|
||||
y : 'un año',
|
||||
yy : '%d años'
|
||||
},
|
||||
ordinalParse : /\d{1,2}º/,
|
||||
ordinal : '%dº',
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return es;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,106 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : finnish (fi)
|
||||
//! author : Tarmo Aidantausta : https://github.com/bleadof
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),
|
||||
numbersFuture = [
|
||||
'nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden',
|
||||
numbersPast[7], numbersPast[8], numbersPast[9]
|
||||
];
|
||||
function translate(number, withoutSuffix, key, isFuture) {
|
||||
var result = '';
|
||||
switch (key) {
|
||||
case 's':
|
||||
return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';
|
||||
case 'm':
|
||||
return isFuture ? 'minuutin' : 'minuutti';
|
||||
case 'mm':
|
||||
result = isFuture ? 'minuutin' : 'minuuttia';
|
||||
break;
|
||||
case 'h':
|
||||
return isFuture ? 'tunnin' : 'tunti';
|
||||
case 'hh':
|
||||
result = isFuture ? 'tunnin' : 'tuntia';
|
||||
break;
|
||||
case 'd':
|
||||
return isFuture ? 'päivän' : 'päivä';
|
||||
case 'dd':
|
||||
result = isFuture ? 'päivän' : 'päivää';
|
||||
break;
|
||||
case 'M':
|
||||
return isFuture ? 'kuukauden' : 'kuukausi';
|
||||
case 'MM':
|
||||
result = isFuture ? 'kuukauden' : 'kuukautta';
|
||||
break;
|
||||
case 'y':
|
||||
return isFuture ? 'vuoden' : 'vuosi';
|
||||
case 'yy':
|
||||
result = isFuture ? 'vuoden' : 'vuotta';
|
||||
break;
|
||||
}
|
||||
result = verbalNumber(number, isFuture) + ' ' + result;
|
||||
return result;
|
||||
}
|
||||
function verbalNumber(number, isFuture) {
|
||||
return number < 10 ? (isFuture ? numbersFuture[number] : numbersPast[number]) : number;
|
||||
}
|
||||
|
||||
var fi = moment.defineLocale('fi', {
|
||||
months : 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),
|
||||
monthsShort : 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),
|
||||
weekdays : 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),
|
||||
weekdaysShort : 'su_ma_ti_ke_to_pe_la'.split('_'),
|
||||
weekdaysMin : 'su_ma_ti_ke_to_pe_la'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'HH.mm',
|
||||
LTS : 'HH.mm.ss',
|
||||
L : 'DD.MM.YYYY',
|
||||
LL : 'Do MMMM[ta] YYYY',
|
||||
LLL : 'Do MMMM[ta] YYYY, [klo] HH.mm',
|
||||
LLLL : 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',
|
||||
l : 'D.M.YYYY',
|
||||
ll : 'Do MMM YYYY',
|
||||
lll : 'Do MMM YYYY, [klo] HH.mm',
|
||||
llll : 'ddd, Do MMM YYYY, [klo] HH.mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay : '[tänään] [klo] LT',
|
||||
nextDay : '[huomenna] [klo] LT',
|
||||
nextWeek : 'dddd [klo] LT',
|
||||
lastDay : '[eilen] [klo] LT',
|
||||
lastWeek : '[viime] dddd[na] [klo] LT',
|
||||
sameElse : 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : '%s päästä',
|
||||
past : '%s sitten',
|
||||
s : translate,
|
||||
m : translate,
|
||||
mm : translate,
|
||||
h : translate,
|
||||
hh : translate,
|
||||
d : translate,
|
||||
dd : translate,
|
||||
M : translate,
|
||||
MM : translate,
|
||||
y : translate,
|
||||
yy : translate
|
||||
},
|
||||
ordinalParse: /\d{1,2}\./,
|
||||
ordinal : '%d.',
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return fi;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,61 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : french (fr)
|
||||
//! author : John Fischer : https://github.com/jfroffice
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
var fr = moment.defineLocale('fr', {
|
||||
months : 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),
|
||||
monthsShort : 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),
|
||||
weekdays : 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),
|
||||
weekdaysShort : 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),
|
||||
weekdaysMin : 'Di_Lu_Ma_Me_Je_Ve_Sa'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'HH:mm',
|
||||
LTS : 'HH:mm:ss',
|
||||
L : 'DD/MM/YYYY',
|
||||
LL : 'D MMMM YYYY',
|
||||
LLL : 'D MMMM YYYY HH:mm',
|
||||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay: '[Aujourd\'hui à] LT',
|
||||
nextDay: '[Demain à] LT',
|
||||
nextWeek: 'dddd [à] LT',
|
||||
lastDay: '[Hier à] LT',
|
||||
lastWeek: 'dddd [dernier à] LT',
|
||||
sameElse: 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'dans %s',
|
||||
past : 'il y a %s',
|
||||
s : 'quelques secondes',
|
||||
m : 'une minute',
|
||||
mm : '%d minutes',
|
||||
h : 'une heure',
|
||||
hh : '%d heures',
|
||||
d : 'un jour',
|
||||
dd : '%d jours',
|
||||
M : 'un mois',
|
||||
MM : '%d mois',
|
||||
y : 'un an',
|
||||
yy : '%d ans'
|
||||
},
|
||||
ordinalParse: /\d{1,2}(er|)/,
|
||||
ordinal : function (number) {
|
||||
return number + (number === 1 ? 'er' : '');
|
||||
},
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return fr;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,60 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : norwegian bokmål (nb)
|
||||
//! authors : Espen Hovlandsdal : https://github.com/rexxars
|
||||
//! Sigurd Gartmann : https://github.com/sigurdga
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
var nb = moment.defineLocale('nb', {
|
||||
months : 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),
|
||||
monthsShort : 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),
|
||||
weekdays : 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),
|
||||
weekdaysShort : 'søn_man_tirs_ons_tors_fre_lør'.split('_'),
|
||||
weekdaysMin : 'sø_ma_ti_on_to_fr_lø'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'H.mm',
|
||||
LTS : 'H.mm.ss',
|
||||
L : 'DD.MM.YYYY',
|
||||
LL : 'D. MMMM YYYY',
|
||||
LLL : 'D. MMMM YYYY [kl.] H.mm',
|
||||
LLLL : 'dddd D. MMMM YYYY [kl.] H.mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay: '[i dag kl.] LT',
|
||||
nextDay: '[i morgen kl.] LT',
|
||||
nextWeek: 'dddd [kl.] LT',
|
||||
lastDay: '[i går kl.] LT',
|
||||
lastWeek: '[forrige] dddd [kl.] LT',
|
||||
sameElse: 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'om %s',
|
||||
past : 'for %s siden',
|
||||
s : 'noen sekunder',
|
||||
m : 'ett minutt',
|
||||
mm : '%d minutter',
|
||||
h : 'en time',
|
||||
hh : '%d timer',
|
||||
d : 'en dag',
|
||||
dd : '%d dager',
|
||||
M : 'en måned',
|
||||
MM : '%d måneder',
|
||||
y : 'ett år',
|
||||
yy : '%d år'
|
||||
},
|
||||
ordinalParse: /\d{1,2}\./,
|
||||
ordinal : '%d.',
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return nb;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,70 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : dutch (nl)
|
||||
//! author : Joris Röling : https://github.com/jjupiter
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),
|
||||
monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');
|
||||
|
||||
var nl = moment.defineLocale('nl', {
|
||||
months : 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),
|
||||
monthsShort : function (m, format) {
|
||||
if (/-MMM-/.test(format)) {
|
||||
return monthsShortWithoutDots[m.month()];
|
||||
} else {
|
||||
return monthsShortWithDots[m.month()];
|
||||
}
|
||||
},
|
||||
weekdays : 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),
|
||||
weekdaysShort : 'zo._ma._di._wo._do._vr._za.'.split('_'),
|
||||
weekdaysMin : 'Zo_Ma_Di_Wo_Do_Vr_Za'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'HH:mm',
|
||||
LTS : 'HH:mm:ss',
|
||||
L : 'DD-MM-YYYY',
|
||||
LL : 'D MMMM YYYY',
|
||||
LLL : 'D MMMM YYYY HH:mm',
|
||||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay: '[vandaag om] LT',
|
||||
nextDay: '[morgen om] LT',
|
||||
nextWeek: 'dddd [om] LT',
|
||||
lastDay: '[gisteren om] LT',
|
||||
lastWeek: '[afgelopen] dddd [om] LT',
|
||||
sameElse: 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'over %s',
|
||||
past : '%s geleden',
|
||||
s : 'een paar seconden',
|
||||
m : 'één minuut',
|
||||
mm : '%d minuten',
|
||||
h : 'één uur',
|
||||
hh : '%d uur',
|
||||
d : 'één dag',
|
||||
dd : '%d dagen',
|
||||
M : 'één maand',
|
||||
MM : '%d maanden',
|
||||
y : 'één jaar',
|
||||
yy : '%d jaar'
|
||||
},
|
||||
ordinalParse: /\d{1,2}(ste|de)/,
|
||||
ordinal : function (number) {
|
||||
return number + ((number === 1 || number === 8 || number >= 20) ? 'ste' : 'de');
|
||||
},
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return nl;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,104 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : polish (pl)
|
||||
//! author : Rafal Hirsz : https://github.com/evoL
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),
|
||||
monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');
|
||||
function plural(n) {
|
||||
return (n % 10 < 5) && (n % 10 > 1) && ((~~(n / 10) % 10) !== 1);
|
||||
}
|
||||
function translate(number, withoutSuffix, key) {
|
||||
var result = number + ' ';
|
||||
switch (key) {
|
||||
case 'm':
|
||||
return withoutSuffix ? 'minuta' : 'minutę';
|
||||
case 'mm':
|
||||
return result + (plural(number) ? 'minuty' : 'minut');
|
||||
case 'h':
|
||||
return withoutSuffix ? 'godzina' : 'godzinę';
|
||||
case 'hh':
|
||||
return result + (plural(number) ? 'godziny' : 'godzin');
|
||||
case 'MM':
|
||||
return result + (plural(number) ? 'miesiące' : 'miesięcy');
|
||||
case 'yy':
|
||||
return result + (plural(number) ? 'lata' : 'lat');
|
||||
}
|
||||
}
|
||||
|
||||
var pl = moment.defineLocale('pl', {
|
||||
months : function (momentToFormat, format) {
|
||||
if (format === '') {
|
||||
// Hack: if format empty we know this is used to generate
|
||||
// RegExp by moment. Give then back both valid forms of months
|
||||
// in RegExp ready format.
|
||||
return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';
|
||||
} else if (/D MMMM/.test(format)) {
|
||||
return monthsSubjective[momentToFormat.month()];
|
||||
} else {
|
||||
return monthsNominative[momentToFormat.month()];
|
||||
}
|
||||
},
|
||||
monthsShort : 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),
|
||||
weekdays : 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),
|
||||
weekdaysShort : 'nie_pon_wt_śr_czw_pt_sb'.split('_'),
|
||||
weekdaysMin : 'N_Pn_Wt_Śr_Cz_Pt_So'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'HH:mm',
|
||||
LTS : 'HH:mm:ss',
|
||||
L : 'DD.MM.YYYY',
|
||||
LL : 'D MMMM YYYY',
|
||||
LLL : 'D MMMM YYYY HH:mm',
|
||||
LLLL : 'dddd, D MMMM YYYY HH:mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay: '[Dziś o] LT',
|
||||
nextDay: '[Jutro o] LT',
|
||||
nextWeek: '[W] dddd [o] LT',
|
||||
lastDay: '[Wczoraj o] LT',
|
||||
lastWeek: function () {
|
||||
switch (this.day()) {
|
||||
case 0:
|
||||
return '[W zeszłą niedzielę o] LT';
|
||||
case 3:
|
||||
return '[W zeszłą środę o] LT';
|
||||
case 6:
|
||||
return '[W zeszłą sobotę o] LT';
|
||||
default:
|
||||
return '[W zeszły] dddd [o] LT';
|
||||
}
|
||||
},
|
||||
sameElse: 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'za %s',
|
||||
past : '%s temu',
|
||||
s : 'kilka sekund',
|
||||
m : translate,
|
||||
mm : translate,
|
||||
h : translate,
|
||||
hh : translate,
|
||||
d : '1 dzień',
|
||||
dd : '%d dni',
|
||||
M : 'miesiąc',
|
||||
MM : translate,
|
||||
y : 'rok',
|
||||
yy : translate
|
||||
},
|
||||
ordinalParse: /\d{1,2}\./,
|
||||
ordinal : '%d.',
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return pl;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,59 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : brazilian portuguese (pt-br)
|
||||
//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
var pt_br = moment.defineLocale('pt-br', {
|
||||
months : 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),
|
||||
monthsShort : 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),
|
||||
weekdays : 'Domingo_Segunda-Feira_Terça-Feira_Quarta-Feira_Quinta-Feira_Sexta-Feira_Sábado'.split('_'),
|
||||
weekdaysShort : 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),
|
||||
weekdaysMin : 'Dom_2ª_3ª_4ª_5ª_6ª_Sáb'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'HH:mm',
|
||||
LTS : 'HH:mm:ss',
|
||||
L : 'DD/MM/YYYY',
|
||||
LL : 'D [de] MMMM [de] YYYY',
|
||||
LLL : 'D [de] MMMM [de] YYYY [às] HH:mm',
|
||||
LLLL : 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay: '[Hoje às] LT',
|
||||
nextDay: '[Amanhã às] LT',
|
||||
nextWeek: 'dddd [às] LT',
|
||||
lastDay: '[Ontem às] LT',
|
||||
lastWeek: function () {
|
||||
return (this.day() === 0 || this.day() === 6) ?
|
||||
'[Último] dddd [às] LT' : // Saturday + Sunday
|
||||
'[Última] dddd [às] LT'; // Monday - Friday
|
||||
},
|
||||
sameElse: 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'em %s',
|
||||
past : '%s atrás',
|
||||
s : 'poucos segundos',
|
||||
m : 'um minuto',
|
||||
mm : '%d minutos',
|
||||
h : 'uma hora',
|
||||
hh : '%d horas',
|
||||
d : 'um dia',
|
||||
dd : '%d dias',
|
||||
M : 'um mês',
|
||||
MM : '%d meses',
|
||||
y : 'um ano',
|
||||
yy : '%d anos'
|
||||
},
|
||||
ordinalParse: /\d{1,2}º/,
|
||||
ordinal : '%dº'
|
||||
});
|
||||
|
||||
return pt_br;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,73 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : romanian (ro)
|
||||
//! author : Vlad Gurdiga : https://github.com/gurdiga
|
||||
//! author : Valentin Agachi : https://github.com/avaly
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
function relativeTimeWithPlural(number, withoutSuffix, key) {
|
||||
var format = {
|
||||
'mm': 'minute',
|
||||
'hh': 'ore',
|
||||
'dd': 'zile',
|
||||
'MM': 'luni',
|
||||
'yy': 'ani'
|
||||
},
|
||||
separator = ' ';
|
||||
if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {
|
||||
separator = ' de ';
|
||||
}
|
||||
return number + separator + format[key];
|
||||
}
|
||||
|
||||
var ro = moment.defineLocale('ro', {
|
||||
months : 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),
|
||||
monthsShort : 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),
|
||||
weekdays : 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),
|
||||
weekdaysShort : 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),
|
||||
weekdaysMin : 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'H:mm',
|
||||
LTS : 'H:mm:ss',
|
||||
L : 'DD.MM.YYYY',
|
||||
LL : 'D MMMM YYYY',
|
||||
LLL : 'D MMMM YYYY H:mm',
|
||||
LLLL : 'dddd, D MMMM YYYY H:mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay: '[azi la] LT',
|
||||
nextDay: '[mâine la] LT',
|
||||
nextWeek: 'dddd [la] LT',
|
||||
lastDay: '[ieri la] LT',
|
||||
lastWeek: '[fosta] dddd [la] LT',
|
||||
sameElse: 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'peste %s',
|
||||
past : '%s în urmă',
|
||||
s : 'câteva secunde',
|
||||
m : 'un minut',
|
||||
mm : relativeTimeWithPlural,
|
||||
h : 'o oră',
|
||||
hh : relativeTimeWithPlural,
|
||||
d : 'o zi',
|
||||
dd : relativeTimeWithPlural,
|
||||
M : 'o lună',
|
||||
MM : relativeTimeWithPlural,
|
||||
y : 'un an',
|
||||
yy : relativeTimeWithPlural
|
||||
},
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return ro;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,163 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : russian (ru)
|
||||
//! author : Viktorminator : https://github.com/Viktorminator
|
||||
//! Author : Menelion Elensúle : https://github.com/Oire
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
function plural(word, num) {
|
||||
var forms = word.split('_');
|
||||
return num % 10 === 1 && num % 100 !== 11 ? forms[0] : (num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2]);
|
||||
}
|
||||
function relativeTimeWithPlural(number, withoutSuffix, key) {
|
||||
var format = {
|
||||
'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',
|
||||
'hh': 'час_часа_часов',
|
||||
'dd': 'день_дня_дней',
|
||||
'MM': 'месяц_месяца_месяцев',
|
||||
'yy': 'год_года_лет'
|
||||
};
|
||||
if (key === 'm') {
|
||||
return withoutSuffix ? 'минута' : 'минуту';
|
||||
}
|
||||
else {
|
||||
return number + ' ' + plural(format[key], +number);
|
||||
}
|
||||
}
|
||||
function monthsCaseReplace(m, format) {
|
||||
var months = {
|
||||
'nominative': 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),
|
||||
'accusative': 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_')
|
||||
},
|
||||
nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
|
||||
'accusative' :
|
||||
'nominative';
|
||||
return months[nounCase][m.month()];
|
||||
}
|
||||
function monthsShortCaseReplace(m, format) {
|
||||
var monthsShort = {
|
||||
'nominative': 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),
|
||||
'accusative': 'янв_фев_мар_апр_мая_июня_июля_авг_сен_окт_ноя_дек'.split('_')
|
||||
},
|
||||
nounCase = (/D[oD]?(\[[^\[\]]*\]|\s+)+MMMM?/).test(format) ?
|
||||
'accusative' :
|
||||
'nominative';
|
||||
return monthsShort[nounCase][m.month()];
|
||||
}
|
||||
function weekdaysCaseReplace(m, format) {
|
||||
var weekdays = {
|
||||
'nominative': 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),
|
||||
'accusative': 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_')
|
||||
},
|
||||
nounCase = (/\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\] ?dddd/).test(format) ?
|
||||
'accusative' :
|
||||
'nominative';
|
||||
return weekdays[nounCase][m.day()];
|
||||
}
|
||||
|
||||
var ru = moment.defineLocale('ru', {
|
||||
months : monthsCaseReplace,
|
||||
monthsShort : monthsShortCaseReplace,
|
||||
weekdays : weekdaysCaseReplace,
|
||||
weekdaysShort : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
|
||||
weekdaysMin : 'вс_пн_вт_ср_чт_пт_сб'.split('_'),
|
||||
monthsParse : [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[й|я]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i],
|
||||
longDateFormat : {
|
||||
LT : 'HH:mm',
|
||||
LTS : 'HH:mm:ss',
|
||||
L : 'DD.MM.YYYY',
|
||||
LL : 'D MMMM YYYY г.',
|
||||
LLL : 'D MMMM YYYY г., HH:mm',
|
||||
LLLL : 'dddd, D MMMM YYYY г., HH:mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay: '[Сегодня в] LT',
|
||||
nextDay: '[Завтра в] LT',
|
||||
lastDay: '[Вчера в] LT',
|
||||
nextWeek: function () {
|
||||
return this.day() === 2 ? '[Во] dddd [в] LT' : '[В] dddd [в] LT';
|
||||
},
|
||||
lastWeek: function (now) {
|
||||
if (now.week() !== this.week()) {
|
||||
switch (this.day()) {
|
||||
case 0:
|
||||
return '[В прошлое] dddd [в] LT';
|
||||
case 1:
|
||||
case 2:
|
||||
case 4:
|
||||
return '[В прошлый] dddd [в] LT';
|
||||
case 3:
|
||||
case 5:
|
||||
case 6:
|
||||
return '[В прошлую] dddd [в] LT';
|
||||
}
|
||||
} else {
|
||||
if (this.day() === 2) {
|
||||
return '[Во] dddd [в] LT';
|
||||
} else {
|
||||
return '[В] dddd [в] LT';
|
||||
}
|
||||
}
|
||||
},
|
||||
sameElse: 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'через %s',
|
||||
past : '%s назад',
|
||||
s : 'несколько секунд',
|
||||
m : relativeTimeWithPlural,
|
||||
mm : relativeTimeWithPlural,
|
||||
h : 'час',
|
||||
hh : relativeTimeWithPlural,
|
||||
d : 'день',
|
||||
dd : relativeTimeWithPlural,
|
||||
M : 'месяц',
|
||||
MM : relativeTimeWithPlural,
|
||||
y : 'год',
|
||||
yy : relativeTimeWithPlural
|
||||
},
|
||||
meridiemParse: /ночи|утра|дня|вечера/i,
|
||||
isPM : function (input) {
|
||||
return /^(дня|вечера)$/.test(input);
|
||||
},
|
||||
meridiem : function (hour, minute, isLower) {
|
||||
if (hour < 4) {
|
||||
return 'ночи';
|
||||
} else if (hour < 12) {
|
||||
return 'утра';
|
||||
} else if (hour < 17) {
|
||||
return 'дня';
|
||||
} else {
|
||||
return 'вечера';
|
||||
}
|
||||
},
|
||||
ordinalParse: /\d{1,2}-(й|го|я)/,
|
||||
ordinal: function (number, period) {
|
||||
switch (period) {
|
||||
case 'M':
|
||||
case 'd':
|
||||
case 'DDD':
|
||||
return number + '-й';
|
||||
case 'D':
|
||||
return number + '-го';
|
||||
case 'w':
|
||||
case 'W':
|
||||
return number + '-я';
|
||||
default:
|
||||
return number;
|
||||
}
|
||||
},
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return ru;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,107 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : Serbian-cyrillic (sr-cyrl)
|
||||
//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
var translator = {
|
||||
words: { //Different grammatical cases
|
||||
m: ['један минут', 'једне минуте'],
|
||||
mm: ['минут', 'минуте', 'минута'],
|
||||
h: ['један сат', 'једног сата'],
|
||||
hh: ['сат', 'сата', 'сати'],
|
||||
dd: ['дан', 'дана', 'дана'],
|
||||
MM: ['месец', 'месеца', 'месеци'],
|
||||
yy: ['година', 'године', 'година']
|
||||
},
|
||||
correctGrammaticalCase: function (number, wordKey) {
|
||||
return number === 1 ? wordKey[0] : (number >= 2 && number <= 4 ? wordKey[1] : wordKey[2]);
|
||||
},
|
||||
translate: function (number, withoutSuffix, key) {
|
||||
var wordKey = translator.words[key];
|
||||
if (key.length === 1) {
|
||||
return withoutSuffix ? wordKey[0] : wordKey[1];
|
||||
} else {
|
||||
return number + ' ' + translator.correctGrammaticalCase(number, wordKey);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
var sr_cyrl = moment.defineLocale('sr-cyrl', {
|
||||
months: ['јануар', 'фебруар', 'март', 'април', 'мај', 'јун', 'јул', 'август', 'септембар', 'октобар', 'новембар', 'децембар'],
|
||||
monthsShort: ['јан.', 'феб.', 'мар.', 'апр.', 'мај', 'јун', 'јул', 'авг.', 'сеп.', 'окт.', 'нов.', 'дец.'],
|
||||
weekdays: ['недеља', 'понедељак', 'уторак', 'среда', 'четвртак', 'петак', 'субота'],
|
||||
weekdaysShort: ['нед.', 'пон.', 'уто.', 'сре.', 'чет.', 'пет.', 'суб.'],
|
||||
weekdaysMin: ['не', 'по', 'ут', 'ср', 'че', 'пе', 'су'],
|
||||
longDateFormat: {
|
||||
LT: 'H:mm',
|
||||
LTS : 'H:mm:ss',
|
||||
L: 'DD. MM. YYYY',
|
||||
LL: 'D. MMMM YYYY',
|
||||
LLL: 'D. MMMM YYYY H:mm',
|
||||
LLLL: 'dddd, D. MMMM YYYY H:mm'
|
||||
},
|
||||
calendar: {
|
||||
sameDay: '[данас у] LT',
|
||||
nextDay: '[сутра у] LT',
|
||||
nextWeek: function () {
|
||||
switch (this.day()) {
|
||||
case 0:
|
||||
return '[у] [недељу] [у] LT';
|
||||
case 3:
|
||||
return '[у] [среду] [у] LT';
|
||||
case 6:
|
||||
return '[у] [суботу] [у] LT';
|
||||
case 1:
|
||||
case 2:
|
||||
case 4:
|
||||
case 5:
|
||||
return '[у] dddd [у] LT';
|
||||
}
|
||||
},
|
||||
lastDay : '[јуче у] LT',
|
||||
lastWeek : function () {
|
||||
var lastWeekDays = [
|
||||
'[прошле] [недеље] [у] LT',
|
||||
'[прошлог] [понедељка] [у] LT',
|
||||
'[прошлог] [уторка] [у] LT',
|
||||
'[прошле] [среде] [у] LT',
|
||||
'[прошлог] [четвртка] [у] LT',
|
||||
'[прошлог] [петка] [у] LT',
|
||||
'[прошле] [суботе] [у] LT'
|
||||
];
|
||||
return lastWeekDays[this.day()];
|
||||
},
|
||||
sameElse : 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'за %s',
|
||||
past : 'пре %s',
|
||||
s : 'неколико секунди',
|
||||
m : translator.translate,
|
||||
mm : translator.translate,
|
||||
h : translator.translate,
|
||||
hh : translator.translate,
|
||||
d : 'дан',
|
||||
dd : translator.translate,
|
||||
M : 'месец',
|
||||
MM : translator.translate,
|
||||
y : 'годину',
|
||||
yy : translator.translate
|
||||
},
|
||||
ordinalParse: /\d{1,2}\./,
|
||||
ordinal : '%d.',
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 7 // The week that contains Jan 1st is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return sr_cyrl;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,66 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : swedish (sv)
|
||||
//! author : Jens Alm : https://github.com/ulmus
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
var sv = moment.defineLocale('sv', {
|
||||
months : 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),
|
||||
monthsShort : 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),
|
||||
weekdays : 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),
|
||||
weekdaysShort : 'sön_mån_tis_ons_tor_fre_lör'.split('_'),
|
||||
weekdaysMin : 'sö_må_ti_on_to_fr_lö'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'HH:mm',
|
||||
LTS : 'HH:mm:ss',
|
||||
L : 'YYYY-MM-DD',
|
||||
LL : 'D MMMM YYYY',
|
||||
LLL : 'D MMMM YYYY HH:mm',
|
||||
LLLL : 'dddd D MMMM YYYY HH:mm'
|
||||
},
|
||||
calendar : {
|
||||
sameDay: '[Idag] LT',
|
||||
nextDay: '[Imorgon] LT',
|
||||
lastDay: '[Igår] LT',
|
||||
nextWeek: '[På] dddd LT',
|
||||
lastWeek: '[I] dddd[s] LT',
|
||||
sameElse: 'L'
|
||||
},
|
||||
relativeTime : {
|
||||
future : 'om %s',
|
||||
past : 'för %s sedan',
|
||||
s : 'några sekunder',
|
||||
m : 'en minut',
|
||||
mm : '%d minuter',
|
||||
h : 'en timme',
|
||||
hh : '%d timmar',
|
||||
d : 'en dag',
|
||||
dd : '%d dagar',
|
||||
M : 'en månad',
|
||||
MM : '%d månader',
|
||||
y : 'ett år',
|
||||
yy : '%d år'
|
||||
},
|
||||
ordinalParse: /\d{1,2}(e|a)/,
|
||||
ordinal : function (number) {
|
||||
var b = number % 10,
|
||||
output = (~~(number % 100 / 10) === 1) ? 'e' :
|
||||
(b === 1) ? 'a' :
|
||||
(b === 2) ? 'a' :
|
||||
(b === 3) ? 'e' : 'e';
|
||||
return number + output;
|
||||
},
|
||||
week : {
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return sv;
|
||||
|
||||
}));
|
||||
@@ -0,0 +1,126 @@
|
||||
//! moment.js locale configuration
|
||||
//! locale : chinese (zh-cn)
|
||||
//! author : suupic : https://github.com/suupic
|
||||
//! author : Zeno Zeng : https://github.com/zenozeng
|
||||
|
||||
(function (global, factory) {
|
||||
typeof exports === 'object' && typeof module !== 'undefined' ? factory(require('../moment')) :
|
||||
typeof define === 'function' && define.amd ? define(['moment'], factory) :
|
||||
factory(global.moment)
|
||||
}(this, function (moment) { 'use strict';
|
||||
|
||||
|
||||
var zh_cn = moment.defineLocale('zh-cn', {
|
||||
months : '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),
|
||||
monthsShort : '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),
|
||||
weekdays : '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),
|
||||
weekdaysShort : '周日_周一_周二_周三_周四_周五_周六'.split('_'),
|
||||
weekdaysMin : '日_一_二_三_四_五_六'.split('_'),
|
||||
longDateFormat : {
|
||||
LT : 'Ah点mm分',
|
||||
LTS : 'Ah点m分s秒',
|
||||
L : 'YYYY-MM-DD',
|
||||
LL : 'YYYY年MMMD日',
|
||||
LLL : 'YYYY年MMMD日Ah点mm分',
|
||||
LLLL : 'YYYY年MMMD日ddddAh点mm分',
|
||||
l : 'YYYY-MM-DD',
|
||||
ll : 'YYYY年MMMD日',
|
||||
lll : 'YYYY年MMMD日Ah点mm分',
|
||||
llll : 'YYYY年MMMD日ddddAh点mm分'
|
||||
},
|
||||
meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,
|
||||
meridiemHour: function (hour, meridiem) {
|
||||
if (hour === 12) {
|
||||
hour = 0;
|
||||
}
|
||||
if (meridiem === '凌晨' || meridiem === '早上' ||
|
||||
meridiem === '上午') {
|
||||
return hour;
|
||||
} else if (meridiem === '下午' || meridiem === '晚上') {
|
||||
return hour + 12;
|
||||
} else {
|
||||
// '中午'
|
||||
return hour >= 11 ? hour : hour + 12;
|
||||
}
|
||||
},
|
||||
meridiem : function (hour, minute, isLower) {
|
||||
var hm = hour * 100 + minute;
|
||||
if (hm < 600) {
|
||||
return '凌晨';
|
||||
} else if (hm < 900) {
|
||||
return '早上';
|
||||
} else if (hm < 1130) {
|
||||
return '上午';
|
||||
} else if (hm < 1230) {
|
||||
return '中午';
|
||||
} else if (hm < 1800) {
|
||||
return '下午';
|
||||
} else {
|
||||
return '晚上';
|
||||
}
|
||||
},
|
||||
calendar : {
|
||||
sameDay : function () {
|
||||
return this.minutes() === 0 ? '[今天]Ah[点整]' : '[今天]LT';
|
||||
},
|
||||
nextDay : function () {
|
||||
return this.minutes() === 0 ? '[明天]Ah[点整]' : '[明天]LT';
|
||||
},
|
||||
lastDay : function () {
|
||||
return this.minutes() === 0 ? '[昨天]Ah[点整]' : '[昨天]LT';
|
||||
},
|
||||
nextWeek : function () {
|
||||
var startOfWeek, prefix;
|
||||
startOfWeek = moment().startOf('week');
|
||||
prefix = this.unix() - startOfWeek.unix() >= 7 * 24 * 3600 ? '[下]' : '[本]';
|
||||
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
|
||||
},
|
||||
lastWeek : function () {
|
||||
var startOfWeek, prefix;
|
||||
startOfWeek = moment().startOf('week');
|
||||
prefix = this.unix() < startOfWeek.unix() ? '[上]' : '[本]';
|
||||
return this.minutes() === 0 ? prefix + 'dddAh点整' : prefix + 'dddAh点mm';
|
||||
},
|
||||
sameElse : 'LL'
|
||||
},
|
||||
ordinalParse: /\d{1,2}(日|月|周)/,
|
||||
ordinal : function (number, period) {
|
||||
switch (period) {
|
||||
case 'd':
|
||||
case 'D':
|
||||
case 'DDD':
|
||||
return number + '日';
|
||||
case 'M':
|
||||
return number + '月';
|
||||
case 'w':
|
||||
case 'W':
|
||||
return number + '周';
|
||||
default:
|
||||
return number;
|
||||
}
|
||||
},
|
||||
relativeTime : {
|
||||
future : '%s内',
|
||||
past : '%s前',
|
||||
s : '几秒',
|
||||
m : '1 分钟',
|
||||
mm : '%d 分钟',
|
||||
h : '1 小时',
|
||||
hh : '%d 小时',
|
||||
d : '1 天',
|
||||
dd : '%d 天',
|
||||
M : '1 个月',
|
||||
MM : '%d 个月',
|
||||
y : '1 年',
|
||||
yy : '%d 年'
|
||||
},
|
||||
week : {
|
||||
// GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效
|
||||
dow : 1, // Monday is the first day of the week.
|
||||
doy : 4 // The week that contains Jan 4th is the first week of the year.
|
||||
}
|
||||
});
|
||||
|
||||
return zh_cn;
|
||||
|
||||
}));
|
||||
@@ -1,5 +0,0 @@
|
||||
/*! Respond.js v1.4.2: min/max-width media query polyfill * Copyright 2013 Scott Jehl
|
||||
* Licensed under https://github.com/scottjehl/Respond/blob/master/LICENSE-MIT
|
||||
* */
|
||||
|
||||
!function(a){"use strict";a.matchMedia=a.matchMedia||function(a){var b,c=a.documentElement,d=c.firstElementChild||c.firstChild,e=a.createElement("body"),f=a.createElement("div");return f.id="mq-test-1",f.style.cssText="position:absolute;top:-100em",e.style.background="none",e.appendChild(f),function(a){return f.innerHTML='­<style media="'+a+'"> #mq-test-1 { width: 42px; }</style>',c.insertBefore(e,d),b=42===f.offsetWidth,c.removeChild(e),{matches:b,media:a}}}(a.document)}(this),function(a){"use strict";function b(){u(!0)}var c={};a.respond=c,c.update=function(){};var d=[],e=function(){var b=!1;try{b=new a.XMLHttpRequest}catch(c){b=new a.ActiveXObject("Microsoft.XMLHTTP")}return function(){return b}}(),f=function(a,b){var c=e();c&&(c.open("GET",a,!0),c.onreadystatechange=function(){4!==c.readyState||200!==c.status&&304!==c.status||b(c.responseText)},4!==c.readyState&&c.send(null))};if(c.ajax=f,c.queue=d,c.regex={media:/@media[^\{]+\{([^\{\}]*\{[^\}\{]*\})+/gi,keyframes:/@(?:\-(?:o|moz|webkit)\-)?keyframes[^\{]+\{(?:[^\{\}]*\{[^\}\{]*\})+[^\}]*\}/gi,urls:/(url\()['"]?([^\/\)'"][^:\)'"]+)['"]?(\))/g,findStyles:/@media *([^\{]+)\{([\S\s]+?)$/,only:/(only\s+)?([a-zA-Z]+)\s?/,minw:/\([\s]*min\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/,maxw:/\([\s]*max\-width\s*:[\s]*([\s]*[0-9\.]+)(px|em)[\s]*\)/},c.mediaQueriesSupported=a.matchMedia&&null!==a.matchMedia("only all")&&a.matchMedia("only all").matches,!c.mediaQueriesSupported){var g,h,i,j=a.document,k=j.documentElement,l=[],m=[],n=[],o={},p=30,q=j.getElementsByTagName("head")[0]||k,r=j.getElementsByTagName("base")[0],s=q.getElementsByTagName("link"),t=function(){var a,b=j.createElement("div"),c=j.body,d=k.style.fontSize,e=c&&c.style.fontSize,f=!1;return b.style.cssText="position:absolute;font-size:1em;width:1em",c||(c=f=j.createElement("body"),c.style.background="none"),k.style.fontSize="100%",c.style.fontSize="100%",c.appendChild(b),f&&k.insertBefore(c,k.firstChild),a=b.offsetWidth,f?k.removeChild(c):c.removeChild(b),k.style.fontSize=d,e&&(c.style.fontSize=e),a=i=parseFloat(a)},u=function(b){var c="clientWidth",d=k[c],e="CSS1Compat"===j.compatMode&&d||j.body[c]||d,f={},o=s[s.length-1],r=(new Date).getTime();if(b&&g&&p>r-g)return a.clearTimeout(h),h=a.setTimeout(u,p),void 0;g=r;for(var v in l)if(l.hasOwnProperty(v)){var w=l[v],x=w.minw,y=w.maxw,z=null===x,A=null===y,B="em";x&&(x=parseFloat(x)*(x.indexOf(B)>-1?i||t():1)),y&&(y=parseFloat(y)*(y.indexOf(B)>-1?i||t():1)),w.hasquery&&(z&&A||!(z||e>=x)||!(A||y>=e))||(f[w.media]||(f[w.media]=[]),f[w.media].push(m[w.rules]))}for(var C in n)n.hasOwnProperty(C)&&n[C]&&n[C].parentNode===q&&q.removeChild(n[C]);n.length=0;for(var D in f)if(f.hasOwnProperty(D)){var E=j.createElement("style"),F=f[D].join("\n");E.type="text/css",E.media=D,q.insertBefore(E,o.nextSibling),E.styleSheet?E.styleSheet.cssText=F:E.appendChild(j.createTextNode(F)),n.push(E)}},v=function(a,b,d){var e=a.replace(c.regex.keyframes,"").match(c.regex.media),f=e&&e.length||0;b=b.substring(0,b.lastIndexOf("/"));var g=function(a){return a.replace(c.regex.urls,"$1"+b+"$2$3")},h=!f&&d;b.length&&(b+="/"),h&&(f=1);for(var i=0;f>i;i++){var j,k,n,o;h?(j=d,m.push(g(a))):(j=e[i].match(c.regex.findStyles)&&RegExp.$1,m.push(RegExp.$2&&g(RegExp.$2))),n=j.split(","),o=n.length;for(var p=0;o>p;p++)k=n[p],l.push({media:k.split("(")[0].match(c.regex.only)&&RegExp.$2||"all",rules:m.length-1,hasquery:k.indexOf("(")>-1,minw:k.match(c.regex.minw)&&parseFloat(RegExp.$1)+(RegExp.$2||""),maxw:k.match(c.regex.maxw)&&parseFloat(RegExp.$1)+(RegExp.$2||"")})}u()},w=function(){if(d.length){var b=d.shift();f(b.href,function(c){v(c,b.href,b.media),o[b.href]=!0,a.setTimeout(function(){w()},0)})}},x=function(){for(var b=0;b<s.length;b++){var c=s[b],e=c.href,f=c.media,g=c.rel&&"stylesheet"===c.rel.toLowerCase();e&&g&&!o[e]&&(c.styleSheet&&c.styleSheet.rawCssText?(v(c.styleSheet.rawCssText,e,f),o[e]=!0):(!/^([a-zA-Z:]*\/\/)/.test(e)&&!r||e.replace(RegExp.$1,"").split("/")[0]===a.location.host)&&("//"===e.substring(0,2)&&(e=a.location.protocol+e),d.push({href:e,media:f})))}w()};x(),c.update=x,c.getEmValue=t,a.addEventListener?a.addEventListener("resize",b,!1):a.attachEvent&&a.attachEvent("onresize",b)}}(this);
|
||||
@@ -22,12 +22,15 @@ nav .btn {
|
||||
}
|
||||
|
||||
a, a:active, a:hover, a:focus,
|
||||
.hoverbutton.glyphicon-play,
|
||||
.hover-button.glyphicon-play,
|
||||
.dropdown-menu>li>a,
|
||||
legend,
|
||||
#modal_options legend label,
|
||||
#modal_options legend a,
|
||||
#modal_item_files .item-files-table .progress small {
|
||||
#modal-options legend label,
|
||||
#modal-options legend a,
|
||||
#modal-item-files .item-files-table .progress small,
|
||||
#modal-options .options-switch label,
|
||||
#modal-options #options-orphans .remove-all-orphaned,
|
||||
.text-muted {
|
||||
color: #EBEBEB;
|
||||
}
|
||||
|
||||
@@ -40,12 +43,21 @@ legend,
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.hoverbutton {
|
||||
.main-restarting {
|
||||
color: white !important;
|
||||
}
|
||||
|
||||
.hover-button {
|
||||
opacity: 0.7;
|
||||
}
|
||||
|
||||
.progress {
|
||||
background-color: #DADADA;
|
||||
}
|
||||
|
||||
.container,
|
||||
.modal-body {
|
||||
.modal-body,
|
||||
.modal-footer {
|
||||
background-color: #727272;
|
||||
}
|
||||
|
||||
@@ -64,10 +76,6 @@ legend,
|
||||
color: black;
|
||||
}
|
||||
|
||||
.progress {
|
||||
background-color: #B0B0B0;
|
||||
}
|
||||
|
||||
.processing-download > div {
|
||||
background-color: #EBEBEB;
|
||||
}
|
||||
@@ -94,7 +102,9 @@ input.form-control,
|
||||
.input-group-addon,
|
||||
select.form-control,
|
||||
.main-content .btn-default,
|
||||
.modal-body .btn-default {
|
||||
.modal-body .btn-default,
|
||||
.modal-footer .btn-default,
|
||||
#modal-options .options-function-box .input-group-addon {
|
||||
background-color: #555555;
|
||||
color: #EBEBEB;
|
||||
}
|
||||
@@ -114,7 +124,8 @@ input.form-control,
|
||||
.input-group-addon,
|
||||
select.form-control,
|
||||
.main-content .btn-default,
|
||||
.modal-body .btn-default {
|
||||
.modal-body .btn-default,
|
||||
.modal-footer .btn-default {
|
||||
border-color: #252525 !important;
|
||||
}
|
||||
|
||||
@@ -127,13 +138,15 @@ tbody .caret {
|
||||
}
|
||||
|
||||
.info-container,
|
||||
#modal_options .options-status-box small {
|
||||
#modal-options .options-status-box small,
|
||||
#modal-options #options-status small,
|
||||
#modal-options .tab-content h4 {
|
||||
color: #D6D6D6;
|
||||
}
|
||||
|
||||
td.name .name-ratings span,
|
||||
.navbar-nav .open .dropdown-menu>li>a,
|
||||
.modal-backdrop.in,
|
||||
.dropdown-header,
|
||||
pre {
|
||||
color: #EBEBEB !important;
|
||||
opacity: 1 !important;
|
||||
@@ -148,15 +161,27 @@ legend, hr {
|
||||
border-color: #969696
|
||||
}
|
||||
|
||||
#modal_help table td,
|
||||
#modal_help table {
|
||||
#modal-help table td,
|
||||
#modal-help table {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
#modal_item_files .item-files-table td {
|
||||
#modal-item-files .item-files-table td {
|
||||
border-bottom: none !important;
|
||||
}
|
||||
|
||||
.queue-item .dropdown-menu:before,
|
||||
.history-item .dropdown-menu:before,
|
||||
.info-container-box-sorting .dropdown-menu:before {
|
||||
|
||||
}
|
||||
|
||||
.queue-item .dropdown-menu:after,
|
||||
.history-item .dropdown-menu:after,
|
||||
.info-container-box-sorting .dropdown-menu:after {
|
||||
border-bottom-color: #666;
|
||||
}
|
||||
|
||||
/* Placeholders - Will not work if grouped! */
|
||||
::-webkit-input-placeholder {
|
||||
color: #EBEBEB !important;
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
.history-ratings-report .ratings-report-hidden {
|
||||
display: block !important;
|
||||
}
|
||||
|
||||
.history-ratings-basic input[type="radio"] {
|
||||
display: block !important;
|
||||
}
|
||||
@@ -29,6 +29,10 @@
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
.main-menu-link .icon-bar:first-child {
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.navbar-inverse .navbar-nav .open .dropdown-menu .divider {
|
||||
background-color: #e5e5e5;
|
||||
}
|
||||
@@ -40,7 +44,7 @@ h2 {
|
||||
|
||||
.max-speed-input {
|
||||
margin-top: 1px !important;
|
||||
margin-left: 0 !important;
|
||||
margin-left: -5px !important;
|
||||
width: 300px !important;
|
||||
}
|
||||
|
||||
@@ -105,7 +109,7 @@ h2 {
|
||||
height: 5em;
|
||||
}
|
||||
|
||||
.queue-table .nodownloads tr td {
|
||||
.queue-table .no-downloads tr td {
|
||||
height: 2em;
|
||||
}
|
||||
|
||||
@@ -125,25 +129,23 @@ h2 {
|
||||
margin: 0px 8px;
|
||||
}
|
||||
|
||||
.queue-table td.name .row-wrap-text {
|
||||
max-width: 70% !important;
|
||||
.queue-table td.name .row-wrap-text,
|
||||
.queue-table td.name:hover .row-wrap-text {
|
||||
max-width: calc(100% - 45px);
|
||||
}
|
||||
|
||||
tr.queueitem>td:first-child>a {
|
||||
tr.queue-item>td:first-child>a {
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
||||
/* For Iphone 4/5 */
|
||||
@media only screen and (max-width : 320px) {
|
||||
.queue-table td.name .row-wrap-text {
|
||||
max-width: 60% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.queue-table td.name .name-options {
|
||||
display: block;
|
||||
}
|
||||
|
||||
.queue-table td.name .name-options small {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.queue-table td.name .glyphicon-folder-open {
|
||||
width: 1.5em;
|
||||
margin-left: 1px;
|
||||
@@ -154,13 +156,18 @@ tr.queueitem>td:first-child>a {
|
||||
}
|
||||
|
||||
.multioperations-selector .add-nzb-inputbox-small {
|
||||
width: 52px;
|
||||
width: 72px;
|
||||
}
|
||||
|
||||
.multioperations-selector .add-nzb-inputbox-clear {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
.multioperations-selector .add-nzb-inputbox-options {
|
||||
width: 55px;
|
||||
margin-right: -3px;
|
||||
}
|
||||
|
||||
.table-messages strong {
|
||||
margin-right: 5px;
|
||||
min-width: 0px;
|
||||
@@ -171,12 +178,12 @@ tr.queueitem>td:first-child>a {
|
||||
}
|
||||
|
||||
.name-has-ratings .row-wrap-text {
|
||||
max-width: 97% !important;
|
||||
max-width: calc(100% - 1px) !important;
|
||||
}
|
||||
|
||||
.history-table .delete .dropdown-menu {
|
||||
width: 96%;
|
||||
left: 2%;
|
||||
width: 100%;
|
||||
left: 0;
|
||||
right: inherit;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
@@ -197,35 +204,67 @@ tr.queueitem>td:first-child>a {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
.info-container .info-container-box-sorting .dropdown-menu {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
||||
.history-item .dropdown-menu:before {
|
||||
right: 37px;
|
||||
}
|
||||
|
||||
.history-item .dropdown-menu:after {
|
||||
right: 38px;
|
||||
}
|
||||
|
||||
/**
|
||||
MODALS
|
||||
**/
|
||||
/* Only remove on mobiles, not on iPad */
|
||||
@media only screen and (max-device-width:760px) {
|
||||
.modal-dialog {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.modal-dialog .modal-content {
|
||||
border-left: 0;
|
||||
border-right: 0;
|
||||
border-top: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.modal.fade .modal-dialog, .modal.in .modal-dialog {
|
||||
transform: translate(0, 0);
|
||||
}
|
||||
|
||||
.modal-header .close {
|
||||
font-size: 33px;
|
||||
line-height: 0.8em;
|
||||
opacity: 1 !important;
|
||||
margin-right: 4px !important;
|
||||
}
|
||||
|
||||
#modal_options .modal-header a {
|
||||
#modal-options .modal-header a {
|
||||
opacity: 1;
|
||||
font-size: 1.3em;
|
||||
font-size: 1.2em;
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
#modal_options .col-sm-5 {
|
||||
#modal-options .col-sm-6:first-of-type {
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
#modal_options .form-checkbox input[type="checkbox"] {
|
||||
#modal-options .options-function-box {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
#modal_item_files .input-group {
|
||||
#modal-options .options-function-box .col-sm-6 {
|
||||
padding-left: 15px !important;
|
||||
padding-right: 15px !important;
|
||||
}
|
||||
|
||||
#modal-options .form-checkbox input[type="checkbox"] {
|
||||
margin-top: 0;
|
||||
}
|
||||
|
||||
#modal-item-files .form-group {
|
||||
clear: left;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
@@ -49,6 +49,8 @@
|
||||
"localipv4": "$localipv4",
|
||||
"publicipv4": "$publicipv4",
|
||||
"ipv6": "$ipv6",
|
||||
"pystone": "$pystone",
|
||||
"cpumodel": "$cpumodel",
|
||||
"dnslookup": "$dnslookup",
|
||||
<!--#set $downloaddir = $downloaddir.replace('\\','\\\\')#-->
|
||||
"downloaddir": "$downloaddir",
|
||||
|
||||