Skip to content

Instantly share code, notes, and snippets.

@walterdavis
Last active December 18, 2015 20:39
Show Gist options
  • Select an option

  • Save walterdavis/5842189 to your computer and use it in GitHub Desktop.

Select an option

Save walterdavis/5842189 to your computer and use it in GitHub Desktop.
BETA 2! Updated version of ScriptyFader, uses Freeway 6 techniques, should still work in Freeway 5. Works inline or absolutely positioned.
<action-encoding>UTF-8</action-encoding>
<library-action name="style_accessors">
<action-version version="1.2.5">
Style Accessors
Get and set styles on any element, regardless where they were initially defined.
MIT License
Copyright (c) 2013 Walter Lee Davis
</action-version>
<action-javascript>
/**
* Does this page use a root-based Resources folder?
* @return boolean
*/
if(undefined == FWPage.hasRootResourcesFolder){
FWPage.prototype.hasRootResourcesFolder = function(){
var head = fwDocument.fwTags.fwFind('head');
if(!head) fwAbort('Please call hasRootResourcesFolder from fwBeforeEndHead or later.');
var links = head.fwFindAll('link', 'href');
for(var i in links){
if(links[i].href){
var link = links[i].href.toString();
var page = this.fwFileName.toString().split('.').shift();
if(link.match('../css') && link.indexOf(page) > 0){
return true;
}
}
}
return false;
};
}
/**
* Does this page use a Resources folder?
* @return boolean
*/
if(undefined == FWPage.hasNoResourcesFolder){
FWPage.prototype.hasNoResourcesFolder = function(){
return (! fwClearGif.toString().match('Resources/'))
};
}
/**
* Find the folder where the style should be saved
* @return string
*/
if(undefined == FWPage.styleFolder){
FWPage.prototype.styleFolder = function(){
var rootFolder = fwDocument.fwPages.fwItems[0].fwFolder.fwHttpPath();
if(this.hasNoResourcesFolder()){
return '/' + this.fwFolder.fwHttpPath();
}
if(this.hasRootResourcesFolder()){
return rootFolder + '/css/';
}
return '/' + this.fwFolder.fwHttpPath() + 'css/';
};
}
/**
* Define a URL for the override sheet for this page
* @return string relative URL to override sheet
*/
if(undefined == FWPage.styleOverrideURL){
FWPage.prototype.styleOverrideURL = function(){
var folder = this.styleFolder();
return folder + this.basename() + '_override.css';
};
}
/**
* Define a path to the override sheet for this page.
* @return string root-relative path to the override sheet
*/
if(undefined == FWPage.styleOverridePath){
FWPage.prototype.styleOverridePath = function(){
var rootFolder = fwDocument.fwPages.fwItems[0].fwFolder;
if(!rootFolder) fwAbort('Could not locate the root folder. Make sure there is at least one page in it.')
var rootFolderPath = rootFolder.fwHttpPath(null, true);
return (rootFolderPath + this.styleOverrideURL()).replace(/\//g, ':');
};
}
/**
* Basename for the override sheet
* @return string page filename without extension
*/
if(undefined == FWPage.basename){
FWPage.prototype.basename = function(){
var filename = this.fwFileName.toString().split('.');
if(this.hasRootResourcesFolder()){
filename = this.fwHttpPath().toString().replace(/\//g,'_').split('.');
}
filename.pop();
return filename.join('.');
};
}
/**
* Add a link to an override stylesheet, and create the file for that sheet.
* Only alters the page once per publish cycle.
* Must be called from fwBeforeEndHead() or later.
* @return link to sheet
*/
if(undefined == FWPage.addOverride){
FWPage.prototype.addOverride = function(){
if(this.overrideLink) return this.overrideLink;
var head = fwDocument.fwTags.fwFind('head');
if(!head) fwAbort('Please call addOverride from fwBeforeEndHead or later.')
var link = head.fwAddOpt('link');
head.fwAddRawOpt('');
var myFile = this.resetOverride();
fwParameters['styleOverride'].fwSpecify(myFile);
link.rel = fwQuote('stylesheet');
link.href = fwQuote(fwParameters['styleOverride'].toString());
fwParameters['styleOverride'].fwClear();
link.type = fwQuote('text/css');
this.overrideLink = link;
return link;
};
}
/**
* Erase or initialize the reset stylesheet.
* @return FWFile
*/
if(undefined == FWPage.resetOverride){
FWPage.prototype.resetOverride = function(){
var myFile = new FWFile();
myFile.fwOpenWrite(this.styleOverridePath(), true);
myFile.fwSetEncoding('UTF-8');
myFile.fwWrite('');
myFile.fwClose();
return myFile;
};
}
/**
* Convert a string of CSS into a hash.
* @return object JSON of styles
*/
if(undefined == cssToHash){
var cssToHash = function(string){
var out = {}, string = string.toString().replace(/^"\s*(.+?)\s*"$/, '$1');
var pairs = string.split(/\s*;\s*/);
for (var i in pairs){
var pair = pairs[i].split(/\s*:\s*/);
out[pair[0]] = pair[1];
};
return out;
};
}
/**
* Convert a JSON object of style definitions into CSS.
* @return string CSS style rules
*/
if(undefined == hashToCSS){
var hashToCSS = function(hash){
var out = [];
for (var i in hash){
var pair = i + ': ' + hash[i];
out.push(pair);
}
return out.join('; ').toString();
};
}
/**
* Get the CSS selector for a single tag.
* @return string
*/
if(undefined == FWTag.getSelector){
FWTag.prototype.getSelector = function(){
if(this.id){
var id = '#' + this.id.toString().slice(1,-1);
if(id.length > 0){
return id + ', ' + id + '.f-ms';
}
}
if(this['class']){
classes = this['class'].toString().slice(1,-1).split(/\s+/);
return '.' + classes.join('.');
}
};
}
/**
* Write CSS into the override sheet.
* @return void
*/
if(undefined == FWTag.setOverride){
FWTag.prototype.setOverride = function(content){
var sheet = fwPage.addOverride();
var myFile = new FWFile();
myFile.fwOpenRead(fwPage.styleOverridePath());
var existing = myFile.fwReadString(myFile.fwAvailable);
myFile.fwClose();
var overwrite = false;
var test = this.id ? this.id.toString().slice(1,-1) : fwItem.toString();
if(existing && existing.match(test)){
var re = new RegExp(this.getSelector() + ' \\{ (.+?) \\}');
existing = existing.replace(re, content);
content = existing;
overwrite = true;
}else{
content = content + "\n";
}
myFile.fwOpenWrite(fwPage.styleOverridePath(), overwrite);
myFile.fwSetEncoding('UTF-8');
myFile.fwWrite(content);
myFile.fwClose();
this.style = null;
};
}
/**
* Read the content of the entire override sheet.
* @return object JSON of styles
*/
if(undefined == FWTag.getOverride){
FWTag.prototype.getOverride = function(){
var myFile = new FWFile();
myFile.fwOpenRead(fwPage.styleOverridePath(), false);
var content = myFile.fwReadString(myFile.fwAvailable);
myFile.fwClose();
var re = new RegExp(this.getSelector() + ' \\{ (.+?) \\}');
if( null != content.match(re) && content.match(re).length > 0 )
return( cssToHash(content.match(re)[1]) );
return {};
};
}
/**
* Get one CSS attribute of a single tag.
* attributeName is an attribute (width, padding...) returns value (if set) or null.
* @return mixed
*/
if(undefined == FWTag.getStyle){
FWTag.prototype.getStyle = function(attributeName){
var styles = this.getAllStyles();
return styles[attributeName] || null;
};
}
/**
* Get override CSS attributes of a single tag, in format for writing to external stylesheet.
* attributeName is an attribute (width, padding...) returns value (if set) or false.
* @return string or false
*/
if(undefined == FWTag.getStyleAsRule){
FWTag.prototype.getStyleAsRule = function(){
if(this.style){
return this.getSelector() + ' { ' + this.style.toString().slice(1,-1) + ' }';
}else{
return false;
}
};
}
/**
* Get all CSS attributes of a single tag, regardless where they were set.
* @return JSON object
*/
if(undefined == FWTag.getAllStyles){
FWTag.prototype.getAllStyles = function(){
if (this==null) return null;
var styles = {}, overrides = {};
if(fwPage.fwElementStyle){
styles = cssToHash(fwPage.fwElementStyle(this));
}
if(fwDocument.fwExternalStylesheets){
overrides = this.getOverride();
for(var i in overrides){
styles[i] = overrides[i];
}
}
if(this.style){
var inline = cssToHash(this.style);
for (var i in inline) {
styles[i] = inline[i];
};
}
return styles;
};
}
/**
* Sets a CSS attribute such as "position:absolute" in a tag value
* Passing an attribute value of null resets that attribute to default
* @return void
*/
if(undefined == FWTag.setStyle){
FWTag.prototype.setStyle = function(attributeName, value){
if(this == null || arguments.length < 2) return;
if(typeof value == 'string' && value.toLowerCase() == 'null') value = null;
var styles = {}, external = {};
var reset = { /* BACKGROUND */ 'background': 'none', 'background-attachment':
'scroll', 'background-clip': 'border-box', 'background-color': 'inherit',
'background-image': 'none', 'background-origin': 'padding-box',
'background-position': '0% 0%', 'background-repeat': 'repeat', 'background-size':
'auto', /* BORDERS */ 'border-collapse': 'separate', 'border': 'none',
'border-width': '0', 'border-style': 'none', 'border-color': '#000000',
'border-width': 'none', /* top */ 'border-top': 'none', 'border-top-color':
'#000000', 'border-top-style': 'none', 'border-top-width': '0', /* right */
'border-right': 'none', 'border-right-color': '#000000', 'border-right-style':
'none', 'border-right-width': '0', /* bottom */ 'border-bottom': 'none',
'border-bottom-color': '#000000', 'border-bottom-style': 'none',
'border-bottom-width': '0', /* left */ 'border-left': 'none', 'border-left-color':
'#000000', 'border-left-style': 'none', 'border-left-width': '0', /* border-image */
'border-image': 'none', 'border-image-outset': '0', 'border-image-repeat': 'stretch',
'border-image-slice': '100%', 'border-image-source': 'none', 'border-image-width':
'1', /* border-radius */ 'border-radius': '0', 'border-top-left-radius': '0',
'border-top-right-radius': '0', 'border-bottom-left-radius': '0',
'border-bottom-right-radius': '0', /* BOX ATTRIBUTES */ 'height': 'auto',
'max-height': 'none', 'min-height': '0', 'width': 'auto', 'max-width': 'none',
'min-width': '0', 'position': 'static', 'display': 'block', 'visibility': 'visible',
'top': 'auto', 'right': 'auto', 'bottom': 'auto', 'left': 'auto', 'float': 'none',
'clear': 'none', 'margin': '0', 'margin-top': '0', 'margin-right': '0',
'margin-bottom': '0', 'margin-left': '0', 'padding': '0', 'padding-top': '0',
'padding-right': '0', 'padding-bottom': '0', 'padding-left': '0', 'opacity': '1',
'overflow': 'visible', 'overflow-x': 'visible', 'overflow-y': 'visible', 'z-index':
'auto', 'zoom': '1', 'filter': 'none', 'cursor': 'auto', 'box-shadow': 'none',
'box-sizing': 'content-box', /* TEXT */ 'color': 'inherit', 'font': 'inherit',
'font-family': 'inherit', 'font-size': '1em', 'font-style': 'inherit',
'font-variant': 'inherit', 'font-weight': 'inherit', 'letter-spacing': 'inherit',
'line-height': 'inherit', 'list-style-image': 'none', 'list-style-position':
'outside', 'list-style-type': 'disc', 'list-style': 'disc', 'text-decoration':
'none', 'text-indent': '0', 'text-shadow': 'none', 'vertical-align': 'baseline',
'white-space': 'normal' };
if(fwPage.fwElementStyle){
external = cssToHash(fwPage.fwElementStyle(this));
}
if(fwDocument.fwExternalStylesheets){
styles = this.getOverride();
}
if(this.style){
var inlines = cssToHash(this.style);
for(var i in inlines){
styles[i] = inlines[i];
}
}
if(value == null){
if(reset[attributeName] && external[attributeName]){
styles[attributeName] = reset[attributeName];
}else{
delete styles[attributeName];
}
}else{
styles[attributeName] = value;
}
this.style = fwQuote(hashToCSS(styles));
if(fwDocument.fwExternalStylesheets){
// write styles to override
this.setOverride(this.getStyleAsRule());
this.style = null;
}
return this;
};
}
</action-javascript>
</library-action>
<library-action name="cdn_functions">
<action-javascript>
/**
* Write a script to an external file.
* name: common name of script (domloaded, windowload, custom)
* fileParameter: the action-file that holds this file
* content: string or array of strings containing the content
* returns URL to generated file, for linking purposes
*/
var createExternalScript = function(name, fileParameter, content){
if(!content.join){
content = [content];
}
var myFile = new FWFile();
if(fwParameters[fileParameter].fwHasFile){
myFile.fwOpenWrite(fwParameters[fileParameter].fwValue, true, 'TEXT');
myFile.fwSetEncoding('UTF-8');
}else{
var path = fwPage.fwHttpPath();
path = path.replace(/\//g, '_').split('.');
var filename = path.pop();
path = path.join('.') + '_' + name + '.js';
myFile.fwOpenWrite(path, true, 'TEXT');
myFile.fwSetEncoding('UTF-8');
}
for (var i=0; i < content.length; i++) {
myFile.fwWrite(content[i] + "\n");
};
myFile.fwClose();
fwParameters[fileParameter].fwSpecify(myFile);
var filePath = fwParameters[fileParameter].toString();
fwParameters[fileParameter].fwClear();
return filePath;
}
/**
* Create a CDN link to a JavaScript library.
* name: common filename for the library (prototype, scriptaculous, jquery)
* path: (optional) fully-qualified URL to the CDN-hosted file
* (path is not needed if you are linking to prototype or scriptaculous)
* WARNING! changes any existing link in the page to the library to the
* one specified in path or defaults
* returns reference to the script
*/
var findOrCreateScriptLink = function(name, path){
var head = fwDocument.fwTags.fwFind('head');
var script = pageHasLinkToScript(name), load = '';
var libs = {
'prototype': 'http://ajax.googleapis.com/ajax/libs/prototype/1.7/prototype.js',
'scriptaculous': 'http://ajax.googleapis.com/ajax/libs/scriptaculous/1.9/scriptaculous.js'
};
if(!libs[name]){
if(!!path){
libs[name] = path;
}else{
fwAbort('Please provide a URL for “' + name + '”. Publishing cannot continue.');
}
}
if(!script){
script = head.fwAdd('script', true);
script.fwAddRawOpt('');
head.fwAddRawOpt('');
}
//catch any load variables from scriptaculous
if(name == 'scriptaculous' && script.src && script.src.toString().match(/\?load=/)){
load = script.src.toString().match(/(\?load=.+?)"/)[1]; //"
}
//overwrite the path to the script to make it current
script.src = fwQuote(libs[name] + load);
script.type = fwQuote('text/javascript');
script.charset = fwQuote('utf-8');
return script;
}
var pageHasLinkToScript = function(name){
var script = false;
var scripts = fwDocument.fwTags.fwFindAll('script');
for(i in scripts){
if(scripts[i].src && scripts[i].src.toString().match(new RegExp(name + '\.js'))){
script = scripts[i];
}
}
return script;
}
var findOrCreateStyleLink = function(name, path){
var head = fwDocument.fwTags.fwFind('head');
var styles = head.fwFindAll('link'), re = new RegExp(name + '\.css');
var findStyleLink = function(re){
for(i in styles){
if(styles[i].href && styles[i].href.toString().match(re)){
return styles[i];
}
}
}
var style = findStyleLink(re);
if(!style){
style = head.fwAdd('link', false);
head.fwAddRawOpt('');
}
style.href = fwQuote(path);
style.rel = fwQuote('stylesheet');
style.type = fwQuote('text/css');
style.charset = fwQuote('utf-8');
return style;
}
/**
* Wrapper to simplify function call
* returns nothing
*/
var addPrototype = function(){
findOrCreateScriptLink('prototype');
}
/**
* Add scriptaculous to the page, and load any modules needed if fewer than all.
* modules: comma-separated string or array of scriptaculous modules
* returns nothing
*/
var addScriptaculous = function(modules){
var scriptaculousLibs = ["builder", "effects", "dragdrop", "controls", "slider", "sound"];
var load = [];
if(modules.join){
modules = modules.join();
}
var script = findOrCreateScriptLink('scriptaculous');
if(script.src.toString().match(/\?load=/)){
modules += script.src.toString().split(/\?load=/)[1];
}
for (var i=0; i < scriptaculousLibs.length; i++) {
var re = new RegExp(scriptaculousLibs[i]);
if(modules.match(re))
load.push(scriptaculousLibs[i]);
};
if(load.length > 0 && load.length < 6){
load = '?load=' + load.join(',');
script.src = script.src.toString().replace(/\?load=[^"]+/, '').replace(/"$/, load + '"'); //"
}
}
</action-javascript>
</library-action>
<library-action name="classname_functions">
<action-javascript>
if(!'test'.strip) String.prototype.strip = function() {
return this.replace(/^\s+/, '').replace(/\s+$/, '');
};
if(undefined == FWTag.hasClassName){
FWTag.prototype.hasClassName = function(className) {
className = fwQuote(className,'','"'); //"
var elementClassName = (this["class"]) ? fwQuote(this["class"],'','"') : ''; //"
return ((elementClassName.length > 0) && (elementClassName == className || new RegExp("\\b" + className + "\\b").test(elementClassName)));
};
}
if(undefined == FWTag.addClassName){
FWTag.prototype.addClassName = function(className) {
className = fwQuote(className,'','"'); //"
if (!this.hasClassName(className)){
var elementClassName = (this["class"]) ? fwQuote(this["class"],'','"') : ''; //"
var out = (elementClassName + ' ' + className).strip();
this["class"] = fwQuote(out);
return this;
}
};
}
if(undefined == FWTag.removeClassName){
FWTag.prototype.removeClassName = function(className) {
var className = fwQuote(className,'','"');//"
var elementClassName = (this['class']) ? fwQuote(this['class'],'','"') : '';//"
elementClassName = elementClassName.replace(
new RegExp("(^|\\s+)" + className + "(\\s+|$)"), ' ').strip();
this['class'] = (elementClassName.length > 0) ? fwQuote(elementClassName) : null;
return this;
};
}
</action-javascript>
</library-action>
<item-action name="ScriptyFader">
<action-appliesto non-html32/>
<action-version version="0.6.1">
ScriptyFader
Action (c)2011, 2013 Walter Lee Davis.
Apply the action to an HTML item to mark the location of a fading group of page elements.
</action-version>
<action-markup custom name="fader">var thumbs = $$('.SFthumb');
var mains = $$('.SFmain');
thumbs.each(function(elm){
if(elm.down('img')){
elm.down('img').setOpacity(__faded__);
elm.observe('mouseover', function(evt){
elm.down('img').morph('opacity:1',{duration:0.3});
});
elm.observe('mouseout', function(evt){
if(!elm.hasClassName('active')) elm.down('img').morph('opacity:__faded__',{duration:0.3});
});
}
elm.observe('click',function(evt){
evt.stop();
elm.addClassName('active');
if(elm.down('img')) elm.down('img').setStyle('opacity:1');
var main = $(elm.readAttribute('rel'))
if(main.pe) main.pe.stop();
if(history && history.pushState){
history.pushState(null,window.title,window.location.href.split(/#/).first() + '#' + elm.href.split(/#/).last());
}else{
window.location.hash = '#' + elm.href.split(/#/).last();
}
setSelection(elm);
});
});
mains.each(function(main){
var wrap = main.wrap('div');
$w('top left bottom right position width height max-width max-height margin float clear').each(function(attr){
wrap.setStyle(attr + ':' + main.getStyle(attr));
});
$w('top left bottom right').each(function(attr){
main.setStyle(attr + ':auto');
});
main.setStyle('position:absolute;float:none;clear:none;');
main.update();
var clone = new Element('div',{'id':'clone_' + main.readAttribute('id')});
main.insert({after: clone});
clone.setStyle({top: main.getStyle('top') || 0, left: main.getStyle('left') || 0, bottom: main.getStyle('bottom') || 'auto', right: main.getStyle('right') || 'auto', width: main.getStyle('width') || 'auto', height: main.getStyle('height') || 'auto', maxWidth: main.getStyle('max-width') || 'none', maxHeight: main.getStyle('max-height') || 'none', position: 'absolute', zIndex:main.getStyle('z-index') -1}).hide();
if($$('a[rel~="' + main.id + '"]').length > 0){
main['initialSelection'] = $$('a[rel~="' + main.id + '"]').first();
main.initialSelection.addClassName('active')
main.initialSelection.down('img').setOpacity(0.9999997);
}else{
main['initialSelection'] = sFoptions.get(main.id.slice(0,-6)).first();
}
main['autofade'] = 0;
if(main.hasClassName('autofade')){
var classes = $w(main.readAttribute('class'));
main.autofade = parseFloat(classes.find(function(c){ return c.slice(0,5) == 'fade_'; }).slice(5).replace('-','.'));
}
if(window.location.hash && window.location.hash.length > 1 && thumbs.pluck('href').map(function(elm){ return '#' + elm.split('#').last()}).include(window.location.hash)){
main.initialSelection = thumbs.find(function(elm){ return '#' + elm.href.split('#').last() == window.location.hash; });
setSelection(main.initialSelection);
}else if(main.autofade > 0){
if(main.initialSelection.href){
new Ajax.Updater(main,'_' + main.initialSelection.href.split('#').last() + '.html',{method:'get'});
}else{
new Ajax.Updater(main,'_' + main.initialSelection + '.html',{method:'get'});
}
var idx = 0;
main['family'] = $$('a[rel~="' + main.id + '"]').each(function(elm){elm['idx'] = ++idx});
if(main.family.length < sFoptions.get(main.id.slice(0,-6)).length){
main['pe'] = new PeriodicalExecuter(function(){
var next;
var optionsArray = sFoptions.get(main.id.slice(0,-6));
if (next = optionsArray.find(function(elm){ return optionsArray.indexOf(elm) > optionsArray.indexOf(main.initialSelection); })){
main.initialSelection = next;
}else{
main.initialSelection = optionsArray.first();
}
loadOption(main.initialSelection,main.id);
},main.autofade);
}else{
main['pe'] = new PeriodicalExecuter(function(){
var next;
if (next = main.family.find(function(elm){ return elm.idx > main.initialSelection.idx; })){
main.initialSelection = next;
}else{
main.initialSelection = main.family.first();
}
setSelection(main.initialSelection);
},main.autofade);
}
main.observe('click', function(evt){ main.pe.stop(); });
}else{
new Ajax.Updater(main,'_' + main.readAttribute('id').gsub(/_fader$/,'') + '.html',{method:'get'});
}
});
function setSelection(elm){
var group = elm.readAttribute('rel');
var main = $(group);
var clone = $('clone_' + group);
$$('.' + group).reject(function(el){return el == elm;}).each(function(el){ el.removeClassName('active'); if(el.down('img')) el.down('img').morph('opacity:__faded__',{duration:0.3}); });
elm.addClassName('active');
elm.select('img').invoke('setStyle', {opacity:1});
loadOption(elm.href.split('#').last(),group);
}
function loadOption(choice,container){
var main = $(container).addClassName('loadingIndicator');
var clone = $('clone_' + container);
new Ajax.Updater(clone,'_' + choice + '.html' ,{
method:'get',
onComplete: function(){
Effect.Appear(clone, {queue: { position: 'start', scope: container, limit: 2 }});
Effect.Fade(main,{
queue: { position: 'start', scope: container, limit: 2 },
afterFinish: function(){
main.update(clone.innerHTML);
main.setOpacity(0.9999997).show().removeClassName('loadingIndicator');
clone.hide().update();
}
});
}
});
}
Event.observe(window,'popstate', function(evt){
if(thumbs.length > 0){
if(window.location.hash && window.location.hash.length > 1){
var initialSelection = thumbs.find(function(elm){ return '#' + elm.href.split('#').last() == window.location.hash; });
}else{
var initialSelection = thumbs.first().addClassName('active');
if(initialSelection.down('img')) initialSelection.down('img').setOpacity(0);
}
setSelection(initialSelection);
}
});
</action-markup>
<action-file name ="partial" var keepwithhtml/>
<action-number name="autofade" title="Auto-Fade Interval" default=0 real-numbers />
<action-checkbox name="spinner" title="Show Spinner" default=yes />
<action-number name="faded" title="Faded Thumbnail Opacity" default=0.4 real-numbers>
<action-file name="styleOverride" var />
<action-file name="fader_file" var />
<action-javascript>
<action-include name="cdn_functions">
<action-include name="classname_functions">
<action-include name="style_accessors">
function fwAfterStartHead(){
addPrototype();
addScriptaculous('effects');
}
function fwBeforeEndHead(){
var myHead = fwDocument.fwTags.fwFind("head");
if (myHead && !fwPage.SFhead){
var myScript = myHead.fwAddJavaScript();
myScript.fwAddRawln("var sFoptions = $H();");
fwPage['SFhead'] = true;
}
myHead.fwAddRawln();
}
function makePartial(myName,textStream){
textStream.fwConvertLineEndings = true;
textStream = fwEncode(textStream);
outFile = new FWFile;
if (outFile.fwOpenWrite('_' + myName + '.html',true,"TEXT","R*ch")){
fwParameters['partial'].fwClear();
outFile.fwSetEncoding('UTF-8');
outFile.fwWrite(textStream);
outFile.fwClose();
fwParameters['partial'].fwSpecify(outFile);
var partial = fwParameters['partial'].toString();
fwParameters['partial'].fwClear();
return partial.substring(1,partial.indexOf('.'));
}
fwParameters['partial'].fwClear();
return null;
}
function clonePosition(target,source){
var pos = ['top','left','bottom','right','z-index','position'];
var dims = ['height', 'width', 'max-height', 'max-width', 'min-height', 'min-width'];
if(source){
for(var i = 0; i < pos.length; i++){
var original = source.getStyle(pos[i]);
if(original) target.setStyle(pos[i], original);
};
for (var i=0; i < dims.length; i++) {
var original = source.getStyle(dims[i]);
if(original) target.setStyle(dims[i], original);
};
}
}
function fwAfterEndBody(){
var originalHeight, originalWidth
var thisItem = fwDocument.fwTags.fwFind(fwItem);
if (thisItem){
if(fwParameters['autofade'].fwValue > 0 && fwParameters['autofade'].fwValue < 1.1) alert('Autofade settings below 1.1 are not recommended.');
var spot = thisItem.fwAddEnclosing("div",true);
spot.id = fwQuote(thisItem.id.toString().slice(1,-1) + '_fader');
clonePosition(spot,thisItem);
spot.setStyle('border', null).setStyle('margin', null).setStyle('padding', null).setStyle('height', thisItem.getStyle('height')).setStyle('width', thisItem.getStyle('width'));
spot.addClassName('SFmain');
if(fwParameters['autofade'].fwValue > 0){
spot.addClassName('autofade');
spot.addClassName('fade_' + fwParameters['autofade'].fwValue.toString().replace(/\./,'-'));
}
thisItem.setStyle('position', 'relative').setStyle('top', 'auto').setStyle('left', 'auto').setStyle('bottom', 'auto').setStyle('right', 'auto').setStyle('margin', '0');
var code = thisItem.fwToHTML();
makePartial(thisItem.id.toString().slice(1,-1),code);
thisItem.fwDelete();
if(fwParameters.spinner.fwBoolValue){
findOrCreateStyleLink('fader', 'http://cdn.freewaypro.com/scripty_fader/0.6.1/fader.css');
}
if(!fwPage.SFspinner){
fwPage['SFspinner'] = true;
var theMarkup = fwMarkups['fader'];
var opacity = fwParameters.faded.fwValue;
if(opacity < 0) opacity = 0;
if(opacity > 1) opacity = 1;
theMarkup = theMarkup.toString().replace(/__faded__/g,opacity);
theMarkup.fwConvertLineEndings = true;
var path = createExternalScript('fader', 'fader_file', ['document.observe(\'dom:loaded\', function(evt){', theMarkup, '});']);
findOrCreateScriptLink('fader', path);
}
}
}
function fwAfterStartBody(){
var options = fwPage.fwFindAllActions(2,['ScriptyFader','ScriptyFader Option']);
if(options) {
var myHead = fwDocument.fwTags.fwFind("head");
if (myHead){
var myScript = myHead.fwAddJavaScript();
myScript.fwAddRaw("sFoptions.set('" + fwItem + "', [")
var filteredOptions = [];
filteredOptions.push( fwQuote(fwItem.toString()) );
for( i in options){
action = options[i];
if((action.fwParameters['targets'] && action.fwParameters.targets.fwValue == fwItem) && action.fwItem != fwItem){
filteredOptions.push( fwQuote(options[i].fwItem.toString()) );
}
}
myScript.fwAddRaw(filteredOptions.join(',') + ']);');
myScript.fwAddRawln('');
}
}
}
</action-javascript>
</item-action>
<item-action name="ScriptyFader Option">
<action-appliesto layer non-html32/>
<action-version version="0.6.1">
ScriptyFader Option
(c)2011 Walter Lee Davis
Apply the action to any layer to designate a ScriptyFader option.
</action-version>
<action-file name ="partial" var keepwithhtml/>
<action-itemref name="targets" title="Target" filter="activeTarget"/>
<action-file name="styleOverride" var />
<action-javascript>
<action-include name="cdn_functions">
<action-include name="classname_functions">
<action-include name="style_accessors">
function activeTarget(item){
var options = fwPage.fwFindAllActions(2,'ScriptyFader');
if(options) {
for( i in options){
if(item == options[i].fwItem) return true;
}
}
return false;
}
function fwInterface(){
if(fwParameters['targets'].fwValue == null){
var options = fwPage.fwFindAllActions(2,'ScriptyFader');
if(options) {
for(i in options){
c = options[i].fwItem;
fwParameters['targets'].fwValue = c;
}
}
}
}
function makePartial(myName,textStream){
textStream.fwConvertLineEndings = true;
textStream = fwEncode(textStream);
outFile = new FWFile;
if (outFile.fwOpenWrite('_' + myName + '.html',true,"TEXT","R*ch")){
fwParameters['partial'].fwClear();
outFile.fwSetEncoding('UTF-8');
outFile.fwWrite(textStream);
outFile.fwClose();
fwParameters['partial'].fwSpecify(outFile);
var partial = fwParameters['partial'].toString();
fwParameters['partial'].fwClear();
return partial.substring(1,partial.indexOf('.'));
}
fwParameters['partial'].fwClear();
return null;
}
function fwBeforeEndBody(){
var thisItem = fwDocument.fwTags.fwFind("div", fwItem);
if (thisItem){
thisItem.setStyle('position', 'relative').setStyle('top', 'auto').setStyle('left', 'auto').setStyle('bottom', 'auto').setStyle('right', 'auto').setStyle('margin', '0');
var code = thisItem.fwToHTML();
makePartial(thisItem.id.toString().slice(1,-1),code);
thisItem.fwDelete();
}
}
</action-javascript>
</item-action>
<item-action name="ScriptyFader Thumbnail" generates-link>
<action-appliesto graphic pass-through/>
<action-version version="0.6.1">
ScriptyFader Thumbnail
(c)2011 Walter Lee Davis
Apply the action to any graphic to create direct navigation to one of the ScriptyFader options.
</action-version>
<action-itemref name="base" title="Fader" filter="activeBase"/>
<action-itemref name="targets" title="Option" filter="activeTarget"/>
<action-file name="styleOverride" var />
<action-javascript>
<action-include name="cdn_functions">
<action-include name="classname_functions">
<action-include name="style_accessors">
function activeBase(item){
var options = fwPage.fwFindAllActions(2,['ScriptyFader']);
if(options) {
for( i in options){
if(item == options[i].fwItem) return true;
}
}
return false;
}
function activeTarget(item){
var options = fwPage.fwFindAllActions(2,['ScriptyFader','ScriptyFader Option']);
if(options) {
for( i in options){
action = options[i];
if((action.fwParameters['targets'] && action.fwParameters.targets.fwValue == fwParameters.base.fwValue) || action.fwItem == fwParameters.base.fwValue){
if(item == action.fwItem) return true;
}else{
delete( options[i] );
}
}
}
return false;
}
function fwInterface(){
if(fwParameters['base'].fwValue == null){
var bases = fwPage.fwFindAllActions(2,['ScriptyFader']);
if(bases) {
for(i in bases){
b = bases[i].fwItem;
fwParameters['base'].fwValue = b;
}
}
var options = fwPage.fwFindAllActions(2,['ScriptyFader','ScriptyFader Option']);
if(options) {
for(i in options){
var action = options[i];
if((action.fwParameters['targets'] && action.fwParameters.targets.fwValue == fwParameters['base'].fwValue) || action.fwItem == fwParameters['base'].fwValue){
c = options[i].fwItem;
fwParameters['targets'].fwValue = c;
}
}
}
}
}
function fwAfterEndBody(){
var thisImg = fwDocument.fwTags.fwFind("img",fwItem);
if(thisImg){
var thisItem = thisImg.fwFindEnclosing("a");
}
if (!thisItem){
thisItem = fwDocument.fwTags.fwFind("img", fwItem);
thisItem = thisItem.fwAddEnclosing('a',true);
}
thisItem.href = fwQuote('#' + fwParameters['targets'].fwValue.toString());
thisItem.rel = fwQuote(fwParameters['base'].fwValue.toString() + '_fader');
thisItem.addClassName('SFthumb')
thisItem.addClassName(fwParameters['base'].fwValue.toString() + '_fader')
}
</action-javascript>
</item-action>
<action name="ScriptyFader Text Link" preview-text="&Text;" generates-link height=12>
<action-version version="0.6.1">
ScriptyFader Text Link
(c)2011 Walter Lee Davis
Insert the Action in a text container to create direct navigation to one of the ScriptyFader options.
</action-version>
<action-text name="Text" script default="link text"/>
<action-itemref name="base" title="Fader" filter="activeBase"/>
<action-itemref name="targets" title="Option" filter="activeTarget"/>
<action-file name="styleOverride" var />
<action-javascript>
<action-include name="cdn_functions">
<action-include name="classname_functions">
<action-include name="style_accessors">
function activeBase(item){
var options = fwPage.fwFindAllActions(2,['ScriptyFader']);
if(options) {
for( i in options){
if(item == options[i].fwItem) return true;
}
}
return false;
}
function activeTarget(item){
var options = fwPage.fwFindAllActions(2,['ScriptyFader','ScriptyFader Option']);
if(options) {
for( i in options){
action = options[i];
if((action.fwParameters['targets'] && action.fwParameters.targets.fwValue == fwParameters.base.fwValue) || action.fwItem == fwParameters.base.fwValue){
if(item == action.fwItem) return true;
}else{
delete( options[i] );
}
}
}
return false;
}
function fwInterface(){
if(fwParameters['base'].fwValue == null){
var bases = fwPage.fwFindAllActions(2,['ScriptyFader']);
if(bases) {
for(i in bases){
b = bases[i].fwItem;
fwParameters['base'].fwValue = b;
}
}
var options = fwPage.fwFindAllActions(2,['ScriptyFader','ScriptyFader Option']);
if(options) {
for(i in options){
var action = options[i];
if((action.fwParameters['targets'] && action.fwParameters.targets.fwValue == fwParameters['base'].fwValue) || action.fwItem == fwParameters['base'].fwValue){
c = options[i].fwItem;
fwParameters['targets'].fwValue = c;
}
}
}
}
}
function fwAfterEndBody(){
var enclosingTag = fwDocument.fwTags.fwFind("",fwItem);
if (enclosingTag){
var myLink = enclosingTag.fwFindEnclosing("a");
if (!myLink)
myLink = enclosingTag.fwFind("a", fwItem);
if (!myLink)
{
myLink = enclosingTag.fwAdd("a", true);
myLink.href = fwQuote('#' + fwParameters['targets'].fwValue.toString());
}
else
myLink.href = fwQuote('#' + fwParameters['targets'].fwValue.toString());
myLink.fwAddRaw(fwEncode(fwParameters.Text, fwPage));
}
myLink.href = fwQuote('#' + fwParameters['targets'].fwValue.toString());
myLink.rel = fwQuote(fwParameters['base'].fwValue.toString() + '_fader');
myLink.addClassName('SFthumb')
myLink.addClassName(fwParameters['base'].fwValue.toString() + '_fader')
}
</action-javascript>
</action>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment