Add an expand-all / collapse-all module to all core2 styles.
Patch by allen.
diffs (421 lines):
diff -r 3b5231ceae25 -r 476e15fbfc76 bin/upgrading/en.dat
--- a/bin/upgrading/en.dat Fri Apr 08 16:38:09 2011 +0800
+++ b/bin/upgrading/en.dat Fri Apr 08 18:30:30 2011 +0800
@@ -4489,7 +4489,11 @@ widget.customizetheme.nav.style=Style
widget.customizetheme.title=Customize Your Theme
+widget.cuttag.expandAll=Expand All Cut Tags
+
widget.cuttag.expanded=Collapse
+
+widget.cuttag.collapseAll=Collapse All Cut Tags
widget.cuttag.collapsed=Expand
diff -r 3b5231ceae25 -r 476e15fbfc76 bin/upgrading/s2layers/bases/layout.s2
--- a/bin/upgrading/s2layers/bases/layout.s2 Fri Apr 08 16:38:09 2011 +0800
+++ b/bin/upgrading/s2layers/bases/layout.s2 Fri Apr 08 18:30:30 2011 +0800
@@ -179,6 +179,7 @@ propgroup modules {
property use module_poweredby_group;
property use module_credit_group;
property use module_search_group;
+ property use module_cuttagcontrols_group;
}
##===============================
diff -r 3b5231ceae25 -r 476e15fbfc76 bin/upgrading/s2layers/blanket/layout.s2
--- a/bin/upgrading/s2layers/blanket/layout.s2 Fri Apr 08 16:38:09 2011 +0800
+++ b/bin/upgrading/s2layers/blanket/layout.s2 Fri Apr 08 18:30:30 2011 +0800
@@ -111,6 +111,7 @@ propgroup modules {
property use module_poweredby_group;
property use module_credit_group;
property use module_search_group;
+ property use module_cuttagcontrols_group;
property string module_navlinks_section_override {
values = "none|(none)|two|Fixed";
diff -r 3b5231ceae25 -r 476e15fbfc76 bin/upgrading/s2layers/brittle/layout.s2
--- a/bin/upgrading/s2layers/brittle/layout.s2 Fri Apr 08 16:38:09 2011 +0800
+++ b/bin/upgrading/s2layers/brittle/layout.s2 Fri Apr 08 18:30:30 2011 +0800
@@ -202,6 +202,7 @@ propgroup modules {
property use module_poweredby_group;
property use module_credit_group;
property use module_search_group;
+ property use module_cuttagcontrols_group;
}
# explicitly define what sections the layout has available
diff -r 3b5231ceae25 -r 476e15fbfc76 bin/upgrading/s2layers/core2.s2
--- a/bin/upgrading/s2layers/core2.s2 Fri Apr 08 16:38:09 2011 +0800
+++ b/bin/upgrading/s2layers/core2.s2 Fri Apr 08 18:30:30 2011 +0800
@@ -1607,6 +1607,20 @@ set module_search_order = 15;
set module_search_order = 15;
set module_search_section = "one";
+property string[] module_cuttagcontrols_group {
+ des = "Cut Tag Controls";
+ grouptype = "module";
+}
+set module_cuttagcontrols_group = ["module_cuttagcontrols_show",
"module_cuttagcontrols_order", "module_cuttagcontrols_section"];
+property bool module_cuttagcontrols_show { grouped = 1; }
+property int module_cuttagcontrols_order { grouped = 1; }
+property string module_cuttagcontrols_section { grouped = 1; }
+
+set module_cuttagcontrols_show = true;
+set module_cuttagcontrols_order = 16;
+set module_cuttagcontrols_section = "one";
+
+
##===============================
## Journal style - fonts
##===============================
@@ -2151,6 +2165,13 @@ set text_tags = "Tags:";
## Text - module headings
##===============================
+property string text_module_cuttagcontrols {
+ des = "Text used for the heading for the Cut Tag Controls section";
+ maxlength = 50;
+ size = 20;
+ example = "Expand Cut Tags";
+}
+
property string text_module_links {
des = "Text used for the heading of the links list";
maxlength = 50;
@@ -2221,6 +2242,7 @@ property string text_module_credit {
example = "Style Credit";
}
+set text_module_cuttagcontrols = "Expand Cut Tags";
set text_module_links = "Links";
set text_module_pagesummary = "Page Summary";
set text_module_syndicate = "Syndicate";
@@ -2598,6 +2620,11 @@ property string text_calendar_num_entrie
des = "Text to show how many entries were made on a particular day";
format = "plurals";
example = "1 entry // # entries";
+}
+
+property string text_cuttagcontrols_nocuttags {
+ des = "Text to show when there are no cuts on the page";
+ example = "No cut tags";
}
set text_linklist_manage = "Manage Links";
@@ -2613,6 +2640,7 @@ set text_nosubject = "(no subject)";
set text_nosubject = "(no subject)";
set text_nosubject_screenreader = "no subject";
set text_calendar_num_entries = "1 entry // # entries";
+set text_cuttagcontrols_nocuttags = "No cut tags";
property bool all_entrysubjects {
des = "For all entries, display the replacement text when no subject is
specified";
@@ -2944,6 +2972,7 @@ function modules_init()
if ( $*module_customtext_show ) {
$*module_sections{$*module_customtext_section}[$*module_customtext_order]=["customtext"];
}
if ( $*module_credit_show ) {
$*module_sections{$*module_credit_section}[$*module_credit_order]=["credit"]; }
if ( $*module_search_show ) {
$*module_sections{$*module_search_section}[$*module_search_order]=["search"]; }
+ if ( $*module_cuttagcontrols_show ) {
$*module_sections{$*module_cuttagcontrols_section}[$*module_cuttagcontrols_order]=["cuttagcontrols"];
}
#if ( $*module_%%mod%%_show ) { $*module_sections{$*module_%%mod%%_section
}[$*module_%%mod%%_order]=["%%mod%%"]; }
}
@@ -4341,6 +4370,17 @@ function print_module_credit() {
}
}
+function print_module_cuttagcontrols() {
+ var Page p = get_page();
+
+ open_module("cuttagcontrols", $*text_module_cuttagcontrols, "");
+
+ print safe """<span class=\"cutTagControls\"><span style=\"font-size:
smaller;\">$*text_cuttagcontrols_nocuttags</span></span>""";
+
+ close_module();
+
+}
+
function handle_module_group_array(string[][] list) {
foreach var string[] item ($list) {
var string module = $item[0];
@@ -4387,6 +4427,9 @@ function handle_module_group_array(strin
}
elseif ($module == "search") {
print_module_search();
+ }
+ elseif ($module == "cuttagcontrols") {
+ print_module_cuttagcontrols();
}
}
}
diff -r 3b5231ceae25 -r 476e15fbfc76 bin/upgrading/s2layers/core2base/layout.s2
--- a/bin/upgrading/s2layers/core2base/layout.s2 Fri Apr 08 16:38:09
2011 +0800
+++ b/bin/upgrading/s2layers/core2base/layout.s2 Fri Apr 08 18:30:30
2011 +0800
@@ -145,6 +145,7 @@ propgroup modules {
property use module_poweredby_group;
property use module_credit_group;
property use module_search_group;
+ property use module_cuttagcontrols_group;
}
# explicitly define what sections the layout has available
diff -r 3b5231ceae25 -r 476e15fbfc76 bin/upgrading/s2layers/drifting/layout.s2
--- a/bin/upgrading/s2layers/drifting/layout.s2 Fri Apr 08 16:38:09 2011 +0800
+++ b/bin/upgrading/s2layers/drifting/layout.s2 Fri Apr 08 18:30:30 2011 +0800
@@ -161,6 +161,7 @@ propgroup modules
property use module_time_group;
property use module_credit_group;
property use module_search_group;
+ property use module_cuttagcontrols_group;
}
set module_layout_sections = "none|(none)|one|Sidebar|two|Footer";
diff -r 3b5231ceae25 -r 476e15fbfc76 bin/upgrading/s2layers/easyread/layout.s2
--- a/bin/upgrading/s2layers/easyread/layout.s2 Fri Apr 08 16:38:09 2011 +0800
+++ b/bin/upgrading/s2layers/easyread/layout.s2 Fri Apr 08 18:30:30 2011 +0800
@@ -108,6 +108,7 @@ propgroup modules {
property use module_time_group;
property use module_poweredby_group;
property use module_credit_group;
+ property use module_cuttagcontrols_group;
}
# explicitly define what sections the layout has available
diff -r 3b5231ceae25 -r 476e15fbfc76 bin/upgrading/s2layers/negatives/layout.s2
--- a/bin/upgrading/s2layers/negatives/layout.s2 Fri Apr 08 16:38:09
2011 +0800
+++ b/bin/upgrading/s2layers/negatives/layout.s2 Fri Apr 08 18:30:30
2011 +0800
@@ -146,6 +146,7 @@ propgroup modules {
property use module_poweredby_group;
property use module_credit_group;
property use module_search_group;
+ property use module_cuttagcontrols_group;
}
diff -r 3b5231ceae25 -r 476e15fbfc76
bin/upgrading/s2layers/skittlishdreams/layout.s2
--- a/bin/upgrading/s2layers/skittlishdreams/layout.s2 Fri Apr 08 16:38:09
2011 +0800
+++ b/bin/upgrading/s2layers/skittlishdreams/layout.s2 Fri Apr 08 18:30:30
2011 +0800
@@ -215,6 +215,7 @@ propgroup modules {
property use module_customtext_group;
property use module_credit_group;
property use module_search_group;
+ property use module_cuttagcontrols_group;
property string module_navlinks_section_override {
values = "none|(none)|one|Header|two|Sidebar";
diff -r 3b5231ceae25 -r 476e15fbfc76 cgi-bin/LJ/S2/DayPage.pm
--- a/cgi-bin/LJ/S2/DayPage.pm Fri Apr 08 16:38:09 2011 +0800
+++ b/cgi-bin/LJ/S2/DayPage.pm Fri Apr 08 18:30:30 2011 +0800
@@ -37,10 +37,14 @@ sub DayPage
LJ::need_res( 'js/cuttag-ajax.js' );
my $collapsed = BML::ml( 'widget.cuttag.collapsed' );
my $expanded = BML::ml( 'widget.cuttag.expanded' );
+ my $collapseAll = BML::ml( 'widget.cuttag.collapseAll' );
+ my $expandAll = BML::ml( 'widget.cuttag.expandAll' );
$p->{'head_content'} .= qq[
<script type='text/javascript'>
expanded = '$expanded';
collapsed = '$collapsed';
+ collapseAll = '$collapseAll';
+ expandAll = '$expandAll';
</script>
];
diff -r 3b5231ceae25 -r 476e15fbfc76 cgi-bin/LJ/S2/FriendsPage.pm
--- a/cgi-bin/LJ/S2/FriendsPage.pm Fri Apr 08 16:38:09 2011 +0800
+++ b/cgi-bin/LJ/S2/FriendsPage.pm Fri Apr 08 18:30:30 2011 +0800
@@ -40,10 +40,14 @@ sub FriendsPage
LJ::need_res( 'js/cuttag-ajax.js' );
my $collapsed = BML::ml( 'widget.cuttag.collapsed' );
my $expanded = BML::ml( 'widget.cuttag.expanded' );
+ my $collapseAll = BML::ml( 'widget.cuttag.collapseAll' );
+ my $expandAll = BML::ml( 'widget.cuttag.expandAll' );
$p->{'head_content'} .= qq[
<script type='text/javascript'>
expanded = '$expanded';
collapsed = '$collapsed';
+ collapseAll = '$collapseAll';
+ expandAll = '$expandAll';
</script>
];
diff -r 3b5231ceae25 -r 476e15fbfc76 cgi-bin/LJ/S2/RecentPage.pm
--- a/cgi-bin/LJ/S2/RecentPage.pm Fri Apr 08 16:38:09 2011 +0800
+++ b/cgi-bin/LJ/S2/RecentPage.pm Fri Apr 08 18:30:30 2011 +0800
@@ -92,10 +92,14 @@ sub RecentPage
LJ::need_res( 'js/cuttag-ajax.js' );
my $collapsed = BML::ml( 'widget.cuttag.collapsed' );
my $expanded = BML::ml( 'widget.cuttag.expanded' );
+ my $collapseAll = BML::ml( 'widget.cuttag.collapseAll' );
+ my $expandAll = BML::ml( 'widget.cuttag.expandAll' );
$p->{'head_content'} .= qq[
<script type='text/javascript'>
expanded = '$expanded';
collapsed = '$collapsed';
+ collapseAll = '$collapseAll';
+ expandAll = '$expandAll';
</script>
];
diff -r 3b5231ceae25 -r 476e15fbfc76 htdocs/img/collapseAll.gif
Binary file htdocs/img/collapseAll.gif has changed
diff -r 3b5231ceae25 -r 476e15fbfc76 htdocs/img/expandAll.gif
Binary file htdocs/img/expandAll.gif has changed
diff -r 3b5231ceae25 -r 476e15fbfc76 htdocs/js/cuttag-ajax.js
--- a/htdocs/js/cuttag-ajax.js Fri Apr 08 16:38:09 2011 +0800
+++ b/htdocs/js/cuttag-ajax.js Fri Apr 08 18:30:30 2011 +0800
@@ -36,16 +36,20 @@ CutTagHandler = new Class(Object, {
DOM.removeClassName($("div-" + this.identifier), "cuttag-open");
$('img-' + this.identifier).alt=collapsed;
$('img-' + this.identifier).title=collapsed;
+
+ // update the expandAll/collapseAll links
+ CutTagHandler.writeExpandAllControls();
},
// opens the cut tag inline
- open: function() {
+ // openNested if we want to open nested cuttags, too
+ open: function( openNested ) {
var opts = {
"async": true,
"method": "GET",
"url": this.ajaxUrl,
- "onData": this.replaceCutTag.bindEventListener(this),
- "onError": this.handleError.bindEventListener(this)
+ "onData": openNested ? this.replaceCutTagAndOpen.bindEventListener(
this ) : this.replaceCutTag.bindEventListener( this ),
+ "onError": this.handleError.bindEventListener( this )
};
// ajax call.
@@ -60,7 +64,17 @@ CutTagHandler = new Class(Object, {
// callback for the getJSON call. if the response is an error, calls
// handlerObj.handleError(responseObject.error). otherwise replaces the
// cut tag with the contents of the cut.
- replaceCutTag: function(resObj) {
+
+ // wrapper for openNested=true
+ replaceCutTagAndOpen: function( resObj ) {
+ this.doReplaceCutTag( resObj, true );
+ },
+ // wrapper for openNested=false
+ replaceCutTag: function( resObj ) {
+ this.doReplaceCutTag( resObj, false );
+ },
+ // the actual callback
+ doReplaceCutTag: function( resObj, openNested ) {
if (resObj.error) {
this.handleError(resObj.error);
} else {
@@ -80,6 +94,13 @@ CutTagHandler = new Class(Object, {
CutTagHandler.initLinks(replaceDiv);
LiveJournal.initPlaceholders(replaceDiv);
LiveJournal.initPolls(replaceDiv);
+
+ // update the expandAll/collapseAll links
+ CutTagHandler.writeExpandAllControls();
+
+ if ( openNested ) {
+ CutTagHandler.openAll( replaceDiv );
+ }
}
}
});
@@ -124,7 +145,97 @@ CutTagHandler.initLinks = function(paren
// called at page load to initialize all <span> tags with the 'cuttag' class.
CutTagHandler.initAllLinks = function() {
CutTagHandler.initLinks(document);
+ CutTagHandler.writeExpandAllControls();
}
// calls CutTagHandler.initAllLinks on page load.
LiveJournal.register_hook("page_load", CutTagHandler.initAllLinks);
+
+// creates a CutTagHandler for the provided span.cuttag tag
+CutTagHandler.getCutTagHandler = function( spanCutTag ) {
+ var spanid = spanCutTag.id;
+ var journal = spanid.replace( /^span-cuttag_(.*)_[0-9]+_[0-9]+/, "$1" );
+ var ditemid = spanid.replace( /^.*_([0-9]+)_[0-9]+/, "$1" );
+ var cutid = spanid.replace( /^.*_([0-9]+)/, "$1" );
+ return new CutTagHandler( journal, ditemid, cutid );
+}
+
+// returns a CutTagHandler for each cuttag span in the parent tag/document
+CutTagHandler.getAllHandlers = function( parentTag ) {
+ var returnValue = [];
+
+ var domObjects = parentTag.getElementsByTagName( "span" );
+ var items = DOM.filterElementsByClassName( domObjects, "cuttag" ) || [];
+
+ for ( var i = 0; i < items.length; i++ ) {
+ returnValue[i] = CutTagHandler.getCutTagHandler( items[i] );
+ }
+ return returnValue;
+}
+
+// Opens all cuttags in the given tag (call with document for the entire page)
+CutTagHandler.openAll = function( parentTag ) {
+ var cutTags = CutTagHandler.getAllHandlers( parentTag );
+
+ for ( var i = 0; i < cutTags.length; i++ ) {
+ if ( ! cutTags[i].isOpen() ) {
+ cutTags[i].open( true );
+ }
+ }
+}
+
+// Closes all cuttags in the given tag (call with document for the entire page)
+CutTagHandler.closeAll = function( parentTag ) {
+ var cutTags = CutTagHandler.getAllHandlers( parentTag );
+
+ for ( var i = 0; i < cutTags.length; i++ ) {
+ if ( cutTags[i].isOpen() ) {
+ cutTags[i].close();
+ }
+ }
+}
+
+// writes the expand all/close all controls
+CutTagHandler.writeExpandAllControls = function() {
+ // writes to each span.cutTagControls
+ var domObjects = document.getElementsByTagName( "span" );
+ var items = DOM.filterElementsByClassName( domObjects, "cutTagControls" ) ||
[];
+ if ( items != null && items.length > 0 ) {
+ var cutTags = CutTagHandler.getAllHandlers( document );
+ if ( cutTags.length > 0 ) {
+ var writeOpen = false;
+ var writeClosed = false;
+ var ariaOpen = "";
+ var ariaClose = "";
+ // see which links we should write
+ for ( var i = 0; i < cutTags.length; i++ ) {
+ if ( cutTags[i].isOpen() ) {
+ writeClosed = true;
+ ariaClose += " div-cuttag_" + cutTags[i].data.journal + "_" +
cutTags[i].data.ditemid + "_" + cutTags[i].data.cutid;
+ } else {
+ writeOpen = true;
+ ariaOpen += " div-cuttag_" + cutTags[i].data.journal + "_" +
cutTags[i].data.ditemid + "_" + cutTags[i].data.cutid;
+ }
+ }
+
+ var htmlString = "";
+ if ( writeOpen ) {
+ htmlString = '<a href =
"javascript:CutTagHandler.openAll(document)"><img style="border: 0;" src="' +
Site.imgprefix + '/collapseAll.gif" aria-controls="' + ariaOpen + '" alt="' +
expandAll + '" title="' + expandAll + '"/></a> ';
+ } else {
+ htmlString = '<img style="border: 0; opacity: 0.4; filter:
alpha(opacity=40); zoom: 1;" src="' + Site.imgprefix + '/collapseAll.gif"
alt="' + expandAll + '" title="' + expandAll + '"/> ';
+ }
+ if ( writeClosed ) {
+ htmlString = htmlString + '<a href =
"javascript:CutTagHandler.closeAll(document)"><img style="border: 0;" src="' +
Site.imgprefix + '/expandAll.gif" aria-controls="' + ariaClose + '" alt="' +
collapseAll + '" title="' + collapseAll + '"/></a>';
+ } else {
+ htmlString = htmlString + '<img style="border: 0; opacity: 0.4;
filter: alpha(opacity=40); zoom: 1;" src="' + Site.imgprefix + '/expandAll.gif"
alt="' + collapseAll + '" title="' + collapseAll + '"/>';
+ }
+ for ( itemCount = 0; itemCount < items.length; itemCount++ ) {
+ var controlsTag = items[itemCount];
+ if ( controlsTag != null ) {
+ controlsTag.innerHTML=htmlString;
+ }
+ }
+ }
+ }
+}
+
_______________________________________________
dw-changelog mailing list
[email protected]
http://lists.dwscoalition.org/mailman/listinfo/dw-changelog