diff --git a/modules/backend/formwidgets/RichEditor.php b/modules/backend/formwidgets/RichEditor.php index e16bff27e..3108edb3b 100644 --- a/modules/backend/formwidgets/RichEditor.php +++ b/modules/backend/formwidgets/RichEditor.php @@ -52,9 +52,11 @@ class RichEditor extends FormWidgetBase // Plugins $this->addJs('js/plugin.cleanup.js', 'core'); $this->addJs('js/plugin.fullscreen.js', 'core'); + $this->addJs('js/plugin.figure.js', 'core'); + $this->addJs('js/plugin.quote.js', 'core'); // Redactor - $this->addCss('vendor/redactor/redactor.css', 'core'); + // $this->addCss('vendor/redactor/redactor.css', 'core'); $this->addJs('vendor/redactor/redactor.js', 'core'); // Rich editor diff --git a/modules/backend/formwidgets/richeditor/assets/css/richeditor.css b/modules/backend/formwidgets/richeditor/assets/css/richeditor.css index 6ed5a102f..5084f0368 100644 --- a/modules/backend/formwidgets/richeditor/assets/css/richeditor.css +++ b/modules/backend/formwidgets/richeditor/assets/css/richeditor.css @@ -1,3 +1,1193 @@ +@font-face { + font-family: 'RedactorFont'; + src: url('../vendor/redactor/redactor-font.eot'); +} +@font-face { + font-family: 'RedactorFont'; + src: url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AABIoAAoAAAAAEeAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAADgEAAA4Bg0Rie09TLzIAAA74AAAAYAAAAGAIIvzVY21hcAAAD1gAAABMAAAATBpVzHZnYXNwAAAPpAAAAAgAAAAIAAAAEGhlYWQAAA+sAAAANgAAADYACVb9aGhlYQAAD+QAAAAkAAAAJAPhAgVobXR4AAAQCAAAAJAAAACQQQED3m1heHAAABCYAAAABgAAAAYAJFAAbmFtZQAAEKAAAAFmAAABZhHEcG1wb3N0AAASCAAAACAAAAAgAAMAAAEABAQAAQEBDVJlZGFjdG9yRm9udAABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeKZviU+HQFHQAAAT8PHQAAAUQRHQAAAAkdAAAN+BIAJQEBDRkbHSAlKi80OT5DSE1SV1xhZmtwdXp/hImOk5idoqessba7wFJlZGFjdG9yRm9udFJlZGFjdG9yRm9udHUwdTF1MjB1RTYwMHVFNjAxdUU2MDJ1RTYwM3VFNjA0dUU2MDV1RTYwNnVFNjA3dUU2MDh1RTYwOXVFNjBBdUU2MEJ1RTYwQ3VFNjBEdUU2MEV1RTYwRnVFNjEwdUU2MTF1RTYxMnVFNjEzdUU2MTR1RTYxNXVFNjE2dUU2MTd1RTYxOHVFNjE5dUU2MUF1RTYxQnVFNjFDdUU2MUR1RTYxRXVFNjFGAAACAYkAIgAkAgABAAQABwAKAA0AQQCYAPEBSQH6Ai8CxwMhA98EGwTXBYEFkQW0BfEGLwagBxEHOgf0CLUJaQmsCfwKhAq5C0QLdAuiC9AMAQxo/JQO/JQO/JQO+5QOi7AVi/gB+JSLi/wB/JSLBfhv990V/EqLi/u5+EqLi/e5Bfu4+5QVi/dv9yb7Avsm+wEFDvcm+AIV+AKLi0L8AouL1AWL+wIV+AKLi0L8AouL1AWL+wIV+AKLi0L8AouL1AX7JvdwFdSLi0JCi4vUBYv7AhXUi4tCQouL1AWL+wIV1IuLQkKLi9QFDviLsBVky0yq+0KWCIshBYuLQMb7LPcT9z33GsW4i4sIiyEF92Wr9wT7QV77Cgj7yfdpFYvIBYuLb3ImSOFBtnqLiwiLfIvXBe6F9yJ7nGSl0PsO6Ps2YwgO9wLUFfe4i4tn+7iLi68FysoVnHmngrGLsounlJydnJ2Up4uyCIv3SUyLi/tXBYt8hoCDg4ODgId8i32Lf4+Dk4OTh5aLmgiL91dLi4v7SQWLZJRvnXkIDvfd+EoVrouL+yrWi4tr+wKLi/dKBbH7kxX3JS/7JS+L1fsDi4uw9wOLi9QF+3LTFfsl5/cl54tC9wOLi2b7A4uLQQWXNhWTg499i3iLf4mBhoSGg4SHgYmOio6KjYiNiI6GjoQIpklri3i5BYuMio2KjYaZhZKEiwiBi4tDbouL90q1iwWfi5mHk4MIVEcVmYsFk4uRjY+Pjo+NkYuUi5SJkoiOh4+FjYOLCH2Li1kFDve393oVRYuu9wyu+wwF+0r7DRXVi6LU7ouiQtWLJve6MIsm+7oFjGcV97iLi0L7uIuL1AUOi7AVi/gB+JSLi/wB/JSLBfdLrxX3JouL1Psmi4tCBYv3AhX3JouL1Psmi4tCBWb3SxX7AYuLQvcBi4vUBYv7AhX7AYuLQvcBi4vUBYv7AhX7AYuLQvcBi4vUBbD3cBWLQvcmi4vU+yaLBfe4ixX7AYuLQvcBi4vUBYv7AhX7AYuLQvcBi4vUBYv7AhX7AYuLQvcBi4vUBQ74lPdzFfss+xNAUIuLCIv1BftCgExsZEte9wr3BPdB92VrCIv1BYuLxV73PfsaCPxYLBWcsvcim+6RCIs/i5oFi4u2nOHVJs5vpIuLCItOBfs2s/sOLqVGCA73zfe2FXNsgGiLY4tpk3Ccd513n4Gji6CLnJKZmpqakpyLn4uehZt+mH+ZfJJ7i32LgIeChQiIiYmKiYuKi4mMioyKjoqPi5GLpJOknKOco6KcqJYIi6EFWXhlcnRrCPthixV0bH9oi2OLaZNwnXecd6CBoougi5ySmpqZmpKci5+LnoWbfph/mX2Seot+i3+IgoQIiImJioqLiYuKjIqMiY6Kj4uRi6SUpJujnKOinKmWCIuhBVh4ZnJzawgOi/gCFfiUi4tC/JSLi9QF90v7AhX33YuLQvvdi4vUBYv7AhX33YuLQvvdi4vUBWZCFYv3S/snL/cnMAUO9yb4AhX4AouLQvwCi4vUBYv7AhX4AouLQvwCi4vUBYv7AhX4AouLQvwCi4vUBfsh9hXPi4ufc4uL6HeLdYWLd6GRi0Jzi4t3Bav7JRWXl5KTjY6PkI2PjY+Mj4yPi5CLlIiThJCFkYKOf4uHi4aKhoqGioaKhokIi3YFkI6QjZCNkIyPjI+LkIuPio6IjoiMh4uGi4iLiImIiYeJh4eHiIiDgX18CIB+i3jPi4ufXosFjo+QkJGRCIuLBQ74AtQVcItyk3aYCIu/qYsFmIWZh5uLvYu0sIu5i7pisFmLe4t9h36FCG2Li78FoJikk6aL3IvMSYs6iztKSTqLCPtL90sV9yaLi0L7JouL1AVmuhV8i3yHfoUIbYuLcwWAfYR6i3iLeZJ5ln0Ii3SpiwWYhZqHmoubi5mPmJEIqYuLVwV2fnKDcIs6i0rNi9uL3MzN3Iumi6SDoH4Ii1dtiwV+kX2Pe4sIDov3lBX4lIuLQvyUi4vUBQ73m/ftFWL7a0qLgFL3VYuWxEuLtPdry4uWxPtVi4BSzIsFDov4AhX4lIuLQvyUi4vUBfdL+wIV992Li0L73YuL1AWL+wIV992Li0L73YuL1AX7S0IVi/dL9ycv+ycwBQ6LsBWL+AH4lIuL/AH8lIsF+G/33RX8SouL+7n4SouL97kF+0r7SxWvi7vqySyLQvwCi4vU9wL3JvcC+yYFDvhv+EsVi/tw+2/3cPdviwVhYBWShIyChoUI+wf7BwWFhoKMhJKEkoqUkJEI9wj3BwWQkJWKkYQI/CD8HxX3b4r7b/dvi/tuBbW1FZKElYqQkAj3B/cHBZCQipWEkoSRgo2FhQj7BvsHBYWGjYGRhQgO97n3kxWL93D3b/tv+2+KBbW3FYSSipSQkQj3B/cGBZGRlIqShJKEjIGGhgj7CPsHBYaGgYyFkgj7CPsJFftvjPdv+3CL928FYWEVhJKBjIaGCPsH+wcFhoaMgZKEkoSUipGRCPcG9wYFkZGJlIWSCA733bAVi/fdZ4uL+91Bi4v3JgVPi1q8i8iLx7y8x4sI9yeLi/wBZosFDvgm9yYV1Ysv+yUv9yXVi4v3J0GL5/cl5/slQYuL+ycF+3+EFYWCgoSBhoGGgIh/i3WLeZF+mH6XhZ2Looujkp2blpqXopGriwiwi4uUBYuUiJKFj4SQgo1/i3+Lf4l/iH+If4V+hAiLugWWkJeOl46XjZiMmIusi6KEmH6ZfZFyi2gIi/sMV4uLowWL1hV2iwV3i32IhIaDhoeCi36LgY6EkIWQhpOIlIuZi5aQkpaTlo+ai58Ii48FDvdC91kVVoum9wml+wkF+x37ChXDi5zS1oudRMOLPvezR4s++7MF+BPwFYuHBYt3h3uDgIOAf4V9i4GLg46GkYWRiJOLlIuYj5WTkJSQmY6giwihiwWt7RV9mXOSaYt8i36Kfol/iH6Hf4YIi1sFmJOYkJiPl46YjZmLl4uViJGHkoaOhIuCCIuCZYsFaYtyhXt/e3+DeItyi3SReZl+mH6ehaOLmIuXjZWQlpCTk5KUCItzwouL9w8Fi6+EpX2ZCA7U95QV+AKLi2b8AouLsAX3U1oVloeUhZGEkYSOgouCi36GgYKEgoR/iHuLe4t6jnuRepB6lHqXCItKBZqEm4Wch5yIm4mci7OLqZOfm5+alKOLq4ujhZ9/mn6bd5dwlAhvlgV3kX6ShZGFkIiTi5OLl4+UlJGTkZeOm4uai5mImoaZhpqEmYIIi8gFfJF8kHuPfI58jXuLaYtxg3h6d3uCdItui3WQeZd+l32hf61+CKuABQ6L928Vr6n3S/snZ277S/cmBYuLFfdL9yevbvtL+ydnqAX4lIsVZ6n7S/snr273S/cmBYuLFftL9ydnbvdL+yevqAUOi2YVi/iU+JSLi/yU/JSLBfhv+HAV/EqLi/xL+EqLi/hLBUL7JhX7uIuL1Pe4i4tCBYv7AhX7uIuL1Pe4i4tCBYv7AhX7uIuL1Pe4i4tCBQ73jPdyFZ6LmYiUg5ODj36LeYt6h3+DhIOEfYd3iwhii4vstIsFi/cVFZuLloiShJKFjoKLfYt+iIGEhYSFgIh7iwhii4vYtIsFJvuqFfCLBbWLqJKemp2ZlKKLqoulhZ9/mn+ZeZRzjZ+NmpKVl5aXkJuLoIungqB5mHqZcJJoiwgmi4v73QUOsIsVi/hL+EqLi/xL/EqLBfeR+AIVR4s/+7nDi5vT1oucQ8KLQPe5BWlWFaX7DFeLpfcMBQ74UPeKFfso+yiHjwV9h3uNfJMIamupbXx8BWJiSYtitAh8mgVitIvNtLQI92v3awW0tM2LtGIImnwFtGKLSWJiCGb3EhVuqFyKbm4I+1n7WgVtbotcp26ob7qLqKkIsrEFg4+EkIWScKaGsJ+gCN3dBZuapIyifwj7EvsRsWb3GvcaBaiojLpuqAgOi/gCFfiUi4tC/JSLi9QF9yb7AhX4AouLQvwCi4vUBfcn+wIV92+Li0L7b4uL1AUOi/gCFfiUi4tC/JSLi9QFi/sCFfgBi4tC/AGLi9QFi/sCFfdwi4tC+3CLi9QFDov4AhX4k4uLQvyTi4vUBYv7AhX4k4uLQvyTi4vUBYv7AhX4lIuLQvyUi4vUBQ73AvgCFfe4i4tC+7iLi9QF+wL7AhX4lIuLQvyUi4vUBfcC+wIV97iLi0L7uIuL1AUO1LIVi9RCi4v3ufhLi4tB1IuL+7j8S4sF99333RX8AYuL+3D4AYuL93AF1UIVZouL+0v73YuLZvgCi4v3cAX7b0IV+0yL5/cB5/sBBfcBZhX7uYuLsPe5i4tmBWL3AhW0QkKLq9QFDviUFPiUFYsMCgAAAAADAgABkAAFAAABTAFmAAAARwFMAWYAAAD1ABkAhAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAOYfAeD/4P/gAeAAIAAAAAEAAAAAAAAAAAAAACAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAOAAAAAoACAACAAIAAQAg5h///f//AAAAAAAg5gD//f//AAH/4xoEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAQAAhlBJsl8PPPUACwIAAAAAAM91iyUAAAAAz3WLJf///9sCAAHbAAAACAACAAAAAAAAAAEAAAHg/+AAAAIA//8AAAIAAAEAAAAAAAAAAAAAAAAAAAAkAAAAAAAAAAAAAAAAAQAAAAIAAAACAAAAAgAAAAIAAG4CAAAAAgAAbQIAAAACAAAJAgAASQIA//8CAAAAAgAAAAIAAAACAACSAgAAAAIAAAACAAAlAgAAAAIAAG4CAAAlAgAAJQIAAEkCAAAAAgAAAAIAAJMCAAAlAgAAQgIAAAACAAAAAgAAAAIAAAACAAAAAABQAAAkAAAAAAAOAK4AAQAAAAAAAQAYAAAAAQAAAAAAAgAOAGoAAQAAAAAAAwAYAC4AAQAAAAAABAAYAHgAAQAAAAAABQAWABgAAQAAAAAABgAMAEYAAQAAAAAACgAoAJAAAwABBAkAAQAYAAAAAwABBAkAAgAOAGoAAwABBAkAAwAYAC4AAwABBAkABAAYAHgAAwABBAkABQAWABgAAwABBAkABgAYAFIAAwABBAkACgAoAJAAUgBlAGQAYQBjAHQAbwByAEYAbwBuAHQAVgBlAHIAcwBpAG8AbgAgADEALgAwAFIAZQBkAGEAYwB0AG8AcgBGAG8AbgB0UmVkYWN0b3JGb250AFIAZQBkAGEAYwB0AG8AcgBGAG8AbgB0AFIAZQBnAHUAbABhAHIAUgBlAGQAYQBjAHQAbwByAEYAbwBuAHQARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAAAAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('woff'); + font-weight: normal; + font-style: normal; +} +.redactor_box::selection { + background: #ffff9e; +} +.redactor_box::-moz-selection { + background: #ffff9e; +} +.redactor_box img::selection { + background: transparent; +} +.redactor_box img::-moz-selection { + background: transparent; +} +.redactor_box { + position: relative; + overflow: visible; + background: #fff; +} +.redactor_box iframe { + display: block; + margin: 0; + padding: 0; + border: none; +} +.redactor_box textarea { + position: relative; + display: block; + overflow: auto; + margin: 0; + padding: 0; + width: 100%; + outline: none; + border: none; + background-color: #222; + box-shadow: none; + color: #ccc; + font-size: 13px; + font-family: Menlo, Monaco, monospace, sans-serif; + resize: none; +} +.redactor_box textarea:focus { + outline: none; +} +.redactor_box, +.redactor_box textarea { + z-index: auto !important; +} +.redactor_box_fullscreen { + z-index: 1060 !important; +} +#redactor_modal_overlay, +#redactor_modal, +.redactor_dropdown { + z-index: 1061 !important; +} +body .redactor_air { + position: absolute; + z-index: 502; +} +body .redactor_box_fullscreen { + position: fixed; + top: 0; + left: 0; + width: 100%; + background: #f9f9f9; + overflow-y: scroll !important; +} +body .redactor_box_fullscreen .redactor_editor { + max-width: 960px; + margin: 20px auto !important; + padding: 20px; +} +.redactor-link-tooltip { + position: absolute; + z-index: 49999; + padding: 10px; + line-height: 1; + display: inline-block; + background-color: #000; + color: #555 !important; +} +.redactor-link-tooltip, +.redactor-link-tooltip a { + font-size: 12px; + font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; +} +.redactor-link-tooltip a { + color: #ccc; + margin: 0 5px; + text-decoration: none; +} +.redactor-link-tooltip a:hover { + color: #fff; +} +#redactor-image-box img { + width: 100%; +} +.redactor_editor { + position: relative; + overflow: auto; + margin: 0 !important; + padding: 10px 20px; + padding-bottom: 5px; + outline: none; + background: none; + background: #fff; + box-shadow: none !important; + white-space: normal; + border: none; +} +.redactor_editor:focus { + outline: none; +} +.redactor_editor a { + color: #15c !important; + text-decoration: underline !important; +} +.redactor_editor .redactor_placeholder { + color: #999 !important; + display: block !important; +} +.redactor_editor object, +.redactor_editor embed, +.redactor_editor video, +.redactor_editor img { + max-width: 100%; + width: auto; +} +.redactor_editor video, +.redactor_editor img { + height: auto; +} +.redactor_editor div, +.redactor_editor p, +.redactor_editor ul, +.redactor_editor ol, +.redactor_editor table, +.redactor_editor dl, +.redactor_editor blockquote, +.redactor_editor pre { + margin: 0; + margin-bottom: 10px !important; + border: none; + background: none !important; + box-shadow: none !important; +} +.redactor_editor iframe, +.redactor_editor object, +.redactor_editor hr { + margin-bottom: 15px !important; +} +.redactor_editor blockquote { + margin-left: 1.5em !important; + padding-left: 0 !important; + color: #777; + font-style: italic !important; +} +.redactor_editor ul, +.redactor_editor ol { + padding-left: 2em !important; +} +.redactor_editor ul ul, +.redactor_editor ol ol, +.redactor_editor ul ol, +.redactor_editor ol ul { + margin: 2px !important; + padding: 0 !important; + padding-left: 2em !important; + border: none; +} +.redactor_editor dl dt { + font-weight: bold; +} +.redactor_editor dd { + margin-left: 1em; +} +.redactor_editor table { + border-collapse: collapse; + font-size: 1em !important; +} +.redactor_editor table td { + padding: 5px !important; + border: 1px solid #ddd; + vertical-align: top; +} +.redactor_editor table thead td { + border-bottom: 2px solid #000 !important; + font-weight: bold !important; +} +.redactor_editor code { + background-color: #d8d7d7 !important; +} +.redactor_editor pre { + overflow: auto; + padding: 1em !important; + border: 1px solid #ddd !important; + border-radius: 3px !important; + background: #f8f8f8 !important; + white-space: pre; + font-size: 90% !important; +} +.redactor_editor hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; +} +.redactor_editor h1, +.redactor_editor h2, +.redactor_editor h3, +.redactor_editor h4, +.redactor_editor h5, +.redactor_editor h6 { + margin-top: 0 !important; + padding: 0 !important; + background: none; + color: #000; + font-weight: bold; +} +.redactor_editor h1 { + font-size: 36px !important; + line-height: 1.111em !important; + margin-bottom: .15em !important; +} +.redactor_editor h2 { + font-size: 30px !important; + line-height: 1.111em !important; + margin-bottom: .25em !important; +} +.redactor_editor h3 { + font-size: 24px !important; + line-height: 1.333em !important; + margin-bottom: .2em !important; +} +.redactor_editor h4 { + font-size: 18px !important; + line-height: 1.5em !important; + margin-bottom: .2em !important; +} +.redactor_editor h5 { + font-size: 1em !important; + line-height: 1.6em !important; + margin-bottom: .25em !important; +} +.redactor_editor h6 { + font-size: .8em !important; + line-height: 1.6em !important; + text-transform: uppercase; + margin-bottom: .3em !important; +} +.redactor_toolbar { + position: relative; + top: 0; + left: 0; + margin: 0 !important; + padding: 0 !important; + list-style: none !important; + font-size: 14px !important; + font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; + line-height: 1 !important; + border: none; + background: #dddddd; + z-index: 1063; +} +.redactor_toolbar:after { + content: ""; + display: table; + clear: both; +} +.redactor_toolbar.redactor-toolbar-overflow { + overflow-y: auto; + height: 29px; + white-space: nowrap; +} +.redactor_toolbar.redactor-toolbar-external { + z-index: 999; + box-shadow: none; + border: 1px solid rgba(0, 0, 0, 0.1); +} +.redactor_toolbar li.redactor_btn_right { + float: right; + margin-right: 2px; +} +.redactor_toolbar li { + vertical-align: top; + display: inline-block; + margin: 0 !important; + padding: 0 !important; + outline: none; + list-style: none !important; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.redactor_toolbar li a { + display: block; + color: #404040; + font-size: 14px; + width: 20px; + line-height: 20px; + text-align: center; + padding: 9px 10px; + outline: none; + border: none; + text-decoration: none; + cursor: pointer; + zoom: 1; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; +} +.redactor_toolbar li a:hover { + outline: none; + background-color: #999999; + color: #ffffff; +} +.redactor_toolbar li a:hover i:before { + color: #fff; +} +.redactor_toolbar li a:active, +.redactor_toolbar li a.redactor_act { + outline: none; + background-color: #404040; + color: #ffffff; +} +.redactor_toolbar li a.redactor-btn-image { + width: 14px; + height: 14px; + background-position: center center; + background-repeat: no-repeat; +} +.redactor_toolbar li a.fa-redactor-btn { + display: inline-block; + padding: 9px 10px 8px 10px; + line-height: 1; +} +.redactor_toolbar.redactor-toolbar-typewriter { + box-shadow: none; + background: rgba(240, 240, 240, 0.9); +} +.redactor_toolbar.redactor-toolbar-typewriter li a:hover { + outline: none; + background-color: #1f78d8; + color: #fff; +} +.redactor_toolbar.redactor-toolbar-typewriter li a:active, +.redactor_toolbar.redactor-toolbar-typewriter li a.redactor_act { + outline: none; + background-color: #ccc; + color: #444; +} +body .redactor_air .redactor_toolbar { + padding-right: 2px !important; +} +.redactor_button_disabled { + filter: alpha(opacity=30); + -moz-opacity: 0.3; + opacity: 0.3; +} +.redactor_button_disabled:hover { + outline: none; + background-color: transparent !important; + cursor: default; +} +.re-icon { + font-family: 'RedactorFont'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.re-icon i:before { + position: relative; + font-size: 14px; +} +.re-video:before { + content: "\e600"; +} +.re-unorderedlist:before { + content: "\e601"; +} +.re-undo:before { + content: "\e602"; +} +.re-underline:before { + content: "\e603"; +} +.re-textdirection:before { + content: "\e604"; +} +.re-fontcolor:before { + content: "\e605"; +} +.re-table:before { + content: "\e606"; +} +.re-redo:before { + content: "\e607"; +} +.re-quote:before { + content: "\e608"; +} +.re-outdent:before { + content: "\e609"; +} +.re-orderedlist:before { + content: "\e60a"; +} +.re-link:before { + content: "\e60b"; +} +.re-horizontalrule:before { + content: "\e60c"; +} +.re-italic:before { + content: "\e60d"; +} +.re-indent:before { + content: "\e60e"; +} +.re-image:before { + content: "\e60f"; +} +.re-fullscreen:before { + content: "\e610"; +} +.re-normalscreen:before { + content: "\e611"; +} +.re-formatting:before { + content: "\e612"; +} +.re-fontsize:before { + content: "\e613"; +} +.re-fontfamily:before { + content: "\e614"; +} +.re-deleted:before { + content: "\e615"; +} +.re-html:before { + content: "\e616"; +} +.re-clips:before { + content: "\e617"; +} +.re-bold:before { + content: "\e618"; +} +.re-backcolor:before { + content: "\e619"; +} +.re-file:before { + content: "\e61a"; +} +.re-alignright:before { + content: "\e61b"; +} +.re-alignment:before, +.re-alignleft:before { + content: "\e61c"; +} +.re-alignjustify:before { + content: "\e61d"; +} +.re-aligncenter:before { + content: "\e61e"; +} +.re-gallery:before { + content: "\e61f"; +} +.redactor_format_blockquote { + padding-left: 10px; + color: #666 !important; + font-style: italic; +} +.redactor_format_pre { + font-family: monospace, sans-serif; +} +.redactor_format_h1, +.redactor_format_h2, +.redactor_format_h3, +.redactor_format_h4, +.redactor_format_h5 { + font-weight: bold; +} +.redactor_format_h1 { + font-size: 30px; + line-height: 36px; +} +.redactor_format_h2 { + font-size: 24px; + line-height: 36px; +} +.redactor_format_h3 { + font-size: 20px; + line-height: 30px; +} +.redactor_format_h4 { + font-size: 16px; + line-height: 26px; +} +.redactor_format_h5 { + font-size: 14px; + line-height: 23px; +} +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h1, +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h2, +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h3, +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h4, +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h5 { + font-size: 1em; + line-height: 1.6em; + text-transform: uppercase; +} +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h2 { + font-size: .85em; +} +.redactor_editor.redactor-editor-typewriter { + background: #f5f5f5 !important; + padding: 25px 50px !important; +} +.redactor_editor.redactor-editor-typewriter div, +.redactor_editor.redactor-editor-typewriter p, +.redactor_editor.redactor-editor-typewriter ul, +.redactor_editor.redactor-editor-typewriter ol, +.redactor_editor.redactor-editor-typewriter table, +.redactor_editor.redactor-editor-typewriter dl, +.redactor_editor.redactor-editor-typewriter blockquote, +.redactor_editor.redactor-editor-typewriter pre, +.redactor_editor.redactor-editor-typewriter h1, +.redactor_editor.redactor-editor-typewriter h2, +.redactor_editor.redactor-editor-typewriter h3, +.redactor_editor.redactor-editor-typewriter h4, +.redactor_editor.redactor-editor-typewriter h5, +.redactor_editor.redactor-editor-typewriter h6 { + font-family: 'Courier New', 'Lucida Console', Consolas, Monaco, monospace, sans-serif; + font-size: 18px !important; + line-height: 1.5em !important; + margin-bottom: 1.5em !important; +} +.redactor_editor.redactor-editor-typewriter h2 { + font-size: 14px !important; +} +.redactor_editor.redactor-editor-typewriter h1, +.redactor_editor.redactor-editor-typewriter h2, +.redactor_editor.redactor-editor-typewriter h3, +.redactor_editor.redactor-editor-typewriter h4, +.redactor_editor.redactor-editor-typewriter h5, +.redactor_editor.redactor-editor-typewriter h6 { + text-transform: uppercase; +} +.redactor_editor.redactor-editor-typewriter a { + color: #000 !important; + text-decoration: underline !important; +} +.redactor_editor.redactor_editor_wym { + padding: 10px 7px 0 7px !important; + background: #f6f6f6 !important; +} +.redactor_editor.redactor_editor_wym div, +.redactor_editor.redactor_editor_wym p, +.redactor_editor.redactor_editor_wym ul, +.redactor_editor.redactor_editor_wym ol, +.redactor_editor.redactor_editor_wym table, +.redactor_editor.redactor_editor_wym dl, +.redactor_editor.redactor_editor_wym pre, +.redactor_editor.redactor_editor_wym h1, +.redactor_editor.redactor_editor_wym h2, +.redactor_editor.redactor_editor_wym h3, +.redactor_editor.redactor_editor_wym h4, +.redactor_editor.redactor_editor_wym h5, +.redactor_editor.redactor_editor_wym h6, +.redactor_editor.redactor_editor_wym blockquote { + margin-top: 0; + margin-bottom: 5px !important; + padding: 10px !important; + border: 1px solid #e4e4e4 !important; + background-color: #fff !important; + z-index: 0; +} +.redactor_editor.redactor_editor_wym blockquote:before { + content: ''; +} +.redactor_editor.redactor_editor_wym img { + position: relative; + z-index: 1; +} +.redactor_editor.redactor_editor_wym div { + border: 1px dotted #aaa !important; +} +.redactor_editor.redactor_editor_wym pre { + border: 2px dashed #e4e4e4 !important; + background-color: #f8f8f8 !important; +} +.redactor_editor.redactor_editor_wym ul, +.redactor_editor.redactor_editor_wym ol { + padding-left: 2em !important; +} +.redactor_editor.redactor_editor_wym ul li ul, +.redactor_editor.redactor_editor_wym ol li ul, +.redactor_editor.redactor_editor_wym ul li ol, +.redactor_editor.redactor_editor_wym ol li ol { + border: none !important; +} +.redactor_dropdown { + position: absolute; + top: 28px; + left: 0; + padding: 10px; + width: 200px; + background-color: #fff; + box-shadow: 0 1px 5px #bbb; + font-size: 13px; + font-family: Helvetica, Arial, Verdana, Tahoma, sans-serif; + line-height: 21px; +} +.redactor-toolbar-typewriter .redactor_dropdown { + font-family: 'Courier New', 'Lucida Console', Consolas, Monaco, monospace, sans-serif; + background-color: #f5f5f5; +} +.redactor_separator_drop { + padding: 0 !important; + border-top: 1px solid #ddd; + font-size: 0; + line-height: 0; +} +.redactor_dropdown a { + display: block; + padding: 3px 5px; + color: #000; + text-decoration: none; +} +.redactor_dropdown a:hover { + background-color: #dde4ef; + color: #444 !important; + text-decoration: none; +} +#redactor_modal_overlay { + position: fixed; + top: 0; + left: 0; + margin: auto; + width: 100%; + height: 100%; + background-color: #000 !important; + filter: alpha(opacity=30); + -moz-opacity: 0.3; + opacity: 0.3; +} +#redactor_modal { + position: fixed; + top: 50%; + left: 50%; + padding: 0; + background: #fff; + color: #000; + font-size: 12px !important; + font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.5); +} +#redactor_modal header { + padding: 20px 30px 5px 30px; + font-size: 16px; +} +#redactor_modal section { + padding: 20px 30px; +} +#redactor_modal label { + display: block !important; + float: none !important; + margin: 10px 0 3px 0 !important; + padding: 0 !important; + font-size: 12px !important; +} +#redactor_modal footer:after { + content: ""; + display: table; + clear: both; +} +#redactor_modal footer div { + float: left; +} +#redactor_modal input[type="radio"], +#redactor_modal input[type="checkbox"] { + position: relative; + top: -1px; +} +#redactor_modal input[type="text"], +#redactor_modal input[type="password"], +#redactor_modal input[type="email"], +#redactor_modal textarea { + position: relative; + z-index: 2; + margin: 0; + padding: 1px 2px; + height: 23px; + border: 1px solid #ccc; + border-radius: 1px; + background-color: white; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; + color: #333; + font-size: 13px; + font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; + line-height: 1; + -moz-transition: border 0.3s ease-in; + transition: border 0.3s ease-in; +} +#redactor_modal textarea { + display: block; + margin-top: 4px; + line-height: 1.4em; +} +#redactor_modal input:focus, +#redactor_modal textarea:focus { + outline: none; + border-color: #5ca9e4; + box-shadow: 0 0 0 2px rgba(70, 161, 231, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2) inset; +} +#redactor_modal_close { + position: absolute; + top: 5px; + right: 3px; + width: 20px; + height: 20px; + color: #999; + font-size: 26px; + cursor: pointer; +} +#redactor_modal_close:hover { + color: #000; +} +.redactor_input { + width: 99%; + font-size: 14px; +} +.redactor_modal_box { + overflow: auto; + margin-bottom: 10px; + height: 350px; +} +#redactor_image_box { + overflow: auto; + margin-bottom: 10px; + height: 270px; +} +#redactor_image_box_select { + display: block; + margin-bottom: 15px !important; + width: 200px; +} +#redactor_image_box img { + margin-right: 10px; + margin-bottom: 10px; + max-width: 100px; + cursor: pointer; +} +#redactor_tabs { + margin-bottom: 18px; +} +#redactor_tabs a { + display: inline-block; + margin-right: 2px; + padding: 4px 14px; + border: 1px solid #d2d2d2; + border-radius: 3px; + background: #fff; + color: #000; + text-decoration: none; + line-height: 1; +} +#redactor_tabs a:hover, +#redactor_tabs a.redactor_tabs_act { + border-color: #eee; + color: #999 !important; + text-decoration: none !important; +} +.redactor_modal_btn_hidden { + display: none; +} +#redactor_modal footer button { + position: relative; + width: 100%; + padding: 10px 16px; + margin: 0; + outline: none; + border: none; + background-color: #ddd; + color: #000; + text-align: center; + text-decoration: none; + font-weight: normal; + font-size: 12px; + font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; + line-height: 1; + cursor: pointer; +} +#redactor_modal footer button:hover { + color: #777; + background: none; + background: #bbb; + text-decoration: none; +} +#redactor_modal footer button.redactor_modal_delete_btn { + background: none; + color: #fff; + background-color: #b52525; +} +#redactor_modal footer button.redactor_modal_delete_btn:hover { + color: rgba(255, 255, 255, 0.6); + background-color: #881b1b; +} +#redactor_modal footer button.redactor_modal_action_btn { + background: none; + color: #fff; + background-color: #2461b5; +} +#redactor_modal footer button.redactor_modal_action_btn:hover { + color: rgba(255, 255, 255, 0.6); + background-color: #1a4580; +} +/* Drag and Drop Area */ +.redactor_droparea { + position: relative; + margin: auto; + margin-bottom: 5px; + width: 100%; +} +.redactor_droparea .redactor_dropareabox { + position: relative; + z-index: 1; + padding: 60px 0; + width: 99%; + border: 1px dashed #ddd; + background: #fff; + text-align: center; +} +.redactor_droparea .redactor_dropareabox, +.redactor_dropalternative { + color: #555; + font-size: 12px; +} +.redactor_dropalternative { + margin: 4px 0 2px 0; +} +.redactor_dropareabox.hover { + border-color: #aaa; + background: #efe3b8; +} +.redactor_dropareabox.error { + border-color: #dcc3c3; + background: #f7e5e5; +} +.redactor_dropareabox.drop { + border-color: #e0e5d6; + background: #f4f4ee; +} +#redactor-progress { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 1000000; + height: 10px; +} +#redactor-progress span { + display: block; + width: 100%; + height: 100%; + background-color: #3d58a8; + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; + background-size: 40px 40px; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +.redactor_editor figure { + position: relative; +} +.redactor_editor figcaption { + text-align: center; + line-height: 20px; + font-size: 14px; +} +.redactor_editor figure[data-type=table] { + clear: both; +} +.redactor_editor figure[data-type=video] { + position: relative; + margin-bottom: 20px; + text-align: center; + clear: both; +} +.redactor_editor figure[data-type=video] p { + margin: 0; +} +.redactor_editor figure[data-type=video].wy-figure-full:before { + position: relative; + padding-bottom: 51%; + width: 100%; + height: 0; + content: ""; + display: block; +} +.redactor_editor figure[data-type=video].wy-figure-full iframe { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; +} +.redactor_editor figure[data-type=image] { + position: relative; + margin-bottom: 20px; +} +.redactor_editor figure[data-type=image] .wy-figure-controls { + top: 0px; +} +.redactor_editor figure[data-type=image] img { + width: 100%; +} +.redactor_editor figure[data-type=image].wy-figure-large { + width: 100%; + clear: both; +} +.redactor_editor figure[data-type=image].wy-figure-medium { + width: 50%; +} +.redactor_editor figure[data-type=image].wy-figure-small { + width: 33%; +} +.redactor_editor figure[data-type=quote] { + font-family: Georgia, serif; + margin-bottom: 20px; + margin-left: 20px; + font-style: italic; + position: relative; + border-left: solid 4px #cccccc; + padding-left: 20px; +} +.redactor_editor figure[data-type=quote] figcaption { + font-weight: bold; + text-align: left; +} +.redactor_editor figure[data-type=quote] .wy-figure-controls { + margin-left: -5px; +} +.redactor_editor figure[data-type=quote].wy-figure-medium, +.redactor_editor figure[data-type=quote].wy-figure-medium blockquote { + font-size: 20px; +} +.redactor_editor figure[data-type=quote].wy-figure-large, +.redactor_editor figure[data-type=quote].wy-figure-large blockquote { + font-size: 24px; +} +.redactor_editor figure[data-type=quote].wy-figure-right { + width: 33%; +} +.redactor_editor figure[data-type=quote].wy-figure-left { + width: 33%; + border-left: none; + border-right: solid 5px #333333; + padding-left: 0; + padding-right: 20px; + margin-left: 0; + margin-right: 20px; +} +.redactor_editor figure[data-type=quote].wy-figure-left .wy-figure-controls { + margin-left: 0; + margin-right: -5px; +} +.redactor_editor figure[data-type=quote] cite { + display: block; + text-align: left; + font-weight: bold; +} +.redactor_editor figure[data-type=quote] cite:before { + content: "\2014\00a0"; +} +.redactor_editor figure[data-type=quote] cite:empty:before { + opacity: 0.4; + content: "\2014 Type to add citation (optional)"; +} +.redactor_box figure:hover .wy-figure-controls { + display: block; +} +.redactor_box .wy-figure-controls { + background: #dddddd !important; + padding: 0; + position: absolute; + display: none; + min-width: 100%; + white-space: nowrap; + left: 0; + height: 30px; + top: -30px; + margin: 0 auto; + font-family: 'Open Sans', Arial, sans-serif; + line-height: 20px; + font-style: normal; + z-index: 1560; + text-align: center; +} +.redactor_box .wy-figure-controls span { + display: inline-block; + border: none; + background: none; + color: #404040; + vertical-align: top; + font-size: 14px; + width: 30px; + height: 30px; + line-height: 30px; + text-align: center; + cursor: pointer; +} +.redactor_box .wy-figure-controls span:before { + line-height: 24px; +} +.redactor_box .wy-figure-controls span:hover { + background: rgba(255, 255, 255, 0.3); + color: #fff; + background: #999999; + color: #ffffff; +} +.redactor_box .wy-figure-controls span.on { + background: #fff; + color: #555555; + background-color: #404040; + color: #ffffff; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-divider { + width: 1px; + background: #cccccc; + padding: 0; + margin: 0 4px; + cursor: normal; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-small { + font-size: 7px; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-medium { + font-size: 10px; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-arrow-left:before { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + *margin-right: .3em; + content: "\f060"; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-arrow-right:before { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + *margin-right: .3em; + content: "\f061"; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-arrow-up:before { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + *margin-right: .3em; + content: "\f062"; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-arrow-down:before { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + *margin-right: .3em; + content: "\f063"; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-resize-full:before { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + *margin-right: .3em; + content: "\f065"; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-resize-small:before { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + *margin-right: .3em; + content: "\f066"; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-delete { + margin-left: 20px; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-delete:before { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + *margin-right: .3em; + content: "\f014"; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-delete:hover { + background: #c63e26; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-table { + width: auto; + padding-left: 5px; + text-align: left; +} +.redactor_box .wy-figure-controls span.wy-figure-controls-table:before { + font-family: FontAwesome; + font-weight: normal; + font-style: normal; + text-decoration: inherit; + -webkit-font-smoothing: antialiased; + *margin-right: .3em; + content: "\f0ce"; +} +.redactor_box .wy-figure-right { + float: right; + margin-left: 20px; +} +.redactor_box .wy-figure-right .wy-figure-controls { + right: 0; +} +.redactor_box .wy-figure-left { + float: left; + margin-right: 20px; +} +@media (max-width: 769px) { + .redactor_box figure[data-type=image] { + width: 100% !important; + float: none !important; + margin-left: 0; + margin-right: 0; + } + .redactor_box figure[data-type=video] iframe { + width: 100% !important; + height: auto !important; + } +} .field-flush .field-richeditor, .field-flush .field-richeditor.editor-focus { border: none; @@ -6,12 +1196,15 @@ border: 1px solid #e0e0e0; } .field-richeditor, -.field-richeditor .redactor_box, -.field-richeditor .redactor_toolbar { +.field-richeditor .redactor_box { -webkit-border-radius: 5px; -moz-border-radius: 5px; border-radius: 5px; } +.field-richeditor .redactor_toolbar { + border-top-right-radius: 3px; + border-top-left-radius: 3px; +} .field-richeditor.editor-focus { border-color: #808c8d; } @@ -30,92 +1223,26 @@ .field-richeditor.size-giant .redactor_editor { height: 320px !important; } -.field-richeditor .redactor_box, -.redactor_box_fullscreen.redactor_box { - border: none; -} -.field-richeditor .redactor_box iframe, -.redactor_box_fullscreen.redactor_box iframe { - border: none; -} -.field-richeditor .redactor_box .redactor_toolbar, -.redactor_box_fullscreen.redactor_box .redactor_toolbar { - border-top-right-radius: 3px; - border-top-left-radius: 3px; - border-bottom-right-radius: 0; - border-bottom-left-radius: 0; - background: #dddddd; - border-bottom: none; - -webkit-box-shadow: none; - box-shadow: none; - border: none; -} -.field-richeditor .redactor_box .redactor_toolbar li.redactor_btn_right, -.redactor_box_fullscreen.redactor_box .redactor_toolbar li.redactor_btn_right { - float: right; - margin-right: 2px; -} -.field-richeditor .redactor_box .redactor_toolbar li a, -.redactor_box_fullscreen.redactor_box .redactor_toolbar li a { - zoom: 1; - font-size: 14px; - color: #404040; - width: 20px; - line-height: 20px; - text-align: center; -} -.field-richeditor .redactor_box .redactor_toolbar li a:hover, -.redactor_box_fullscreen.redactor_box .redactor_toolbar li a:hover { - outline: none; - background-color: #999999; - color: #ffffff; -} -.field-richeditor .redactor_box .redactor_toolbar li a:active, -.redactor_box_fullscreen.redactor_box .redactor_toolbar li a:active, -.field-richeditor .redactor_box .redactor_toolbar li a.redactor_act, -.redactor_box_fullscreen.redactor_box .redactor_toolbar li a.redactor_act { - outline: none; - background-color: #404040; - color: #ffffff; -} -.field-richeditor .redactor_box.stretch .redactor_box, -.redactor_box_fullscreen.redactor_box.stretch .redactor_box { +.field-richeditor.stretch .redactor_box { display: block; position: relative; height: 100%; width: 100%; overflow: hidden; } -.field-richeditor .redactor_box.stretch .redactor_box .redactor_toolbar, -.redactor_box_fullscreen.redactor_box.stretch .redactor_box .redactor_toolbar { +.field-richeditor.stretch .redactor_box .redactor_toolbar { display: block; border-bottom: none; position: absolute; top: 0; width: 100%; } -.field-richeditor .redactor_box.stretch .redactor_box iframe, -.redactor_box_fullscreen.redactor_box.stretch .redactor_box iframe, -.field-richeditor .redactor_box.stretch .redactor_box textarea, -.redactor_box_fullscreen.redactor_box.stretch .redactor_box textarea { +.field-richeditor.stretch .redactor_box .redactor_editor { + height: 100% !important; +} +.field-richeditor.stretch .redactor_box iframe, +.field-richeditor.stretch .redactor_box textarea { display: block; position: absolute; height: 100% !important; } -.redactor_box_fullscreen { - background: #fafafa; - overflow-y: scroll !important; -} -.redactor_box_fullscreen .redactor_editor { - max-width: 960px; - margin: 20px auto !important; - padding: 20px; -} -.redactor_box_fullscreen { - z-index: 1060 !important; -} -#redactor_modal_overlay, -#redactor_modal, -.redactor_dropdown { - z-index: 1061 !important; -} diff --git a/modules/backend/formwidgets/richeditor/assets/js/plugin.figure.js b/modules/backend/formwidgets/richeditor/assets/js/plugin.figure.js new file mode 100644 index 000000000..30158e7e0 --- /dev/null +++ b/modules/backend/formwidgets/richeditor/assets/js/plugin.figure.js @@ -0,0 +1,295 @@ +(function ($) { + 'use strict'; + + window.RedactorPlugins = window.RedactorPlugins || {} + + var Figure = function (redactor) { + this.redactor = redactor + this.toolbar = {} + this.init() + } + + Figure.prototype = { + control: { + up : { classSuffix: 'arrow-up' }, + down : { classSuffix: 'arrow-down' }, + '|' : { classSuffix: 'divider' }, + remove: { classSuffix: 'delete' } + }, + + controlGroup: ['up', 'down', 'remove'], + + init: function () { + this.observeCaptions() + this.observeToolbars() + this.observeKeyboard() + }, + + observeCaptions: function () { + + /* + * Adding a line-break to empty captions and citations on click will place the cursor in the expected place + */ + this.redactor.$editor.on('click', 'figcaption:empty, cite:empty', $.proxy(function (event) { + $(event.target).prepend('
') + this.redactor.selectionEnd(event.target) + event.stopPropagation() + }, this)) + + /* + * Remove generated line-breaks empty figcaptions + */ + $(window).on('click', $.proxy(this.cleanCaptions, this)) + this.redactor.$editor.on('blur', $.proxy(this.cleanCaptions, this)) + this.redactor.$editor.closest('form').one('submit', $.proxy(this.clearCaptions, this)) + + /* + * Prevent user from removing captions or citations with delete/backspace keys + */ + this.redactor.$editor.on('keydown', $.proxy(function (event) { + var current = this.redactor.getCurrent(), + isEmpty = !current.length, + isCaptionNode = !!$(current).closest('figcaption, cite').length, + isDeleteKey = $.inArray(event.keyCode, [this.redactor.keyCode.BACKSPACE, this.redactor.keyCode.DELETE]) >= 0 + + if (isEmpty && isDeleteKey && isCaptionNode) { + event.preventDefault() + } + }, this)) + + }, + + cleanCaptions: function () { + this.redactor.$editor.find('figcaption, cite').filter(function () { + return $(this).text() == '' + }).empty() + }, + + clearCaptions: function () { + this.redactor.$editor.find('figcaption, cite').filter(function () { + return $(this).text() == '' + }).remove() + + if (this.redactor.opts.visual) { + this.redactor.sync() + } + }, + + showToolbar: function (event) { + var $figure = $(event.currentTarget), + $toolbar = this.getToolbar(type).data('figure', $figure).prependTo($figure), + type = $figure.data('type') || 'default' + + if (this.redactor[type] && this.redactor[type].onShow) { + this.redactor[type].onShow($figure, $toolbar) + } + }, + + hideToolbar: function (event) { + $(event.currentTarget).find('.wy-figure-controls').appendTo(this.redactor.$box) + }, + + observeToolbars: function () { + + /* + * Before clicking a command, make sure we save the current node within the editor + */ + this.redactor.$editor.on('mousedown', '.wy-figure-controls', $.proxy(function () { + event.preventDefault() + this.current = this.redactor.getCurrent() + }, this)) + + this.redactor.$editor.on('click', '.wy-figure-controls span, .wy-figure-controls a', $.proxy(function (event) { + event.stopPropagation() + var $target = $(event.currentTarget), + command = $target.data('command'), + $figure = $target.closest('figure'), + plugin = this.redactor[$figure.data('type')] + + this.command(command, $figure, plugin) + }, this)) + + this.redactor.$editor.on('keydown', function () { + $(this).find('figure').triggerHandler('mouseleave') + }) + + /* + * Mobile + */ + if (this.redactor.isMobile()) { + + /* + * If $editor is focused, click doesn't seem to fire + */ + this.redactor.$editor.on('touchstart', 'figure', function (event) { + if (event.target.nodeName !== 'FIGCAPTION' && $(event.target).parents('.wy-figure-controls').length) { + $(this).trigger('click', event) + } + }) + + this.redactor.$editor.on('click', 'figure', $.proxy(function (event) { + if (event.target.nodeName !== 'FIGCAPTION') { + this.redactor.$editor.trigger('blur') + } + + this.showToolbar(event) + }, this)) + } + /* + * Desktop + */ + else { + /* + * Move toolbar into figure on mouseenter + */ + this.redactor.$editor.on('mouseenter', 'figure', $.proxy(this.showToolbar, this)) + + /* + * Remove toolbar from figure on mouseleave + */ + this.redactor.$editor.on('mouseleave', 'figure', $.proxy(this.hideToolbar, this)) + } + + }, + + getToolbar: function (type) { + + if (this.toolbar[type]) { + return this.toolbar[type] + } + + var controlGroup = (this.redactor[type] && this.redactor[type].controlGroup) || this.controlGroup, + controls = $.extend({}, this.control, (this.redactor[type] && this.redactor[type].control) || {}), + $controls = this.buildControls(controlGroup, controls), + $toolbar = $('
').append($controls) + + this.toolbar[type] = $toolbar + + return $toolbar + }, + + buildControls: function (controlGroup, controls) { + + var $controls = $() + + $.each(controlGroup, $.proxy(function (index, command) { + var control + + /* + * Basic command + */ + if (typeof command === 'string') { + + control = controls[command] + + $controls = $controls.add($('', { + 'class': 'wy-figure-controls-' + control.classSuffix, + 'text': control.text + }).data({ + command: command, + control: control + })) + } + /* + * Dropdown + */ + else if (typeof command === 'object') { + $.each(command, $.proxy(function (text, commands) { + + var dropdown = $('').text(' ' + text).addClass('wy-figure-controls-table wy-dropdown') + + $('').appendTo(dropdown) + + var list = $('
').appendTo(dropdown) + + dropdown.on('mouseover', function () { list.show() }) + dropdown.on('mouseout', function () { list.hide() }) + + $.each(commands, $.proxy(function (index, command) { + control = controls[command] + if (command === '|') { + $('
').appendTo(list) + } + else { + $('', { + text: control.text + }).data({ + command: command, + control: control + }).appendTo($('
').appendTo(list)) + } + }, this)) + + $controls = $controls.add(dropdown) + + }, this)) + } + }, this)) + + return $controls + }, + + command: function (command, $figure, plugin) { + + /* + * Move the toolbar before carrying out the command so it doesn't break when undoing/redoing + */ + $figure.find('.wy-figure-controls').appendTo(this.redactor.$box) + + /* + * Maintain undo history + */ + this.redactor.bufferSet(this.redactor.$editor.html()) + + /* + * Shared functions + */ + switch (command) { + case 'up': + $figure.prev().before($figure) + break + + case 'down': + $figure.next().after($figure) + break + + case 'remove': + $figure.remove() + break + + default: + if (plugin && plugin.command) { + plugin.command(command, $figure, $(this.current)) + } + break + } + + this.redactor.sync() + + }, + + observeKeyboard: function () { + var redactor = this.redactor + redactor.$editor.on('keydown', function (event) { + /* + * Node at cursor + */ + var currentNode = redactor.getBlock() + + /* + * Delete key + */ + if (event.keyCode === 8 && !redactor.getCaretOffset(currentNode) && currentNode.previousSibling && currentNode.previousSibling.nodeName === 'FIGURE') { + event.preventDefault() + } + }) + } + } + + window.RedactorPlugins.figure = { + init: function () { + this.figure = new Figure(this) + } + } + +}(jQuery)); \ No newline at end of file diff --git a/modules/backend/formwidgets/richeditor/assets/js/plugin.quote.js b/modules/backend/formwidgets/richeditor/assets/js/plugin.quote.js new file mode 100644 index 000000000..237301a15 --- /dev/null +++ b/modules/backend/formwidgets/richeditor/assets/js/plugin.quote.js @@ -0,0 +1,148 @@ +(function ($) { + 'use strict'; + + window.RedactorPlugins = window.RedactorPlugins || {}; + + var Quote = function (redactor) { + this.redactor = redactor + this.init() + } + + Quote.prototype = { + control: { + left : { classSuffix: 'arrow-left' }, + right : { classSuffix: 'arrow-right' }, + small : { classSuffix: 'small', text: 'S' }, + medium : { classSuffix: 'medium', text: 'M' }, + large : { classSuffix: 'large', text: 'L' }, + resizeFull : { classSuffix: 'resize-full' }, + resizeSmall : { classSuffix: 'resize-small' } + }, + + controlGroup: ['left', 'up', 'down', 'right', '|', 'small', 'medium', 'large', 'resizeFull', 'resizeSmall', 'remove'], + + init: function () { + this.redactor.$editor.on('focus', $.proxy(this.addCites, this)) + this.addCites() + this.observe() + }, + + addCites: function () { + /* + * Find any quotes missing citations and add an empty one + */ + this.redactor.$editor + .find('figure[data-type=quote] blockquote:not(:has(cite))') + .each(function () { + $(this).append('') + }) + }, + + observe: function () { + this.redactor.$editor.on('mutate', $.proxy(this.orphanCheck, this)) + }, + + orphanCheck: function () { + this.redactor.$editor.find('blockquote').filter(function () { + return $(this).closest('figure').length == 0 + }).each(function () { + $(this).append($('')) + $(this).wrap('
') + }) + }, + + onShow: function ($figure, $toolbar) { + + $toolbar.children().removeClass('on') + + if ($figure.hasClass('wy-figure-medium')) { + $toolbar.find('.wy-figure-controls-medium').addClass('on') + } + else if ($figure.hasClass('wy-figure-large')) { + $toolbar.find('.wy-figure-controls-large').addClass('on') + } + else { + $toolbar.find('.wy-figure-controls-small').addClass('on') + } + + if ($figure.hasClass('wy-figure-left')) { + $toolbar.find('.wy-figure-controls-arrow-left').addClass('on') + $toolbar.find('.wy-figure-controls-resize-small').hide() + $toolbar.find('.wy-figure-controls-resize-full').show() + } + else if ($figure.hasClass('wy-figure-right')) { + $toolbar.find('.wy-figure-controls-arrow-right').addClass('on') + $toolbar.find('.wy-figure-controls-resize-small').hide() + $toolbar.find('.wy-figure-controls-resize-full').show() + } + else { + $toolbar.find('.wy-figure-controls-resize-small').show() + $toolbar.find('.wy-figure-controls-resize-full').hide() + } + + }, + + command: function (command, $figure) { + + switch (command) { + case 'left': + $figure.removeClass('wy-figure-right').addClass('wy-figure-left') + break + + case 'right': + $figure.removeClass('wy-figure-left').addClass('wy-figure-right') + break + + case 'resize_full': + $figure.removeClass('wy-figure-left wy-figure-right') + break + + case 'resize_small': + $figure.addClass('wy-figure-left') + break + + case 'small': + $figure.removeClass('wy-figure-medium wy-figure-large').addClass('wy-figure-small') + break + + case 'medium': + $figure.removeClass('wy-figure-small wy-figure-large').addClass('wy-figure-medium') + break + + case 'large': + $figure.removeClass('wy-figure-small wy-figure-medium').addClass('wy-figure-large') + break + } + + }, + + toggle: function () { + + this.redactor.formatQuote() + + var $target = $(this.redactor.getBlock() || this.redactor.getCurrent()) + + if ($target.is('blockquote')) { + $target.append($('')) + $target.wrap('
') + } + else { + $target.find('cite').remove() + $target.closest('figure').before($target).remove() + } + + this.redactor.sync() + + } + } + + window.RedactorPlugins.quote = { + init: function () { + this.quote = new Quote(this) + + this.buttonAddBefore('link', 'quote', 'Quote', $.proxy(this.quote.toggle, this.quote)) + this.buttonGet('quote').addClass('redactor_btn_quote').removeClass('redactor-btn-image') + } + } + +}(jQuery)); \ No newline at end of file diff --git a/modules/backend/formwidgets/richeditor/assets/js/richeditor.js b/modules/backend/formwidgets/richeditor/assets/js/richeditor.js index 93f043909..df3a8289e 100644 --- a/modules/backend/formwidgets/richeditor/assets/js/richeditor.js +++ b/modules/backend/formwidgets/richeditor/assets/js/richeditor.js @@ -61,7 +61,7 @@ initCallback: function() { self.build() }, changeCallback: function() { self.sanityCheckContent(this.$editor) - // this.$editor.trigger('mutate') + this.$editor.trigger('mutate') self.$form.trigger('change') if (self.$dataLocker) @@ -74,7 +74,7 @@ } // redactorOptions.plugins = ['cleanup', 'fullscreen', 'figure', 'table', 'quote'] - redactorOptions.plugins = ['cleanup', 'fullscreen'] + redactorOptions.plugins = ['cleanup', 'fullscreen', 'figure', 'quote'] this.$textarea.redactor(redactorOptions) } diff --git a/modules/backend/formwidgets/richeditor/assets/less/figures.less b/modules/backend/formwidgets/richeditor/assets/less/figures.less new file mode 100644 index 000000000..76704d7ae --- /dev/null +++ b/modules/backend/formwidgets/richeditor/assets/less/figures.less @@ -0,0 +1,247 @@ +// +// Figures +// + +.redactor_editor { + + figure { + position: relative; + } + + figcaption { + text-align: center; + line-height: @line-height-computed; + font-size: @font-size-base; + } + + figure[data-type=table] { + clear: both; + } + + figure[data-type=video] { + position: relative; + margin-bottom: @line-height-computed; + text-align: center; + clear: both; + p { + margin: 0; + } + + &.wy-figure-full { + &:before { + position: relative; + padding-bottom: 51%; + width: 100%; + height: 0; + content: ""; + display: block; + } + iframe { + width: 100%; + height: 100%; + position: absolute; + left: 0; + top: 0; + } + } + } + + figure[data-type=image] { + position: relative; + margin-bottom: @line-height-computed; + .wy-figure-controls { + top: 0px; + } + img { + width: 100%; + } + &.wy-figure-large { + width: 100%; + clear: both; + } + &.wy-figure-medium { + width: 50%; + } + &.wy-figure-small { + width: 33%; + } + } + + figure[data-type=quote] { + font-family: Georgia, serif; + margin-bottom: @line-height-computed; + margin-left: @line-height-computed; + font-style: italic; + position: relative; + border-left: solid 4px @color-border; + padding-left: @line-height-computed; + figcaption { + font-weight: bold; + text-align: left; + } + .wy-figure-controls { + margin-left: -5px; + } + &.wy-figure-medium { + &, blockquote { font-size: 20px; } + } + &.wy-figure-large { + &, blockquote { font-size: 24px; } + } + &.wy-figure-right { + width: 33%; + } + &.wy-figure-left { + width: 33%; + border-left: none; + border-right: solid 5px @text-color; + padding-left: 0; + padding-right: @line-height-computed; + margin-left: 0; + margin-right: @line-height-computed; + .wy-figure-controls { + margin-left: 0; + margin-right: -5px; + } + } + cite { + display: block; + text-align: left; + font-weight: bold; + &:before { + content: "\2014\00a0"; + } + &:empty:before { + opacity: 0.4; + content: "\2014 Type to add citation (optional)"; + } + } + } + +} + +.redactor_box { + + figure:hover .wy-figure-controls { + display: block + } + + .wy-figure-controls { + background: @color-richeditor-toolbar !important; + padding: 0; + position: absolute; + display: none; + min-width: 100%; + white-space: nowrap; + left: 0; + height: 30px; + top: -30px; + margin: 0 auto; + font-family: @font-family-base; + line-height: @line-height-computed; + font-style: normal; + z-index: @richeditor-zindex + 500; + text-align: center; + } + + .wy-figure-controls span { + display: inline-block; + border: none; + background: none; + color: @color-richeditor-toolbar-btn-color; + vertical-align: top; + font-size: 14px; + width: 30px; + height: 30px; + line-height: 30px; + text-align: center; + cursor: pointer; + &:before { + line-height: 24px; + } + &:hover { + background: rgba(255,255,255,.3); + color: #fff; + background: @color-richeditor-toolbar-btn-bg-hover; + color: @color-richeditor-toolbar-btn-color-hover; + } + &.on { + background: #fff; + color: @gray; + background-color: @color-richeditor-toolbar-btn-bg-active; + color: @color-richeditor-toolbar-btn-color-hover; + } + } + + .wy-figure-controls span { + &.wy-figure-controls-divider { + width: 1px; + background: @color-border; + padding: 0; + margin: 0 4px; + cursor: normal; + } + &.wy-figure-controls-small { + font-size: 7px; + } + &.wy-figure-controls-medium { + font-size: 10px; + } + &.wy-figure-controls-arrow-left:before { + .icon(@arrow-left); + } + &.wy-figure-controls-arrow-right:before { + .icon(@arrow-right); + } + &.wy-figure-controls-arrow-up:before { + .icon(@arrow-up); + } + &.wy-figure-controls-arrow-down:before { + .icon(@arrow-down); + } + &.wy-figure-controls-resize-full:before { + .icon(@expand); + } + &.wy-figure-controls-resize-small:before { + .icon(@compress); + } + &.wy-figure-controls-delete { + margin-left: @line-height-computed; + &:before { .icon(@trash-o); } + &:hover { background: @color-btn-danger; } + } + &.wy-figure-controls-table { + width: auto; + padding-left: @line-height-computed / 4; + text-align: left; + &:before { .icon(@table); } + } + } + + .wy-figure-right { + float: right; + margin-left: @line-height-computed; + .wy-figure-controls { + right: 0; + } + } + + .wy-figure-left { + float: left; + margin-right: @line-height-computed; + } + + @media (max-width: @menu-breakpoint-max) { + figure[data-type=image] { + width: 100% !important; + float: none !important; + margin-left: 0; + margin-right: 0; + } + figure[data-type=video] iframe { + width: 100% !important; + height: auto !important; + } + } + +} \ No newline at end of file diff --git a/modules/backend/formwidgets/richeditor/assets/less/redactor.less b/modules/backend/formwidgets/richeditor/assets/less/redactor.less new file mode 100644 index 000000000..0bd5a6728 --- /dev/null +++ b/modules/backend/formwidgets/richeditor/assets/less/redactor.less @@ -0,0 +1,953 @@ +// +// Icon font +// + +@font-face { + font-family: 'RedactorFont'; + src: url('../vendor/redactor/redactor-font.eot'); +} + +@font-face { + font-family: 'RedactorFont'; + src: url(data:application/x-font-ttf;charset=utf-8;base64,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) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,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) format('woff'); + font-weight: normal; + font-style: normal; +} + +// =Selection +//----------------------------------------------------------------------------- + +.redactor_box { + &::selection { + background: #ffff9e; + } + &::-moz-selection { + background: #ffff9e; + } + img::selection { + background: transparent; + } + img::-moz-selection { + background: transparent; + } +} + +// +// BOX +// + +.redactor_box { + position: relative; + overflow: visible; + background: #fff; + iframe { + display: block; + margin: 0; + padding: 0; + border: none; // Oc + } + textarea { + position: relative; + display: block; + overflow: auto; + margin: 0; + padding: 0; + width: 100%; + outline: none; + border: none; + background-color: #222; + box-shadow: none; + color: #ccc; + font-size: 13px; + font-family: Menlo, Monaco, monospace, sans-serif; + resize: none; + &:focus { + outline: none; + } + } + &, textarea { + z-index: auto !important; + } + +} + +// +// zIndex +// + +.redactor_box_fullscreen { + z-index: @richeditor-zindex !important; +} + +#redactor_modal_overlay, +#redactor_modal, +.redactor_dropdown { + z-index: @richeditor-zindex + 1 !important; +} + + +// +// AIR +// + +body .redactor_air { + position: absolute; + z-index: 502; +} + +// +// FULLSCREEN +// +body .redactor_box_fullscreen { + position: fixed; + top: 0; + left: 0; + width: 100%; + + // October + background: @color-body-bg; + overflow-y: scroll !important; + .redactor_editor { + max-width: 960px; + margin: @richeditor-gutter auto !important; + padding: @richeditor-gutter; + } + +} + +// +// LINK TOOLTIP +// +.redactor-link-tooltip { + position: absolute; + z-index: 49999; + padding: 10px; + line-height: 1; + display: inline-block; + background-color: #000; + color: #555 !important; + &, a { + font-size: 12px; + font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; + } + a { + color: #ccc; + margin: 0 5px; + text-decoration: none; + &:hover { + color: #fff; + } + } +} + +// +// IMAGE BOX +// + +#redactor-image-box img { + width: 100%; +} +.redactor_editor { + position: relative; + overflow: auto; + margin: 0 !important; + padding: 10px 20px; + padding-bottom: 5px; + outline: none; + background: none; + background: #fff; + box-shadow: none !important; + white-space: normal; + + border: none; // Oc + + &:focus { + outline: none; + } + + // div, p, ul, ol, table, dl, blockquote, pre, h1, h2, h3, h4, h5, h6 { + // font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; + // } + // code, pre { + // font-family: Menlo, Monaco, monospace, sans-serif; + // } + // div, p, ul, ol, table, dl, blockquote, pre { + // font-size: 14px; + // line-height: 1.6em; + // } + + a { + color: #15c !important; + text-decoration: underline !important; + } + + .redactor_placeholder { + color: #999 !important; + display: block !important; + } +} + +// +// TYPOGRAPHY +// + +.redactor_editor { + object, embed, video, img { + max-width: 100%; + width: auto; + } + video, img { + height: auto; + } + div, p, ul, ol, table, dl, blockquote, pre { + margin: 0; + margin-bottom: 10px !important; + border: none; + background: none !important; + box-shadow: none !important; + } + iframe, object, hr { + margin-bottom: 15px !important; + } + blockquote { + margin-left: 1.5em !important; + padding-left: 0 !important; + color: #777; + font-style: italic !important; + } + ul, ol { + padding-left: 2em !important; + } + ul ul, ol ol, ul ol, ol ul { + margin: 2px !important; + padding: 0 !important; + padding-left: 2em !important; + border: none; + } + dl dt { + font-weight: bold; + } + dd { + margin-left: 1em; + } + table { + border-collapse: collapse; + font-size: 1em !important; + } + table td { + padding: 5px !important; + border: 1px solid #ddd; + vertical-align: top; + } + table thead td { + border-bottom: 2px solid #000 !important; + font-weight: bold !important; + } + code { + background-color: #d8d7d7 !important; + } + pre { + overflow: auto; + padding: 1em !important; + border: 1px solid #ddd !important; + border-radius: 3px !important; + background: #f8f8f8 !important; + white-space: pre; + font-size: 90% !important; + } + hr { + display: block; + height: 1px; + border: 0; + border-top: 1px solid #ccc; + } +} +// +// HEADERS +// +.redactor_editor { + h1, h2, h3, h4, h5, h6 { + margin-top: 0 !important; + padding: 0 !important; + background: none; + color: #000; + font-weight: bold; + } + h1 { + font-size: 36px !important; + line-height: 1.111em !important; + margin-bottom: .15em !important; + } + h2 { + font-size: 30px !important; + line-height: 1.111em !important; + margin-bottom: .25em !important; + } + h3 { + font-size: 24px !important; + line-height: 1.333em !important; + margin-bottom: .2em !important; + } + h4 { + font-size: 18px !important; + line-height: 1.5em !important; + margin-bottom: .2em !important; + } + h5 { + font-size: 1em !important; + line-height: 1.6em !important; + margin-bottom: .25em !important; + } + h6 { + font-size: .8em !important; + line-height: 1.6em !important; + text-transform: uppercase; + margin-bottom: .3em !important; + } +} + +// +// TOOLBAR +// + +.redactor_toolbar { + position: relative; + top: 0; + left: 0; + margin: 0 !important; + padding: 0 !important; + list-style: none !important; + font-size: 14px !important; + font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; + line-height: 1 !important; + border: none; + + // October + background: @color-richeditor-toolbar; + z-index: @richeditor-zindex + 3; + + &:after { + content: ""; + display: table; + clear: both; + } + &.redactor-toolbar-overflow { + overflow-y: auto; + height: 29px; + white-space: nowrap; + } + &.redactor-toolbar-external { + z-index: 999; + box-shadow: none; + border: 1px solid rgba(0, 0, 0, 0.1); + } + + // October + li.redactor_btn_right { + float: right; + margin-right: 2px; + } + + li { + vertical-align: top; + display: inline-block; + margin: 0 !important; + padding: 0 !important; + outline: none; + list-style: none !important; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + a { + display: block; + + // October + color: @color-richeditor-toolbar-btn-color; + font-size: 14px; + width: 20px; + line-height: 20px; + + text-align: center; + padding: 9px 10px; + outline: none; + border: none; + text-decoration: none; + cursor: pointer; + zoom: 1; + -webkit-box-sizing: content-box; + -moz-box-sizing: content-box; + box-sizing: content-box; + + &:hover { + outline: none; + + // October + background-color: @color-richeditor-toolbar-btn-bg-hover; + color: @color-richeditor-toolbar-btn-color-hover; + + i:before { + color: #fff; + } + } + + &:active, &.redactor_act { + outline: none; + + // October + background-color: @color-richeditor-toolbar-btn-bg-active; + color: @color-richeditor-toolbar-btn-color-hover; + } + + &.redactor-btn-image { + width: 14px; + height: 14px; + background-position: center center; + background-repeat: no-repeat; + } + &.fa-redactor-btn { + display: inline-block; + padding: 9px 10px 8px 10px; + line-height: 1; + } + } + } + + &.redactor-toolbar-typewriter { + box-shadow: none; + background: rgba(240, 240, 240, 0.9); + li a:hover { + outline: none; + background-color: #1f78d8; + color: #fff; + } + li a:active, + li a.redactor_act { + outline: none; + background-color: #ccc; + color: #444; + } + } +} + +body .redactor_air .redactor_toolbar { + padding-right: 2px !important; +} + +.redactor_button_disabled { + filter: alpha(opacity=30); + -moz-opacity: 0.3; + opacity: 0.3; + &:hover { + outline: none; + background-color: transparent !important; + cursor: default; + } +} + +.re-icon { + font-family: 'RedactorFont'; + speak: none; + font-style: normal; + font-weight: normal; + font-variant: normal; + text-transform: none; + line-height: 1; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} +.re-icon i:before { + position: relative; + font-size: 14px; +} + +.re-video:before { content: "\e600"; } +.re-unorderedlist:before { content: "\e601"; } +.re-undo:before { content: "\e602"; } +.re-underline:before { content: "\e603"; } +.re-textdirection:before { content: "\e604"; } +.re-fontcolor:before { content: "\e605"; } +.re-table:before { content: "\e606"; } +.re-redo:before { content: "\e607"; } +.re-quote:before { content: "\e608"; } +.re-outdent:before { content: "\e609"; } +.re-orderedlist:before { content: "\e60a"; } +.re-link:before { content: "\e60b"; } +.re-horizontalrule:before { content: "\e60c"; } +.re-italic:before { content: "\e60d"; } +.re-indent:before { content: "\e60e"; } +.re-image:before { content: "\e60f"; } +.re-fullscreen:before { content: "\e610"; } +.re-normalscreen:before { content: "\e611"; } +.re-formatting:before { content: "\e612"; } +.re-fontsize:before { content: "\e613"; } +.re-fontfamily:before { content: "\e614"; } +.re-deleted:before { content: "\e615"; } +.re-html:before { content: "\e616"; } +.re-clips:before { content: "\e617"; } +.re-bold:before { content: "\e618"; } +.re-backcolor:before { content: "\e619"; } +.re-file:before { content: "\e61a"; } +.re-alignright:before { content: "\e61b"; } +.re-alignment:before, +.re-alignleft:before { content: "\e61c"; } +.re-alignjustify:before { content: "\e61d"; } +.re-aligncenter:before { content: "\e61e"; } +.re-gallery:before { content: "\e61f"; } + +// +// Toolbar classes +// + +.redactor_format_blockquote { + padding-left: 10px; + color: #666 !important; + font-style: italic; +} +.redactor_format_pre { + font-family: monospace, sans-serif; +} +.redactor_format_h1, +.redactor_format_h2, +.redactor_format_h3, +.redactor_format_h4, +.redactor_format_h5 { + font-weight: bold; +} +.redactor_format_h1 { + font-size: 30px; + line-height: 36px; +} +.redactor_format_h2 { + font-size: 24px; + line-height: 36px; +} +.redactor_format_h3 { + font-size: 20px; + line-height: 30px; +} +.redactor_format_h4 { + font-size: 16px; + line-height: 26px; +} +.redactor_format_h5 { + font-size: 14px; + line-height: 23px; +} +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h1, +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h2, +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h3, +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h4, +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h5 { + font-size: 1em; + line-height: 1.6em; + text-transform: uppercase; +} +.redactor-toolbar-typewriter .redactor_dropdown .redactor_format_h2 { + font-size: .85em; +} + +// +// Typewriter +// + +.redactor_editor.redactor-editor-typewriter { + background: #f5f5f5 !important; + padding: 25px 50px !important; +} +.redactor_editor.redactor-editor-typewriter div, +.redactor_editor.redactor-editor-typewriter p, +.redactor_editor.redactor-editor-typewriter ul, +.redactor_editor.redactor-editor-typewriter ol, +.redactor_editor.redactor-editor-typewriter table, +.redactor_editor.redactor-editor-typewriter dl, +.redactor_editor.redactor-editor-typewriter blockquote, +.redactor_editor.redactor-editor-typewriter pre, +.redactor_editor.redactor-editor-typewriter h1, +.redactor_editor.redactor-editor-typewriter h2, +.redactor_editor.redactor-editor-typewriter h3, +.redactor_editor.redactor-editor-typewriter h4, +.redactor_editor.redactor-editor-typewriter h5, +.redactor_editor.redactor-editor-typewriter h6 { + font-family: 'Courier New', 'Lucida Console', Consolas, Monaco, monospace, sans-serif; + font-size: 18px !important; + line-height: 1.5em !important; + margin-bottom: 1.5em !important; +} +.redactor_editor.redactor-editor-typewriter h2 { + font-size: 14px !important; +} +.redactor_editor.redactor-editor-typewriter h1, +.redactor_editor.redactor-editor-typewriter h2, +.redactor_editor.redactor-editor-typewriter h3, +.redactor_editor.redactor-editor-typewriter h4, +.redactor_editor.redactor-editor-typewriter h5, +.redactor_editor.redactor-editor-typewriter h6 { + text-transform: uppercase; +} +.redactor_editor.redactor-editor-typewriter a { + color: #000 !important; + text-decoration: underline !important; +} + +// +// WYM +// + +.redactor_editor.redactor_editor_wym { + padding: 10px 7px 0 7px !important; + background: #f6f6f6 !important; +} +.redactor_editor.redactor_editor_wym div, +.redactor_editor.redactor_editor_wym p, +.redactor_editor.redactor_editor_wym ul, +.redactor_editor.redactor_editor_wym ol, +.redactor_editor.redactor_editor_wym table, +.redactor_editor.redactor_editor_wym dl, +.redactor_editor.redactor_editor_wym pre, +.redactor_editor.redactor_editor_wym h1, +.redactor_editor.redactor_editor_wym h2, +.redactor_editor.redactor_editor_wym h3, +.redactor_editor.redactor_editor_wym h4, +.redactor_editor.redactor_editor_wym h5, +.redactor_editor.redactor_editor_wym h6, +.redactor_editor.redactor_editor_wym blockquote { + margin-top: 0; + margin-bottom: 5px !important; + padding: 10px !important; + border: 1px solid #e4e4e4 !important; + background-color: #fff !important; + z-index: 0; +} +.redactor_editor.redactor_editor_wym blockquote:before { content: ''; } +.redactor_editor.redactor_editor_wym img { + position: relative; + z-index: 1; +} +.redactor_editor.redactor_editor_wym div { + border: 1px dotted #aaa !important; +} +.redactor_editor.redactor_editor_wym pre { + border: 2px dashed #e4e4e4 !important; + background-color: #f8f8f8 !important; +} +.redactor_editor.redactor_editor_wym ul, +.redactor_editor.redactor_editor_wym ol { + padding-left: 2em !important; +} +.redactor_editor.redactor_editor_wym ul li ul, +.redactor_editor.redactor_editor_wym ol li ul, +.redactor_editor.redactor_editor_wym ul li ol, +.redactor_editor.redactor_editor_wym ol li ol { + border: none !important; +} + +// +// DROPDOWN +// + +.redactor_dropdown { + position: absolute; + top: 28px; + left: 0; + padding: 10px; + width: 200px; + background-color: #fff; + box-shadow: 0 1px 5px #bbb; + font-size: 13px; + font-family: Helvetica, Arial, Verdana, Tahoma, sans-serif; + line-height: 21px; +} +.redactor-toolbar-typewriter .redactor_dropdown { + font-family: 'Courier New', 'Lucida Console', Consolas, Monaco, monospace, sans-serif; + background-color: #f5f5f5; +} +.redactor_separator_drop { + padding: 0 !important; + border-top: 1px solid #ddd; + font-size: 0; + line-height: 0; +} +.redactor_dropdown a { + display: block; + padding: 3px 5px; + color: #000; + text-decoration: none; +} +.redactor_dropdown a:hover { + background-color: #dde4ef; + color: #444 !important; + text-decoration: none; +} + +// +// MODAL +// + +#redactor_modal_overlay { + position: fixed; + top: 0; + left: 0; + margin: auto; + width: 100%; + height: 100%; + background-color: #000 !important; + filter: alpha(opacity=30); + -moz-opacity: 0.3; + opacity: 0.3; +} +#redactor_modal { + position: fixed; + top: 50%; + left: 50%; + padding: 0; + background: #fff; + color: #000; + font-size: 12px !important; + font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; + box-shadow: 0 1px 10px rgba(0, 0, 0, 0.5); +} +#redactor_modal header { + padding: 20px 30px 5px 30px; + font-size: 16px; +} +#redactor_modal section { + padding: 20px 30px; +} +#redactor_modal label { + display: block !important; + float: none !important; + margin: 10px 0 3px 0 !important; + padding: 0 !important; + font-size: 12px !important; +} +#redactor_modal footer:after { + content: ""; + display: table; + clear: both; +} +#redactor_modal footer div { + float: left; +} +#redactor_modal input[type="radio"], +#redactor_modal input[type="checkbox"] { + position: relative; + top: -1px; +} +#redactor_modal input[type="text"], +#redactor_modal input[type="password"], +#redactor_modal input[type="email"], +#redactor_modal textarea { + position: relative; + z-index: 2; + margin: 0; + padding: 1px 2px; + height: 23px; + border: 1px solid #ccc; + border-radius: 1px; + background-color: white; + box-shadow: 0 1px 2px rgba(0, 0, 0, 0.2) inset; + color: #333; + font-size: 13px; + font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; + line-height: 1; + -moz-transition: border 0.3s ease-in; + transition: border 0.3s ease-in; +} +#redactor_modal textarea { + display: block; + margin-top: 4px; + line-height: 1.4em; +} +#redactor_modal input:focus, +#redactor_modal textarea:focus { + outline: none; + border-color: #5ca9e4; + box-shadow: 0 0 0 2px rgba(70, 161, 231, 0.3), 0 1px 2px rgba(0, 0, 0, 0.2) inset; +} +#redactor_modal_close { + position: absolute; + top: 5px; + right: 3px; + width: 20px; + height: 20px; + color: #999; + font-size: 26px; + cursor: pointer; +} +#redactor_modal_close:hover { + color: #000; +} +.redactor_input { + width: 99%; + font-size: 14px; +} +.redactor_modal_box { + overflow: auto; + margin-bottom: 10px; + height: 350px; +} +#redactor_image_box { + overflow: auto; + margin-bottom: 10px; + height: 270px; +} +#redactor_image_box_select { + display: block; + margin-bottom: 15px !important; + width: 200px; +} +#redactor_image_box img { + margin-right: 10px; + margin-bottom: 10px; + max-width: 100px; + cursor: pointer; +} +#redactor_tabs { + margin-bottom: 18px; +} +#redactor_tabs a { + display: inline-block; + margin-right: 2px; + padding: 4px 14px; + border: 1px solid #d2d2d2; + border-radius: 3px; + background: #fff; + color: #000; + text-decoration: none; + line-height: 1; +} +#redactor_tabs a:hover, +#redactor_tabs a.redactor_tabs_act { + border-color: #eee; + color: #999 !important; + text-decoration: none !important; +} +.redactor_modal_btn_hidden { + display: none; +} +#redactor_modal footer button { + position: relative; + width: 100%; + padding: 10px 16px; + margin: 0; + outline: none; + border: none; + background-color: #ddd; + color: #000; + text-align: center; + text-decoration: none; + font-weight: normal; + font-size: 12px; + font-family: Arial, Helvetica, Verdana, Tahoma, sans-serif; + line-height: 1; + cursor: pointer; +} +#redactor_modal footer button:hover { + color: #777; + background: none; + background: #bbb; + text-decoration: none; +} +#redactor_modal footer button.redactor_modal_delete_btn { + background: none; + color: #fff; + background-color: #b52525; +} +#redactor_modal footer button.redactor_modal_delete_btn:hover { + color: rgba(255, 255, 255, 0.6); + background-color: #881b1b; +} +#redactor_modal footer button.redactor_modal_action_btn { + background: none; + color: #fff; + background-color: #2461b5; +} +#redactor_modal footer button.redactor_modal_action_btn:hover { + color: rgba(255, 255, 255, 0.6); + background-color: #1a4580; +} +/* Drag and Drop Area */ +.redactor_droparea { + position: relative; + margin: auto; + margin-bottom: 5px; + width: 100%; +} +.redactor_droparea .redactor_dropareabox { + position: relative; + z-index: 1; + padding: 60px 0; + width: 99%; + border: 1px dashed #ddd; + background: #fff; + text-align: center; +} +.redactor_droparea .redactor_dropareabox, +.redactor_dropalternative { + color: #555; + font-size: 12px; +} +.redactor_dropalternative { + margin: 4px 0 2px 0; +} +.redactor_dropareabox.hover { + border-color: #aaa; + background: #efe3b8; +} +.redactor_dropareabox.error { + border-color: #dcc3c3; + background: #f7e5e5; +} +.redactor_dropareabox.drop { + border-color: #e0e5d6; + background: #f4f4ee; +} + +// =ProgressBar +//----------------------------------------------------------------------------- + +#redactor-progress { + position: fixed; + top: 0; + left: 0; + width: 100%; + z-index: 1000000; + height: 10px; +} +#redactor-progress span { + display: block; + width: 100%; + height: 100%; + background-color: #3d58a8; + background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.2) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.2) 50%, rgba(255, 255, 255, 0.2) 75%, transparent 75%, transparent); + -webkit-animation: progress-bar-stripes 2s linear infinite; + -o-animation: progress-bar-stripes 2s linear infinite; + animation: progress-bar-stripes 2s linear infinite; + background-size: 40px 40px; +} +@-webkit-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@-o-keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} +@keyframes progress-bar-stripes { + from { + background-position: 40px 0; + } + to { + background-position: 0 0; + } +} diff --git a/modules/backend/formwidgets/richeditor/assets/less/richeditor.less b/modules/backend/formwidgets/richeditor/assets/less/richeditor.less index d9d9b87b4..b58af1fa2 100644 --- a/modules/backend/formwidgets/richeditor/assets/less/richeditor.less +++ b/modules/backend/formwidgets/richeditor/assets/less/richeditor.less @@ -4,6 +4,9 @@ @richeditor-zindex: 1060; @richeditor-gutter: 20px; +@import "redactor.less"; +@import "figures.less"; + .field-flush .field-richeditor { &, &.editor-focus { border: none; @@ -12,9 +15,12 @@ .field-richeditor { border: 1px solid @color-form-field-border; - &, .redactor_box, .redactor_toolbar { + &, .redactor_box { .border-radius(5px); } + .redactor_toolbar { + .border-top-radius(3px); + } &.editor-focus { border-color: @color-form-field-border-focus; @@ -28,98 +34,33 @@ } // -// Redactor Box +// Stretch // -.field-richeditor .redactor_box, -.redactor_box_fullscreen.redactor_box { - border: none; - iframe { - border: none; - } - .redactor_toolbar { - .border-top-radius(3px); - .border-bottom-radius(0); - background: @color-richeditor-toolbar; - border-bottom: none; - .box-shadow(none); - border: none; +.field-richeditor.stretch { + .redactor_box { + display: block; + position: relative; + height: 100%; + width: 100%; + overflow: hidden; - li.redactor_btn_right { - float: right; - margin-right: 2px; - } - - li a { - zoom: 1; - font-size: 14px; - color: @color-richeditor-toolbar-btn-color; - width: 20px; - line-height: 20px; - text-align: center; - &:hover { - outline: none; - background-color: @color-richeditor-toolbar-btn-bg-hover; - color: @color-richeditor-toolbar-btn-color-hover; - } - &:active, &.redactor_act { - outline: none; - background-color: @color-richeditor-toolbar-btn-bg; - color: @color-richeditor-toolbar-btn-color-hover; - } - } - } - - &.stretch { - .redactor_box { + .redactor_toolbar { display: block; - position: relative; - height: 100%; + border-bottom: none; + position: absolute; + top: 0; width: 100%; - overflow: hidden; + } - .redactor_toolbar { - display: block; - border-bottom: none; - position: absolute; - top: 0; - width: 100%; - } + .redactor_editor { + height: 100% !important; + } - iframe, textarea { - display: block; - position: absolute; - height: 100% !important; - } + iframe, textarea { + display: block; + position: absolute; + height: 100% !important; } } } - -// -// Fullscreen specific -// - -.redactor_box_fullscreen { - background: @color-body-bg; - overflow-y: scroll !important; - - .redactor_editor { - max-width: 960px; - margin: @richeditor-gutter auto !important; - padding: @richeditor-gutter; - } -} - -// -// zIndex -// - -.redactor_box_fullscreen { - z-index: @richeditor-zindex !important; -} - -#redactor_modal_overlay, -#redactor_modal, -.redactor_dropdown { - z-index: @richeditor-zindex + 1 !important; -} \ No newline at end of file