JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
ckeditor plugin for wfpl cms images mostly working
[wfpl-cms.git] / admin_pages.html
index 2181eef..7db5cb7 100644 (file)
 <!DOCTYPE html>
 
-<html lang="en">
+<html>
 <head>
-       <meta charset="utf-8" />
-       <title><!--~$title show {~-->~this_host~ Admin: <!--~listings {~-->Pages Listing<!--~}~--><!--~form {~--><!--~id {~-->Add a new page<!--~}~--><!--~id unset {~-->Edit page "~title html~"<!--~}~--><!--~}~--><!--~}~--></title>
+       <title><!--~$title show {~-->~$host~ Admin: <!--~listings {~-->Pages Listing<!--~}~--><!--~form {~--><!--~id {~-->Add a new page<!--~}~--><!--~id unset {~-->Edit page "~title html~"<!--~}~--><!--~}~--><!--~}~--></title>
        <!--~$head {~-->
        <script type="text/javascript" src="code/ckeditor/ckeditor.js"></script>
+       <style>
+               /* icon in cke buttons */
+               .cke_button_icon.cke_button__wfpl_images_icon {
+                       background-image: url(/code/ckeditor/plugins/icons.png?t=D5AC);
+                       background-position: 0 -1504px;
+               }
+               .cke_wfpl_images_dialog * {
+                       white-space: normal !important;
+               }
+               .cke_wfpl_images_dialog h3 {
+                       margin-top: 10px;
+                       font-weight: bold;
+                       font-size: 18px;
+               }
+               .cke_wfpl_images_dialog strong {
+                       color: inherit;
+               }
+               .cke_wfpl_images_dialog p {
+                       font-size: 12px;
+                       line-height: 16px;
+               }
+               .cke_wfpl_images_dialog * + p {
+                       padding-top: 5px;
+               }
+               .cke_wfpl_images_dialog .cke_wfpl_thumbs {
+                       height: 270px;
+                       overflow-y: scroll;
+               }
+               .cke_wfpl_thumbs .cke_wfpl_thumb {
+                       width: 50px;
+                       height: 50px;
+                       padding: 10px;
+                       color: transparent;
+                       font-size: 10px;
+                       font-weight: bold;
+                       display: inline-block;
+                       overflow: hidden;
+                       text-align: center;
+                       background-position: 50% 50%;
+                       background-repeat: no-repeat;
+                       background-color: transparent;
+                       border: 2px solid white;
+               }
+               .cke_wfpl_thumbs .cke_wfpl_thumb:hover, .cke_wfpl_thumbs .cke_wfpl_thumb.selected {
+                       color: white;
+                       text-shadow: 1px 1px 2px #000;
+                       box-shadow: 1px 1px 6px #444;
+                       border: 2px solid #444;
+               }
+       </style>
        <script type="text/javascript">
+               window.cke_wfpl_images = {
+                       images: {~wfpl_images {~
+                               "~id~": {
+                                       thumb: "~image thumb_src jsdq~",
+                                       image: "~image image_src jsdq~",
+                                       image_width: "~image image_width~",
+                                       image_height: "~image image_height~",
+                                       sizes: "~sizes jsdq~",
+                                       caption: "~caption jsdq~"
+                               }
+                               ~ sep {~,~}~
+                       ~}~},
+                       next_id: 0,
+                       selected: [],
+                       editors: []
+               };
+               function cke_wfpl_images_thumb_click(plugin_id, element, image_id) {
+                       var thumbs = element.parentNode.children;
+                       var i, thumb;
+                       for (i = 0; i < thumbs.length; i++) {
+                               thumb = thumbs[i];
+                               if (thumb === element) {
+                                       if (thumb.className.substr(0, 9) !== 'selected ') {
+                                               thumb.className = 'selected ' + thumb.className;
+                                       }
+                               } else {
+                                       if (thumb.className.substr(0, 9) === 'selected ') {
+                                               thumb.className = thumb.className.substr(9);
+                                       }
+                               }
+                       }
+                       window.cke_wfpl_images.selected[plugin_id] = image_id;
+               }
+               function cke_wfpl_images_insert_click(plugin_id, align) {
+                       var selected = window.cke_wfpl_images.selected[plugin_id];
+                       var editor = window.cke_wfpl_images.editors[plugin_id];
+                       var image;
+                       var code, width, height, src, size, caption;
+                       if (selected == null) {
+                               console.log("no selected picture"); // FIXME
+                               return;
+                       }
+                       image = window.cke_wfpl_images.images[selected];
+                       switch(align) {
+                               case 'left':
+                                       code = '<span class="wfpl_ifl"'
+                               break;
+                               case 'right':
+                                       code = '<span class="wfpl_ifr"'
+                               break;
+                               case 'centered': case 'full':
+                                       code = '<div class="wfpl_ic"'
+                               break;
+                       }
+                       size = image.sizes.replace(/^\s+|\s+$/g, '').split(/\s\+/)[0];
+                       width = image.image_width;
+                       height = image.image_height;
+                       src = image.image;
+                       caption = image.caption;
+                       if (caption == '') {
+                               caption = '&nbsp;';
+                       }
+                       if (align != 'full') {
+                               var wh = size.split('x');
+                               wh[0] = parseInt(wh[0]);
+                               wh[1] = parseInt(wh[1]);
+                               if (width / height > wh[0] / wh[1]) {
+                                       height = Math.round(height * wh[0] / width);
+                                       width = wh[0];
+                               } else {
+                                       width = Math.round(width * wh[1] / height);
+                                       height = wh[1];
+                               }
+                               size = '' + wh[0] + '-' + wh[1]; // dash instead of x
+                               src = src.substr(0, src.length - 4) + '-' + size + src.substr(src.length - 4);
+                       }
+                       code += ' style="background-image: url(/' + src + ');';
+                       code += ' width: ' + width + 'px;';
+                       code += ' padding-top: ' + height + 'px;';
+                       code += '">' + caption;
+                       switch(align) {
+                               case 'left': case 'right':
+                                       code += '</span>'
+                               break;
+                               case 'centered': case 'full':
+                                       code += '</div>'
+                               break;
+                       }
+                       CKEDITOR.dialog.getCurrent().hide(); // FIXME
+                       console.log(code);
+                       editor.insertHtml(code);
+               }
+               CKEDITOR.plugins.add('wfpl_images', {
+                       init: function (editor) {
+                               var plugin_id = window.cke_wfpl_images.editors.length;
+                               window.cke_wfpl_images.editors.push(editor);
+                               window.cke_wfpl_images.selected.push(null);
+
+                               editor.addCommand('wfpl_images', new CKEDITOR.dialogCommand('wfpl_images_dialog'));
+                               editor.ui.addButton('wfpl_images', {
+                                       label: 'Insert Image',
+                                       command: 'wfpl_images',
+                                       toolbar: 'insert' /* which section to put this button in */
+                               });
+                               CKEDITOR.dialog.add('wfpl_images_dialog', function (api) {
+                                       // CKEDITOR.dialog.definition
+                                       return {
+                                               title: 'Insert Image',
+                                               minWidth: 700,
+                                               minHeight: 350,
+                                               onShow: function() {
+                                                       // FIXME unselect and remove hilight
+                                                       // window.cke_wfpl_images.selected[plugin_id] = null;
+                                               },
+                                               contents: [
+                                                       {
+                                                               id: 'tab1',
+                                                               label: '?not displayed',
+                                                               expand: true,
+                                                               padding: 0,
+                                                               elements: [
+                                                                       {
+                                                                               type: 'html',
+                                                                               html: '<div class="cke_wfpl_images_dialog"><p>Note: If the image you want is not shown below, go to the control panel, then "manage images" and add it there. Next time you load an editor, you\'ll see that new image below.</p>'
+                                                                                       + '<h3>Step 1: Choose an image to insert:</h3>'
+                                                                                       + "<div class=\"cke_wfpl_thumbs\">~wfpl_images {~ <div class=\"cke_wfpl_thumb\" onclick=\"return window.cke_wfpl_images_thumb_click("+plugin_id+", this, ~id~)\" style=\"background-image: url(~image thumb_src attr jsdq~)\">~caption empty {~~name html jsdq~~}~~caption nonempty {~~caption html jsdq~~}~</div>~}~</div>"
+                                                                               + "</div>"
+                                                                       }
+                                                               ]
+                                                       }
+                                               ],
+                                               buttons: [
+                                                       {
+                                                               type: 'button',
+                                                               id: 'left',
+                                                               label: 'Insert on Left',
+                                                               className: 'cke_dialog_ui_button_ok',
+                                                               onClick: function() {
+                                                                       cke_wfpl_images_insert_click(plugin_id, 'left');
+                                                               }
+                                                       },
+                                                       {
+                                                               type: 'button',
+                                                               id: 'center',
+                                                               label: 'Insert Centered',
+                                                               className: 'cke_dialog_ui_button_ok',
+                                                               onClick: function() {
+                                                                       cke_wfpl_images_insert_click(plugin_id, 'centered');
+                                                               }
+                                                       },
+                                                       {
+                                                               type: 'button',
+                                                               id: 'right',
+                                                               label: 'Insert on Right',
+                                                               className: 'cke_dialog_ui_button_ok',
+                                                               onClick: function() {
+                                                                       cke_wfpl_images_insert_click(plugin_id, 'right');
+                                                               }
+                                                       },
+                                                       {
+                                                               type: 'button',
+                                                               id: 'full',
+                                                               label: 'Insert BIG',
+                                                               className: 'cke_dialog_ui_button_ok',
+                                                               onClick: function() {
+                                                                       cke_wfpl_images_insert_click(plugin_id, 'full');
+                                                               }
+                                                       },
+                                                       CKEDITOR.dialog.cancelButton
+                                               ],
+                                               onOk: function () {
+                                                       var image = this.getContentElement('tab1', 'image').getValue();
+                                                       if (image === null) {
+                                                               return;
+                                                       }
+                                                       editor.insertHtml('<img alt="" src="' + window.wfpl_images[image].image + '">');
+                                               }
+                                       };
+                               });
+                       }
+               });
                function make_wysiwyg(name) {
                        CKEDITOR.replace(name, {
-                               'contentsCss': 'style.css',
+                               'contentsCss': 'style.css?m=~style.css mtime~',
+                               'allowedContent': true,
+                               'stylesSet': [
+                                       { name: 'Paragraph', element: 'p'},
+                                       { name: 'Page Headline', element: 'h1'},
+                                       { name: 'Section Headline', element: 'h2'},
+                                       { name: 'Subsection Headline', element: 'h3'},
+                                       { name: 'Tagline (under headline)', element: 'h4', attributes: { class: 'tagline'}},
+                                       { name: 'Quote', element: 'p', attributes: { class: 'quote'}},
+                                       { name: 'Quote Author', element: 'p', attributes: { class: 'attrib'}}
+                               ],
                                'uiColor': '#ccccff',
                                'removePlugins': 'forms,templates,smiley,pagebreak,save,newpage,preview,print',
+                               'extraPlugins': 'wfpl_images',
                                'height': '300px',
                                'toolbar': [
                                        ['Source'],
                                        ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', 'Blockquote'],
                                        ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'],
                                        ['Link', 'Unlink', 'Anchor'],
-                                       ['Image', 'Table', 'HorizontalRule', 'SpecialChar', 'PageBreak'],
+                                       ['wfpl_images', 'Table', 'HorizontalRule', 'SpecialChar', 'PageBreak'],
                                        '/',
-                                       ['Styles', 'Format', 'Font', 'FontSize'],
+                                       ['Styles', 'Font', 'FontSize'],
                                        ['TextColor', 'BGColor'],
                                        ['Maximize', 'ShowBlocks']
                                ]
                        <div class="field_notes">(If you'd like this page to appear in the navigation with a shorter title.)</div>
                        <div class="field"><input type="text" name="nav_title" value="~nav_title attr~"></div>
 
-                       <div class="caption">Content</div>
+                       <div class="caption">Page Contents</div>
                        <div class="field_notes">
-                               <ul>
+                               <ul class="first">
+                                       <li style="color: red; list-style: none">Please read these instructions in full:</li>
                                        <li>If you don't see an editor below (with buttons in it) then please try this page in <a href="http://getfirefox.com">Mozilla FireFox</a> or <a href="http://www.google.com/chrome/">Google Chrome</a>.</li>
-                                       <li>If you're pasting from Microsoft Word, please use the "paste from word" button (4 right of the scissors).</li>
-                                       <li>In the link dialog, you can make a link to another page on this site by entering that page's "filename" in the URL field.</li>
+                                       <li>If you're pasting from Microsoft Word, please use the "paste from word" button (looks like a clipboard with a "W").</li>
+                                       <li>To make a link, type the text to be clicked, select it, click the "Link" button (looks like a short chain) and paste the web address (where the link should point to) into the "URL" field. Exception: If you're making a link to another page on this site, please remove the "http://~$host~/" from the beginning of the "URL" field and set the "Protocol" to &lt;other&gt;.</li>
                                </ul>
                        </div>
                        <div class="field"><textarea class="html_editor" rows="20" cols="50" id="content" name="content">~content html~</textarea><script type="text/javascript">make_wysiwyg('content');</script></div>