Text.vue 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210
  1. <template>
  2. <div>
  3. <!---------------------------------------------->
  4. <div class="hidden sets-part-header">
  5. Текст
  6. </div>
  7. <div class="sets-item row">
  8. <div class="sets-label label">
  9. Интервал
  10. </div>
  11. <div class="col row">
  12. <NumInput v-model="form.lineInterval" bg-color="input" class="col-left" :min="0" :max="200" />
  13. </div>
  14. </div>
  15. <div class="sets-item row">
  16. <div class="sets-label label">
  17. Параграф
  18. </div>
  19. <div class="col row">
  20. <NumInput v-model="form.p" bg-color="input" class="col-left" :min="0" :max="2000" />
  21. </div>
  22. </div>
  23. <div class="sets-item row">
  24. <div class="sets-label label">
  25. Сдвиг
  26. </div>
  27. <div class="col row">
  28. <NumInput v-model="form.textVertShift" bg-color="input" class="col-left" :min="-100" :max="100">
  29. <q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
  30. Сдвиг текста по вертикали в процентах от размера шрифта.<br>
  31. Отрицательное значение сдвигает вверх, положительное -<br>
  32. вниз.
  33. </q-tooltip>
  34. </NumInput>
  35. </div>
  36. </div>
  37. <div class="sets-item row">
  38. <div class="sets-label label">
  39. Скроллинг
  40. </div>
  41. <div class="col row">
  42. <NumInput v-model="form.scrollingDelay" bg-color="input" class="col-left" :min="1" :max="10000">
  43. <q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
  44. Замедление скроллинга в миллисекундах.<br>
  45. Определяет время, за которое текст<br>
  46. прокручивается на одну строку.
  47. </q-tooltip>
  48. </NumInput>
  49. <div class="q-px-sm" />
  50. <q-select
  51. v-model="form.scrollingType" bg-color="input" class="col" :options="['linear', 'ease', 'ease-in', 'ease-out', 'ease-in-out']"
  52. dropdown-icon="la la-angle-down la-sm"
  53. outlined dense emit-value map-options
  54. >
  55. <q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
  56. Вид скроллинга: линейный,<br>
  57. ускорение-замедление и пр.
  58. </q-tooltip>
  59. </q-select>
  60. </div>
  61. </div>
  62. <div class="sets-item row">
  63. <div class="sets-label label">
  64. Выравнивание
  65. </div>
  66. <div class="col row">
  67. <q-checkbox v-model="form.textAlignJustify" size="xs" label="По ширине" />
  68. <q-checkbox v-model="form.wordWrap" class="q-ml-sm" size="xs" label="Перенос по слогам" />
  69. </div>
  70. </div>
  71. <div class="sets-item row">
  72. <div class="sets-label label"></div>
  73. <div class="col-left column justify-center text-right">
  74. Компактность
  75. </div>
  76. <div class="q-px-sm" />
  77. <NumInput v-model="form.compactTextPerc" bg-color="input" class="col" :min="0" :max="100">
  78. <q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
  79. Степень компактности текста в процентах.<br>
  80. Чем больше компактность, тем хуже выравнивание<br>
  81. по правому краю.
  82. </q-tooltip>
  83. </NumInput>
  84. </div>
  85. <div class="sets-item row">
  86. <div class="sets-label label">
  87. Обработка
  88. </div>
  89. <div class="col row">
  90. <q-checkbox v-model="form.cutEmptyParagraphs" size="xs" label="Убирать пустые строки" />
  91. </div>
  92. </div>
  93. <div class="sets-item row">
  94. <div class="sets-label label"></div>
  95. <div class="col-left column justify-center text-right">
  96. Добавлять пустые
  97. </div>
  98. <div class="q-px-sm" />
  99. <NumInput v-model="form.addEmptyParagraphs" bg-color="input" class="col" :min="0" :max="2" />
  100. </div>
  101. <div class="sets-item row">
  102. <div class="sets-label label">
  103. Изображения
  104. </div>
  105. <div class="col row">
  106. <q-checkbox v-model="form.showImages" size="xs" label="Показывать" />
  107. <q-checkbox v-model="form.showInlineImagesInCenter" class="q-ml-sm" :disable="!form.showImages" size="xs" label="Инлайн в центр" @update:modelValue="needReload">
  108. <q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
  109. Выносить все изображения в центр экрана
  110. </q-tooltip>
  111. </q-checkbox>
  112. </div>
  113. </div>
  114. <div class="sets-item row">
  115. <div class="sets-label label"></div>
  116. <div class="col row">
  117. <q-checkbox v-model="form.imageFitWidth" size="xs" label="Ширина не более размера страницы" :disable="!form.showImages || form.dualPageMode" />
  118. </div>
  119. </div>
  120. <div class="sets-item row">
  121. <div class="sets-label label"></div>
  122. <div class="col-left column justify-center text-right">
  123. Высота не более
  124. </div>
  125. <div class="q-px-sm" />
  126. <NumInput v-model="form.imageHeightLines" bg-color="input" class="col" :min="1" :max="100" :disable="!form.showImages">
  127. <q-tooltip :delay="1000" anchor="top middle" self="bottom middle" content-style="font-size: 80%">
  128. Определяет высоту изображения количеством строк.<br>
  129. В случае превышения высоты, изображение будет<br>
  130. уменьшено с сохранением пропорций так, чтобы<br>
  131. помещаться в указанное количество строк.
  132. </q-tooltip>
  133. </NumInput>
  134. </div>
  135. </div>
  136. </template>
  137. <script>
  138. //-----------------------------------------------------------------------------
  139. import vueComponent from '../../../../vueComponent.js';
  140. import NumInput from '../../../../share/NumInput.vue';
  141. const componentOptions = {
  142. components: {
  143. NumInput,
  144. },
  145. watch: {
  146. form: {
  147. handler() {
  148. this.formChanged();//no await
  149. },
  150. deep: true,
  151. },
  152. },
  153. };
  154. class Text {
  155. _options = componentOptions;
  156. _props = {
  157. form: Object,
  158. };
  159. statusBarColorFiltered = '';
  160. created() {
  161. this.formChanged();//no await
  162. }
  163. mounted() {
  164. }
  165. async formChanged() {
  166. this.isFormChanged = true;
  167. try {
  168. //
  169. } finally {
  170. await this.$nextTick();
  171. this.isFormChanged = false;
  172. }
  173. }
  174. needReload() {
  175. this.$root.notify.warning('Необходимо обновить страницу (F5), чтобы изменения возымели эффект');
  176. }
  177. }
  178. export default vueComponent(Text);
  179. //-----------------------------------------------------------------------------
  180. </script>
  181. <style scoped>
  182. .label {
  183. width: 110px;
  184. }
  185. .col-left {
  186. width: 145px;
  187. }
  188. </style>