Background: #fff Foreground: #000 PrimaryPale: #8cf PrimaryLight: #18f PrimaryMid: #04b PrimaryDark: #014 SecondaryPale: #ffc SecondaryLight: #fe8 SecondaryMid: #db4 SecondaryDark: #841 TertiaryPale: #eee TertiaryLight: #ccc TertiaryMid: #999 TertiaryDark: #666 Error: #f88
/*{{{*/ body {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];} a {color:[[ColorPalette::PrimaryMid]];} a:hover {background-color:[[ColorPalette::PrimaryMid]]; color:[[ColorPalette::Background]];} a img {border:0;} h1,h2,h3,h4,h5,h6 {color:[[ColorPalette::SecondaryDark]]; background:transparent;} h1 {border-bottom:2px solid [[ColorPalette::TertiaryLight]];} h2,h3 {border-bottom:1px solid [[ColorPalette::TertiaryLight]];} .button {color:[[ColorPalette::PrimaryDark]]; border:1px solid [[ColorPalette::Background]];} .button:hover {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::SecondaryLight]]; border-color:[[ColorPalette::SecondaryMid]];} .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::SecondaryDark]];} .header {background:[[ColorPalette::PrimaryMid]];} .headerShadow {color:[[ColorPalette::Foreground]];} .headerShadow a {font-weight:normal; color:[[ColorPalette::Foreground]];} .headerForeground {color:[[ColorPalette::Background]];} .headerForeground a {font-weight:normal; color:[[ColorPalette::PrimaryPale]];} .tabSelected{color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border-left:1px solid [[ColorPalette::TertiaryLight]]; border-top:1px solid [[ColorPalette::TertiaryLight]]; border-right:1px solid [[ColorPalette::TertiaryLight]]; } .tabUnselected {color:[[ColorPalette::Background]]; background:[[ColorPalette::TertiaryMid]];} .tabContents {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::TertiaryPale]]; border:1px solid [[ColorPalette::TertiaryLight]];} .tabContents .button {border:0;} #sidebar {} #sidebarOptions input {border:1px solid [[ColorPalette::PrimaryMid]];} #sidebarOptions .sliderPanel {background:[[ColorPalette::PrimaryPale]];} #sidebarOptions .sliderPanel a {border:none;color:[[ColorPalette::PrimaryMid]];} #sidebarOptions .sliderPanel a:hover {color:[[ColorPalette::Background]]; background:[[ColorPalette::PrimaryMid]];} #sidebarOptions .sliderPanel a:active {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::Background]];} .wizard {background:[[ColorPalette::PrimaryPale]]; border:1px solid [[ColorPalette::PrimaryMid]];} .wizard h1 {color:[[ColorPalette::PrimaryDark]]; border:none;} .wizard h2 {color:[[ColorPalette::Foreground]]; border:none;} .wizardStep {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]]; border:1px solid [[ColorPalette::PrimaryMid]];} .wizardStep.wizardStepDone {background::[[ColorPalette::TertiaryLight]];} .wizardFooter {background:[[ColorPalette::PrimaryPale]];} .wizardFooter .status {background:[[ColorPalette::PrimaryDark]]; color:[[ColorPalette::Background]];} .wizard .button {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryLight]]; border: 1px solid; border-color:[[ColorPalette::SecondaryPale]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryDark]] [[ColorPalette::SecondaryPale]];} .wizard .button:hover {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Background]];} .wizard .button:active {color:[[ColorPalette::Background]]; background:[[ColorPalette::Foreground]]; border: 1px solid; border-color:[[ColorPalette::PrimaryDark]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryPale]] [[ColorPalette::PrimaryDark]];} #messageArea {border:1px solid [[ColorPalette::SecondaryMid]]; background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]];} #messageArea .button {color:[[ColorPalette::PrimaryMid]]; background:[[ColorPalette::SecondaryPale]]; border:none;} .popupTiddler {background:[[ColorPalette::TertiaryPale]]; border:2px solid [[ColorPalette::TertiaryMid]];} .popup {background:[[ColorPalette::TertiaryPale]]; color:[[ColorPalette::TertiaryDark]]; border-left:1px solid [[ColorPalette::TertiaryMid]]; border-top:1px solid [[ColorPalette::TertiaryMid]]; border-right:2px solid [[ColorPalette::TertiaryDark]]; border-bottom:2px solid [[ColorPalette::TertiaryDark]];} .popup hr {color:[[ColorPalette::PrimaryDark]]; background:[[ColorPalette::PrimaryDark]]; border-bottom:1px;} .popup li.disabled {color:[[ColorPalette::TertiaryMid]];} .popup li a, .popup li a:visited {color:[[ColorPalette::Foreground]]; border: none;} .popup li a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border: none;} .popup li a:active {background:[[ColorPalette::SecondaryPale]]; color:[[ColorPalette::Foreground]]; border: none;} .popupHighlight {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];} .listBreak div {border-bottom:1px solid [[ColorPalette::TertiaryDark]];} .tiddler .defaultCommand {font-weight:bold;} .shadow .title {color:[[ColorPalette::TertiaryDark]];} .title {color:[[ColorPalette::SecondaryDark]];} .subtitle {color:[[ColorPalette::TertiaryDark]];} .toolbar {color:[[ColorPalette::PrimaryMid]];} .toolbar a {color:[[ColorPalette::TertiaryLight]];} .selected .toolbar a {color:[[ColorPalette::TertiaryMid]];} .selected .toolbar a:hover {color:[[ColorPalette::Foreground]];} .tagging, .tagged {border:1px solid [[ColorPalette::TertiaryPale]]; background-color:[[ColorPalette::TertiaryPale]];} .selected .tagging, .selected .tagged {background-color:[[ColorPalette::TertiaryLight]]; border:1px solid [[ColorPalette::TertiaryMid]];} .tagging .listTitle, .tagged .listTitle {color:[[ColorPalette::PrimaryDark]];} .tagging .button, .tagged .button {border:none;} .footer {color:[[ColorPalette::TertiaryLight]];} .selected .footer {color:[[ColorPalette::TertiaryMid]];} .sparkline {background:[[ColorPalette::PrimaryPale]]; border:0;} .sparktick {background:[[ColorPalette::PrimaryDark]];} .error, .errorButton {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::Error]];} .warning {color:[[ColorPalette::Foreground]]; background:[[ColorPalette::SecondaryPale]];} .lowlight {background:[[ColorPalette::TertiaryLight]];} .zoomer {background:none; color:[[ColorPalette::TertiaryMid]]; border:3px solid [[ColorPalette::TertiaryMid]];} .imageLink, #displayArea .imageLink {background:transparent;} .annotation {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; border:2px solid [[ColorPalette::SecondaryMid]];} .viewer .listTitle {list-style-type:none; margin-left:-2em;} .viewer .button {border:1px solid [[ColorPalette::SecondaryMid]];} .viewer blockquote {border-left:3px solid [[ColorPalette::TertiaryDark]];} .viewer table, table.twtable {border:2px solid [[ColorPalette::TertiaryDark]];} .viewer th, .viewer thead td, .twtable th, .twtable thead td {background:[[ColorPalette::SecondaryMid]]; border:1px solid [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::Background]];} .viewer td, .viewer tr, .twtable td, .twtable tr {border:1px solid [[ColorPalette::TertiaryDark]];} .viewer pre {border:1px solid [[ColorPalette::SecondaryLight]]; background:[[ColorPalette::SecondaryPale]];} .viewer code {color:[[ColorPalette::SecondaryDark]];} .viewer hr {border:0; border-top:dashed 1px [[ColorPalette::TertiaryDark]]; color:[[ColorPalette::TertiaryDark]];} .highlight, .marked {background:[[ColorPalette::SecondaryLight]];} .editor input {border:1px solid [[ColorPalette::PrimaryMid]];} .editor textarea {border:1px solid [[ColorPalette::PrimaryMid]]; width:100%;} .editorFooter {color:[[ColorPalette::TertiaryMid]];} #backstageArea {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::TertiaryMid]];} #backstageArea a {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;} #backstageArea a:hover {background:[[ColorPalette::SecondaryLight]]; color:[[ColorPalette::Foreground]]; } #backstageArea a.backstageSelTab {background:[[ColorPalette::Background]]; color:[[ColorPalette::Foreground]];} #backstageButton a {background:none; color:[[ColorPalette::Background]]; border:none;} #backstageButton a:hover {background:[[ColorPalette::Foreground]]; color:[[ColorPalette::Background]]; border:none;} #backstagePanel {background:[[ColorPalette::Background]]; border-color: [[ColorPalette::Background]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]] [[ColorPalette::TertiaryDark]];} .backstagePanelFooter .button {border:none; color:[[ColorPalette::Background]];} .backstagePanelFooter .button:hover {color:[[ColorPalette::Foreground]];} #backstageCloak {background:[[ColorPalette::Foreground]]; opacity:0.6; filter:'alpha(opacity:60)';} /*}}}*/
/*{{{*/ * html .tiddler {height:1%;} body {font-size:.75em; font-family:arial,helvetica; margin:0; padding:0;} h1,h2,h3,h4,h5,h6 {font-weight:bold; text-decoration:none;} h1,h2,h3 {padding-bottom:1px; margin-top:1.2em;margin-bottom:0.3em;} h4,h5,h6 {margin-top:1em;} h1 {font-size:1.35em;} h2 {font-size:1.25em;} h3 {font-size:1.1em;} h4 {font-size:1em;} h5 {font-size:.9em;} hr {height:1px;} a {text-decoration:none;} dt {font-weight:bold;} ol {list-style-type:decimal;} ol ol {list-style-type:lower-alpha;} ol ol ol {list-style-type:lower-roman;} ol ol ol ol {list-style-type:decimal;} ol ol ol ol ol {list-style-type:lower-alpha;} ol ol ol ol ol ol {list-style-type:lower-roman;} ol ol ol ol ol ol ol {list-style-type:decimal;} .txtOptionInput {width:11em;} #contentWrapper .chkOptionInput {border:0;} .externalLink {text-decoration:underline;} .indent {margin-left:3em;} .outdent {margin-left:3em; text-indent:-3em;} code.escaped {white-space:nowrap;} .tiddlyLinkExisting {font-weight:bold;} .tiddlyLinkNonExisting {font-style:italic;} /* the 'a' is required for IE, otherwise it renders the whole tiddler in bold */ a.tiddlyLinkNonExisting.shadow {font-weight:bold;} #mainMenu .tiddlyLinkExisting, #mainMenu .tiddlyLinkNonExisting, #sidebarTabs .tiddlyLinkNonExisting {font-weight:normal; font-style:normal;} #sidebarTabs .tiddlyLinkExisting {font-weight:bold; font-style:normal;} .header {position:relative;} .header a:hover {background:transparent;} .headerShadow {position:relative; padding:4.5em 0em 1em 1em; left:-1px; top:-1px;} .headerForeground {position:absolute; padding:4.5em 0em 1em 1em; left:0px; top:0px;} .siteTitle {font-size:3em;} .siteSubtitle {font-size:1.2em;} #mainMenu {position:absolute; left:0; width:10em; text-align:right; line-height:1.6em; padding:1.5em 0.5em 0.5em 0.5em; font-size:1.1em;} #sidebar {position:absolute; right:3px; width:16em; font-size:.9em;} #sidebarOptions {padding-top:0.3em;} #sidebarOptions a {margin:0em 0.2em; padding:0.2em 0.3em; display:block;} #sidebarOptions input {margin:0.4em 0.5em;} #sidebarOptions .sliderPanel {margin-left:1em; padding:0.5em; font-size:.85em;} #sidebarOptions .sliderPanel a {font-weight:bold; display:inline; padding:0;} #sidebarOptions .sliderPanel input {margin:0 0 .3em 0;} #sidebarTabs .tabContents {width:15em; overflow:hidden;} .wizard {padding:0.1em 1em 0em 2em;} .wizard h1 {font-size:2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;} .wizard h2 {font-size:1.2em; font-weight:bold; background:none; padding:0em 0em 0em 0em; margin:0.4em 0em 0.2em 0em;} .wizardStep {padding:1em 1em 1em 1em;} .wizard .button {margin:0.5em 0em 0em 0em; font-size:1.2em;} .wizardFooter {padding:0.8em 0.4em 0.8em 0em;} .wizardFooter .status {padding:0em 0.4em 0em 0.4em; margin-left:1em;} .wizard .button {padding:0.1em 0.2em 0.1em 0.2em;} #messageArea {position:fixed; top:2em; right:0em; margin:0.5em; padding:0.5em; z-index:2000; _position:absolute;} .messageToolbar {display:block; text-align:right; padding:0.2em 0.2em 0.2em 0.2em;} #messageArea a {text-decoration:underline;} .tiddlerPopupButton {padding:0.2em 0.2em 0.2em 0.2em;} .popupTiddler {position: absolute; z-index:300; padding:1em 1em 1em 1em; margin:0;} .popup {position:absolute; z-index:300; font-size:.9em; padding:0; list-style:none; margin:0;} .popup .popupMessage {padding:0.4em;} .popup hr {display:block; height:1px; width:auto; padding:0; margin:0.2em 0em;} .popup li.disabled {padding:0.4em;} .popup li a {display:block; padding:0.4em; font-weight:normal; cursor:pointer;} .listBreak {font-size:1px; line-height:1px;} .listBreak div {margin:2px 0;} .tabset {padding:1em 0em 0em 0.5em;} .tab {margin:0em 0em 0em 0.25em; padding:2px;} .tabContents {padding:0.5em;} .tabContents ul, .tabContents ol {margin:0; padding:0;} .txtMainTab .tabContents li {list-style:none;} .tabContents li.listLink { margin-left:.75em;} #contentWrapper {display:block;} #splashScreen {display:none;} #displayArea {margin:1em 17em 0em 14em;} .toolbar {text-align:right; font-size:.9em;} .tiddler {padding:1em 1em 0em 1em;} .missing .viewer,.missing .title {font-style:italic;} .title {font-size:1.6em; font-weight:bold;} .missing .subtitle {display:none;} .subtitle {font-size:1.1em;} .tiddler .button {padding:0.2em 0.4em;} .tagging {margin:0.5em 0.5em 0.5em 0; float:left; display:none;} .isTag .tagging {display:block;} .tagged {margin:0.5em; float:right;} .tagging, .tagged {font-size:0.9em; padding:0.25em;} .tagging ul, .tagged ul {list-style:none; margin:0.25em; padding:0;} .tagClear {clear:both;} .footer {font-size:.9em;} .footer li {display:inline;} .annotation {padding:0.5em; margin:0.5em;} * html .viewer pre {width:99%; padding:0 0 1em 0;} .viewer {line-height:1.4em; padding-top:0.5em;} .viewer .button {margin:0em 0.25em; padding:0em 0.25em;} .viewer blockquote {line-height:1.5em; padding-left:0.8em;margin-left:2.5em;} .viewer ul, .viewer ol {margin-left:0.5em; padding-left:1.5em;} .viewer table, table.twtable {border-collapse:collapse; margin:0.8em 1.0em;} .viewer th, .viewer td, .viewer tr,.viewer caption,.twtable th, .twtable td, .twtable tr,.twtable caption {padding:3px;} table.listView {font-size:0.85em; margin:0.8em 1.0em;} table.listView th, table.listView td, table.listView tr {padding:0px 3px 0px 3px;} .viewer pre {padding:0.5em; margin-left:0.5em; font-size:1.2em; line-height:1.4em; overflow:auto;} .viewer code {font-size:1.2em; line-height:1.4em;} .editor {font-size:1.1em;} .editor input, .editor textarea {display:block; width:100%; font:inherit;} .editorFooter {padding:0.25em 0em; font-size:.9em;} .editorFooter .button {padding-top:0px; padding-bottom:0px;} .fieldsetFix {border:0; padding:0; margin:1px 0px 1px 0px;} .sparkline {line-height:1em;} .sparktick {outline:0;} .zoomer {font-size:1.1em; position:absolute; overflow:hidden;} .zoomer div {padding:1em;} * html #backstage {width:99%;} * html #backstageArea {width:99%;} #backstageArea {display:none; position:relative; overflow: hidden; z-index:150; padding:0.3em 0.5em 0.3em 0.5em;} #backstageToolbar {position:relative;} #backstageArea a {font-weight:bold; margin-left:0.5em; padding:0.3em 0.5em 0.3em 0.5em;} #backstageButton {display:none; position:absolute; z-index:175; top:0em; right:0em;} #backstageButton a {padding:0.1em 0.4em 0.1em 0.4em; margin:0.1em 0.1em 0.1em 0.1em;} #backstage {position:relative; width:100%; z-index:50;} #backstagePanel {display:none; z-index:100; position:absolute; margin:0em 3em 0em 3em; padding:1em 1em 1em 1em;} .backstagePanelFooter {padding-top:0.2em; float:right;} .backstagePanelFooter a {padding:0.2em 0.4em 0.2em 0.4em;} #backstageCloak {display:none; z-index:20; position:absolute; width:100%; height:100px;} .whenBackstage {display:none;} .backstageVisible .whenBackstage {display:block;} /*}}}*/
/*** StyleSheet for use when a translation requires any css style changes. This StyleSheet can be used directly by languages such as Chinese, Japanese and Korean which use a logographic writing system and need larger font sizes. ***/ /*{{{*/ body {font-size:0.8em;} #sidebarOptions {font-size:1.05em;} #sidebarOptions a {font-style:normal;} #sidebarOptions .sliderPanel {font-size:0.95em;} .subtitle {font-size:0.8em;} .viewer table.listView {font-size:0.95em;} .htmlarea .toolbarHA table {border:1px solid ButtonFace; margin:0em 0em;} /*}}}*/
/*{{{*/ @media print { #mainMenu, #sidebar, #messageArea, .toolbar, #backstageButton {display: none ! important;} #displayArea {margin: 1em 1em 0em 1em;} /* Fixes a feature in Firefox 1.5.0.2 where print preview displays the noscript content */ noscript {display:none;} } /*}}}*/
<!--{{{--> <div class='header' macro='gradient vert [[ColorPalette::PrimaryLight]] [[ColorPalette::PrimaryMid]]'> <div class='headerShadow'> <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span> </div> <div class='headerForeground'> <span class='siteTitle' refresh='content' tiddler='SiteTitle'></span> <span class='siteSubtitle' refresh='content' tiddler='SiteSubtitle'></span> </div> </div> <div id='mainMenu' refresh='content' tiddler='MainMenu'></div> <div id='sidebar'> <div id='sidebarOptions' refresh='content' tiddler='SideBarOptions'></div> <div id='sidebarTabs' refresh='content' force='true' tiddler='SideBarTabs'></div> </div> <div id='displayArea'> <div id='messageArea'></div> <div id='tiddlerDisplay'></div> </div> <!--}}}-->
<!--{{{--> <div class='toolbar' macro='toolbar closeTiddler closeOthers +editTiddler > fields syncing permalink references jump'></div> <div class='title' macro='view title'></div> <div class='subtitle'><span macro='view modifier link'></span>, <span macro='view modified date'></span> (<span macro='message views.wikified.createdPrompt'></span> <span macro='view created date'></span>)</div> <div class='tagging' macro='tagging'></div> <div class='tagged' macro='tags'></div> <div class='viewer' macro='view text wikified'></div> <div class='tagClear'></div> <!--}}}-->
<!--{{{--> <div class='toolbar' macro='toolbar +saveTiddler -cancelTiddler deleteTiddler'></div> <div class='title' macro='view title'></div> <div class='editor' macro='edit title'></div> <div macro='annotations'></div> <div class='editor' macro='edit text'></div> <div class='editor' macro='edit tags'></div><div class='editorFooter'><span macro='message views.editor.tagPrompt'></span><span macro='tagChooser'></span></div> <!--}}}-->
To get started with this blank TiddlyWiki, you'll need to modify the following tiddlers: * SiteTitle & SiteSubtitle: The title and subtitle of the site, as shown above (after saving, they will also appear in the browser title bar) * MainMenu: The menu (usually on the left) * DefaultTiddlers: Contains the names of the tiddlers that you want to appear when the TiddlyWiki is opened You'll also need to enter your username for signing your edits: <<option txtUserName>>
These InterfaceOptions for customising TiddlyWiki are saved in your browser Your username for signing your edits. Write it as a WikiWord (eg JoeBloggs) <<option txtUserName>> <<option chkSaveBackups>> SaveBackups <<option chkAutoSave>> AutoSave <<option chkRegExpSearch>> RegExpSearch <<option chkCaseSensitiveSearch>> CaseSensitiveSearch <<option chkAnimate>> EnableAnimations ---- Also see AdvancedOptions
Norspec (Northern Speculations) is a workshop group of SF/F authors based in Prince George, B.C. It was founded in 2004 (?) by Lynda Williams and Elizabeth Woods. Members meet at Books & Company, in Prince George, a member's house, or another venue as decided at the previous meeting. The group workshops about three submissions a month. Submissions are circulated to members via a private mailing list. Members include published authors and others whose work is considered compatible by the group members. See [[New Members]] for how to apply for membership.
At the copy edit stage, a work should be pretty much set in stone with regard to plot and character and ready for a good clean up and polish. This is the time to focus on awkward sentences, interruptions in flow, consistency problems, the need for a bit more description in a particular section or boring passages of dialogue that might be tightened up. It isn't the time to recommend turning a murder mystery into a love story or rewriting the whole thing from a new starting point somewhere in the middle. It is the time to comment on clunky bits, ill chosen words, or awkward phrasing. Of course, if you find a spelling mistake or missing word that's all to the good as well, but the reviewer shouldn't feel obliged to hunt them all down. Just note the ones that jump out at you.
[[David Lott|mailto:david@okalrel.org]] is webmaster of the Okal Rel Universe and Lynda's husband.
[[Next Meeting]] [[About NorSpec]] [[Submissions]]
[[http://tidhelp.tiddlyspot.com/|http://tidhelp.tiddlyspot.com/]] is the place for basic help. You must put in your name to identify yourself. Click OPTIONS on right hand menu to see the place where you put in your name and the generic password for this wiki. (You will know the password if you are a member of Norspec.) To start a new entry, click on [[new tiddler]] on the right hand menu. Use "''done''" to stop editing. Then "''save to web''" to save your changes. ''WAIT'' until you get the message "Main ~TiddlyWiki file uploaded". ''DO NOT'' use "save changes"! ''UNDER NO CIRCUMSTANCES'' make any changes to "''options''" other than to enter your name and password! If you feel something in that area needs to be changed e-mail [[david@okalrel.org|mailto:david@okalrel.org]].
[[Lynda Williams|mailto:lynda@okalrel.org]] is the author of the Okal Rel Saga, a ten novel series being published by Edge Science Fiction and Fantasy. Her latest novel in the series is Book #2 //Righteous Anger//. Lynda is also integrity editor for other works set in the Okal Rel Universe. The next book in this series is //Okal Rel Universe Anthology 2// edited by John Preet. [img[http://www.okalrel.org/images/ljwdetail1.jpg]]
[[Welcome to Tiddlyspot]] [[Instructions]] [[About NorSpec]] [[Workshop Format]] [[Next Meeting]] [[New Members]] [[Submissions]] [[Proof Reading]] [[Copy Edit]] [[Substantional Edit]]
Interested writers are invited to make contact with one of the members designated as contacts on the Norspec homepage at [[http://www.okalrel.org/workshop|http://www.okalrel.org/workshop]] Membership is gained by audition. A submission is sent to the group by the contact person for review by all members. A decision is made, by the existing members, about whether the applicant will be compatible.
NORSPEC Saturday, May 24, 1 pm at Books & Co.
A document at the proof reading stage is about to be sent to a publisher. Any glitches, no matter how small, should be flagged. Spelling mistakes, English vs. American usage, punctuation, consistency issues, capitalization, hypens, you name it. Proof reading should be understake, however, from the point of view that any change "cost money". That is, if something is wrong flag it. If it is just weak or doesn't suite you, let it go. Too much messing around at this stage can sap the life of a book or even introduce new typos.
~Sci-Fi/Fantasy Writers Workshop
Northern Speculations
Submissions must be between 1,000 and 6,000 words in RTF format submitted as an attached file. Send message with attached submission to the list workshop(at)lists.okalrel.org. Format your document as follows: use 12 point font, single space, include a header with short title and author's last name, and a footer with page numbers. At the front of the document, include a synopsis of previous chapters (if any). Also indicate what sort of feedback you are looking for. Usually, the feedback wanted will relate to the stage you at in the writing process. See entries on wiki for [[Substantional Edit]], [[Copy Edit]], [[Proof Reading]].
Recommendations for change that would require an author to review the entire document (except with find-and-replace) and adapt it accordingly is a substantial edit. Work seeking a substantial edit is usually a first draft. The author wants big picture feedback. Is there a major road block or contradiction in the plot? Do you believe in the characters? Should two characters be merged into one? Is there inadequate description? Of course, just because a story is in first draft does not mean it requires a substantial edit, but if there is going to be one that's the best time to get it done. Positive input can help the author make decisions about which themes, plot devices and characters are working for him/her, too. And style issues of a general sort are worth raising - too much use of the passive tense over all, for example, but cite examples to illustrate rather than trying to mark up every single bit that bothers you. Giving an author feedback on minute details may be a waste of your time and the author's, since the wording is likely to change. Authors receptive to substantial editing input may appreciate notice of spelling errors, etc. but that isn't really what they are after. For longer works, a short synopsis of upcoming chapters can answer those questions "When does this happen?" or "when do we find this out?".
/*** Contains the stuff you need to use Tiddlyspot Note you must also have UploadPlugin installed ***/ //{{{ // edit this if you are migrating sites or retrofitting an existing TW config.tiddlyspotSiteId = 'oruworkshop'; // make it so you can by default see edit controls via http config.options.chkHttpReadOnly = false; window.readOnly = false; // make sure of it (for tw 2.2) // disable autosave in d3 if (window.location.protocol != "file:") config.options.chkGTDLazyAutoSave = false; // tweak shadow tiddlers to add upload button, password entry box etc with (config.shadowTiddlers) { SiteUrl = 'http://'+config.tiddlyspotSiteId+'.tiddlyspot.com'; SideBarOptions = SideBarOptions.replace(/(<<saveChanges>>)/,"$1<<tiddler TspotSidebar>>"); OptionsPanel = OptionsPanel.replace(/^/,"<<tiddler TspotOptions>>"); DefaultTiddlers = DefaultTiddlers.replace(/^/,"[[Welcome to Tiddlyspot]] "); MainMenu = MainMenu.replace(/^/,"[[Welcome to Tiddlyspot]] "); } // create some shadow tiddler content merge(config.shadowTiddlers,{ 'Welcome to Tiddlyspot':[ "This document is a ~TiddlyWiki from tiddlyspot.com. A ~TiddlyWiki is an electronic notebook that is great for managing todo lists, personal information, and all sorts of things.", "", "@@font-weight:bold;font-size:1.3em;color:#444; //What now?// @@ Before you can save any changes, you need to enter your password in the form below. Then configure privacy and other site settings at your [[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]] (your control panel username is //" + config.tiddlyspotSiteId + "//).", "<<tiddler TspotControls>>", "See also GettingStarted.", "", "@@font-weight:bold;font-size:1.3em;color:#444; //Working online// @@ You can edit this ~TiddlyWiki right now, and save your changes using the \"save to web\" button in the column on the right.", "", "@@font-weight:bold;font-size:1.3em;color:#444; //Working offline// @@ A fully functioning copy of this ~TiddlyWiki can be saved onto your hard drive or USB stick. You can make changes and save them locally without being connected to the Internet. When you're ready to sync up again, just click \"upload\" and your ~TiddlyWiki will be saved back to tiddlyspot.com.", "", "@@font-weight:bold;font-size:1.3em;color:#444; //Help!// @@ Find out more about ~TiddlyWiki at [[TiddlyWiki.com|http://tiddlywiki.com]]. Also visit [[TiddlyWiki Guides|http://tiddlywikiguides.org]] for documentation on learning and using ~TiddlyWiki. New users are especially welcome on the [[TiddlyWiki mailing list|http://groups.google.com/group/TiddlyWiki]], which is an excellent place to ask questions and get help. If you have a tiddlyspot related problem email [[tiddlyspot support|mailto:support@tiddlyspot.com]].", "", "@@font-weight:bold;font-size:1.3em;color:#444; //Enjoy :)// @@ We hope you like using your tiddlyspot.com site. Please email [[feedback@tiddlyspot.com|mailto:feedback@tiddlyspot.com]] with any comments or suggestions." ].join("\n"), 'TspotControls':[ "| tiddlyspot password:|<<option pasUploadPassword>>|", "| site management:|<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">>//(requires tiddlyspot password)//<<br>>[[control panel|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/controlpanel]], [[download (go offline)|http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download]]|", "| links:|[[tiddlyspot.com|http://tiddlyspot.com/]], [[FAQs|http://faq.tiddlyspot.com/]], [[announcements|http://announce.tiddlyspot.com/]], [[blog|http://tiddlyspot.com/blog/]], email [[support|mailto:support@tiddlyspot.com]] & [[feedback|mailto:feedback@tiddlyspot.com]], [[donate|http://tiddlyspot.com/?page=donate]]|" ].join("\n"), 'TspotSidebar':[ "<<upload http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/store.cgi index.html . . " + config.tiddlyspotSiteId + ">><html><a href='http://" + config.tiddlyspotSiteId + ".tiddlyspot.com/download' class='button'>download</a></html>" ].join("\n"), 'TspotOptions':[ "tiddlyspot password:", "<<option pasUploadPassword>>", "" ].join("\n") }); //}}}
| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin | | 05/07/2007 11:20:37 | Virginia | [[/|http://oruworkshop.tiddlyspot.com/]] | [[store.cgi|http://oruworkshop.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oruworkshop.tiddlyspot.com/index.html]] | . | | 05/07/2007 15:50:01 | Virginia | [[/|http://oruworkshop.tiddlyspot.com/#%5B%5BWorkshop%20Format%5D%5D]] | [[store.cgi|http://oruworkshop.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oruworkshop.tiddlyspot.com/index.html]] | . | | 09/08/2007 15:47:41 | David | [[/|http://oruworkshop.tiddlyspot.com/]] | [[store.cgi|http://oruworkshop.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oruworkshop.tiddlyspot.com/index.html]] | . | | 09/09/2007 06:25:55 | David | [[/|http://oruworkshop.tiddlyspot.com/]] | [[store.cgi|http://oruworkshop.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oruworkshop.tiddlyspot.com/index.html]] | . | ok | | 09/09/2007 06:27:36 | David | [[/|http://oruworkshop.tiddlyspot.com/]] | [[store.cgi|http://oruworkshop.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oruworkshop.tiddlyspot.com/index.html]] | . | | 03/10/2007 07:09:38 | David | [[/|http://oruworkshop.tiddlyspot.com/]] | [[store.cgi|http://oruworkshop.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oruworkshop.tiddlyspot.com/index.html]] | . | | 29/10/2007 07:00:00 | David | [[/|http://oruworkshop.tiddlyspot.com/]] | [[store.cgi|http://oruworkshop.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oruworkshop.tiddlyspot.com/index.html]] | . | | 19/11/2007 07:18:55 | David | [[/|http://oruworkshop.tiddlyspot.com/]] | [[store.cgi|http://oruworkshop.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oruworkshop.tiddlyspot.com/index.html]] | . | | 17/01/2008 07:07:07 | David | [[/|http://oruworkshop.tiddlyspot.com/]] | [[store.cgi|http://oruworkshop.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oruworkshop.tiddlyspot.com/index.html]] | . | | 30/04/2008 10:19:51 | David | [[/|http://oruworkshop.tiddlyspot.com/]] | [[store.cgi|http://oruworkshop.tiddlyspot.com/store.cgi]] | . | [[index.html | http://oruworkshop.tiddlyspot.com/index.html]] | . |
/*** |''Name:''|PasswordOptionPlugin| |''Description:''|Extends TiddlyWiki options with non encrypted password option.| |''Version:''|1.0.2| |''Date:''|Apr 19, 2007| |''Source:''|http://tiddlywiki.bidix.info/#PasswordOptionPlugin| |''Author:''|BidiX (BidiX (at) bidix (dot) info)| |''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]| |''~CoreVersion:''|2.2.0 (Beta 5)| ***/ //{{{ version.extensions.PasswordOptionPlugin = { major: 1, minor: 0, revision: 2, date: new Date("Apr 19, 2007"), source: 'http://tiddlywiki.bidix.info/#PasswordOptionPlugin', author: 'BidiX (BidiX (at) bidix (dot) info', license: '[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D]]', coreVersion: '2.2.0 (Beta 5)' }; config.macros.option.passwordCheckboxLabel = "Save this password on this computer"; config.macros.option.passwordInputType = "password"; // password | text setStylesheet(".pasOptionInput {width: 11em;}\n","passwordInputTypeStyle"); merge(config.macros.option.types, { 'pas': { elementType: "input", valueField: "value", eventName: "onkeyup", className: "pasOptionInput", typeValue: config.macros.option.passwordInputType, create: function(place,type,opt,className,desc) { // password field config.macros.option.genericCreate(place,'pas',opt,className,desc); // checkbox linked with this password "save this password on this computer" config.macros.option.genericCreate(place,'chk','chk'+opt,className,desc); // text savePasswordCheckboxLabel place.appendChild(document.createTextNode(config.macros.option.passwordCheckboxLabel)); }, onChange: config.macros.option.genericOnChange } }); merge(config.optionHandlers['chk'], { get: function(name) { // is there an option linked with this chk ? var opt = name.substr(3); if (config.options[opt]) saveOptionCookie(opt); return config.options[name] ? "true" : "false"; } }); merge(config.optionHandlers, { 'pas': { get: function(name) { if (config.options["chk"+name]) { return encodeCookie(config.options[name].toString()); } else { return ""; } }, set: function(name,value) {config.options[name] = decodeCookie(value);} } }); // need to reload options to load passwordOptions loadOptionsCookie(); /* if (!config.options['pasPassword']) config.options['pasPassword'] = ''; merge(config.optionsDesc,{ pasPassword: "Test password" }); */ //}}} /*** |''Name:''|UploadPlugin| |''Description:''|Save to web a TiddlyWiki| |''Version:''|4.1.0| |''Date:''|May 5, 2007| |''Source:''|http://tiddlywiki.bidix.info/#UploadPlugin| |''Documentation:''|http://tiddlywiki.bidix.info/#UploadPluginDoc| |''Author:''|BidiX (BidiX (at) bidix (dot) info)| |''License:''|[[BSD open source license|http://tiddlywiki.bidix.info/#%5B%5BBSD%20open%20source%20license%5D%5D ]]| |''~CoreVersion:''|2.2.0 (#3125)| |''Requires:''|PasswordOptionPlugin| ***/ //{{{ version.extensions.UploadPlugin = { major: 4, minor: 1, revision: 0, date: new Date("May 5, 2007"), source: 'http://tiddlywiki.bidix.info/#UploadPlugin', author: 'BidiX (BidiX (at) bidix (dot) info', coreVersion: '2.2.0 (#3125)' }; // // Environment // if (!window.bidix) window.bidix = {}; // bidix namespace bidix.debugMode = false; // true to activate both in Plugin and UploadService // // Upload Macro // config.macros.upload = { // default values defaultBackupDir: '', //no backup defaultStoreScript: "store.php", defaultToFilename: "index.html", defaultUploadDir: ".", authenticateUser: true // UploadService Authenticate User }; config.macros.upload.label = { promptOption: "Save and Upload this TiddlyWiki with UploadOptions", promptParamMacro: "Save and Upload this TiddlyWiki in %0", saveLabel: "save to web", saveToDisk: "save to disk", uploadLabel: "upload" }; config.macros.upload.messages = { noStoreUrl: "No store URL in parmeters or options", usernameOrPasswordMissing: "Username or password missing" }; config.macros.upload.handler = function(place,macroName,params) { if (readOnly) return; var label; if (document.location.toString().substr(0,4) == "http") label = this.label.saveLabel; else label = this.label.uploadLabel; var prompt; if (params[0]) { prompt = this.label.promptParamMacro.toString().format([this.destFile(params[0], (params[1] ? params[1]:bidix.basename(window.location.toString())), params[3])]); } else { prompt = this.label.promptOption; } createTiddlyButton(place, label, prompt, function() {config.macros.upload.action(params);}, null, null, this.accessKey); }; config.macros.upload.action = function(params) { // for missing macro parameter set value from options var storeUrl = params[0] ? params[0] : config.options.txtUploadStoreUrl; var toFilename = params[1] ? params[1] : config.options.txtUploadFilename; var backupDir = params[2] ? params[2] : config.options.txtUploadBackupDir; var uploadDir = params[3] ? params[3] : config.options.txtUploadDir; var username = params[4] ? params[4] : config.options.txtUploadUserName; var password = config.options.pasUploadPassword; // for security reason no password as macro parameter // for still missing parameter set default value if ((!storeUrl) && (document.location.toString().substr(0,4) == "http")) storeUrl = bidix.dirname(document.location.toString())+'/'+config.macros.upload.defaultStoreScript; if (storeUrl.substr(0,4) != "http") storeUrl = bidix.dirname(document.location.toString()) +'/'+ storeUrl; if (!toFilename) toFilename = bidix.basename(window.location.toString()); if (!toFilename) toFilename = config.macros.upload.defaultToFilename; if (!uploadDir) uploadDir = config.macros.upload.defaultUploadDir; if (!backupDir) backupDir = config.macros.upload.defaultBackupDir; // report error if still missing if (!storeUrl) { alert(config.macros.upload.messages.noStoreUrl); clearMessage(); return false; } if (config.macros.upload.authenticateUser && (!username || !password)) { alert(config.macros.upload.messages.usernameOrPasswordMissing); clearMessage(); return false; } bidix.upload.uploadChanges(false,null,storeUrl, toFilename, uploadDir, backupDir, username, password); return false; }; config.macros.upload.destFile = function(storeUrl, toFilename, uploadDir) { if (!storeUrl) return null; var dest = bidix.dirname(storeUrl); if (uploadDir && uploadDir != '.') dest = dest + '/' + uploadDir; dest = dest + '/' + toFilename; return dest; }; // // uploadOptions Macro // config.macros.uploadOptions = { handler: function(place,macroName,params) { var wizard = new Wizard(); wizard.createWizard(place,this.wizardTitle); wizard.addStep(this.step1Title,this.step1Html); var markList = wizard.getElement("markList"); var listWrapper = document.createElement("div"); markList.parentNode.insertBefore(listWrapper,markList); wizard.setValue("listWrapper",listWrapper); this.refreshOptions(listWrapper,false); var uploadCaption; if (document.location.toString().substr(0,4) == "http") uploadCaption = config.macros.upload.label.saveLabel; else uploadCaption = config.macros.upload.label.uploadLabel; wizard.setButtons([ {caption: uploadCaption, tooltip: config.macros.upload.label.promptOption, onClick: config.macros.upload.action}, {caption: this.cancelButton, tooltip: this.cancelButtonPrompt, onClick: this.onCancel} ]); }, refreshOptions: function(listWrapper) { var uploadOpts = [ "txtUploadUserName", "pasUploadPassword", "txtUploadStoreUrl", "txtUploadDir", "txtUploadFilename", "txtUploadBackupDir", "chkUploadLog", "txtUploadLogMaxLine", ] var opts = []; for(i=0; i<uploadOpts.length; i++) { var opt = {}; opts.push() opt.option = ""; n = uploadOpts[i]; opt.name = n; opt.lowlight = !config.optionsDesc[n]; opt.description = opt.lowlight ? this.unknownDescription : config.optionsDesc[n]; opts.push(opt); } var listview = ListView.create(listWrapper,opts,this.listViewTemplate); for(n=0; n<opts.length; n++) { var type = opts[n].name.substr(0,3); var h = config.macros.option.types[type]; if (h && h.create) { h.create(opts[n].colElements['option'],type,opts[n].name,opts[n].name,"no"); } } }, onCancel: function(e) { backstage.switchTab(null); return false; }, wizardTitle: "Upload with options", step1Title: "These options are saved in cookies in your browser", step1Html: "<input type='hidden' name='markList'></input><br>", cancelButton: "Cancel", cancelButtonPrompt: "Cancel prompt", listViewTemplate: { columns: [ {name: 'Description', field: 'description', title: "Description", type: 'WikiText'}, {name: 'Option', field: 'option', title: "Option", type: 'String'}, {name: 'Name', field: 'name', title: "Name", type: 'String'} ], rowClasses: [ {className: 'lowlight', field: 'lowlight'} ]} } // // upload functions // if (!bidix.upload) bidix.upload = {}; if (!bidix.upload.messages) bidix.upload.messages = { //from saving invalidFileError: "The original file '%0' does not appear to be a valid TiddlyWiki", backupSaved: "Backup saved", backupFailed: "Failed to upload backup file", rssSaved: "RSS feed uploaded", rssFailed: "Failed to upload RSS feed file", emptySaved: "Empty template uploaded", emptyFailed: "Failed to upload empty template file", mainSaved: "Main TiddlyWiki file uploaded", mainFailed: "Failed to upload main TiddlyWiki file. Your changes have not been saved", //specific upload loadOriginalHttpPostError: "Can't get original file", aboutToSaveOnHttpPost: 'About to upload on %0 ...', storePhpNotFound: "The store script '%0' was not found." }; bidix.upload.uploadChanges = function(onlyIfDirty,tiddlers,storeUrl,toFilename,uploadDir,backupDir,username,password) { var callback = function(status,uploadParams,original,url,xhr) { if (!status) { displayMessage(bidix.upload.messages.loadOriginalHttpPostError); return; } if (bidix.debugMode) alert(original.substr(0,500)+"\n..."); // Locate the storeArea div's var posDiv = locateStoreArea(original); if((posDiv[0] == -1) || (posDiv[1] == -1)) { alert(config.messages.invalidFileError.format([localPath])); return; } bidix.upload.uploadRss(uploadParams,original,posDiv); }; if(onlyIfDirty && !store.isDirty()) return; clearMessage(); // save on localdisk ? if (document.location.toString().substr(0,4) == "file") { var path = document.location.toString(); var localPath = getLocalPath(path); saveChanges(); } // get original var uploadParams = Array(storeUrl,toFilename,uploadDir,backupDir,username,password); var originalPath = document.location.toString(); // If url is a directory : add index.html if (originalPath.charAt(originalPath.length-1) == "/") originalPath = originalPath + "index.html"; var dest = config.macros.upload.destFile(storeUrl,toFilename,uploadDir); var log = new bidix.UploadLog(); log.startUpload(storeUrl, dest, uploadDir, backupDir); displayMessage(bidix.upload.messages.aboutToSaveOnHttpPost.format([dest])); if (bidix.debugMode) alert("about to execute Http - GET on "+originalPath); var r = doHttp("GET",originalPath,null,null,null,null,callback,uploadParams,null); if (typeof r == "string") displayMessage(r); return r; }; bidix.upload.uploadRss = function(uploadParams,original,posDiv) { var callback = function(status,params,responseText,url,xhr) { if(status) { var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:"))); displayMessage(bidix.upload.messages.rssSaved,bidix.dirname(url)+'/'+destfile); bidix.upload.uploadMain(params[0],params[1],params[2]); } else { displayMessage(bidix.upload.messages.rssFailed); } }; // do uploadRss if(config.options.chkGenerateAnRssFeed) { var rssPath = uploadParams[1].substr(0,uploadParams[1].lastIndexOf(".")) + ".xml"; var rssUploadParams = Array(uploadParams[0],rssPath,uploadParams[2],'',uploadParams[4],uploadParams[5]); bidix.upload.httpUpload(rssUploadParams,convertUnicodeToUTF8(generateRss()),callback,Array(uploadParams,original,posDiv)); } else { bidix.upload.uploadMain(uploadParams,original,posDiv); } }; bidix.upload.uploadMain = function(uploadParams,original,posDiv) { var callback = function(status,params,responseText,url,xhr) { var log = new bidix.UploadLog(); if(status) { // if backupDir specified if ((params[3]) && (responseText.indexOf("backupfile:") > -1)) { var backupfile = responseText.substring(responseText.indexOf("backupfile:")+11,responseText.indexOf("\n", responseText.indexOf("backupfile:"))); displayMessage(bidix.upload.messages.backupSaved,bidix.dirname(url)+'/'+backupfile); } var destfile = responseText.substring(responseText.indexOf("destfile:")+9,responseText.indexOf("\n", responseText.indexOf("destfile:"))); displayMessage(bidix.upload.messages.mainSaved,bidix.dirname(url)+'/'+destfile); store.setDirty(false); log.endUpload("ok"); } else { alert(bidix.upload.messages.mainFailed); displayMessage(bidix.upload.messages.mainFailed); log.endUpload("failed"); } }; // do uploadMain var revised = bidix.upload.updateOriginal(original,posDiv); bidix.upload.httpUpload(uploadParams,revised,callback,uploadParams); }; bidix.upload.httpUpload = function(uploadParams,data,callback,params) { var localCallback = function(status,params,responseText,url,xhr) { url = (url.indexOf("nocache=") < 0 ? url : url.substring(0,url.indexOf("nocache=")-1)); if (xhr.status == httpStatus.NotFound) alert(bidix.upload.messages.storePhpNotFound.format([url])); if ((bidix.debugMode) || (responseText.indexOf("Debug mode") >= 0 )) { alert(responseText); if (responseText.indexOf("Debug mode") >= 0 ) responseText = responseText.substring(responseText.indexOf("\n\n")+2); } else if (responseText.charAt(0) != '0') alert(responseText); if (responseText.charAt(0) != '0') status = null; callback(status,params,responseText,url,xhr); }; // do httpUpload var boundary = "---------------------------"+"AaB03x"; var uploadFormName = "UploadPlugin"; // compose headers data var sheader = ""; sheader += "--" + boundary + "\r\nContent-disposition: form-data; name=\""; sheader += uploadFormName +"\"\r\n\r\n"; sheader += "backupDir="+uploadParams[3] + ";user=" + uploadParams[4] + ";password=" + uploadParams[5] + ";uploaddir=" + uploadParams[2]; if (bidix.debugMode) sheader += ";debug=1"; sheader += ";;\r\n"; sheader += "\r\n" + "--" + boundary + "\r\n"; sheader += "Content-disposition: form-data; name=\"userfile\"; filename=\""+uploadParams[1]+"\"\r\n"; sheader += "Content-Type: text/html;charset=UTF-8" + "\r\n"; sheader += "Content-Length: " + data.length + "\r\n\r\n"; // compose trailer data var strailer = new String(); strailer = "\r\n--" + boundary + "--\r\n"; data = sheader + data + strailer; if (bidix.debugMode) alert("about to execute Http - POST on "+uploadParams[0]+"\n with \n"+data.substr(0,500)+ " ... "); var r = doHttp("POST",uploadParams[0],data,"multipart/form-data; boundary="+boundary,uploadParams[4],uploadParams[5],localCallback,params,null); if (typeof r == "string") displayMessage(r); return r; }; // same as Saving's updateOriginal but without convertUnicodeToUTF8 calls bidix.upload.updateOriginal = function(original, posDiv) { if (!posDiv) posDiv = locateStoreArea(original); if((posDiv[0] == -1) || (posDiv[1] == -1)) { alert(config.messages.invalidFileError.format([localPath])); return; } var revised = original.substr(0,posDiv[0] + startSaveArea.length) + "\n" + store.allTiddlersAsHtml() + "\n" + original.substr(posDiv[1]); var newSiteTitle = getPageTitle().htmlEncode(); revised = revised.replaceChunk("<title"+">","</title"+">"," " + newSiteTitle + " "); revised = updateMarkupBlock(revised,"PRE-HEAD","MarkupPreHead"); revised = updateMarkupBlock(revised,"POST-HEAD","MarkupPostHead"); revised = updateMarkupBlock(revised,"PRE-BODY","MarkupPreBody"); revised = updateMarkupBlock(revised,"POST-SCRIPT","MarkupPostBody"); return revised; }; // // UploadLog // // config.options.chkUploadLog : // false : no logging // true : logging // config.options.txtUploadLogMaxLine : // -1 : no limit // 0 : no Log lines but UploadLog is still in place // n : the last n lines are only kept // NaN : no limit (-1) bidix.UploadLog = function() { if (!config.options.chkUploadLog) return; // this.tiddler = null this.tiddler = store.getTiddler("UploadLog"); if (!this.tiddler) { this.tiddler = new Tiddler(); this.tiddler.title = "UploadLog"; this.tiddler.text = "| !date | !user | !location | !storeUrl | !uploadDir | !toFilename | !backupdir | !origin |"; this.tiddler.created = new Date(); this.tiddler.modifier = config.options.txtUserName; this.tiddler.modified = new Date(); store.addTiddler(this.tiddler); } return this; }; bidix.UploadLog.prototype.addText = function(text) { if (!this.tiddler) return; // retrieve maxLine when we need it var maxLine = parseInt(config.options.txtUploadLogMaxLine,10); if (isNaN(maxLine)) maxLine = -1; // add text if (maxLine != 0) this.tiddler.text = this.tiddler.text + text; // Trunck to maxLine if (maxLine >= 0) { var textArray = this.tiddler.text.split('\n'); if (textArray.length > maxLine + 1) textArray.splice(1,textArray.length-1-maxLine); this.tiddler.text = textArray.join('\n'); } // update tiddler fields this.tiddler.modifier = config.options.txtUserName; this.tiddler.modified = new Date(); store.addTiddler(this.tiddler); // refresh and notifiy for immediate update story.refreshTiddler(this.tiddler.title); store.notify(this.tiddler.title, true); }; bidix.UploadLog.prototype.startUpload = function(storeUrl, toFilename, uploadDir, backupDir) { if (!this.tiddler) return; var now = new Date(); var text = "\n| "; var filename = bidix.basename(document.location.toString()); if (!filename) filename = '/'; text += now.formatString("0DD/0MM/YYYY 0hh:0mm:0ss") +" | "; text += config.options.txtUserName + " | "; text += "[["+filename+"|"+location + "]] |"; text += " [[" + bidix.basename(storeUrl) + "|" + storeUrl + "]] | "; text += uploadDir + " | "; text += "[[" + bidix.basename(toFilename) + " | " +toFilename + "]] | "; text += backupDir + " |"; this.addText(text); }; bidix.UploadLog.prototype.endUpload = function(status) { if (!this.tiddler) return; this.addText(" "+status+" |"); }; // // Utilities // bidix.checkPlugin = function(plugin, major, minor, revision) { var ext = version.extensions[plugin]; if (! (ext && ((ext.major > major) || ((ext.major == major) && (ext.minor > minor)) || ((ext.major == major) && (ext.minor == minor) && (ext.revision >= revision))))) { // write error in PluginManager if (pluginInfo) pluginInfo.log.push("Requires " + plugin + " " + major + "." + minor + "." + revision); eval(plugin); // generate an error : "Error: ReferenceError: xxxx is not defined" } }; bidix.dirname = function(filePath) { if (!filePath) return; var lastpos; if ((lastpos = filePath.lastIndexOf("/")) != -1) { return filePath.substring(0, lastpos); } else { return filePath.substring(0, filePath.lastIndexOf("\\")); } }; bidix.basename = function(filePath) { if (!filePath) return; var lastpos; if ((lastpos = filePath.lastIndexOf("#")) != -1) filePath = filePath.substring(0, lastpos); if ((lastpos = filePath.lastIndexOf("/")) != -1) { return filePath.substring(lastpos + 1); } else return filePath.substring(filePath.lastIndexOf("\\")+1); }; bidix.initOption = function(name,value) { if (!config.options[name]) config.options[name] = value; }; // // Initializations // // require PasswordOptionPlugin 1.0.1 or better bidix.checkPlugin("PasswordOptionPlugin", 1, 0, 1); // styleSheet setStylesheet('.txtUploadStoreUrl, .txtUploadBackupDir, .txtUploadDir {width: 22em;}',"uploadPluginStyles"); //optionsDesc merge(config.optionsDesc,{ txtUploadStoreUrl: "Url of the UploadService script (default: store.php)", txtUploadFilename: "Filename of the uploaded file (default: in index.html)", txtUploadDir: "Relative Directory where to store the file (default: . (downloadService directory))", txtUploadBackupDir: "Relative Directory where to backup the file. If empty no backup. (default: ''(empty))", txtUploadUserName: "Upload Username", pasUploadPassword: "Upload Password", chkUploadLog: "do Logging in UploadLog (default: true)", txtUploadLogMaxLine: "Maximum of lines in UploadLog (default: 10)" }); // Options Initializations bidix.initOption('txtUploadStoreUrl',''); bidix.initOption('txtUploadFilename',''); bidix.initOption('txtUploadDir',''); bidix.initOption('txtUploadBackupDir',''); bidix.initOption('txtUploadUserName',''); bidix.initOption('pasUploadPassword',''); bidix.initOption('chkUploadLog',true); bidix.initOption('txtUploadLogMaxLine','10'); /* don't want this for tiddlyspot sites // Backstage merge(config.tasks,{ uploadOptions: {text: "upload", tooltip: "Change UploadOptions and Upload", content: '<<uploadOptions>>'} }); config.backstageTasks.push("uploadOptions"); */ //}}}
Our meetings are fairly informal, and we do like to encourage discussion and have fun! We have a few guidelines, based on the Clarion style, to keep the meeting on track, as creative minds tend to run away with new ideas. : ) Please bring a print-out of the stories to give back to the author. Feel free to make any notes as you wish, paying attention to the type of edit the writer is asking for. (proof, copy, substantial). Each member has a minimum of two minutes and a maximum of five minutes to give the group their feedback on each submitted story. We discuss one story in each round. There are a lot of resources and checklists online for critiquing. Not only is it important to give your fellow member a thorough feedback, but it helps you to improve your own work. At the end of the round of critiques, the author has two minutes to respond to the group, either clarifying issues or making note of what was really helpful. We usually have coffee/tea and lunch at a local restaurant or members' home.