1
0
mirror of https://github.com/moparisthebest/SickRage synced 2024-12-12 11:02:21 -05:00

Feature/config_provider_improvements

* Styled config_providers to match new config_general styling
* Removed qtip from providers and converted back to a tab
* Removed superfish-1.4.8.js and supersubs-0.2b.js as they no longer
break provider sorting with qtip removed and is no longer required due
to new UI
This commit is contained in:
Supremicus 2014-10-29 10:50:38 +10:00
parent 4ab2b141a1
commit 6489905690
9 changed files with 325 additions and 583 deletions

View File

@ -1,4 +1,4 @@
### 0.x.x (2014-10-27 xx:xx:xx UTC)
### 0.x.x (2014-10-29 xx:xx:xx UTC)
* Add Bootstrap for UI features
* Change UI to resize fluidly on different display sizes, fixes the issue where top menu items would disappear on smaller screens.
@ -26,6 +26,9 @@
* Fix Layout "Poster" sort of Paused, Ended, and Continuing shows as they were random
* Fix Layout "Simple" sort of tvrage "New" and "Returning" series by changing status column text to "Continuing"
* Add dark spinner to "Add New Show" (searching indexers), "Add existing shows" (Loading Folders), Coming Eps and all config pages (when saving)
* Styled config_providers to match new config_general styling
* Removed qtip from providers and converted back to a tab
* Removed superfish-1.4.8.js and supersubs-0.2b.js as they no longer break provider sorting with qtip removed and is no longer required due to new UI
### 0.2.1 (2014-10-22 06:41:00 UTC)

View File

@ -1498,7 +1498,7 @@ config*.tmpl
margin-right: 6px;
}
#config .nocheck, #config div #customQuality, .metadataDiv, .providerDiv {
#config .nocheck, #config div #customQuality, .metadataDiv {
padding-left: 20px;
}

View File

@ -1475,7 +1475,7 @@ config*.tmpl
margin-right: 6px;
}
#config .nocheck, #config div #customQuality, .metadataDiv, .providerDiv {
#config .nocheck, #config div #customQuality, .metadataDiv {
padding-left: 20px;
}

View File

@ -1534,7 +1534,7 @@ config*.tmpl
float: left;
}
#config .nocheck, #config div #customQuality, .metadataDiv, .providerDiv {
#config .nocheck, #config div #customQuality, .metadataDiv {
padding-left: 20px;
}

View File

@ -50,7 +50,7 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
<div id="config-components">
<ul>
<li><a href="#core-component-group1">Provider Priorities</a></li>
<li><a href="#core-component-group2">Configure Built-In Providers</a></li>
<li><a href="#core-component-group2">Provider Options</a></li>
#if $sickbeard.USE_NZBS
<li><a href="#core-component-group3">Configure Custom Newznab Providers</a></li>
#end if
@ -63,7 +63,7 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
<div class="component-group-desc">
<h3>Provider Priorities</h3>
<p>Check off, configure and drag the providers into the order you want them to be used.</p>
<p>Check off and drag the providers into the order you want them to be used.</p>
<p>At least one provider is required but two are recommended.</p>
#if not $sickbeard.USE_NZBS or not $sickbeard.USE_TORRENTS:
@ -106,14 +106,15 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
<div id="core-component-group2" class="component-group">
<div class="component-group-desc">
<h3>Configure Built-In<br />Providers</h3>
<h3>Provider Options</h3>
<p>Configure individual provider settings here.</p>
<p>Check with provider's website on how to obtain an API key if needed.</p>
</div>
<fieldset class="component-group-list">
<div class="field-pair">
<label for="editAProvider">
<span class="component-title jumbo">Configure Provider:</span>
<span class="component-title">Configure provider:</span>
<span class="component-desc">
#set $provider_config_list = []
#for $curProvider in $sickbeard.providers.sortedProviderList():
@ -126,8 +127,8 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#end for
#if $provider_config_list:
<select id="editAProvider">
#for $cur_provider in $provider_config_list + [$curProvider for $curProvider in $sickbeard.newznabProviderList if $sickbeard.USE_NZBS]:
<select id="editAProvider" class="form-control input-sm">
#for $cur_provider in $provider_config_list:
<option value="$cur_provider.getID()">$cur_provider.name</option>
#end for
</select>
@ -144,26 +145,30 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
<div class="providerDiv" id="${curNewznabProvider.getID()}Div">
#if $curNewznabProvider.default and $curNewznabProvider.needs_auth
<div class="field-pair">
<label>
<label for="${curNewznabProvider.getID()}_url">
<span class="component-title">URL:</span>
<input class="component-desc" type="text" id="${curNewznabProvider.getID()}_url" value="$curNewznabProvider.url" size="40" disabled/>
<span class="component-desc">
<input type="text" id="${curNewznabProvider.getID()}_url" value="$curNewznabProvider.url" class="form-control input-sm input350" disabled/>
</span>
</label>
</div>
<div class="field-pair">
<label>
<span class="component-title">API Key:</span>
<input class="component-desc newznab_key" type="text" id="${curNewznabProvider.getID()}_hash" value="$curNewznabProvider.key" newznab_name="${curNewznabProvider.getID()}_hash" size="40" />
<label for="${curNewznabProvider.getID()}_hash">
<span class="component-title">API key:</span>
<span class="component-desc">
<input type="text" id="${curNewznabProvider.getID()}_hash" value="$curNewznabProvider.key" newznab_name="${curNewznabProvider.getID()}_hash" class="newznab_key form-control input-sm input350" />
</span>
</label>
</div>
#end if
#if $hasattr($curNewznabProvider, 'enable_daily'):
<div class="field-pair">
<input type="checkbox" name="${curNewznabProvider.getID()}_enable_daily" id="${curNewznabProvider.getID()}_enable_daily" #if $curNewznabProvider.enable_daily then "checked=\"checked\"" else ""#/>
<label for="${curNewznabProvider.getID()}_enable_daily">
<span class="component-title">Enable Daily Searches</span>
<span class="component-title">Enable daily searches</span>
<span class="component-desc">
Enables daily searches
<input type="checkbox" name="${curNewznabProvider.getID()}_enable_daily" id="${curNewznabProvider.getID()}_enable_daily" #if $curNewznabProvider.enable_daily then "checked=\"checked\"" else ""#/>
<p>enable provider to perform daily searches.</p>
</span>
</label>
</div>
@ -171,11 +176,11 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#if $hasattr($curNewznabProvider, 'enable_backlog'):
<div class="field-pair">
<input type="checkbox" name="${curNewznabProvider.getID()}_enable_backlog" id="${curNewznabProvider.getID()}_enable_backlog" #if $curNewznabProvider.enable_backlog then "checked=\"checked\"" else ""#/>
<label for="${curNewznabProvider.getID()}_enable_backlog">
<span class="component-title">Enable Backlog Searches</span>
<span class="component-title">Enable backlog searches</span>
<span class="component-desc">
Enables backlog searches
<input type="checkbox" name="${curNewznabProvider.getID()}_enable_backlog" id="${curNewznabProvider.getID()}_enable_backlog" #if $curNewznabProvider.enable_backlog then "checked=\"checked\"" else ""#/>
<p>enable provider to perform backlog searches.</p>
</span>
</label>
</div>
@ -183,11 +188,11 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#if $hasattr($curNewznabProvider, 'search_fallback'):
<div class="field-pair">
<input type="checkbox" name="${curNewznabProvider.getID()}_search_fallback" id="${curNewznabProvider.getID()}_search_fallback" #if $curNewznabProvider.search_fallback then "checked=\"checked\"" else ""#/>
<label for="${curNewznabProvider.getID()}_search_fallback">
<span class="component-title">Season Search Fallback</span>
<span class="component-title">Season search fallback</span>
<span class="component-desc">
When searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.
<input type="checkbox" name="${curNewznabProvider.getID()}_search_fallback" id="${curNewznabProvider.getID()}_search_fallback" #if $curNewznabProvider.search_fallback then "checked=\"checked\"" else ""#/>
<p>when searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.</p>
</span>
</label>
</div>
@ -195,16 +200,22 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#if $hasattr($curNewznabProvider, 'search_mode'):
<div class="field-pair">
<label class="nocheck">
<span class="component-title">Season Search Mode</span>
<span class="component-desc2">
When searching for complete seasons you can choose to have it look for season packs ONLY or choose to have it build a complete season from just single episodes.
<label>
<span class="component-title">Season search mode</span>
<span class="component-desc">
<p>when searching for complete seasons you can choose to have it look for season packs only, or choose to have it build a complete season from just single episodes.</p>
</span>
</label>
<label>
<span class="component-title"></span>
<input type="radio" name="${curNewznabProvider.getID()}_search_mode" id="${curNewznabProvider.getID()}_search_mode_sponly" value="sponly" class="radio" #if $curNewznabProvider.search_mode=="sponly" then "checked=\"checked\"" else ""# />Season Packs ONLY!<br />
<span class="component-desc">
<input type="radio" name="${curNewznabProvider.getID()}_search_mode" id="${curNewznabProvider.getID()}_search_mode_sponly" value="sponly" #if $curNewznabProvider.search_mode=="sponly" then "checked=\"checked\"" else ""# />season packs only.
</span>
</label>
<label>
<span class="component-title"></span>
<input type="radio" name="${curNewznabProvider.getID()}_search_mode" id="${curNewznabProvider.getID()}_search_mode_eponly" value="eponly" class="radio" #if $curNewznabProvider.search_mode=="eponly" then "checked=\"checked\"" else ""# />Episodes ONLY!<br />
<span class="component-desc">
<input type="radio" name="${curNewznabProvider.getID()}_search_mode" id="${curNewznabProvider.getID()}_search_mode_eponly" value="eponly" #if $curNewznabProvider.search_mode=="eponly" then "checked=\"checked\"" else ""# />episodes only.
</span>
</label>
</div>
@ -213,22 +224,26 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
</div>
#end for
#for $curNzbProvider in [$curProvider for $curProvider in $sickbeard.providers.sortedProviderList() if $curProvider.providerType == $GenericProvider.NZB]:
#for $curNzbProvider in [$curProvider for $curProvider in $sickbeard.providers.sortedProviderList() if $curProvider.providerType == $GenericProvider.NZB and $curProvider not in $sickbeard.newznabProviderList]:
<div class="providerDiv" id="${curNzbProvider.getID()}Div">
#if $hasattr($curNzbProvider, 'username'):
<div class="field-pair">
<label>
<span class="component-title">UserName:</span>
<input class="component-desc" type="text" name="${curNzbProvider.getID()}_username" value="$curNzbProvider.username" size="40" />
<label for="${curNzbProvider.getID()}_username">
<span class="component-title">Username:</span>
<span class="component-desc">
<input type="text" name="${curNzbProvider.getID()}_username" value="$curNzbProvider.username" class="form-control input-sm input350" />
</span>
</label>
</div>
#end if
#if $hasattr($curNzbProvider, 'api_key'):
<div class="field-pair">
<label>
<span class="component-title">API Key:</span>
<input class="component-desc" type="text" name="${curNzbProvider.getID()}_api_key" value="$curNzbProvider.api_key" size="40" />
<label for="${curNzbProvider.getID()}_api_key">
<span class="component-title">API key:</span>
<span class="component-desc">
<input type="text" name="${curNzbProvider.getID()}_api_key" value="$curNzbProvider.api_key" class="form-control input-sm input350" />
</span>
</label>
</div>
#end if
@ -236,11 +251,11 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#if $hasattr($curNzbProvider, 'enable_daily'):
<div class="field-pair">
<input type="checkbox" name="${curNzbProvider.getID()}_enable_daily" id="${curNzbProvider.getID()}_enable_daily" #if $curNzbProvider.enable_daily then "checked=\"checked\"" else ""#/>
<label for="${curNzbProvider.getID()}_enable_daily">
<span class="component-title">Enable Daily Searches</span>
<span class="component-title">Enable daily searches</span>
<span class="component-desc">
Enables daily searches
<input type="checkbox" name="${curNzbProvider.getID()}_enable_daily" id="${curNzbProvider.getID()}_enable_daily" #if $curNzbProvider.enable_daily then "checked=\"checked\"" else ""#/>
<p>enable provider to perform daily searches.</p>
</span>
</label>
</div>
@ -248,11 +263,11 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#if $hasattr($curNzbProvider, 'enable_backlog'):
<div class="field-pair">
<input type="checkbox" name="${curNzbProvider.getID()}_enable_backlog" id="${curNzbProvider.getID()}_enable_backlog" #if $curNzbProvider.enable_backlog then "checked=\"checked\"" else ""#/>
<label for="${curNzbProvider.getID()}_enable_backlog">
<span class="component-title">Enable Backlog Searches</span>
<span class="component-title">Enable backlog searches</span>
<span class="component-desc">
Enables backlog searches
<input type="checkbox" name="${curNzbProvider.getID()}_enable_backlog" id="${curNzbProvider.getID()}_enable_backlog" #if $curNzbProvider.enable_backlog then "checked=\"checked\"" else ""#/>
<p>enable provider to perform backlog searches.</p>
</span>
</label>
</div>
@ -260,11 +275,11 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#if $hasattr($curNzbProvider, 'search_fallback'):
<div class="field-pair">
<input type="checkbox" name="${curNzbProvider.getID()}_search_fallback" id="${curNzbProvider.getID()}_search_fallback" #if $curNzbProvider.search_fallback then "checked=\"checked\"" else ""#/>
<label for="${curNzbProvider.getID()}_search_fallback">
<span class="component-title">Season Search Fallback</span>
<span class="component-title">Season search fallback</span>
<span class="component-desc">
When searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.
<input type="checkbox" name="${curNzbProvider.getID()}_search_fallback" id="${curNzbProvider.getID()}_search_fallback" #if $curNzbProvider.search_fallback then "checked=\"checked\"" else ""#/>
<p>when searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.</p>
</span>
</label>
</div>
@ -272,16 +287,22 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#if $hasattr($curNzbProvider, 'search_mode'):
<div class="field-pair">
<label class="nocheck">
<span class="component-title">Season Search Mode</span>
<span class="component-desc2">
When searching for complete seasons you can choose to have it look for season packs ONLY or choose to have it build a complete season from just single episodes.
<label>
<span class="component-title">Season search mode</span>
<span class="component-desc">
<p>when searching for complete seasons you can choose to have it look for season packs only, or choose to have it build a complete season from just single episodes.</p>
</span>
</label>
<label>
<span class="component-title"></span>
<input type="radio" style="margin-top: 2px !important;" name="${curNzbProvider.getID()}_search_mode" id="${curNzbProvider.getID()}_search_mode_sponly" value="sponly" class="radio" #if $curNzbProvider.search_mode=="sponly" then "checked=\"checked\"" else ""# />Season Packs ONLY!<br />
<span class="component-desc">
<input type="radio" name="${curNzbProvider.getID()}_search_mode" id="${curNzbProvider.getID()}_search_mode_sponly" value="sponly" #if $curNzbProvider.search_mode=="sponly" then "checked=\"checked\"" else ""# />season packs only.
</span>
</label>
<label>
<span class="component-title"></span>
<input type="radio" style="margin-top: 2px !important;" name="${curNzbProvider.getID()}_search_mode" id="${curNzbProvider.getID()}_search_mode_eponly" value="eponly" class="radio" #if $curNzbProvider.search_mode=="eponly" then "checked=\"checked\"" else ""# />Episodes ONLY!<br />
<span class="component-desc">
<input type="radio" name="${curNzbProvider.getID()}_search_mode" id="${curNzbProvider.getID()}_search_mode_eponly" value="eponly" #if $curNzbProvider.search_mode=="eponly" then "checked=\"checked\"" else ""# />episodes only.
</span>
</label>
</div>
@ -294,140 +315,126 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
<div class="providerDiv" id="${curTorrentProvider.getID()}Div">
#if $hasattr($curTorrentProvider, 'api_key'):
<div class="field-pair">
<label>
<span class="component-title">Api Key:</span>
<input class="component-desc" type="text" name="${curTorrentProvider.getID()}_api_key" id="${curTorrentProvider.getID()}_api_key" value="$curTorrentProvider.api_key" size="40" />
<label for="${curTorrentProvider.getID()}_api_key">
<span class="component-title">Api key:</span>
<span class="component-desc">
<input type="text" name="${curTorrentProvider.getID()}_api_key" id="${curTorrentProvider.getID()}_api_key" value="$curTorrentProvider.api_key" class="form-control input-sm input350" />
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'digest'):
<div class="field-pair">
<label>
<label for="${curTorrentProvider.getID()}_digest">
<span class="component-title">Digest:</span>
<input class="component-desc" type="text" name="${curTorrentProvider.getID()}_digest" id="${curTorrentProvider.getID()}_digest" value="$curTorrentProvider.digest" size="40" />
<span class="component-desc">
<input type="text" name="${curTorrentProvider.getID()}_digest" id="${curTorrentProvider.getID()}_digest" value="$curTorrentProvider.digest" class="form-control input-sm input350" />
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'hash'):
<div class="field-pair">
<label>
<label for="${curTorrentProvider.getID()}_hash">
<span class="component-title">Hash:</span>
<input class="component-desc" type="text" name="${curTorrentProvider.getID()}_hash" id="${curTorrentProvider.getID()}_hash" value="$curTorrentProvider.hash" size="40" />
<span class="component-desc">
<input type="text" name="${curTorrentProvider.getID()}_hash" id="${curTorrentProvider.getID()}_hash" value="$curTorrentProvider.hash" class="form-control input-sm input350" />
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'options'):
<div style="width: 340px; padding-bottom: 10px !important;">
<input type="hidden" id="tvtorrents_option_string" />
<fieldset style="display: block; border-width: 1px !important; border-radius: 5px !important; border-color: #D0D0D0 !important; border-style: solid !important;">
<legend id="seed_options">Advanced Options</legend>
<div class="field-pair" style="margin-top: -2px !important;">
<label >
<span class="component-title" style="width: 130px !important;">Seeding Goal Ratio(%):</span>
<input class="seed_option" type="text" id="tvtorrents_seed_ratio" size="5" style="margin-left: -5px !important;"/>
</label>
</div>
<div class="field-pair" style="margin-top: -10px !important;">
<label>
<span class="component-title" style="width: 130px !important;">Seeding Goal Time(h):</span>
<input class="seed_option" type="text" id="tvtorrents_seed_time" size="5" style="margin-left: -5px !important;" />
</label>
</div>
<div style="display: block; text-align: center;margin-top: -10px !important;" class="float-left">
<label>
<span class="component-title" style="margin-left: -49px !important; width: 201px !important;">Process Method:</span>
<select class="seed_option" id="tvtorrents_process_method" class="input-medium" >
#set $process_method_text = {'': "", 'copy': "Copy", 'move': "Move", 'hardlink': "Hard Link", 'symlink' : "Symbolic Link"}
#for $curAction in ('', 'copy', 'move', 'hardlink', 'symlink'):
#set $process_method = ""
<option class="seed_option" value="$curAction" $process_method>$process_method_text[$curAction]</option>
#end for
</select>
</label>
</div>
</fieldset>
</div>
#end if
#if $hasattr($curTorrentProvider, 'username'):
<div class="field-pair">
<label>
<label for="${curTorrentProvider.getID()}_username">
<span class="component-title">Username:</span>
<input class="component-desc" type="text" name="${curTorrentProvider.getID()}_username" id="${curTorrentProvider.getID()}_username" value="$curTorrentProvider.username" size="40" />
<span class="component-desc">
<input type="text" name="${curTorrentProvider.getID()}_username" id="${curTorrentProvider.getID()}_username" value="$curTorrentProvider.username" class="form-control input-sm input350" />
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'password'):
<div class="field-pair">
<label>
<label for="${curTorrentProvider.getID()}_password">
<span class="component-title">Password:</span>
<input class="component-desc" type="password" name="${curTorrentProvider.getID()}_password" id="${curTorrentProvider.getID()}_password" value="$curTorrentProvider.password" size="40" />
<span class="component-desc">
<input type="password" name="${curTorrentProvider.getID()}_password" id="${curTorrentProvider.getID()}_password" value="$curTorrentProvider.password" class="form-control input-sm input350" />
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'passkey'):
<div class="field-pair">
<label>
<label for="${curTorrentProvider.getID()}_passkey">
<span class="component-title">Passkey:</span>
<input class="component-desc" type="text" name="${curTorrentProvider.getID()}_passkey" id="${curTorrentProvider.getID()}_passkey" value="$curTorrentProvider.passkey" size="40" />
<span class="component-desc">
<input type="text" name="${curTorrentProvider.getID()}_passkey" id="${curTorrentProvider.getID()}_passkey" value="$curTorrentProvider.passkey" class="form-control input-sm input350" />
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'ratio'):
<div class="field-pair">
<label class="nocheck">
<span class="component-title" id="${curTorrentProvider.getID()}_ratio_desc">Seed Ratio:</span>
<input type="number" step="0.1" name="${curTorrentProvider.getID()}_ratio" id="${curTorrentProvider.getID()}_ratio" value="$curTorrentProvider.ratio" size="2" style="margin-left: 3px !important;" />
<label for="${curTorrentProvider.getID()}_ratio">
<span class="component-title" id="${curTorrentProvider.getID()}_ratio_desc">Seed ratio:</span>
<span class="component-desc">
<input type="number" step="0.1" name="${curTorrentProvider.getID()}_ratio" id="${curTorrentProvider.getID()}_ratio" value="$curTorrentProvider.ratio" class="form-control input-sm input75" />
</span>
</label>
<label>
<span class="component-title">&nbsp;</span>
<span class="component-desc">
Stop transfer when reaching ratio<br>
(-1 SickRage default to seed forever)<br>
(leave blank for downloader default)</span>
<p>stop transfer when ratio is reached<br>(-1 SickRage default to seed forever, or leave blank for downloader default)</p>
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'minseed'):
<div class="field-pair">
<label class="nocheck">
<span class="component-title" id="${curTorrentProvider.getID()}_minseed_desc">Min Seeders:</span>
<input type="number" name="${curTorrentProvider.getID()}_minseed" id="${curTorrentProvider.getID()}_minseed" value="$curTorrentProvider.minseed" size="40" style="margin-left: 3px !important;" />
<label for="${curTorrentProvider.getID()}_minseed">
<span class="component-title" id="${curTorrentProvider.getID()}_minseed_desc">Minimum seeders:</span>
<span class="component-desc">
<input type="number" name="${curTorrentProvider.getID()}_minseed" id="${curTorrentProvider.getID()}_minseed" value="$curTorrentProvider.minseed" class="form-control input-sm input75" />
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'minleech'):
<div class="field-pair">
<label class="nocheck">
<span class="component-title" id="${curTorrentProvider.getID()}_minleech_desc">Min Leechers:</span>
<input type="number" name="${curTorrentProvider.getID()}_minleech" id="${curTorrentProvider.getID()}_minleech" value="$curTorrentProvider.minleech" size="40" style="margin-left: 3px !important;" />
<label for="${curTorrentProvider.getID()}_minleech">
<span class="component-title" id="${curTorrentProvider.getID()}_minleech_desc">Minimum leechers:</span>
<span class="component-desc">
<input type="number" name="${curTorrentProvider.getID()}_minleech" id="${curTorrentProvider.getID()}_minleech" value="$curTorrentProvider.minleech" class="form-control input-sm input75" />
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'proxy'):
<div class="field-pair">
<label for="${curTorrentProvider.getID()}_proxy">
<span class="component-title">Access provider via proxy</span>
<span class="component-desc">
<input type="checkbox" class="enabler" name="${curTorrentProvider.getID()}_proxy" id="${curTorrentProvider.getID()}_proxy" #if $curTorrentProvider.proxy.enabled then "checked=\"checked\"" else ""#/>
<label>
<span class="component-title">Access Provider via Proxy</span>
<span class="component-desc">To bypass Country Blocking Mechanism</span>
<p>to bypass country blocking mechanisms</p>
</span>
</label>
</div>
#if $hasattr($curTorrentProvider.proxy, 'url'):
<div class="field-pair content_${curTorrentProvider.getID()}_proxy" id="content_${curTorrentProvider.getID()}_proxy">
<label class="nocheck">
<label for="${curTorrentProvider.getID()}_proxy_url">
<span class="component-title">Proxy URL:</span>
<span class="component-desc">
<select name="${curTorrentProvider.getID()}_proxy_url" id="${curTorrentProvider.getID()}_proxy_url">
<select name="${curTorrentProvider.getID()}_proxy_url" id="${curTorrentProvider.getID()}_proxy_url" class="form-control input-sm">
#for $i in $curTorrentProvider.proxy.urls.keys():
<option value="$curTorrentProvider.proxy.urls[$i]" #if $curTorrentProvider.proxy.urls[$i] == $curTorrentProvider.proxy.url then "selected=\"selected\"" else ""#>$i</option>
#end for
@ -440,31 +447,35 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#if $hasattr($curTorrentProvider, 'confirmed'):
<div class="field-pair">
<input type="checkbox" name="${curTorrentProvider.getID()}_confirmed" id="${curTorrentProvider.getID()}_confirmed" #if $curTorrentProvider.confirmed then "checked=\"checked\"" else ""#/>
<label for="${curTorrentProvider.getID()}_confirmed">
<span class="component-title">Confirmed Download</span>
<span class="component-desc">Download torrent only from trusted/verified uploaders?</span>
<span class="component-title">Confirmed download</span>
<span class="component-desc">
<input type="checkbox" name="${curTorrentProvider.getID()}_confirmed" id="${curTorrentProvider.getID()}_confirmed" #if $curTorrentProvider.confirmed then "checked=\"checked\"" else ""#/>
<p>only download torrents from trusted or verified uploaders ?</p>
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'freeleech'):
<div class="field-pair">
<input type="checkbox" name="${curTorrentProvider.getID()}_freeleech" id="${curTorrentProvider.getID()}_freeleech" #if $curTorrentProvider.freeleech then "checked=\"checked\"" else ""#/>
<label for="${curTorrentProvider.getID()}_freeleech">
<span class="component-title">FreeLeech</span>
<span class="component-desc">This will only download <b>[FreeLeech]</b> torrents.</span>
<span class="component-title">Freeleech</span>
<span class="component-desc">
<input type="checkbox" name="${curTorrentProvider.getID()}_freeleech" id="${curTorrentProvider.getID()}_freeleech" #if $curTorrentProvider.freeleech then "checked=\"checked\"" else ""#/>
<p>only download <b>[FreeLeech]</b> torrents.</p>
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'enable_daily'):
<div class="field-pair">
<input type="checkbox" name="${curTorrentProvider.getID()}_enable_daily" id="${curTorrentProvider.getID()}_enable_daily" #if $curTorrentProvider.enable_daily then "checked=\"checked\"" else ""#/>
<label for="${curTorrentProvider.getID()}_enable_daily">
<span class="component-title">Enable Daily Searches</span>
<span class="component-title">Enable daily searches</span>
<span class="component-desc">
Enables daily searches
<input type="checkbox" name="${curTorrentProvider.getID()}_enable_daily" id="${curTorrentProvider.getID()}_enable_daily" #if $curTorrentProvider.enable_daily then "checked=\"checked\"" else ""#/>
<p>enable provider to perform daily searches.</p>
</span>
</label>
</div>
@ -472,11 +483,11 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#if $hasattr($curTorrentProvider, 'enable_backlog'):
<div class="field-pair">
<input type="checkbox" name="${curTorrentProvider.getID()}_enable_backlog" id="${curTorrentProvider.getID()}_enable_backlog" #if $curTorrentProvider.enable_backlog then "checked=\"checked\"" else ""#/>
<label for="${curTorrentProvider.getID()}_enable_backlog">
<span class="component-title">Enable Backlog Searches</span>
<span class="component-title">Enable backlog searches</span>
<span class="component-desc">
Enables backlog searches
<input type="checkbox" name="${curTorrentProvider.getID()}_enable_backlog" id="${curTorrentProvider.getID()}_enable_backlog" #if $curTorrentProvider.enable_backlog then "checked=\"checked\"" else ""#/>
<p>enable provider to perform backlog searches.</p>
</span>
</label>
</div>
@ -484,11 +495,11 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#if $hasattr($curTorrentProvider, 'search_fallback'):
<div class="field-pair">
<input type="checkbox" name="${curTorrentProvider.getID()}_search_fallback" id="${curTorrentProvider.getID()}_search_fallback" #if $curTorrentProvider.search_fallback then "checked=\"checked\"" else ""#/>
<label for="${curTorrentProvider.getID()}_search_fallback">
<span class="component-title">Season Search Fallback</span>
<span class="component-title">Season search fallback</span>
<span class="component-desc">
When searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.
<input type="checkbox" name="${curTorrentProvider.getID()}_search_fallback" id="${curTorrentProvider.getID()}_search_fallback" #if $curTorrentProvider.search_fallback then "checked=\"checked\"" else ""#/>
<p>when searching for a complete season depending on search mode you may return no results, this helps by restarting the search using the opposite search mode.</p>
</span>
</label>
</div>
@ -496,21 +507,59 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
#if $hasattr($curTorrentProvider, 'search_mode'):
<div class="field-pair">
<label class="nocheck">
<span class="component-title">Season Search Mode</span>
<span class="component-desc2">
When searching for complete seasons you can choose to have it look for season packs ONLY or choose to have it build a complete season from just single episodes.
<label>
<span class="component-title">Season search mode</span>
<span class="component-desc">
<p>when searching for complete seasons you can choose to have it look for season packs only, or choose to have it build a complete season from just single episodes.</p>
</span>
</label>
<label>
<span class="component-title"></span>
<input type="radio" style="margin-top: 2px !important;" name="${curTorrentProvider.getID()}_search_mode" id="${curTorrentProvider.getID()}_search_mode_sponly" value="sponly" class="radio" #if $curTorrentProvider.search_mode=="sponly" then "checked=\"checked\"" else ""# />Season Packs ONLY!<br />
<span class="component-desc">
<input type="radio" name="${curTorrentProvider.getID()}_search_mode" id="${curTorrentProvider.getID()}_search_mode_sponly" value="sponly" #if $curTorrentProvider.search_mode=="sponly" then "checked=\"checked\"" else ""# />season packs only.
</span>
</label>
<label>
<span class="component-title"></span>
<input type="radio" style="margin-top: 2px !important;" name="${curTorrentProvider.getID()}_search_mode" id="${curTorrentProvider.getID()}_search_mode_eponly" value="eponly" class="radio" #if $curTorrentProvider.search_mode=="eponly" then "checked=\"checked\"" else ""# />Episodes ONLY!<br />
<span class="component-desc">
<input type="radio" name="${curTorrentProvider.getID()}_search_mode" id="${curTorrentProvider.getID()}_search_mode_eponly" value="eponly" #if $curTorrentProvider.search_mode=="eponly" then "checked=\"checked\"" else ""# />episodes only.
</span>
</label>
</div>
#end if
#if $hasattr($curTorrentProvider, 'options'):
<br>
<input type="hidden" id="tvtorrents_option_string" />
<fieldset>
<legend id="seed_options">Advanced options</legend>
<div class="field-pair">
<label >
<span class="component-title">Seeding ratio(%) goal:</span>
<input type="text" id="tvtorrents_seed_ratio" class="seed_option form-control input-sm input75" />
</label>
</div>
<div class="field-pair">
<label>
<span class="component-title">Seeding time(h) goal:</span>
<input type="text" id="tvtorrents_seed_time" class="seed_option form-control input-sm input75" />
</label>
</div>
<div class="field-pair">
<label>
<span class="component-title">Process method:</span>
<select id="tvtorrents_process_method" class="seed_option form-control input-sm" >
#set $process_method_text = {'': "", 'copy': "Copy", 'move': "Move", 'hardlink': "Hard Link", 'symlink' : "Symbolic Link"}
#for $curAction in ('', 'copy', 'move', 'hardlink', 'symlink'):
#set $process_method = ""
<option class="seed_option" value="$curAction" $process_method>$process_method_text[$curAction]</option>
#end for
</select>
</label>
</div>
</fieldset>
<br>
#end if
</div>
#end for
@ -528,14 +577,13 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
<div class="component-group-desc">
<h3>Configure Custom<br />Newznab Providers</h3>
<p>Add and setup custom Newznab providers.</p>
<p>Some built-in Newznab providers are already available above.</p>
<p>Add and setup or remove custom Newznab providers.</p>
</div>
<fieldset class="component-group-list">
<div class="field-pair">
<label class="nocheck">
<span class="component-title">Select Provider:</span>
<label for="newznab_string">
<span class="component-title">Select provider:</span>
<span class="component-desc">
<input type="hidden" name="newznab_string" id="newznab_string" />
<select id="editANewznabProvider" class="form-control input-sm">
@ -547,39 +595,39 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
<div class="newznabProviderDiv" id="addNewznab">
<div class="field-pair">
<label class="nocheck">
<span class="component-title">Provider Name:</span>
<label for="newznab_name">
<span class="component-title">Provider name:</span>
<input type="text" id="newznab_name" class="form-control input-sm input200" />
</label>
</div>
<div class="field-pair">
<label class="nocheck">
<label for="newznab_url">
<span class="component-title">Site URL:</span>
<input type="text" id="newznab_url" class="form-control input-sm input350" />
</label>
</div>
<div class="field-pair">
<label class="nocheck">
<span class="component-title">API Key:</span>
<label for="newznab_key">
<span class="component-title">API key:</span>
<input type="text" id="newznab_key" class="form-control input-sm input350" />
</label>
<label class="nocheck">
<label>
<span class="component-title">&nbsp;</span>
<span class="component-desc">(if not required, type 0)</span>
</label>
</div>
<div class="field-pair">
<label class="nocheck">
<span class="component-title">NewzNab search categories</span>
<label>
<span class="component-title">Newznab search categories:</span>
<select id="newznab_cap" multiple="multiple" style="min-width:10em;" ></select>
<select id="newznab_cat" multiple="multiple" style="min-width:10em;" ></select>
</label>
<label class="nocheck">
<label>
<span class="component-title">&nbsp;</span>
<span class="component-desc">(Select your Newznab categories on the left, and click the "update categories" button to use them for searching.) <b>Don't forget to to save the form!</b></span>
<span class="component-desc">(select your Newznab categories on the left, and click the "update categories" button to use them for searching.) <b>don't forget to to save the form!</b></span>
</label>
<label class="nocheck">
<label>
<span class="component-title">&nbsp;</span>
<span class="component-desc"><input class="btn" type="button" class="newznab_cat_update" id="newznab_cat_update" value="Update Categories" /></span>
</label>
@ -603,14 +651,13 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
<div class="component-group-desc">
<h3>Configure Custom Torrent Providers</h3>
<p>Add and setup custom RSS providers.</p>
<p>&nbsp;</p>
<p>Add and setup or remove custom RSS providers.</p>
</div>
<fieldset class="component-group-list">
<div class="field-pair">
<label class="nocheck">
<span class="component-title">Select Provider:</span>
<label for="torrentrss_string">
<span class="component-title">Select provider:</span>
<span class="component-desc">
<input type="hidden" name="torrentrss_string" id="torrentrss_string" />
<select id="editATorrentRssProvider" class="form-control input-sm">
@ -622,23 +669,23 @@ var show_nzb_providers = #if $sickbeard.USE_NZBS then "true" else "false"#;
<div class="torrentRssProviderDiv" id="addTorrentRss">
<div class="field-pair">
<label class="nocheck">
<span class="component-title">Provider Name:</span>
<label for="torrentrss_name">
<span class="component-title">Provider name:</span>
<input type="text" id="torrentrss_name" class="form-control input-sm input200" />
</label>
</div>
<div class="field-pair">
<label class="nocheck">
<label for="torrentrss_url">
<span class="component-title">RSS URL:</span>
<input type="text" id="torrentrss_url" class="form-control input-sm input350" />
</label>
</div>
<div class="field-pair">
<label class="nocheck">
<label for="torrentrss_cookies">
<span class="component-title">Cookies:</span>
<input type="text" id="torrentrss_cookies" class="form-control input-sm input350" />
</label>
<label class="nocheck">
<label>
<span class="component-title">&nbsp;</span>
<span class="component-desc">eg. uid=xx;pass=yy</span>
</label>

View File

@ -57,8 +57,6 @@
<script type="text/javascript" src="$sbRoot/js/lib/bootstrap.min.js?$sbPID"></script>
<script type="text/javascript" src="$sbRoot/js/lib/bootstrap-hover-dropdown.min.js?$sbPID"></script>
<script type="text/javascript" src="$sbRoot/js/lib/jquery-ui-1.10.4.custom.min.js?$sbPID"></script>
<script type="text/javascript" src="$sbRoot/js/lib/superfish-1.4.8.js?$sbPID"></script> <!-- Don't remove providers sort list breaks, needs to be fixed //-->
<script type="text/javascript" src="$sbRoot/js/lib/supersubs-0.2b.js?$sbPID"></script> <!-- Don't remove providers sort list breaks, needs to be fixed //-->
<script type="text/javascript" src="$sbRoot/js/lib/jquery.cookie.js?$sbPID"></script>
<script type="text/javascript" src="$sbRoot/js/lib/jquery.cookiejar.js?$sbPID"></script>
<script type="text/javascript" src="$sbRoot/js/lib/jquery.json-2.2.min.js?$sbPID"></script>

View File

@ -5,11 +5,11 @@ $(document).ready(function(){
var providerName = $(this).attr('id');
var selectedProvider = $('#editAProvider :selected').val();
if (selectedProvider+'Div' == providerName)
if (selectedProvider + 'Div' == providerName) {
$(this).show();
else
} else {
$(this).hide();
}
});
}
@ -25,7 +25,6 @@ $(document).ready(function(){
var url = selectedProvider[1];
var key = selectedProvider[2];
if (!name)
return;
@ -205,12 +204,8 @@ $(document).ready(function(){
else {
updateNewznabCaps( null, data );
}
}
}
}
ifExists = function(loopThroughArray, searchFor) {
@ -252,12 +247,8 @@ $(document).ready(function(){
});
$("#newznab_cap").replaceOptions(newCapOptions);
}
});
};
}
$.fn.makeNewznabProviderString = function() {
@ -326,91 +317,9 @@ $(document).ready(function(){
$("#provider_order").val(finalArr.join(' '));
}
$.fn.hideConfigTab = function () {
$("#config-components").tabs( "disable", 1 );
$("#config-components ul li:eq(1)").hide();
};
$.fn.showProvidersConfig = function () {
$("#provider_order_list li").each(function( index ) {
if ($(this).find("input").attr("checked")) {
$(this).addTip();
} else {
$(this).qtip('destroy');
}
});
};
$.fn.addTip = function() {
var config_id = $(this).find("input").attr('id').replace("enable_", "") + "Div";
var config_form = '<div id="config"><form id="configForm_tip" action="saveProviders" method="post"><fieldset class="component-group-list tip_scale"><div class="providerDiv_tip">' + $("div[id*="+config_id+"]").html() + '</div></fieldset></form></div>'
var provider_name = $.trim($(this).text()).replace('*','')
if ($("div[id*="+config_id+"]").length == 0) {
return false
}
$(this).qtip({
overwrite: true,
position: {
adjust: {
x: 0, y: 0,
},
my: 'left top',
at: 'top right',
},
show: {
event: 'mouseenter', // Show it on click...
target: false,
solo: true,
delay: 90,
effect: true,
},
hide: {
fixed: true,
delay: 900,
},
content: {
text: config_form,
title: {
text: provider_name + ' Config',
button: true
}
},
style: {
border: {
width: 5,
radius: 2,
color: '#e1e1e1'
},
width: 400,
background: '#FFF',
padding: 15,
tip: true, // Give it a speech bubble tip with automatic corner detection
classes: 'qtip-dark qtip-shadow',
},
});
}
var newznabProviders = new Array();
var torrentRssProviders = new Array();
$("#provider_order_list li").on('change', function() {
if ($(this).find("input").attr("checked")) {
$(this).addTip();
$(this).qtip('show');
} else {
$(this).qtip('destroy');
}
});
$(this).on('change', '.newznab_key', function(){
var provider_id = $(this).attr('id');
@ -661,17 +570,12 @@ $(document).ready(function(){
$.fn.newznabProvidersCapabilities = [];
$(this).hideConfigTab();
$(this).showHideProviders();
$(this).showProvidersConfig();
$("#provider_order_list").sortable({
placeholder: 'ui-state-highlight',
update: function (event, ui) {
$(this).refreshProviderList();
ui.item.qtip('reposition');
}
});

View File

@ -1,120 +0,0 @@
/*
* Superfish v1.4.8 - jQuery menu widget
* Copyright (c) 2008 Joel Birch
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
* CHANGELOG: http://users.tpg.com.au/j_birch/plugins/superfish/changelog.txt
*/
;(function($){
$.fn.superfish = function(op){
var sf = $.fn.superfish,
c = sf.c,
$arrow = $(['<span class="',c.arrowClass,'"> &#187;</span>'].join('')),
over = function(){
var $$ = $(this), menu = getMenu($$);
clearTimeout(menu.sfTimer);
$$.showSuperfishUl().siblings().hideSuperfishUl();
},
out = function(){
var $$ = $(this), menu = getMenu($$), o = sf.op;
clearTimeout(menu.sfTimer);
menu.sfTimer=setTimeout(function(){
o.retainPath=($.inArray($$[0],o.$path)>-1);
$$.hideSuperfishUl();
if (o.$path.length && $$.parents(['li.',o.hoverClass].join('')).length<1){over.call(o.$path);}
},o.delay);
},
getMenu = function($menu){
var menu = $menu.parents(['ul.',c.menuClass,':first'].join(''))[0];
sf.op = sf.o[menu.serial];
return menu;
},
addArrow = function($a){ $a.addClass(c.anchorClass).append($arrow.clone()); };
return this.each(function() {
var s = this.serial = sf.o.length;
var o = $.extend({},sf.defaults,op);
o.$path = $('li.'+o.pathClass,this).slice(0,o.pathLevels).each(function(){
$(this).addClass([o.hoverClass,c.bcClass].join(' '))
.filter('li:has(ul)').removeClass(o.pathClass);
});
sf.o[s] = sf.op = o;
$('li:has(ul)',this)[($.fn.hoverIntent && !o.disableHI) ? 'hoverIntent' : 'hover'](over,out).each(function() {
if (o.autoArrows) addArrow( $('>a:first-child',this) );
})
.not('.'+c.bcClass)
.hideSuperfishUl();
var $a = $('a',this);
$a.each(function(i){
var $li = $a.eq(i).parents('li');
$a.eq(i).focus(function(){over.call($li);}).blur(function(){out.call($li);});
});
o.onInit.call(this);
}).each(function() {
var menuClasses = [c.menuClass];
if (sf.op.dropShadows && !($.browser.msie && $.browser.version < 7)) menuClasses.push(c.shadowClass);
$(this).addClass(menuClasses.join(' '));
});
};
var sf = $.fn.superfish;
sf.o = [];
sf.op = {};
sf.IE7fix = function(){
var o = sf.op;
if ($.browser.msie && $.browser.version > 6 && o.dropShadows && o.animation.opacity!=undefined)
this.toggleClass(sf.c.shadowClass+'-off');
};
sf.c = {
bcClass : 'sf-breadcrumb',
menuClass : 'sf-js-enabled',
anchorClass : 'sf-with-ul',
arrowClass : 'sf-sub-indicator',
shadowClass : 'sf-shadow'
};
sf.defaults = {
hoverClass : 'sfHover',
pathClass : 'overideThisToUse',
pathLevels : 1,
delay : 800,
animation : {opacity:'show'},
speed : 'normal',
autoArrows : true,
dropShadows : true,
disableHI : false, // true disables hoverIntent detection
onInit : function(){}, // callback functions
onBeforeShow: function(){},
onShow : function(){},
onHide : function(){}
};
$.fn.extend({
hideSuperfishUl : function(){
var o = sf.op,
not = (o.retainPath===true) ? o.$path : '';
o.retainPath = false;
var $ul = $(['li.',o.hoverClass].join(''),this).add(this).not(not).removeClass(o.hoverClass)
.find('>ul').hide().css('visibility','hidden');
o.onHide.call($ul);
return this;
},
showSuperfishUl : function(){
var o = sf.op,
sh = sf.c.shadowClass+'-off',
$ul = this.addClass(o.hoverClass)
.find('>ul:hidden').css('visibility','visible');
sf.IE7fix.call($ul);
o.onBeforeShow.call($ul);
$ul.animate(o.animation,o.speed,function(){ sf.IE7fix.call($ul); o.onShow.call($ul); });
return this;
}
});
})(jQuery);

View File

@ -1,90 +0,0 @@
/*
* Supersubs v0.2b - jQuery plugin
* Copyright (c) 2008 Joel Birch
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*
*
* This plugin automatically adjusts submenu widths of suckerfish-style menus to that of
* their longest list item children. If you use this, please expect bugs and report them
* to the jQuery Google Group with the word 'Superfish' in the subject line.
*
*/
;(function($){ // $ will refer to jQuery within this closure
$.fn.supersubs = function(options){
var opts = $.extend({}, $.fn.supersubs.defaults, options);
// return original object to support chaining
return this.each(function() {
// cache selections
var $$ = $(this);
// support metadata
var o = $.meta ? $.extend({}, opts, $$.data()) : opts;
// get the font size of menu.
// .css('fontSize') returns various results cross-browser, so measure an em dash instead
var fontsize = $('<li id="menu-fontsize">&#8212;</li>').css({
'padding' : 0,
'position' : 'absolute',
'top' : '-999em',
'width' : 'auto'
}).appendTo($$).width(); //clientWidth is faster, but was incorrect here
// remove em dash
$('#menu-fontsize').remove();
// cache all ul elements
$ULs = $$.find('ul');
// loop through each ul in menu
$ULs.each(function(i) {
// cache this ul
var $ul = $ULs.eq(i);
// get all (li) children of this ul
var $LIs = $ul.children();
// get all anchor grand-children
var $As = $LIs.children('a');
// force content to one line and save current float property
var liFloat = $LIs.css('white-space','nowrap').css('float');
// remove width restrictions and floats so elements remain vertically stacked
var emWidth = $ul.add($LIs).add($As).css({
'float' : 'none',
'width' : 'auto'
})
// this ul will now be shrink-wrapped to longest li due to position:absolute
// so save its width as ems. Clientwidth is 2 times faster than .width() - thanks Dan Switzer
.end().end()[0].clientWidth / fontsize;
// add more width to ensure lines don't turn over at certain sizes in various browsers
emWidth += o.extraWidth;
// restrict to at least minWidth and at most maxWidth
if (emWidth > o.maxWidth) { emWidth = o.maxWidth; }
else if (emWidth < o.minWidth) { emWidth = o.minWidth; }
emWidth += 'em';
// set ul to width in ems
$ul.css('width',emWidth);
// restore li floats to avoid IE bugs
// set li width to full width of this ul
// revert white-space to normal
$LIs.css({
'float' : liFloat,
'width' : '100%',
'white-space' : 'normal'
})
// update offset position of descendant ul to reflect new width of parent
.each(function(){
var $childUl = $('>ul',this);
var offsetDirection = $childUl.css('left')!==undefined ? 'left' : 'right';
$childUl.css(offsetDirection,emWidth);
});
});
});
};
// expose defaults
$.fn.supersubs.defaults = {
minWidth : 9, // requires em unit.
maxWidth : 25, // requires em unit.
extraWidth : 0 // extra width can ensure lines don't sometimes turn over due to slight browser differences in how they round-off values
};
})(jQuery); // plugin code ends