Index: lams_central/web/ckeditor/plugins/wavepanel/dialogs/wave.css =================================================================== diff -u --- lams_central/web/ckeditor/plugins/wavepanel/dialogs/wave.css (revision 0) +++ lams_central/web/ckeditor/plugins/wavepanel/dialogs/wave.css (revision 49c7c4395cf0e03fbda33d8d25d167ba592f81b7) @@ -0,0 +1,78 @@ +.lams-wavepanel .clickable { + cursor: pointer; +} + +.lams-wavepanel .clickable .fa { + background: rgba(0, 0, 0, 0.15); + display: inline-block; + padding: 5px 7px; + border-radius: 4px; + margin-right: -7px; +} + +.lams-wavepanel .panel-heading span { + margin-top: -20px; +} + + +.btn { + padding: 6px 12px; + border: 1px solid transparent; +} +.lams-wavepanel .panel-heading { + padding: 7px 10px; +} +.lams-wavepanel .panel-body { + padding: 15px; +} +.lams-wavepanel.panel-default { + border-color: #ddd; +} +.lams-wavepanel.panel-primary { + border-color: #337ab7; +} +.lams-wavepanel.panel-success { + border-color: #d6e9c6; +} +.lams-wavepanel.panel-info { + border-color: #bce8f1; +} +.lams-wavepanel.panel-warning { + border-color: #faebcc; +} +.lams-wavepanel.panel-danger { + border-color: #ebccd1; +} +.cke_reset_all, .cke_reset_all * { + border: 1px solid transparent; +} + +.btn-block { + width: 100%; + text-align: center; +} +.cke_dialog .ImagePreviewBox { + border: none; + width: 98%; + padding: 10px; + margin-top: 10px; +} +.cke_dialog_ui_labeled_content { + padding-top: 5px; +} +.cke_dialog_contents { + background-color: #f3f3f3; +} +.cke_tpl_list a:hover .cke_tpl_item, +.cke_tpl_list a:focus .cke_tpl_item, +.cke_tpl_list a:active .cke_tpl_item { + background-color: #f3f3f3; +} +.cke_tpl_list { + border: #dcdcdc 1px solid; + background-color: #ffffff; + overflow-y: auto; + overflow-x: hidden; + width: 100%; + height: 560px; +} Index: lams_central/web/ckeditor/plugins/wavepanel/dialogs/wave.js =================================================================== diff -u --- lams_central/web/ckeditor/plugins/wavepanel/dialogs/wave.js (revision 0) +++ lams_central/web/ckeditor/plugins/wavepanel/dialogs/wave.js (revision 49c7c4395cf0e03fbda33d8d25d167ba592f81b7) @@ -0,0 +1,227 @@ +/** + * LAMS Foundation 2005 Onwards + * GNU GPL V2 + */ + +( function() { + var wavepanelDialog = function( editor ) { + // Load image preview. + var PANEL = 1, + PREVIEW = 4, + CLEANUP = 8; + + var updatePreview = function( dialog ) { + //Don't load before onShow. + if ( !dialog.onShowExecutedElement || !dialog.preview ) { + return 1; + } + + // Read attributes and update imagePreview; + dialog.commitContent( PREVIEW, dialog.preview ); + return 0; + }; + + function commitContent() { + var args = arguments; + + this.foreach( function( widget ) { + if ( widget.commit ) { + widget.commit.apply( widget, args ); + } + } ); + } + + // Avoid recursions + var incommit; + + // Synchronous field values to other impacted fields is required, e.g. border + // size change should alter inline-style text as well. + function commitInternally( targetFields ) { + if ( incommit ) { + return; + } + + incommit = 1; + + var dialog = this.getDialog(), + element = dialog.panelElement; + if ( element ) { + // Commit this field and broadcast to target fields. + this.commit( PANEL, element ); + + targetFields = [].concat( targetFields ); + var length = targetFields.length, + field; + for ( var i = 0; i < length; i++ ) { + field = dialog.getContentElement.apply( dialog, targetFields[ i ].split( ':' ) ); + // May cause recursion. + field && field.setup( PANEL, element ); + } + } + + incommit = 0; + } + + var numbering = function( id ) { + return CKEDITOR.tools.getNextId() + '_' + id; + }, + previewPanelId = numbering( 'previewPanel' ); + + // Load skin at first + var plugin = CKEDITOR.plugins.get( 'wavepanel' ); + CKEDITOR.document.appendStyleSheet( CKEDITOR.getUrl( plugin.path + 'dialogs/wave.css' ) ); + + return { + title: editor.lang.wavepanel['title'], + minWidth: 460, + minHeight: 190, + style: '', + id:'aaaaa', + className: 'bbbbbb', + onShow: function() { + this.panelElement = false; + + var editor = this.getParentEditor(), + sel = editor.getSelection(), + element = sel && sel.getSelectedElement(); + + // creating for the sake of updatePreview() method + this.onShowExecutedElement = editor.document.createElement( 'img' ); + this.preview = CKEDITOR.document.getById( previewPanelId ); + + //check if it has parent with class .lams-wavepanel + this.panelElement = editor.elementPath( element ).contains( function( element ) { + if ( element.is( 'div' ) && element.hasClass( 'lams-wavepanel' )) { + return true; + } + }); + if (this.panelElement == null) { + alert("wavepanel plugin failed to parse selected element and thus exited"); + return; + } + + // Use the original element as a buffer from since we don't want + // temporary changes to be committed, e.g. if the dialog is canceled + this.cleanPanelElement = this.panelElement; + this.panelElement = this.cleanPanelElement.clone( true, true ); + + // Fill out all fields + this.setupContent( PANEL, this.panelElement ); + updatePreview( this ); + + //setup body content as well + var divPanelBody = this.panelElement.find( 'div.panel-body' ).getItem(0); + this.preview.find( 'div.panel-body' ).getItem(0).setHtml(divPanelBody.getHtml()); + + }, + onOk: function() { + + // Restore the original element before all commits + this.panelElement = this.cleanPanelElement; + delete this.cleanPanelElement; + + // Set attributes + this.commitContent( PANEL, this.panelElement ); + + //editor.insertElement( this.panelElement ); + }, + onLoad: function() { + var doc = this._.element.getDocument(); + + this.commitContent = commitContent; + }, + onHide: function() { + if ( this.preview ) { + this.commitContent( CLEANUP, this.preview ); + } + + if ( this.onShowExecutedElement ) { + this.onShowExecutedElement.remove(); + this.onShowExecutedElement = false; // Dialog is closed. + } + + delete this.panelElement; + }, + contents: [ { + id: 'info', + label: editor.lang.wavepanel.infoTab, + accessKey: 'I', + elements: [ + { + type: 'hbox', + children: [ { + id: 'basic', + type: 'vbox', + children: [ + { + type: 'hbox', + id: 'bootsrap-class', + style: 'margin: 5px 0;', + children: [ + { + id: 'color-class', + type: 'radio', + items: [ + [editor.lang.wavepanel.colorBlue, 'wave-blue'], + [editor.lang.wavepanel.colorOrange, 'wave-orange'], + [editor.lang.wavepanel.colorGreen, 'wave-green'], + [editor.lang.wavepanel.colorPurple, 'wave-purple'], + [editor.lang.wavepanel.colorPink, 'wave-pink'], + [editor.lang.wavepanel.colorRed, 'wave-red'] + ], + style: 'color: white', + label: editor.lang.wavepanel.waveColor, + onChange: function() { + updatePreview( this.getDialog() ); + }, + setup: function( type, element ) { + if ( type == PANEL ) { + if (element.hasClass( 'wave-blue' )) { + this.setValue( 'wave-blue' ); + } else if (element.hasClass( 'wave-orange' )) { + this.setValue( 'wave-orange' ); + } else if (element.hasClass( 'wave-purple' )) { + this.setValue( 'wave-purple' ); + } else if (element.hasClass( 'wave-pink' )) { + this.setValue( 'wave-pink' ); + } else if (element.hasClass( 'wave-red' )) { + this.setValue( 'wave-red' ); + } + } + }, + commit: function( type, element ) { + + if ( type == PANEL ) { + if ( this.getValue() || this.isChanged() ) { + element.removeClass("wave-blue").removeClass("wave-orange").removeClass("wave-green").removeClass("wave-purple").removeClass("wave-pink").removeClass("wave-red"); + element.addClass( this.getValue() ); + } + } + + } + } + ], + onLoad:function( type, element ) { + $("input[type='radio'][name='color-class_radio']+label").addClass("btn"); + $("input[type='radio'][name='color-class_radio']:eq(0)+label").css("background-color","blue"); + $("input[type='radio'][name='color-class_radio']:eq(1)+label").css("background-color","orange"); + $("input[type='radio'][name='color-class_radio']:eq(2)+label").css("background-color","green"); + $("input[type='radio'][name='color-class_radio']:eq(3)+label").css("background-color","purple"); + $("input[type='radio'][name='color-class_radio']:eq(4)+label").css("background-color","pink"); + $("input[type='radio'][name='color-class_radio']:eq(5)+label").css("background-color","red"); + } + }, + + ] + } ] + }, + ] + + } ] + }; + }; + + CKEDITOR.dialog.add( 'wavepanel', function( editor ) { + return wavepanelDialog( editor ); + } ); +} )(); Index: lams_central/web/ckeditor/plugins/wavepanel/icons/hidpi/image.png =================================================================== diff -u Binary files differ Index: lams_central/web/ckeditor/plugins/wavepanel/icons/image.png =================================================================== diff -u Binary files differ Index: lams_central/web/ckeditor/plugins/wavepanel/images/noimage.png =================================================================== diff -u Binary files differ Index: lams_central/web/ckeditor/plugins/wavepanel/lang/en.js =================================================================== diff -u --- lams_central/web/ckeditor/plugins/wavepanel/lang/en.js (revision 0) +++ lams_central/web/ckeditor/plugins/wavepanel/lang/en.js (revision 49c7c4395cf0e03fbda33d8d25d167ba592f81b7) @@ -0,0 +1,14 @@ +/* +Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. +For licensing, see LICENSE.md or http://ckeditor.com/license +*/ +CKEDITOR.plugins.setLang( 'wavepanel', 'en', { + title: 'Editing Header Color', + waveColor: 'Color', + colorBlue: 'Blue', + colorOrange: 'Orange', + colorGreen: 'Green', + colorPurple: 'Purple', + colorRed: 'Red', + colorPink: 'Pink' +} ); Index: lams_central/web/ckeditor/plugins/wavepanel/plugin.js =================================================================== diff -u --- lams_central/web/ckeditor/plugins/wavepanel/plugin.js (revision 0) +++ lams_central/web/ckeditor/plugins/wavepanel/plugin.js (revision 49c7c4395cf0e03fbda33d8d25d167ba592f81b7) @@ -0,0 +1,37 @@ +/** + * @fileOverview The Wave Header plugin. + */ + +( function() { + + CKEDITOR.plugins.add( 'wavepanel', { + requires: 'dialog', + lang: 'en', + hidpi: true, + init: function( editor ) { + var PLUGIN_NAME = 'wavepanel'; + + // Register the dialog + CKEDITOR.dialog.add( PLUGIN_NAME, this.path + 'dialogs/wave.js' ); + + // Register the command + editor.addCommand( PLUGIN_NAME, new CKEDITOR.dialogCommand(PLUGIN_NAME) ); + + editor.on( 'doubleclick', function( evt ) { + var element = evt.data.element; + + //check if it has parent with class .lams-wavepanel + if ( element && editor.elementPath( element ).contains( function( element ) { + if ( element.is( 'div' ) && element.hasClass( 'lams-wavepanel' )) { + return true; + } + } )) { + evt.data.dialog = 'wavepanel'; + } + } ); + + + } + } ); + +} )(); Index: lams_central/web/css/_learner_base.scss =================================================================== diff -u -reda89b58885d3360b28c25096188f47952aff317 -r49c7c4395cf0e03fbda33d8d25d167ba592f81b7 --- lams_central/web/css/_learner_base.scss (.../_learner_base.scss) (revision eda89b58885d3360b28c25096188f47952aff317) +++ lams_central/web/css/_learner_base.scss (.../_learner_base.scss) (revision 49c7c4395cf0e03fbda33d8d25d167ba592f81b7) @@ -1256,4 +1256,11 @@ word-wrap: break-word; /* IE 5.5+ and CSS3 */ overflow: hidden; vertical-align: middle; -} \ No newline at end of file +} +/* Wave headers see LDEV-5167 */ +.wave-orange {background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI2Q1NmExMSIgd2lkdGg9IjEyNDAiIGhlaWdodD0iMzA0IiAgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBvcGFjaXR5PSIuMTUiIGQ9Ik0wIDBoMTIzOC4wOTV2Mjk2LjQ3N2MtMzQzLjQ0OCAyNi4xNjEtMzA1LjgxNi0yNC44NjEtNjE5LjA0OC0xNy45MDdTMjkxLjk5IDMxNS43ODggMCAyNzguNTdWMHoiLz48cGF0aCBkPSJNMTI0MCAwSC45NTN2MjY0LjgwNGM3Ni41NjYtNy4zNjUgMTQ2Ljg0NC0xOC4xMiAzMjcuMzUxLTcuMzY1czI0NC4yNDUgNTMuNzcxIDUwNi42MjggMTIuOTkxYzE3NC45MjItMjcuMTg3IDMwOS45NDUtMjUuMTg2IDQwNS4wNjggNi4wMDF6IiBmaWxsPSIjZjkzIi8+PC9zdmc+");text-align:center;color: white;background-size: cover;background-repeat: no-repeat;background-position: top;padding: 5% 0 12% 0;margin: -16px; } +.wave-blue {background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjQwIiBoZWlnaHQ9IjMwNCIgIGZpbGw9IiMwOTRiYWMiIGZpbGwtcnVsZT0iZXZlbm9kZCIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBvcGFjaXR5PSIuMTUiIGQ9Ik0wIDBoMTIzOC4wOTV2Mjk2LjQ3N2MtMzQzLjQ0OCAyNi4xNjEtMzA1LjgxNi0yNC44NjEtNjE5LjA0OC0xNy45MDdTMjkxLjk5IDMxNS43ODggMCAyNzguNTdWMHoiLz48cGF0aCBkPSJNMTI0MCAwSC45NTN2MjY0LjgwNGM3Ni41NjYtNy4zNjUgMTQ2Ljg0NC0xOC4xMiAzMjcuMzUxLTcuMzY1czI0NC4yNDUgNTMuNzcxIDUwNi42MjggMTIuOTkxYzE3NC45MjItMjcuMTg3IDMwOS45NDUtMjUuMTg2IDQwNS4wNjggNi4wMDF6Ii8+PC9zdmc+");text-align:center;color: white;background-size: cover;background-repeat: no-repeat;background-position: top;padding: 5% 0 12% 0;margin: -16px; } +.wave-purple {background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjQwIiBoZWlnaHQ9IjMwNCIgIGZpbGw9IiM1ZDM3YTIiIGZpbGwtcnVsZT0iZXZlbm9kZCIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBvcGFjaXR5PSIuMTUiIGQ9Ik0wIDBoMTIzOC4wOTV2Mjk2LjQ3N2MtMzQzLjQ0OCAyNi4xNjEtMzA1LjgxNi0yNC44NjEtNjE5LjA0OC0xNy45MDdTMjkxLjk5IDMxNS43ODggMCAyNzguNTdWMHoiLz48cGF0aCBkPSJNMTI0MCAwSC45NTN2MjY0LjgwNGM3Ni41NjYtNy4zNjUgMTQ2Ljg0NC0xOC4xMiAzMjcuMzUxLTcuMzY1czI0NC4yNDUgNTMuNzcxIDUwNi42MjggMTIuOTkxYzE3NC45MjItMjcuMTg3IDMwOS45NDUtMjUuMTg2IDQwNS4wNjggNi4wMDF6Ii8+PC9zdmc+");text-align:center;color: white;background-size: cover;background-repeat: no-repeat;background-position: top;padding: 5% 0 12% 0;margin: -16px; } +.wave-green {background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjQwIiBoZWlnaHQ9IjMwNCIgIGZpbGw9IiMyMjhjM2EiIGZpbGwtcnVsZT0iZXZlbm9kZCIgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBvcGFjaXR5PSIuMTUiIGQ9Ik0wIDBoMTIzOC4wOTV2Mjk2LjQ3N2MtMzQzLjQ0OCAyNi4xNjEtMzA1LjgxNi0yNC44NjEtNjE5LjA0OC0xNy45MDdTMjkxLjk5IDMxNS43ODggMCAyNzguNTdWMHoiLz48cGF0aCBkPSJNMTI0MCAwSC45NTN2MjY0LjgwNGM3Ni41NjYtNy4zNjUgMTQ2Ljg0NC0xOC4xMiAzMjcuMzUxLTcuMzY1czI0NC4yNDUgNTMuNzcxIDUwNi42MjggMTIuOTkxYzE3NC45MjItMjcuMTg3IDMwOS45NDUtMjUuMTg2IDQwNS4wNjggNi4wMDF6Ii8+PC9zdmc+");text-align:center;color: white;background-size: cover;background-repeat: no-repeat;background-position: top;padding: 5% 0 12% 0;margin: -16px; } +.wave-pink {background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI2ZmOTdmZiIgaGVpZ2h0PSIzMDQiIHdpZHRoPSIxMjQwIiAgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNMCAwaDEyMzguMDk1djI5Ni40NzdjLTM0My40NDggMjYuMTYxLTMwNS44MTYtMjQuODYxLTYxOS4wNDgtMTcuOTA3UzI5MS45OSAzMTUuNzg4IDAgMjc4LjU3VjB6IiBvcGFjaXR5PSIuMTUiLz48cGF0aCBkPSJNMTI0MCAwSC45NTN2MjY0LjgwNGM3Ni41NjYtNy4zNjUgMTQ2Ljg0NC0xOC4xMiAzMjcuMzUxLTcuMzY1czI0NC4yNDUgNTMuNzcxIDUwNi42MjggMTIuOTkxYzE3NC45MjItMjcuMTg3IDMwOS45NDUtMjUuMTg2IDQwNS4wNjggNi4wMDF6Ii8+PC9zdmc+");text-align:center;color: white;background-size: cover;background-repeat: no-repeat;background-position: top;padding: 5% 0 12% 0;margin: -16px; } +.wave-red {background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIGZpbGwtcnVsZT0iZXZlbm9kZCIgZmlsbD0iI2MwMCIgaGVpZ2h0PSIzMDQiIHdpZHRoPSIxMjQwIiAgeG1sbnM6dj0iaHR0cHM6Ly92ZWN0YS5pby9uYW5vIj48cGF0aCBkPSJNMCAwaDEyMzguMDk1djI5Ni40NzdjLTM0My40NDggMjYuMTYxLTMwNS44MTYtMjQuODYxLTYxOS4wNDgtMTcuOTA3UzI5MS45OSAzMTUuNzg4IDAgMjc4LjU3VjB6IiBvcGFjaXR5PSIuMTUiLz48cGF0aCBkPSJNMTI0MCAwSC45NTN2MjY0LjgwNGM3Ni41NjYtNy4zNjUgMTQ2Ljg0NC0xOC4xMiAzMjcuMzUxLTcuMzY1czI0NC4yNDUgNTMuNzcxIDUwNi42MjggMTIuOTkxYzE3NC45MjItMjcuMTg3IDMwOS45NDUtMjUuMTg2IDQwNS4wNjggNi4wMDF6Ii8+PC9zdmc+");text-align:center;color: white;background-size: cover;background-repeat: no-repeat;background-position: top;padding: 5% 0 12% 0;margin: -16px; } \ No newline at end of file Index: lams_central/web/includes/javascript/ckconfig_custom.js =================================================================== diff -u -r8d0f4c7a77330dce787d91386809259e47936b35 -r49c7c4395cf0e03fbda33d8d25d167ba592f81b7 --- lams_central/web/includes/javascript/ckconfig_custom.js (.../ckconfig_custom.js) (revision 8d0f4c7a77330dce787d91386809259e47936b35) +++ lams_central/web/includes/javascript/ckconfig_custom.js (.../ckconfig_custom.js) (revision 49c7c4395cf0e03fbda33d8d25d167ba592f81b7) @@ -131,7 +131,7 @@ CKEDITOR.config.format_tags = 'div;h1;h2;h3;h4;h5;h6;pre;address;p' ; CKEDITOR.config.enterMode = 'div'; CKEDITOR.plugins.addExternal('wikilink', CKEDITOR.basePath + '../tool/lawiki10/wikilink/', 'plugin.js'); -CKEDITOR.config.extraPlugins = 'wikilink,jlatexmath,image2,html5audio,confighelper,bootstrapTabs,bootpanel,bootsnippets'; +CKEDITOR.config.extraPlugins = 'wikilink,jlatexmath,image2,html5audio,confighelper,bootstrapTabs,bootpanel,bootsnippets,wavepanel'; CKEDITOR.config.enterMode = CKEDITOR.ENTER_DIV; CKEDITOR.config.removePlugins = 'elementspath,about,specialchar'; CKEDITOR.config.allowedContent = true; Index: lams_www/web/public/ckeditor-templates/bootsnippets.js =================================================================== diff -u -r5abf11e85692d06dbd027976cea036afec4e0894 -r49c7c4395cf0e03fbda33d8d25d167ba592f81b7 --- lams_www/web/public/ckeditor-templates/bootsnippets.js (.../bootsnippets.js) (revision 5abf11e85692d06dbd027976cea036afec4e0894) +++ lams_www/web/public/ckeditor-templates/bootsnippets.js (.../bootsnippets.js) (revision 49c7c4395cf0e03fbda33d8d25d167ba592f81b7) @@ -204,65 +204,23 @@ ' ' }, { - title: 'textWaveHeaderOrange', - image: 'background-orange3.svg', - html: - '' + - '
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Lorem ipsum dolor sit amet, consectetur adipiscing elit
Lorem ipsum dolor sit amet, consectetur adipiscing elit